// *********************************************************************** // Assembly : Unity // Author : Kimch // Created : 2018-2-8 // Description : 帮会基础数据 // Last Modified By : Kimch // Last Modified On : // *********************************************************************** // // // *********************************************************************** 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(); } _guildMemberList.Clear(); preserveGuildGuid = new List(); 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(); 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 _guildMemberList = null; //帮会成员列表 public Dictionary guildMemberList { get { return _guildMemberList; } } //玩家当前加入的待审批帮会Guid,在申请帮会列表的时候同步 public List 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 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 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 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 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 SortMemberListByJob(Dictionary dic) { List> myList = new List>(dic); myList.Sort(delegate (KeyValuePair s1, KeyValuePair s2) { return s1.Value.job.CompareTo(s2.Value.job); }); dic.Clear(); foreach (KeyValuePair pair in myList) { dic.Add(pair.Key, pair.Value); } return dic; } protected Dictionary SortMemberListByOnLine(Dictionary dic) { List> myList = new List>(dic); myList.Sort(delegate (KeyValuePair s1, KeyValuePair s2) { return s2.Value.state.CompareTo(s1.Value.state); }); dic.Clear(); foreach (KeyValuePair pair in myList) { dic.Add(pair.Key, pair.Value); } return dic; } protected Dictionary SortMemberListByVIP(Dictionary dic) { List> myList = new List>(dic); myList.Sort(delegate (KeyValuePair s1, KeyValuePair s2) { return s2.Value.vip.CompareTo(s1.Value.vip); }); dic.Clear(); foreach (KeyValuePair pair in myList) { dic.Add(pair.Key, pair.Value); } return dic; } protected Dictionary SortMemberListByLevel(Dictionary dic) { List> myList = new List>(dic); myList.Sort(delegate (KeyValuePair s1, KeyValuePair s2) { return s2.Value.level.CompareTo(s1.Value.level); }); dic.Clear(); foreach (KeyValuePair pair in myList) { dic.Add(pair.Key, pair.Value); } return dic; } protected void SortByNewRule() { // 先按照帮主第一玩家第二的规则排 Dictionary tempList = new Dictionary(); foreach (KeyValuePair 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 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 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 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 levelTempList = new SortedDictionary(new MySortU()); foreach (KeyValuePair 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 { #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 { #region IComparer 成员 public int Compare(int x, int y) { //排序 int iResult = (int)x - (int)y; if (iResult == 0) iResult = -1; // 排除重复 return iResult; } #endregion } }