671 lines
16 KiB
C#
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
|
|
}
|
|
|
|
} |