public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPacket, ref Peer pPlayer) { //当前流程是主流程 if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain) { CObjectManager pObjectManager = CObjectManager.Instance; GCDelObject delObjPacket = (GCDelObject)pPacket; //判断是否是本场景 // 将场景ID和资源ID分开,不再使用资源ID代替场景ID [10/24/2011 Sun] if (WorldManager.Instance.GetActiveSceneID() != delObjPacket.getSceneID()) { return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } //寻找obj CObject pDelObj = pObjectManager.FindServerObject((int)delObjPacket.getObjID()); CObject_Character pObj = pDelObj as CObject_Character; LogManager.Log("GCDelObjectHandler ObjID:" + delObjPacket.getObjID()); if (pObj == null) { CObjectManager.Instance.DestroyObject(pDelObj); return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); } if (CObjectManager.Instance.GetMainTarget() != null && pObj == CObjectManager.Instance.GetMainTarget()) { CObjectManager.Instance.SetMainTarget(-1, CObjectManager.DESTROY_MAIN_TARGET_TYPE.DEL_OBJECT); } // 判断obj是否在载具上面,在的话需要删除掉 [8/29/2011 Ivan edit] //todo if (pObj.GetCharacterType() == CHARACTER_TYPE.CT_PLAYEROTHER || pObj.GetCharacterType() == CHARACTER_TYPE.CT_PLAYERMYSELF) { if (pObj.GetCharacterData().Get_BusObjID() != MacroDefine.UINT_MAX) { CObject pBus = CObjectManager.Instance.FindServerObject((int)pObj.GetCharacterData().Get_BusObjID()); if (pBus != null) { SCommand_Object cmdTemp = new SCommand_Object(); cmdTemp.m_wID = (int)OBJECTCOMMANDDEF.OC_BUS_REMOVE_PASSENGER; cmdTemp.SetValue <int>(0, pObj.ServerID); pBus.PushCommand(cmdTemp); } } } //删除对象 CObjectManager.Instance.DestroyObject(pObj); //之后不能执行任何代码 } return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE); }
internal string GetHeadIcon() { CObject_Character pCharObj = _GetTargetAsCharacter(); if (pCharObj.GetCharacterType() == CHARACTER_TYPE.CT_MONSTER) { CObject_PlayerNPC npc = pCharObj as CObject_PlayerNPC; if (npc != null) { return(npc.GetPortrait()); } else { return(""); } } //得到玩家和自己的头像 string pImageName = ""; //打开生物定义表 _DBC_CHAR_FACE pFaceImage = CDataBaseSystem.Instance.GetDataBase <_DBC_CHAR_FACE>( (int)DataBaseStruct.DBC_CHAR_FACE).Search_Index_EQU(pCharObj.GetCharacterData().Get_PortraitID()); if (pFaceImage != null) { pImageName = pFaceImage.pImageSetName; } return(pImageName); }
// 组建队伍,设置队伍的 leader,并且加入为第一个成员 public bool CreateTeam(TeamMemberInfo leader, short TeamID) { if (m_Type != TEAM_OR_GROUP_TYPE.INVAILD_TYPE) { throw new Exception("create team failed type = " + m_Type.ToString()); } m_Type = TEAM_OR_GROUP_TYPE.TEAM_TYPE; m_ID = TeamID; SetLeaderGUID(leader.m_GUID); m_TeamMembers.Add(leader); //通知Talk Interface,队伍建立 //Talk..TeamCreate(m_ID); //设置角色层数据 CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Set_HaveTeamFlag(true); // 更新队伍信息 [9/26/2011 Ivan edit] CObject_Character player = CObjectManager.Instance.FindServerObject(leader.m_OjbID) as CObject_Character; if (player != null) { player.GetCharacterData().RefreshName(); } return(true); }
// 客户端移除一个关系,通常用于移除临时好友 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); }
void RemoveAllPassengers() { int i; for (i = 0; i < GameStruct_Bus.DEF_BUS_MAX_PASSENGER_COUNT; i++) { if (m_anPassengerIDs[i] != MacroDefine.INVALID_ID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID(0); } GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = 0; m_abPassengerAttacheds[i] = false; } } m_nPassengerCount = 0; }
void UpdateMemberRenderInterfaceByIndex(int nIndex) { if (m_anPassengerIDs[nIndex] == 0) { return; } if (m_abPassengerAttacheds[nIndex]) { return; } if (GetRenderInterface() != null && m_pBusData != null && m_pBusData.m_aSeatInfo[nIndex].m_pszLocator.Length > 0) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[nIndex]); if (pObj != null && pObj.GetRenderInterface() != null) { GetRenderInterface().Attach_Object(pObj.GetRenderInterface(), m_pBusData.m_aSeatInfo[nIndex].m_pszLocator); CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID((uint)ServerID); } m_abPassengerAttacheds[nIndex] = true; UpdateAnimation(); SetPosition(GetPosition()); } } }
// 移动一个关系,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 string GetData(string typeName, int objServerID) { CObject_Character pCharObj = null; if (objServerID != -1) { pCharObj = (CObject_Character)(CDataPool.Instance.GetTargetEquip()); } else { pCharObj = _GetTargetAsCharacter(); } if (pCharObj == null) { return("没有得到Obj指针"); } if (typeName == "LEVEL") //等级 { string ss; ss = pCharObj.GetCharacterData().Get_Level().ToString(); return(ss); } else if (typeName == "NAME") //名字 { return(pCharObj.GetCharacterData().Get_Name()); } else if (typeName == "ISPKENEMY") { if (CObjectManager.Instance.getPlayerMySelf().GetRelationOther(pCharObj) == 0) { return("1"); } return("0"); } return("1"); }
public string GetName() { CObject_Character pCharObj = _GetTargetAsCharacter(); if (pCharObj != null) { return(pCharObj.GetCharacterData().Get_Name()); } else { return(""); } }
public OPERATE_RESULT IsCanUse_CheckLevel(int idUser, int idLevel) { CObject_Character pUser = (CObject_Character)(CObjectManager.Instance.FindObject(idUser)); if (pUser == null) { return(OPERATE_RESULT.OR_ERROR); } int iSkillClass = m_pDefine.m_nSkillClass; int iLevel = m_nLevel - 1; if (iLevel < 0) { iLevel = 0; } // 得到技能对应的心法数据 SCLIENT_SKILLCLASS pSkillClass = CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Get_SkillClass(iSkillClass); if (pSkillClass != null) { // 技能数据id int iSkillData_V1ID = 0; if (iLevel < 12)// 境界心法超过12级 [4/19/2012 SUN] { iSkillData_V1ID = m_pDefine.m_anSkillByLevel[iLevel]; } else if (pSkillClass.IsJingJie()) { iSkillData_V1ID = m_pDefine.m_anSkillByLevel[11]; } //打开数据表 _DBC_SKILLDATA_V1_DEPLETE pSkillData_V1 = CDataBaseSystem.Instance.GetDataBase <_DBC_SKILLDATA_V1_DEPLETE>((int)DataBaseStruct.DBC_SKILLDATA_V1_DEPLETE).Search_Index_EQU(iSkillData_V1ID); //搜索纪录 if (pSkillData_V1 != null) { if (pSkillData_V1.nNeedLevel > pUser.GetCharacterData().Get_Level()) { return(OPERATE_RESULT.OR_NEED_HIGH_LEVEL_XINFA); } } } return(OPERATE_RESULT.OR_OK); }
bool RemovePassenger(uint nPassengerID) { if (nPassengerID == 0) { return(false); } int nCount = GetPassengerCount(); if (nCount > 0) { int i; for (i = 0; i < nCount; i++) { if (m_anPassengerIDs[i] == nPassengerID) { if (m_abPassengerAttacheds[i] && GetRenderInterface() != null) { CObject pObj = CObjectManager.Instance.FindServerObject((int)m_anPassengerIDs[i]); if (pObj != null && pObj.GetRenderInterface() != null) { CObject_Character player = pObj as CObject_Character; if (player != null) { player.GetCharacterData().Set_BusObjID(0); } GetRenderInterface().Detach_Object(pObj.GetRenderInterface()); pObj.SetMapPosition(pObj.GetPosition().x, pObj.GetPosition().z); //角色离开飞行坐骑后刷新自己的位置 [8/22/2011 zzy] } } m_anPassengerIDs[i] = m_anPassengerIDs[nCount - 1]; m_abPassengerAttacheds[i] = m_abPassengerAttacheds[nCount - 1]; m_anPassengerIDs[nCount - 1] = 0; m_abPassengerAttacheds[nCount - 1] = false; // 减少乘客 [8/26/2011 ivan edit] --m_nPassengerCount; return(true); } } } return(false); }
// 解散队伍 public void DismissTeam() { switch (m_Type) { case TEAM_OR_GROUP_TYPE.TEAM_TYPE: { // 队伍的情况 for (int i = 0; i < m_TeamMembers.Count; i++) { // 更新队员头顶信息颜色 [10/9/2011 Ivan edit] CObject_Character player = CObjectManager.Instance.FindServerObject((int)m_TeamMembers[i].m_OjbID) as CObject_Character; if (player != null) { player.GetCharacterData().RefreshName(); } } m_TeamMembers.Clear(); } break; case TEAM_OR_GROUP_TYPE.GROUP_TYPE: { m_TeamInfo.Clear(); } break; default: return; } CleanUp(); //设置角色层数据 CObject_PlayerMySelf self = CObjectManager.Instance.getPlayerMySelf(); if (self != null) { self.GetCharacterData().Set_HaveTeamFlag(false); self.GetCharacterData().Set_TeamLeaderFlag(false); self.GetCharacterData().Set_TeamFullFlag(false); self.GetCharacterData().Set_TeamFollowFlag(false); } }
public CObject_Character FindCharacterByName(string szName) { CObject_Character pObject = null; if (mServerObjects.Count > 0) { foreach (int k in mServerObjects.Keys) { if (mServerObjects[k] is CObject_Character) { CObject_Character character = (CObject_Character)mServerObjects[k]; if (character.GetCharacterData().Get_Name() == szName) { pObject = character; break; } } } } return(pObject); }
// 从名单里移除,并释放数据 public virtual bool Erase(int idx) { if (m_vecRelationMember.Count <= idx || idx < 0) { return(false); } // 更新好友信息 [9/26/2011 Ivan edit] CObject_Character player = (CObject_Character)(CObjectManager.Instance.FindServerObject( (int)m_vecRelationMember[idx].m_GUID)); if (player != null) { player.GetCharacterData().RefreshName(); } // SAFE_DELETE( m_vecRelationMember[idx] ); m_vecRelationMember.RemoveAt(idx); return(true); }
internal CObject FindCharacterByTableID(int idTable) { CObject_Character pObject = null; if (mServerObjects.Count != 0) { foreach (CObject obj in mServerObjects.Values) { CObject_Character npc = obj as CObject_Character; if (npc != null) { if (idTable == npc.GetCharacterData().Get_RaceID()) { pObject = npc; break; } } } } return(pObject); }
//加入好友功能(包括好友、临时好友、黑名单) 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 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 void AddMember(TeamMemberInfo member, short TeamID, byte TeamIndex) { TeamMemberInfo pTMInfo = new TeamMemberInfo(); pTMInfo.m_GUID = member.m_GUID; pTMInfo.m_OjbID = member.m_OjbID; // pTMInfo.m_SceneID = member.m_SceneID; pTMInfo.m_uFamily = member.m_uFamily; // 2.五行属性 pTMInfo.m_uDataID = member.m_uDataID; // 3.性别 pTMInfo.m_nPortrait = member.m_nPortrait; // 5.头像 pTMInfo.m_szNick = member.m_szNick; CObject_PlayerMySelf pObj = CObjectManager.Instance.getPlayerMySelf(); switch (m_Type) { case TEAM_OR_GROUP_TYPE.INVAILD_TYPE: { if (CreateTeam(pTMInfo, TeamID) == false) { pTMInfo = null; } } break; case TEAM_OR_GROUP_TYPE.TEAM_TYPE: { // 队伍加人的情况 if (m_TeamMembers.Count >= GAMEDEFINE.MAX_TEAM_MEMBER) { pTMInfo = null; CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "队伍已满,无法加人"); return; } m_TeamMembers.Add(pTMInfo); // 队伍满人标记 [6/14/2011 edit by ZL] if (m_TeamMembers.Count == GAMEDEFINE.MAX_TEAM_MEMBER) { CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Set_TeamFullFlag(true); } // 更新队伍信息 [9/26/2011 Ivan edit] CObject_Character player = CObjectManager.Instance.FindServerObject((int)pTMInfo.m_OjbID) as CObject_Character; if (player != null) { player.GetCharacterData().RefreshName(); } } break; case TEAM_OR_GROUP_TYPE.GROUP_TYPE: { // 团队加人的情况 if (TeamIndex < 0 || TeamIndex >= GAMEDEFINE.MAX_TEAMS_IN_GROUP) { pTMInfo = null; return; } ++TeamIndex; // 默认传入的数字为 0 ~ MAX_TEAMS_IN_GROUP-1 TeamInfo pTeamInfo = GetTeam(TeamIndex); if (pTeamInfo != null) { if (pTeamInfo.m_TeamMembers.Count >= GAMEDEFINE.MAX_TEAM_MEMBER) { pTMInfo = null; return; } } else { // 如果该小组不存在,则创建,并添加入团队 pTeamInfo = new TeamInfo(); pTeamInfo.m_TeamID = TeamIndex; m_TeamInfo.Add(pTeamInfo); //队伍满 if (pTeamInfo.m_TeamMembers.Count >= GAMEDEFINE.MAX_TEAM_MEMBER) { CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Set_TeamFullFlag(true); } } pTeamInfo.m_TeamMembers.Add(pTMInfo); if (pTMInfo.m_GUID == pObj.GetServerGUID()) { m_MyTeamID = TeamIndex; } } break; default: return; } if (pTMInfo.m_GUID != pObj.GetServerGUID()) { // 需要加载队友的头像窗口 // 请求该队友的数据 CGAskTeamMemberInfo Msg = new CGAskTeamMemberInfo(); Msg.SceneID = pTMInfo.m_SceneID; Msg.ObjID = (uint)pTMInfo.m_OjbID; Msg.GUID = pTMInfo.m_GUID; NetManager.GetNetManager().SendPacket(Msg); } else { FillMyInfo(pTMInfo); } //// 创建一个界面的模型. //pTMInfo.m_UIModel.CreateNewUIModel(); //// 设置ui模型 //// 设置性别 //pTMInfo.m_UIModel.m_pAvatar.GetCharacterData().Set_RaceID(pTMInfo.m_uDataID); }
// 一个组员离开 public void DelMember(uint guid) { switch (m_Type) { case TEAM_OR_GROUP_TYPE.TEAM_TYPE: { // Keep ObjId [10/9/2011 Ivan edit] int teamMemberObjId = MacroDefine.INVALID_ID; for (int i = 0; i < m_TeamMembers.Count; i++) { if (m_TeamMembers[i].m_GUID == guid) { teamMemberObjId = m_TeamMembers[i].m_OjbID; m_TeamMembers.RemoveAt(i); break; } } //队伍不再满 if (m_TeamMembers.Count < GAMEDEFINE.MAX_TEAM_MEMBER) { CObjectManager.Instance.getPlayerMySelf().GetCharacterData().Set_TeamFullFlag(false); } // 更新队伍信息 [9/26/2011 Ivan edit] CObject_Character player = CObjectManager.Instance.FindServerObject(teamMemberObjId) as CObject_Character; if (player != null) { player.GetCharacterData().RefreshName(); } } break; case TEAM_OR_GROUP_TYPE.GROUP_TYPE: { // 团队情况 bool bFind = false; for (int i = 0; i < m_TeamInfo.Count; i++) { TeamInfo teamInfo = m_TeamInfo[i]; for (int j = 0; j < teamInfo.m_TeamMembers.Count; j++) { if (teamInfo.m_TeamMembers[j].m_GUID == guid) { teamInfo.m_TeamMembers.RemoveAt(j); bFind = true; if (teamInfo.m_TeamMembers.Count < 1) { m_TeamInfo.RemoveAt(i); } break; } } if (bFind) { break; } } } break; default: return; } if (guid == m_LeaderID) { // choose a new leader switch (m_Type) { case TEAM_OR_GROUP_TYPE.TEAM_TYPE: { // 队伍情况 if (m_TeamMembers.Count < 1) { // 不在此处处理队伍解散的情况 return; } SetLeaderGUID(m_TeamMembers[0].m_GUID); } break; case TEAM_OR_GROUP_TYPE.GROUP_TYPE: { // 团队情况,暂时不考虑团队选择新团长的规则 //Assert(FALSE); } break; default: //Assert(FALSE); return; } } }
public OPERATE_RESULT IsCanUse_CheckDeplete(int idUser) { CObject_Character pUser = (CObject_Character)CObjectManager.Instance.FindObject(idUser); if (pUser == null) { return(OPERATE_RESULT.OR_ERROR); } CCharacterData pCharData = CDataPool.Instance.CharacterData_Get(idUser); if (pCharData == null) { return(OPERATE_RESULT.OR_ERROR); } // 心法要求 //const SCLIENT_XINFA* pXinfa = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_XinFa(m_pDefine->m_nXinFaID); //if ( pXinfa && pXinfa->m_nLevel <m_pDefine->m_nXinFaLevelRequirement ) //{ // return OR_NEED_HIGH_LEVEL_XINFA; //} // 武器判断 if (m_pDefine.m_bMustUseWeapon != 0) { if (pUser.GetCharacterData().Get_Equip(HUMAN_EQUIP.HEQUIP_WEAPON) == MacroDefine.INVALID_ID) { return(OPERATE_RESULT.OR_NEED_A_WEAPON); } } // 消耗判断 if (m_pDeplete == null) { //Assert( m_pDeplete != NULL && "SCLIENT_SKILL::IsCanUse_CheckDeplete" ); return(OPERATE_RESULT.OR_OK); } //待实现 CImpact_Character impactChar = pUser.Impact; uint nDerateAllImpactID = MacroDefine.UINT_MAX; if (impactChar.isExistEffect(nDerateAllImpactID)) { return(OPERATE_RESULT.OR_OK); } // 是否有减免当前技能消耗的BUFF uint nDerateCurImpactID = MacroDefine.UINT_MAX; if (impactChar.isExistEffect(nDerateCurImpactID)) { return(OPERATE_RESULT.OR_OK); } // if (m_pDeplete.m_nHP > 0) { // 是否有减免HP消耗的BUFF uint nDerateHPImpactID = MacroDefine.UINT_MAX; if (!impactChar.isExistEffect(nDerateHPImpactID)) { if (pCharData.Get_HP() < m_pDeplete.m_nHP) { return(OPERATE_RESULT.OR_NOT_ENOUGH_HP); } } } // if (m_pDeplete.m_nMP > 0) { // 是否有减免MP消耗的BUFF uint nDerateMPImpactID = MacroDefine.UINT_MAX; if (!impactChar.isExistEffect(nDerateMPImpactID)) { if (pCharData.Get_MP() < m_pDeplete.m_nMP) { return(OPERATE_RESULT.OR_LACK_MANA); } } } // //if (m_pDeplete.m_nSP > 0) //{ // // 是否有减免SP消耗的BUFF // uint nDerateSPImpactID = MacroDefine.UINT_MAX; // if (!impactChar.isExistEffect(nDerateSPImpactID)) // { // if (pCharData.Get_Rage() < m_pDeplete.m_nSP) // return OPERATE_RESULT.OR_NOT_ENOUGH_RAGE; // } //} // if (m_pDeplete.m_nStrikePoint > 0) { // 是否有减免StrikePoint消耗的BUFF // 这里的m_pDeplete->m_nStrikePoint为连技段 uint nDerateStrikePointImpactID = MacroDefine.UINT_MAX; if (!impactChar.isExistEffect(nDerateStrikePointImpactID)) { int nStrikePoint = m_pDeplete.m_nStrikePoint * 3; if (pCharData.Get_StrikePoint() < nStrikePoint) { return(OPERATE_RESULT.OR_NOT_ENOUGH_STRIKE_POINT); } } } // if (m_pDeplete.m_nItemID != MacroDefine.INVALID_ID) { // 是否有减免Item消耗的BUFF uint nDerateItemImpactID = MacroDefine.UINT_MAX; if (!impactChar.isExistEffect(nDerateItemImpactID)) { int nIndex = CDataPool.Instance.UserBag_GetItemIndexByID(m_pDeplete.m_nItemID); if (nIndex == -1) { return(OPERATE_RESULT.OR_NOT_ENOUGH_ITEM); } } } return(OPERATE_RESULT.OR_OK); }
public float GetMPPercent() { CObject_Character pCharObj = _GetTargetAsCharacter(); return(pCharObj.GetCharacterData().Get_MPPercent()); }