public static int SortRoleList(CliProto.GC_ROLELIST refRoleList) { if (refRoleList.m_Count == 0) { return(-1); } if (refRoleList.m_Count == 1) { return(0); } UInt64[] arrayInfo = new UInt64[4]; for (int i = 0; i < refRoleList.m_Count; i++) { arrayInfo[i] = UInt64.Parse(Encoding.UTF8.GetString(refRoleList.m_RoleInfoList[i].m_RoleInfo.m_createtime)); } if (refRoleList.m_Count == 2) { SwitchPosIfLess(refRoleList, 0, 1, arrayInfo); } else { for (int i = 0; i < refRoleList.m_Count - 1; i++) { for (int j = i + 1; j < refRoleList.m_Count; j++) { SwitchPosIfLess(refRoleList, i, j, arrayInfo); } } } return(GetLastLoginRoleIndex(refRoleList)); }
public static void OnMessage_GCID_ROLELIST(int iMsgID, ref CMessage msg) { SDGlobal.Log("rolelist received"); CliProto.GC_ROLELIST refMSG = (CliProto.GC_ROLELIST)msg; SDNetGlobal.roleCount = refMSG.m_Count; if (!SDNetGlobal.bReConnectGate) { SDNetGlobal.lastSelectRole = SelectRole.SortRoleList(refMSG); } for (int i = 0; i < SDNetGlobal.roleCount; i++) { if (SDNetGlobal.playerList[i] == null) { SDNetGlobal.playerList[i] = new sdPlayerInfo(); } sdPlayerInfo kPlayerInfo = SDNetGlobal.playerList[i]; kPlayerInfo.mRoleName = System.Text.Encoding.UTF8.GetString(refMSG.m_RoleInfoList[i].m_RoleInfo.m_RoleName); kPlayerInfo.mDBID = refMSG.m_RoleInfoList[i].m_RoleInfo.m_DBRoleId; kPlayerInfo.mGender = refMSG.m_RoleInfoList[i].m_RoleInfo.m_Gender; kPlayerInfo.mSkinColor = refMSG.m_RoleInfoList[i].m_RoleInfo.m_SkinColor; kPlayerInfo.mHairStyle = refMSG.m_RoleInfoList[i].m_RoleInfo.m_HairStyle; kPlayerInfo.mBaseJob = refMSG.m_RoleInfoList[i].m_RoleInfo.m_BaseJob; kPlayerInfo.mJob = refMSG.m_RoleInfoList[i].m_RoleInfo.m_Job; kPlayerInfo.mLevel = refMSG.m_RoleInfoList[i].m_RoleInfo.m_Level; kPlayerInfo.mEquipCount = refMSG.m_RoleInfoList[i].m_Equip.m_ItemCount; if (kPlayerInfo.mEquipCount > 0) { kPlayerInfo.mEquipID = new uint[kPlayerInfo.mEquipCount]; for (int j = 0; j < kPlayerInfo.mEquipCount; ++j) { kPlayerInfo.mEquipID[j] = (uint)refMSG.m_RoleInfoList[i].m_Equip.m_Items[j].m_TID; } } } for (int i = SDNetGlobal.roleCount; i < 4; i++) { SDNetGlobal.playerList[i] = null; } SelectRole sr = sdGameLevel.instance.NGUIRoot.GetComponentInChildren <SelectRole>(); if (sr != null) { sr.OnRoleList(); } if (SDNetGlobal.bReConnectGate) { SDNetGlobal.OnMessage_GCID_ROLELIST(iMsgID, ref msg); } }
public static void SwitchPosIfLess(CliProto.GC_ROLELIST refRoleList, int x, int y, UInt64[] arrayInfo) { if (arrayInfo[x] > arrayInfo[y]) { HeaderProto.SRoleInfoWithEquip role = refRoleList.m_RoleInfoList[x]; refRoleList.m_RoleInfoList[x] = refRoleList.m_RoleInfoList[y]; refRoleList.m_RoleInfoList[y] = role; UInt64 tempTime = arrayInfo[y]; arrayInfo[y] = arrayInfo[x]; arrayInfo[x] = tempTime; } }
// protected void OnMessage_GCID_ROLELIST(int iMsgID, ref CMessage msg) { SDGlobal.Log("rolelist received"); CliProto.GC_ROLELIST refMSG = (CliProto.GC_ROLELIST)msg; SDNetGlobal.roleCount = refMSG.m_Count; SDNetGlobal.lastSelectRole = SelectRole.SortRoleList(refMSG); for (int i = 0; i < SDNetGlobal.roleCount; i++) { if (SDNetGlobal.playerList[i] == null) { SDNetGlobal.playerList[i] = new sdPlayerInfo(); } sdPlayerInfo kPlayerInfo = SDNetGlobal.playerList[i]; kPlayerInfo.mRoleName = System.Text.Encoding.UTF8.GetString(refMSG.m_RoleInfoList[i].m_RoleInfo.m_RoleName).Trim('\0'); kPlayerInfo.mDBID = refMSG.m_RoleInfoList[i].m_RoleInfo.m_DBRoleId; kPlayerInfo.mGender = refMSG.m_RoleInfoList[i].m_RoleInfo.m_Gender; kPlayerInfo.mSkinColor = refMSG.m_RoleInfoList[i].m_RoleInfo.m_SkinColor; kPlayerInfo.mHairStyle = refMSG.m_RoleInfoList[i].m_RoleInfo.m_HairStyle; kPlayerInfo.mBaseJob = refMSG.m_RoleInfoList[i].m_RoleInfo.m_BaseJob; kPlayerInfo.mJob = refMSG.m_RoleInfoList[i].m_RoleInfo.m_Job; kPlayerInfo.mLevel = refMSG.m_RoleInfoList[i].m_RoleInfo.m_Level; kPlayerInfo.mEquipCount = refMSG.m_RoleInfoList[i].m_Equip.m_ItemCount; if (kPlayerInfo.mEquipCount > 0) { kPlayerInfo.mEquipID = new uint[kPlayerInfo.mEquipCount]; for (int j = 0; j < kPlayerInfo.mEquipCount; ++j) { kPlayerInfo.mEquipID[j] = (uint)refMSG.m_RoleInfoList[i].m_Equip.m_Items[j].m_TID; } } } for (int i = SDNetGlobal.roleCount; i < 4; i++) { SDNetGlobal.playerList[i] = null; } m_bRoleListRec = true; }
public static int GetLastLoginRoleIndex(CliProto.GC_ROLELIST refRoleList) { UInt64 t = 0; int idx = 0; for (int i = 0; i < refRoleList.m_Count; i++) { UInt64 lastTime = refRoleList.m_RoleInfoList[i].m_RoleInfo.m_LastLoginTime; if (lastTime == 0) { continue; } if (lastTime > t) { t = lastTime; idx = i; } } return(idx); }