// 更新在线好友 public bool UpdateOnlineFriend(_RELATION_ONLINE pOnlineRelation) { RELATION_GROUP RelationGroup = RELATION_GROUP.RELATION_GROUP_FRIEND_ALL; int idx = -1; uint guid = 0; guid = pOnlineRelation.GetGUID(); if (GetRelationPosition(guid, ref RelationGroup, ref idx) == RELATION_TYPE.RELATION_TYPE_STRANGER) { // 数据池还为空 return(true); } RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(false); } SDATA_RELATION_MEMBER pMember; pMember = pRelationList.GetMemberByGUID(guid); if (pMember == null) { return(false); } pMember.m_bOnlineFlag = true; pMember.m_szMood = UIString.Instance.GetUnicodeString(pOnlineRelation.GetMood()); UpdateUIList(RelationGroup); // 刷新关系人在线状态 return(true); }
// 客户端获得关系人信息,供界面使用 public SDATA_RELATION_MEMBER GetRelationInfo(RELATION_GROUP RelationGroup, int idx) { RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(null); } return(pRelationList.GetMember(idx)); }
// 得到某个好友的历史邮件数量 public uint GetMailCount(RELATION_GROUP RelationGroup, int idx) { SDATA_RELATION_MEMBER pRelationMember; pRelationMember = GetRelationInfo(RelationGroup, idx); if (pRelationMember == null) { return(0); } return((uint)pRelationMember.m_vMailList.Count); }
// 从服务器端收到一条移除关系人的消息 public bool RemoveRelation(uint guid) { RELATION_GROUP RelationGroup = RELATION_GROUP.RELATION_GROUP_FRIEND_ALL; int idx = -1; if (GetRelationPosition(guid, ref RelationGroup, ref idx) != RELATION_TYPE.RELATION_TYPE_STRANGER) { return(RemoveRelation(RelationGroup, idx)); } return(false); }
// 获得一个名单 protected RelationList GetRelationList(RELATION_GROUP RelationGroup) { switch (RelationGroup) { case RELATION_GROUP.RELATION_GROUP_F1: { return(m_FriendGroup1); } //break; case RELATION_GROUP.RELATION_GROUP_F2: { return(m_FriendGroup2); } //break; case RELATION_GROUP.RELATION_GROUP_F3: { return(m_FriendGroup3); } //break; case RELATION_GROUP.RELATION_GROUP_F4: { return(m_FriendGroup4); } //break; case RELATION_GROUP.RELATION_GROUP_TEMPFRIEND: { return(m_TeamFriendGroup); } //break; case RELATION_GROUP.RELATION_GROUP_BLACK: { return(m_BlackListGroup); } //break; default: break; } return(null); }
public void AddFriendByName(string name, RELATION_GROUP nGroup) { if (string.IsNullOrEmpty(name)) { return; } int group = -1; int nIndex = -1; if (CDataPool.Instance.GetRelation().GetRelationByName(name, ref group, ref nIndex) != RELATION_TYPE.RELATION_TYPE_STRANGER) { return; } CObject_Character pTargetObj = CObjectManager.Instance.FindCharacterByName(name); if (pTargetObj == CObjectManager.Instance.getPlayerMySelf()) { return; } if (pTargetObj is CObject_PlayerOther) { ENUM_RELATION sCamp = Interface.GameInterface.Instance.GetCampType(pTargetObj, CObjectManager.Instance.getPlayerMySelf()); if (sCamp != ENUM_RELATION.RELATION_FRIEND) {// 如果不是同一阵营的 GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "不能添加不同阵营的人到好友"); return; } } CGRelation Msg = new CGRelation(); Msg.GetRelation().CleanUp(); Msg.GetRelation().m_Type = (byte)RELATION_REQUEST_TYPE.REQ_ADDFRIEND; REQUEST_ADD_RELATION_WITH_GROUP pFriend = new REQUEST_ADD_RELATION_WITH_GROUP(); Msg.GetRelation().mRelation = pFriend; pFriend.CleanUp(); pFriend.SetTargetName(EncodeUtility.Instance.GetGbBytes(name)); pFriend.SetGroup((byte)nGroup); pFriend.SetRelationType((byte)RELATION_TYPE.RELATION_TYPE_FRIEND); NetManager.GetNetManager().SendPacket(Msg); }
// 得到某个好友的第 uIndex 封历史邮件的邮件池索引号 public uint GetMailIndex(RELATION_GROUP RelationGroup, int idx, uint uIndex) { SDATA_RELATION_MEMBER pRelationMember; pRelationMember = GetRelationInfo(RelationGroup, idx); if (pRelationMember == null) { return(0); } if (pRelationMember.m_vMailList.Count <= uIndex) { return(0); } List <int> mailList = pRelationMember.m_vMailList; return((uint)mailList[(int)uIndex]); }
// 关系人下线 public bool RelationOffLine(uint guid) { RELATION_GROUP RelationGroup = RELATION_GROUP.RELATION_GROUP_FRIEND_ALL; int idx = 0; GetRelationPosition(guid, ref RelationGroup, ref idx); RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(false); } SDATA_RELATION_MEMBER pMember; pMember = pRelationList.GetMemberByGUID(guid); if (pMember == null) { return(false); } pMember.m_bOnlineFlag = false; //pMember.m_szMood = pMember.m_szMood; // 只显示好友提示 [6/23/2011 edit by ZL] if (pMember.m_RelationType == RELATION_TYPE.RELATION_TYPE_FRIEND) { string szText = "你的好友#Y" + pMember.m_szName + "#R离开游戏了"; //ADDTALKMSG(szText); todo } UpdateUIList(RelationGroup); // 刷新关系人在线状态 return(true); }
// 给某个(临时)好友重建历史信息 public void RebuildMailHistory(RELATION_GROUP RelationGroup, string szName) { //todo /* RelationList pRelationList = null; * SDATA_RELATION_MEMBER pRelationMember = null; * * pRelationList = GetRelationList( RelationGroup ); * if( pRelationList == null ) * { * return; * } * * pRelationMember = pRelationList.GetMemberByName(szName); * if( pRelationMember == null ) * { // 没有找到这个好友 * return; * } * * CMailPool pMailPool = CDataPool::GetMe().GetMailPool(); * * for( INT i=0; i<pMailPool.GetMailCount(); ++i ) * { * const SMail pMail; * * pMail = pMailPool.GetMail(i); * if( pMail != null ) * { * if( strcmp(pMail.m_szSourName, pRelationMember.m_szName) == 0 || strcmp(pMail.m_szDestName, pRelationMember.m_szName) == 0 || ) || { || pRelationMember.m_vMailList.push_back(i); || } || } || }*/ }
public void delFriend(RELATION_GROUP group, int index) //删除一个好友 { SDATA_RELATION_MEMBER pInfo = CDataPool.Instance.GetRelation().GetRelationInfo(group, index); if (group == RELATION_GROUP.RELATION_GROUP_TEMPFRIEND) // 如果是临时好友 { CDataPool.Instance.GetRelation().RemoveRelation(group, index); GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_UPDATE_FRIEND); return; } else if (group == RELATION_GROUP.RELATION_GROUP_BLACK) { CGRelation Msg = new CGRelation(); Msg.GetRelation().CleanUp(); Msg.GetRelation().m_Type = (byte)RELATION_REQUEST_TYPE.REQ_DELFROMBLACKLIST; RELATION_GUID pBlackName = new RELATION_GUID(); Msg.GetRelation().mRelation = pBlackName; pBlackName.CleanUp(); pBlackName.SetTargetGUID(pInfo.m_GUID); NetManager.GetNetManager().SendPacket(Msg); } else { CGRelation Msg = new CGRelation(); Msg.GetRelation().CleanUp(); Msg.GetRelation().m_Type = (byte)RELATION_REQUEST_TYPE.REQ_DELFRIEND; REQUEST_DEL_FRIEND pFriend = new REQUEST_DEL_FRIEND(); Msg.GetRelation().mRelation = pFriend; pFriend.CleanUp(); pFriend.SetTargetGUID(pInfo.m_GUID); NetManager.GetNetManager().SendPacket(Msg); } return; }
// 加入一个关系,用于游戏过程中,加入时需要指定将要加入的组 public bool AddRelation(RELATION_GROUP RelationGroup, SDATA_RELATION_MEMBER pMember) { RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(false); } // 不让重复加好友,不能加自己为好友 if (pMember.m_GUID != MacroDefine.UINT_MAX) { if (CObjectManager.Instance.getPlayerMySelf().GetServerGUID() == pMember.m_GUID) { return(false); } RELATION_GROUP rg = RELATION_GROUP.RELATION_GROUP_F4; int idx = 0; if (GetRelationPosition(pMember.m_GUID, ref rg, ref idx) != RELATION_TYPE.RELATION_TYPE_STRANGER) { return(false); } else if (pRelationList.GetMemberByGUID(pMember.m_GUID) != null) { return(false); } } else if (pMember.m_szName.Length > 0) { string str1 = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_Name(); string str2 = pMember.m_szName; if (str1 == str2) { return(false); } int nrg = 0; int idx = 0; if (GetRelationByName(pMember.m_szName, ref nrg, ref idx) != RELATION_TYPE.RELATION_TYPE_STRANGER) { return(false); } else if (pRelationList.GetMemberByName(pMember.m_szName) != null) { return(false); } } SDATA_RELATION_MEMBER pNewRelation = new SDATA_RELATION_MEMBER(); pNewRelation.m_GUID = pMember.m_GUID; pNewRelation.m_szName = (pMember.m_szName); pNewRelation.m_RelationType = pMember.m_RelationType; pNewRelation.m_nFriendPoint = pMember.m_nFriendPoint; pNewRelation.m_nLevel = pMember.m_nLevel; pNewRelation.m_nMenPai = pMember.m_nMenPai; pNewRelation.m_nPortrait = pMember.m_nPortrait; pNewRelation.m_GuildID = pMember.m_GuildID; pNewRelation.m_szGuildName = (pMember.m_szGuildName); pNewRelation.m_bOnlineFlag = pMember.m_bOnlineFlag; SetRelationDesc(pNewRelation); if (pMember.m_bOnlineFlag) { pNewRelation.m_szMood = pMember.m_szMood; pNewRelation.m_szTitle = pMember.m_szTitle; pNewRelation.m_SceneID = pMember.m_SceneID; GetLocationName(pNewRelation.m_SceneID, out pNewRelation.m_szLocation); pNewRelation.m_nTeamSize = pMember.m_nTeamSize; SetTeamDesc(pNewRelation); } else { pNewRelation.m_szLocation = "离线"; } pRelationList.Add(pNewRelation); UpdateUIList(RelationGroup); return(true); }
// 得到一个 GUID 所在的组以及在组里的索引,没有找到返回 RELATION_TYPE_STRANGER,这个功能不考虑临时好友 public RELATION_TYPE GetRelationPosition(uint guid, ref RELATION_GROUP RelationGroup, ref int idx) { RelationList pRelationList; for (int i = (int)RELATION_GROUP.RELATION_GROUP_F1; i < (int)RELATION_GROUP.RELATION_GROUP_NUMBER; ++i) { pRelationList = GetRelationList((RELATION_GROUP)i); if (pRelationList == null) { return(RELATION_TYPE.RELATION_TYPE_STRANGER); } idx = pRelationList.GetMemberIndex(guid); if (idx != -1) { RelationGroup = (RELATION_GROUP)i; return(pRelationList.GetMember(idx).m_RelationType); } } return(RELATION_TYPE.RELATION_TYPE_STRANGER); }
// 通知 UI 刷新 RelationGroup 中第 idx 号关系人的详细信息 public void UpdateUIInfo(RELATION_GROUP RelationGroup, int idx) { List <string> param = new List <string>(); int temp = (int)(RelationGroup); param.Add(temp.ToString()); param.Add(idx.ToString()); CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_UPDATE_FRIEND_INFO, param); }
// 通知 UI 刷新列表,默认更新所有列表 public void UpdateUIList(RELATION_GROUP RelationGroup) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_UPDATE_FRIEND); }
// 移动一个关系,Srg 是原来的组,guid 是要移动的玩家 GUID,Dtype 是移动后的关系类型,Drg 是移动后的组 public bool MoveRelation(RELATION_GROUP Srg, RELATION_TYPE Dtype, RELATION_GROUP Drg, uint guid) { RelationList pSRelationList; pSRelationList = GetRelationList(Srg); if (pSRelationList == null) { return(false); } RelationList pDRelationList; pDRelationList = GetRelationList(Drg); if (pDRelationList == null) { return(false); } SDATA_RELATION_MEMBER pMember; pMember = pSRelationList.GetMemberByGUID(guid); if (pMember == null) { return(false); } if (pSRelationList.RemoveByGUID(guid)) { UpdateUIList(Srg); // 修改关系信息 pMember.m_RelationType = Dtype; string m_szName = pMember.m_szName; bool isFinish = false; if (pDRelationList.Add(pMember)) { UpdateUIList(Drg); isFinish = true; } else { pMember = null; isFinish = false; } // 必须等add完成后再刷新 [9/26/2011 Ivan edit] CObject_Character player = (CObject_Character)(CObjectManager.Instance.FindCharacterByName(m_szName)); if (player != null) { player.GetCharacterData().RefreshName(); } return(isFinish); } return(false); }
public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer) { if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { GCRelation packet = (GCRelation)pPacket; if (GameProcedure.s_pUISystem == null) { return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } GC_RELATION pReturn = packet.GetRelation(); string szText = "其他好友操作。"; Relation pRelation = CDataPool.Instance.GetRelation(); if (pRelation == null) { return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } switch ((RELATION_RETURN_TYPE )pReturn.m_Type) { case RELATION_RETURN_TYPE.RET_RELATIONLIST: { GC_RELATIONLIST pRelationList = (GC_RELATIONLIST)pReturn.mRelation; pRelation.SetMood(UIString.Instance.GetUnicodeString(pRelationList.GetMood())); for (int i = 0; i < pRelationList.GetFriendCount(); ++i) { pRelation.AddRelation(pRelationList.GetFriend(i)); } for (int i = 0; i < pRelationList.GetBlackCount(); ++i) { pRelation.AddRelation(pRelationList.GetBlackName(i)); } // 需要 push 一个事件通知 UI pRelation.UpdateUIList(RELATION_GROUP.RELATION_GROUP_FRIEND_ALL); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } break; case RELATION_RETURN_TYPE.RET_RELATIONINFO: { pRelation.UpdateRelationInfo((RETURN_RELATION_INFO )pReturn.mRelation); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } break; case RELATION_RETURN_TYPE.RET_TEMPFRIEND_TO_FRIEND: case RELATION_RETURN_TYPE.RET_TEMPFRIEND_ADDTO_BLACKLIST: case RELATION_RETURN_TYPE.RET_ADDFRIEND: case RELATION_RETURN_TYPE.RET_ADDTOBLACKLIST: { RETURN_ADD_RELATION pAddRelation = (RETURN_ADD_RELATION)pReturn.mRelation; RELATION_GROUP Drg; string msg = UIString.Instance.GetUnicodeString(pAddRelation.GetRelationData().GetName()); if (pAddRelation.GetRelationType() == (byte)RELATION_TYPE.RELATION_TYPE_BLACKNAME) { szText = "你将" + msg + "加入黑名单。"; // strTemp = NOCOLORMSGFUNC("GCRelationHandler_Info_Add_Black_List", pAddRelation.GetRelationData().GetName()); // _snprintf(szText, _MAX_PATH, "%s", strTemp.c_str()); Drg = RELATION_GROUP.RELATION_GROUP_BLACK; } else if (pAddRelation.GetRelationType() == (byte)RELATION_TYPE.RELATION_TYPE_FRIEND) { szText = "你将" + msg + "添加为好友。"; // strTemp = NOCOLORMSGFUNC("GCRelationHandler_Info_Add_Firend_List", pAddRelation.GetRelationData().GetName()); // _snprintf(szText, _MAX_PATH, "%s", strTemp.c_str()); Drg = (RELATION_GROUP)pAddRelation.GetGroup(); } else { szText = "意外的关系类型:" + pAddRelation.GetRelationType(); // strTemp = NOCOLORMSGFUNC("GCRelationHandler_Info_Err_Relation", pAddRelation.GetRelationData().GetName()); // _snprintf(szText, _MAX_PATH, "%s", strTemp.c_str()); // AssertEx(FALSE, szText); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } _RELATION pRelationData; pRelationData = pAddRelation.GetRelationData(); // 如果是临时好友,则移除 pRelation.RemoveRelation(pRelationData.GetGUID()); pRelation.RemoveRelation(RELATION_GROUP.RELATION_GROUP_TEMPFRIEND, UIString.Instance.GetUnicodeString(pRelationData.GetName())); SDATA_RELATION_MEMBER Member = new SDATA_RELATION_MEMBER(); Member.m_GUID = pRelationData.GetGUID(); Member.m_szName = UIString.Instance.GetUnicodeString(pRelationData.GetName()); Member.m_RelationType = (RELATION_TYPE)pAddRelation.GetRelationType(); Member.m_nLevel = pRelationData.GetLevel(); Member.m_nMenPai = pRelationData.GetMenPai(); Member.m_nPortrait = pRelationData.GetPortrait(); Member.m_GuildID = pRelationData.GetGuildID(); Member.m_szGuildName = UIString.Instance.GetUnicodeString(pRelationData.GetGuildName()); Member.m_bOnlineFlag = pRelationData.GetOnlineFlag() != 0; if (Member.m_bOnlineFlag) { Member.m_szMood = UIString.Instance.GetUnicodeString(pRelationData.GetMood()); Member.m_szTitle = UIString.Instance.GetUnicodeString(pRelationData.GetTitle()); Member.m_SceneID = pRelationData.GetSceneID(); Member.m_nTeamSize = pRelationData.GetTeamSize(); } pRelation.AddRelation(Drg, Member); // 更新好友信息 [9/26/2011 Ivan edit] CObject_Character player = (CObject_Character)(CObjectManager.Instance.FindCharacterByName(Member.m_szName)); if (player != null) { player.GetCharacterData().RefreshName(); } } break; case RELATION_RETURN_TYPE.RET_TRANSITION: { // RETURN_ADD_RELATION pAddRelation = (RETURN_ADD_RELATION)(pReturn.mRelation); // RELATION_GROUP Drg; // // // 将好友分组到黑名单才提示 [6/23/2011 edit by ZL] // if ( pAddRelation.GetRelationType() == (byte)RELATION_TYPE_BLACKNAME ) // { // string name = UIString.Instance.GetUnicodeString(pAddRelation.GetRelationData().GetName()); // szText = "你将"+name+"加入黑名单"; // Drg = (RELATION_GROUP)RELATION_GROUP_BLACK; // GameProcedure.s_pEventSystem.PushEvent( GAME_EVENT_ID.GE_INFO_SELF, szText ); // } RELATION_GUID_UCHAR_UCHAR pRelationInfo = (RELATION_GUID_UCHAR_UCHAR)(pReturn.mRelation); RELATION_GROUP Srg = RELATION_GROUP.RELATION_GROUP_FRIEND_ALL; int idx = 0; pRelation.GetRelationPosition(pRelationInfo.GetTargetGUID(), ref Srg, ref idx); pRelation.MoveRelation(Srg, (RELATION_TYPE)pRelationInfo.GetRelationType(), (RELATION_GROUP)pRelationInfo.GetGroup(), pRelationInfo.GetTargetGUID()); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; } break; case RELATION_RETURN_TYPE.RET_DELFRIEND: case RELATION_RETURN_TYPE.RET_DELFROMBLACKLIST: { pRelation.RemoveRelation(((RELATION_GUID)pReturn.mRelation).GetTargetGUID()); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } break; case RELATION_RETURN_TYPE.RET_ADDFRIENDNOTIFY: { // _snprintf(szText, _MAX_PATH, "%s已经将你添加为好友了。", pReturn.m_NotifyFriend.GetName() ); // ADDTALKMSG(szText); // strTemp = NOCOLORMSGFUNC("GCRelationHandler_Info_Add_You_To_Firend_List", pReturn.m_NotifyFriend.GetName()); // _snprintf(szText, _MAX_PATH, "%s", strTemp.c_str()); // CGameProcedure::s_pEventSystem.PushEvent( GE_INFO_SELF, szText ); // // 询问是否加对方为好友 [6/22/2011 edit by ZL] // CGameProcedure::s_pEventSystem.PushEvent( GE_FRIEND_MSG_CONFIRM, "201", pReturn.m_NotifyFriend.GetName(), pReturn.m_NotifyFriend.GetGUID() ); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; } break; case RELATION_RETURN_TYPE.RET_ONLINELIST: { RETURN_ONLINE_LIST pRecv = (RETURN_ONLINE_LIST)(pReturn.mRelation); for (byte i = 0; i < pRecv.GetOnlineCount(); ++i) { pRelation.UpdateOnlineFriend(pRecv.GetOnlineRelation(i)); } //CObjectManager::GetMe().GetMySelf().GetCharacterData().Get_IsMinorPwdSetup(TRUE); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; } break; case RELATION_RETURN_TYPE.RET_RELATIONONLINE: { RETURN_NOTIFY_ONLINE pRecv = (RETURN_NOTIFY_ONLINE)(pReturn.mRelation); pRelation.RelationOnline(UIString.Instance.GetUnicodeString(pRecv.GetTargetName()), UIString.Instance.GetUnicodeString(pRecv.GetMood())); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } break; case RELATION_RETURN_TYPE.RET_RELATIONOFFLINE: { pRelation.RelationOffLine(((RELATION_GUID )pReturn.mRelation).GetTargetGUID()); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; } break; case RELATION_RETURN_TYPE.RET_NEWMOOD: { REQUEST_MODIFY_MOOD mood = (REQUEST_MODIFY_MOOD)pReturn.mRelation; pRelation.SetMood((UIString.Instance.GetUnicodeString(mood.GetMood()))); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; } break; case RELATION_RETURN_TYPE.RET_ERR_PASSWDMISMATCH: { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_MINORPASSWORD_OPEN_UNLOCK_PASSWORD_DLG); } break; case RELATION_RETURN_TYPE.RET_ERR_TARGETNOTEXIST: case RELATION_RETURN_TYPE.RET_ERR_GROUPISFULL: case RELATION_RETURN_TYPE.RET_ERR_ISFRIEND: case RELATION_RETURN_TYPE.RET_ERR_ISBLACKNAME: case RELATION_RETURN_TYPE.RET_ERR_CANNOTTRANSITION: case RELATION_RETURN_TYPE.RET_ERR_ISNOTFRIEND: case RELATION_RETURN_TYPE.RET_ERR_ISNOTINBLACKLIST: case RELATION_RETURN_TYPE.RET_ERR_SPOUSETOBLACKLIST: case RELATION_RETURN_TYPE.RET_ERR_MASTERTOBLACKLIST: case RELATION_RETURN_TYPE.RET_ERR_PRENTICETOBLACKLIST: case RELATION_RETURN_TYPE.RET_ERR_BROTHERTOBLACKLIST: case RELATION_RETURN_TYPE.RET_ERR_DELSPOUSE: case RELATION_RETURN_TYPE.RET_ERR_DELMASTER: case RELATION_RETURN_TYPE.RET_ERR_DELPRENTICE: case RELATION_RETURN_TYPE.RET_ERR_DELBROTHER: case RELATION_RETURN_TYPE.RET_ERR_CANNOT_ADDFRIEND: case RELATION_RETURN_TYPE.RET_ERR_CANNOTRECEIVEMAIL: case RELATION_RETURN_TYPE.RET_ERR_NOTRECVSTRANGEMAIL: case RELATION_RETURN_TYPE.RET_ERR_RELATIONUNKNOWN: { // STRING strTemp = ""; // strTemp = NOCOLORMSGFUNC(pRelationString[ pReturn.m_Type - RET_ERR_START ]); // strncpy(szText, strTemp.c_str(), MAX_PATH-1); // //strncpy(szText, pRelationString[ pReturn.m_Type - RET_ERR_START ], MAX_PATH-1); szText = "错误"; } break; case RELATION_RETURN_TYPE.RET_ERR_ISENEMY: { szText = "阵营错误"; } break; default: return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; } GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, szText); } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);; }
// 客户端移除一个关系,通常用于移除临时好友 public bool RemoveRelation(RELATION_GROUP RelationGroup, string szName) { RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(false); } int nIndex; nIndex = pRelationList.GetMemberIndexByName(szName); if (nIndex >= 0) { RemoveRelation(RelationGroup, nIndex); return(true); } return(false); }
// 客户端移除一个关系,通常用于移除临时好友 public bool RemoveRelation(RELATION_GROUP RelationGroup, int idx) { RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(false); } if (idx < 0 || idx >= pRelationList.GetMemberCount()) { return(false); } // keep name [10/9/2011 Ivan edit] string m_szName = pRelationList.GetMember(idx).m_szName; // 刷新头顶名字颜色 [9/26/2011 Ivan edit] CObject_Character player = (CObject_Character)(CObjectManager.Instance.FindCharacterByName(m_szName)); if (player != null) { player.GetCharacterData().RefreshName(); } pRelationList.Erase(idx); UpdateUIList(RelationGroup); return(true); }
//加入好友功能(包括好友、临时好友、黑名单) public void addFriend(RELATION_GROUP nGroup, string name) { string strva = name; CGRelation Msg = new CGRelation(); CObject_Character pCharObj = null; Msg.GetRelation().m_Type = (byte)RELATION_REQUEST_TYPE.REQ_ADDFRIEND; REQUEST_ADD_RELATION_WITH_GROUP pFriend = new REQUEST_ADD_RELATION_WITH_GROUP(); Msg.GetRelation().mRelation = pFriend; pFriend.CleanUp(); bool valueIsNum = false; /*Ogre::StringConverter::isNumber(strva.c_str());*/ if (nGroup == RELATION_GROUP.RELATION_GROUP_FRIEND_ALL) // 如果直接一个名字,就自动往所有的列表里加, { nGroup = RELATION_GROUP.RELATION_GROUP_F1; } else if (nGroup == RELATION_GROUP.RELATION_GROUP_TEMPFRIEND) //临时好友 { SDATA_RELATION_MEMBER pMember = new SDATA_RELATION_MEMBER(); if (!valueIsNum) { pCharObj = (CObject_Character)CObjectManager.Instance.FindCharacterByName(strva); if (pCharObj == null) { return; } pMember.m_szName = strva; } else { pCharObj = (CObject_Character)CObjectManager.Instance.GetMainTarget(); if (pCharObj == null) { return; } pMember.m_szName = pCharObj.GetCharacterData().Get_Name(); } // 如果是玩家并且是统一阵营的才会添加 ENUM_RELATION sCamp = Interface.GameInterface.Instance.GetCampType(pCharObj, CObjectManager.Instance.getPlayerMySelf()); if ((pCharObj is CObject_PlayerOther) == false) { return; } if (sCamp != ENUM_RELATION.RELATION_FRIEND) { return; } int nTmpGroup = -1, nIndex = -1; CDataPool.Instance.GetRelation().GetRelationByName(pMember.m_szName, ref nTmpGroup, ref nIndex); if (nTmpGroup >= 0) { return; } pMember.m_RelationType = RELATION_TYPE.RELATION_TYPE_TEMPFRIEND; if (CDataPool.Instance.GetRelation().AddRelation(RELATION_GROUP.RELATION_GROUP_TEMPFRIEND, pMember)) { string szText = "你将" + pMember.m_szName + " 添加为临时好友"; GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, szText); } CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_UPDATE_FRIEND); return; } else if (nGroup == RELATION_GROUP.RELATION_GROUP_BLACK) { // 增加黑名单的添加 CGRelation Msg1 = new CGRelation(); Msg1.GetRelation().m_Type = (byte)RELATION_REQUEST_TYPE.REQ_ADDTOBLACKLIST; REQUEST_ADD_RELATION pBlackName = new REQUEST_ADD_RELATION(); Msg1.GetRelation().mRelation = pBlackName; pBlackName.CleanUp(); if (strva == "") { pCharObj = (CObject_Character)CObjectManager.Instance.GetMainTarget(); if (pCharObj == null) { return; } pBlackName.SetTargetName(EncodeUtility.Instance.GetGbBytes(pCharObj.GetCharacterData().Get_Name())); } else if (valueIsNum) { // pCharObj = (CObject_Character)CObjectManager.Instance.FindCharacterByRaceID(int.Parse(strva)); // if( pCharObj == null ) pCharObj = (CObject_Character*)CObjectManager::GetMe()->FindCharacterByName(strva.c_str()); // if( pCharObj == null ) return ; // pBlackName->SetTargetGUID( Ogre::StringConverter::parseInt(strva.c_str()) ); } else { pCharObj = (CObject_Character)CObjectManager.Instance.FindCharacterByName(strva); if (pCharObj == null) { return; } pBlackName.SetTargetName(EncodeUtility.Instance.GetGbBytes(strva)); } if (pCharObj == CObjectManager.Instance.getPlayerMySelf()) { return; } if (pCharObj is CObject_PlayerOther) // 如果是玩家 { ENUM_RELATION sCamp = Interface.GameInterface.Instance.GetCampType(pCharObj, CObjectManager.Instance.getPlayerMySelf()); if (sCamp != ENUM_RELATION.RELATION_FRIEND) { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "不能添加不同阵营的人到黑名单"); return; } } else { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "不能添加非玩家到黑名单"); return; } pBlackName.SetRelationType((byte)RELATION_TYPE.RELATION_TYPE_BLACKNAME); NetManager.GetNetManager().SendPacket(Msg1); return; } if (strva == "") { pCharObj = (CObject_Character)CObjectManager.Instance.GetMainTarget(); if (pCharObj == null) { return; } pFriend.SetTargetName(EncodeUtility.Instance.GetGbBytes(pCharObj.GetCharacterData().Get_Name())); } else if (valueIsNum) { // pCharObj = (CObject_Character)CObjectManager::GetMe()->FindCharacterByRaceID(Ogre::StringConverter::parseInt(strva.c_str())); // if( pCharObj == NULL ) pCharObj = (CObject_Character*)CObjectManager::GetMe()->FindCharacterByName(strva.c_str()); // if( pCharObj == NULL ) return 0; // pFriend->SetTargetGUID( Ogre::StringConverter::parseInt(strva.c_str()) ); } else { pFriend.SetTargetName(EncodeUtility.Instance.GetGbBytes(strva)); pCharObj = (CObject_Character)CObjectManager.Instance.FindCharacterByName(strva); if (pCharObj == null) { return; } } if (pCharObj == CObjectManager.Instance.getPlayerMySelf()) // 如果是自己,就不加 { return; } if (pCharObj is CObject_PlayerOther) // 如果是玩家 { ENUM_RELATION sCamp = Interface.GameInterface.Instance.GetCampType(pCharObj, CObjectManager.Instance.getPlayerMySelf()); if (sCamp != ENUM_RELATION.RELATION_FRIEND) // 如果不是同一阵营的 { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "不能添加不同阵营的人到好友"); return; } // // 改为势力判断 [9/26/2011 Ivan edit] // if (pCharObj.GetCharacterData().GetShiLi() != // CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->GetShiLi()) // { // CGameProcedure::s_pEventSystem->PushEvent( GE_INFO_SELF, "不能添加不同势力的人到好友" ); // return 0; // } } else { GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "不能添加非玩家到好友"); return; } pFriend.SetGroup((byte)nGroup); pFriend.SetRelationType((byte)RELATION_TYPE.RELATION_TYPE_FRIEND); NetManager.GetNetManager().SendPacket(Msg); return; }
// 获得一个名单的人数 public int GetListCount(RELATION_GROUP RelationGroup) { RelationList pRelationList; pRelationList = GetRelationList(RelationGroup); if (pRelationList == null) { return(0); } return(pRelationList.GetMemberCount()); }