2025-05-18 01:04:31 +08:00

671 lines
16 KiB
C#

// ***********************************************************************
// Assembly : Unity
// Author : Kimch
// Created : 2018-2-8
// Description : 帮会基础数据
// Last Modified By : Kimch
// Last Modified On :
// ***********************************************************************
// <copyright file= "Guild" company=""></copyright>
// <summary></summary>
// ***********************************************************************
using System.Collections.Generic;
namespace G
{
public class Guild
{
public Guild()
{
CleanUp();
}
public void CleanUp()
{
guildGuid = GlobalDefine.INVALID_GUID;
guildName = "";
guildLevel = 0;
guildChiefGuid = GlobalDefine.INVALID_GUID;
pSCanAcceptTimes = 0;
guildNotice = "";
guildDeclaration = "";
if (null == _guildMemberList)
{
_guildMemberList = new Dictionary<long, GuildMember>();
}
_guildMemberList.Clear();
preserveGuildGuid = new List<long>();
needReserve = true;
viceChiefRoutine = new bool[0/*(int)GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_MAX*/];
for (int i = 0; i < viceChiefRoutine.Length; i++)
{
viceChiefRoutine[i] = false;
}
elderRoutine = new bool[0/*(int)GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_MAX*/];
for (int i = 0; i < elderRoutine.Length; i++)
{
elderRoutine[i] = false;
}
guildJobName = new string[0/*(int)GameDefine_Globe.GUILD_JOB.MAX*/];
for (int i = 0; i < guildJobName.Length; i++)
{
guildJobName[i] = "";
}
guildHistoryInfo = new List<GuildHistory>();
guildHistoryInfo.Clear();
}
//帮会GUID
public long guildGuid
{
get;
set;
}
//帮会GUID
public string guildName
{
get;
set;
}
//帮会等级
public int guildLevel
{
get;
set;
}
//帮主Guid
public long guildChiefGuid
{
get;
set;
}
//帮会繁荣度
public int guildExp
{
get;
set;
}
//帮会公告
public string guildNotice
{
get;
set;
}
public string guildDeclaration
{
get;
set;
}
private Dictionary<long, GuildMember> _guildMemberList = null; //帮会成员列表
public Dictionary<long, GuildMember> guildMemberList
{
get { return _guildMemberList; }
}
//玩家当前加入的待审批帮会Guid,在申请帮会列表的时候同步
public List<long> preserveGuildGuid
{
get;
set;
}
public int pSCanAcceptTimes
{
get;
set;
}
public bool needReserve
{
get;
set;
}
public bool[] viceChiefRoutine
{
get;
set;
}
public bool[] elderRoutine
{
get;
set;
}
public string[] guildJobName
{
get;
set;
}
public List<GuildHistory> guildHistoryInfo
{
get;
set;
}
public void UpdateData(GamePacket info)
{
//清空之前的数据
CleanUp();
////判断消息包数据合法性
//if (null == info || info.GuildGuid == GlobalDefine.INVALID_GUID)
//{
// return;
//}
////填充数据
//guildGuid = info.GuildGuid;
//if (guildGuid != GlobalDefine.INVALID_GUID)
//{
// preserveGuildGuid.Clear();
//}
//guildLevel = info.GuildLevel;
//guildName = info.GuildName;
//guildChiefGuid = info.GuildChiefGuid;
//guildExp = info.GuildExp;
//guildNotice = info.GuildNotice;
//guildDeclaration = info.GuildDeclaration;
//needReserve = info.NeedReserve == 1;
//lastWeekContri = info.LastWeekContri;
//if (info.HasPscanacpttimes)
//{
// pSCanAcceptTimes = info.Pscanacpttimes;
//}
//for (int i = 0; i < info.memberGuidCount; ++i)
//{
// GuildMember member = new GuildMember();
// //member.CleanUp();
// member.guid = info.GetMemberGuid(i);
// if (info.memberNameCount > i)
// {
// member.memberName = info.GetMemberName(i);
// }
// if (info.memberVIPCount > i)
// {
// member.vip = info.GetMemberVIP(i);
// }
// if (info.memberLevelCount > i)
// {
// member.level = info.GetMemberLevel(i);
// }
// if (info.memberJobCount > i)
// {
// member.job = info.GetMemberJob(i);
// }
// if (info.memberLastLogoutCount > i)
// {
// member.lastLogout = info.GetMemberLastLogout(i);
// }
// if (info.memberProfCount > i)
// {
// member.profession = info.GetMemberProf(i);
// }
// if (info.memberStateCount > i)
// {
// member.state = info.GetMemberState(i);
// }
// if (info.memberContirbuteCount > i)
// {
// member.contribute = info.GetMemberContirbute(i);
// }
// if (info.combatvalCount > i)
// {
// member.comBatVal = info.GetCombatval(i);
// }
// if (member.IsValid())
// {
// guildMemberList.Add(member.guid, member);
// }
//}
//for (int i = 0; i < info.ViceChiefRoutineCount && i < viceChiefRoutine.Length; i++)
//{
// viceChiefRoutine[i] = info.ViceChiefRoutineList[i] == 1;
//}
//for (int i = 0; i < info.ElderRoutineCount && i < elderRoutine.Length; i++)
//{
// elderRoutine[i] = info.ElderRoutineList[i] == 1;
//}
//for (int i = 0; i < info.GuildJobNameCount && i < guildJobName.Length; i++)
//{
// guildJobName[i] = info.GuildJobNameList[i];
//}
//int nTextIndex = 0;
//for (int i = 0; i < info.GuildHistoryTypeCount; i++)
//{
// GuildHistory history = new GuildHistory();
// if (info.GuildHistoryTypeCount > i)
// {
// history.HistoryType = info.GuildHistoryTypeList[i];
// }
// if (info.GuildHistoryTimeCount > i)
// {
// history.HistoryTime = info.GuildHistoryTimeList[i];
// }
// for (int j = 0; j < GuildHistory.GetTypeTextCount(history.HistoryType) && j < history.HistoryText.Length; j++)
// {
// history.HistoryText[j] = info.GuildHistoryTextList[nTextIndex];
// nTextIndex += 1;
// }
// if (history.IsValid())
// {
// guildHistoryInfo.Add(history);
// }
//}
//for (int i = 0; i < info.SceneNpcIdCount; i++)
//{
// GuildHideAndSeekNpc npcInfo = new GuildHideAndSeekNpc();
// if (info.SceneNpcIdCount > i)
// {
// npcInfo.sceneNpcId = info.SceneNpcIdList[i];
// }
// if (info.SceneNpcFindCount > i)
// {
// npcInfo.isFound = info.SceneNpcFindList[i] == 1;
// }
// if (npcInfo.IsValid())
// {
// hideAndSeekNpcInfo.Add(npcInfo);
// }
//}
//if (info.HasHideAndSeekWeek)
//{
// hideAndSeekWeek = info.HideAndSeekWeek == 1;
//}
////按照VIP等级排序
////SortMemberListByVIP(m_GuildMemberList);
////按照等级排序
////SortMemberListByLevel(m_GuildMemberList);
////按照在线状态进行排序
////SortMemberListByOnLine(m_GuildMemberList);
////按照职位排序
////SortMemberListByJob(m_GuildMemberList);
//// 帮主永远第一位,玩家自己第二位,然后按照官职排,最后按照等级排列
//SortByNewRule();
////if (ChatInfoLogic.Instance() != null)
////{
//// ChatInfoLogic.Instance().UpdateGuildChannel();
//// ChatInfoLogic.Instance().UpdateSpeakerList_Guild();
////}
}
public int GetGuildFormalMemberCount()
{
int nNum = 0;
foreach (var member in _guildMemberList)
{
//if (member.Value.IsValid() && member.Value.job != (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.RESERVE)
{
nNum++;
}
}
return nNum;
}
public int GetGuildReserveMemberCount()
{
int nNum = 0;
foreach (var member in _guildMemberList)
{
//if (member.Value.IsValid() && member.Value.job == (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.RESERVE)
{
nNum++;
}
}
return nNum;
}
//根据会员Guid获得其职位
public int GetMemberJob(long memberGuid)
{
int nJob = 0;// (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.INVALID;
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)
{
if (member.Value.IsValid() && member.Value.guid == memberGuid)
{
nJob = member.Value.job;
break;
}
}
return nJob;
}
//根据会员Guid获得其等级
public int GetMemberLevel(long memberGuid)
{
int nLevel = 0;// (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.INVALID;
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)
{
if (member.Value.IsValid() && member.Value.guid == memberGuid)
{
nLevel = member.Value.level;
break;
}
}
return nLevel;
}
//根据会员Guid获得其贡献度
public int GetMemberContribute(long memberGuid)
{
int nContribute = 0;// (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.INVALID;
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)
{
if (member.Value.IsValid() && member.Value.guid == memberGuid)
{
nContribute = member.Value.contribute;
break;
}
}
return nContribute;
}
//获得MainPlayer的帮会信息
public GuildMember GetMainPlayerGuildInfo()
{
GuildMember mainPlayerGuildInfo;
//if (null != World.EntityManager.Instance.mainPlayer &&
// guildMemberList.TryGetValue(World.EntityManager.Instance.mainPlayer.entityId, out mainPlayerGuildInfo))
//{
// return mainPlayerGuildInfo;
//}
return null;
}
protected Dictionary<long, GuildMember> SortMemberListByJob(Dictionary<long, GuildMember> dic)
{
List<KeyValuePair<long, GuildMember>> myList = new List<KeyValuePair<long, GuildMember>>(dic);
myList.Sort(delegate (KeyValuePair<long, GuildMember> s1, KeyValuePair<long, GuildMember> s2)
{
return s1.Value.job.CompareTo(s2.Value.job);
});
dic.Clear();
foreach (KeyValuePair<long, GuildMember> pair in myList)
{
dic.Add(pair.Key, pair.Value);
}
return dic;
}
protected Dictionary<long, GuildMember> SortMemberListByOnLine(Dictionary<long, GuildMember> dic)
{
List<KeyValuePair<long, GuildMember>> myList = new List<KeyValuePair<long, GuildMember>>(dic);
myList.Sort(delegate (KeyValuePair<long, GuildMember> s1, KeyValuePair<long, GuildMember> s2)
{
return s2.Value.state.CompareTo(s1.Value.state);
});
dic.Clear();
foreach (KeyValuePair<long, GuildMember> pair in myList)
{
dic.Add(pair.Key, pair.Value);
}
return dic;
}
protected Dictionary<long, GuildMember> SortMemberListByVIP(Dictionary<long, GuildMember> dic)
{
List<KeyValuePair<long, GuildMember>> myList = new List<KeyValuePair<long, GuildMember>>(dic);
myList.Sort(delegate (KeyValuePair<long, GuildMember> s1, KeyValuePair<long, GuildMember> s2)
{
return s2.Value.vip.CompareTo(s1.Value.vip);
});
dic.Clear();
foreach (KeyValuePair<long, GuildMember> pair in myList)
{
dic.Add(pair.Key, pair.Value);
}
return dic;
}
protected Dictionary<long, GuildMember> SortMemberListByLevel(Dictionary<long, GuildMember> dic)
{
List<KeyValuePair<long, GuildMember>> myList = new List<KeyValuePair<long, GuildMember>>(dic);
myList.Sort(delegate (KeyValuePair<long, GuildMember> s1, KeyValuePair<long, GuildMember> s2)
{
return s2.Value.level.CompareTo(s1.Value.level);
});
dic.Clear();
foreach (KeyValuePair<long, GuildMember> pair in myList)
{
dic.Add(pair.Key, pair.Value);
}
return dic;
}
protected void SortByNewRule()
{
// 先按照帮主第一玩家第二的规则排
Dictionary<long, GuildMember> tempList = new Dictionary<long, GuildMember>();
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)// 会长
{
//if (member.Value.IsValid() && member.Value.job == (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.CHIEF)
{
tempList.Add(member.Key, member.Value);
break;
}
}
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)// 玩家自己
{
if (tempList.ContainsKey(member.Key))
{
break;
}
//if (member.Value.IsValid() && member.Key == World.EntityManager.Instance.mainPlayer.entityId)
//{
// tempList.Add(member.Key, member.Value);
// break;
//}
}
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)// 副帮主
{
if (tempList.ContainsKey(member.Key))
{
continue;
}
//if (member.Value.IsValid() && member.Value.job == (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.VICE_CHIEF)
{
tempList.Add(member.Key, member.Value);
continue;
}
}
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)// 长老
{
if (tempList.ContainsKey(member.Key))
{
continue;
}
//if (member.Value.IsValid() && member.Value.job == (int)GlobalDefine.GameDefine_Globe.GUILD_JOB.ELDER)
{
tempList.Add(member.Key, member.Value);
continue;
}
}
SortedDictionary<int, GuildMember> levelTempList = new SortedDictionary<int, GuildMember>(new MySortU());
foreach (KeyValuePair<long, GuildMember> member in _guildMemberList)// 按照等级排序,需要排除键值相同的情况所以指定SortedDictionary中的compare方法
{
if (tempList.ContainsKey(member.Key)) // 已经排过的不处理
{
continue;
}
levelTempList.Add((int)(200 - member.Value.level), member.Value); // 按照等级降序排列
}
foreach (var levelItem in levelTempList)
{
tempList.Add(levelItem.Value.guid, levelItem.Value);
}
_guildMemberList.Clear();
_guildMemberList = tempList;
}
public bool IsHaveAuthority(int nJob, int nRouteIndex)
{
//if (nRouteIndex < 0 || nRouteIndex >= (int)GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_MAX)
//{
// return false;
//}
//switch ((GameDefine_Globe.GUILD_ROUTINE)nRouteIndex)
//{
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_JOIN:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_DECLARATION:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_CHANGE_NOTICE:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_CHANGE_JOINREQ:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_KICK:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_SHOP_LEVELUP:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_OPEN_ACTIVITY:
// {
// if (nJob == (int)GameDefine_Globe.GUILD_JOB.CHIEF)
// {
// return true;
// }
// else if (nJob == (int)GameDefine_Globe.GUILD_JOB.VICE_CHIEF)
// {
// return viceChiefRoutine[nRouteIndex];
// }
// else if (nJob == (int)GameDefine_Globe.GUILD_JOB.ELDER)
// {
// return elderRoutine[nRouteIndex];
// }
// }
// break;
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_SET_AUTHORITY:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_APROVE_CHIEFT:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_CHANGE_JOB:
// case GameDefine_Globe.GUILD_ROUTINE.GUILD_ROUTINE_CHANGE_JOBNAME:
// {
// if (nJob == (int)GameDefine_Globe.GUILD_JOB.CHIEF)
// {
// return true;
// }
// }
// break;
//}
return false;
}
public int GetViceChiefRoutineCount()
{
int count = 0;
for (int i = 0; i < viceChiefRoutine.Length; i++)
{
count += viceChiefRoutine[i] ? 1 : 0;
}
return count;
}
public int GetElderRoutineCount()
{
int count = 0;
for (int i = 0; i < elderRoutine.Length; i++)
{
count += viceChiefRoutine[i] ? 1 : 0;
}
return count;
}
public int GetGuildShopOpenSlot()
{
if (guildLevel <= 0 || guildLevel > 0/*GlobalDefine.GUILD_MAX_MEMBER.Length*/)
{
return 0;
}
// 临时数值
if (guildLevel < 5)
{
return 6;
}
else
{
return 12;
}
}
}
public class MySort : IComparer<int>
{
#region IComparer
public int Compare(int x, int y)
{
//排序
int iResult = x - y;
if (iResult == 0) iResult = -1; // 排除重复
return iResult;
}
#endregion
}
public class MySortU : IComparer<int>
{
#region IComparer
public int Compare(int x, int y)
{
//排序
int iResult = (int)x - (int)y;
if (iResult == 0) iResult = -1; // 排除重复
return iResult;
}
#endregion
}
}