// 左键指令的分析 public override void FillMouseCommand_Left(ref SCommand_Mouse pOutCmd, tActionItem pActiveSkill) { pOutCmd.m_typeMouse = MOUSE_CMD_TYPE.MCT_NULL; if (pActiveSkill != null && pActiveSkill.GetType() == ACTION_OPTYPE.AOT_SKILL) { SCLIENT_SKILL pSkillImpl = (SCLIENT_SKILL)pActiveSkill.GetImpl(); if (pSkillImpl != null && pSkillImpl.m_pDefine.m_nSelectType == (int)ENUM_SELECT_TYPE.SELECT_TYPE_CHARACTER) { ENUM_RELATION eCampType = GameProcedure.s_pGameInterface.GetCampType((CObject)CObjectManager.Instance.getPlayerMySelf(), (CObject)this); switch (eCampType) { case ENUM_RELATION.RELATION_FRIEND: break; case ENUM_RELATION.RELATION_ENEMY: default: { pOutCmd.m_typeMouse = MOUSE_CMD_TYPE.MCT_SKILL_OBJ; pOutCmd.SetValue <object>(0, (object)pActiveSkill); pOutCmd.SetValue <int>(1, ServerID); } break; } } } }
//是否是敌对阵营 public int IsEnemy() { CObject_Character pCharObj = (CObject_Character)CObjectManager.Instance.GetMainTarget(); //选中的不是其他玩家 //if( g_theKernel.IsKindOf( pCharObj->GetClass(), GETCLASS(CObject_PlayerOther) ) == FALSE ) // state->PushInteger( -2 ); ENUM_RELATION sCamp = GameInterface.Instance.GetCampType(pCharObj, CObjectManager.Instance.getPlayerMySelf()); if (sCamp != ENUM_RELATION.RELATION_FRIEND) { return(1); //敌人 } return(0); }
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); }
//该物品是否能够在某对象上使用 public bool IsValidTarget(CObject pSelectObj, ref fVector2 fvPos, ref int objID, ref PET_GUID_t petID) { if (m_theBaseDef == null) { return(false); } //玩家自己 CObject_PlayerMySelf pMySlef = CObjectManager.Instance.getPlayerMySelf(); ENUM_ITEM_TARGET_TYPE targetType = (ENUM_ITEM_TARGET_TYPE)m_theBaseDef.nTargetType; //无需目标 if (ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_NONE == targetType) { return(true); } //需要选择一个场景位置 if (ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_POS == targetType) { return(WorldManager.Instance.ActiveScene.IsValidPosition(ref fvPos)); } //目前不支持的方式 if (ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_DIR == targetType || //方向 ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ITEM == targetType) //物品->物品 { return(false); } switch (targetType) { case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_SELF: //自已 { objID = pMySlef.ServerID; } return(true); case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_SELF_PET: //自己的宠物 { //petID = pMySlef.GetCharacterData().Get_CurrentPetGUID(); ////宠物尚未释放 //if(petID.IsNull()) // return false; objID = pMySlef.ServerID; return(true); } //break; case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND: //友好的目标 case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY: //敌对目标 { //必须需要一个目标 if (pSelectObj == null) { return(false); } //必须是角色 if (!(pSelectObj is CObject_Character)) { return(false); } //检查阵营 ENUM_RELATION eCampType = GameProcedure.s_pGameInterface.GetCampType(pMySlef, pSelectObj); //必须是友好目标/敌对目标 if ((targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND && (pSelectObj == pMySlef || eCampType == ENUM_RELATION.RELATION_FRIEND)) || (targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY && (eCampType == ENUM_RELATION.RELATION_ENEMY))) { objID = pSelectObj.ServerID; return(true); } } return(false); case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND_PLAYER: // 友好玩家 case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY_PLAYER: // 敌对玩家 { //必须需要一个目标 if (pSelectObj == null) { return(false); } //必须是玩家 if (!(pSelectObj is CObject_PlayerOther)) { return(false); } //检查阵营 ENUM_RELATION eCampType = GameProcedure.s_pGameInterface.GetCampType(pMySlef, pSelectObj); //必须是友好玩家/敌对玩家 if ((targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND_PLAYER && (pSelectObj == pMySlef || eCampType == ENUM_RELATION.RELATION_FRIEND)) || (targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY_PLAYER && (eCampType == ENUM_RELATION.RELATION_ENEMY))) { objID = pSelectObj.ServerID; return(true); } } return(false); case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND_MONSTER: //友好怪物 case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY_MONSTER: //敌对怪物 { //必须需要一个目标 if (pSelectObj == null) { return(false); } //必须是角色 if (!(pSelectObj is CObject_Character)) { return(false); } //必须是NPC if (((CObject_Character)pSelectObj).GetCharacterType() != CHARACTER_TYPE.CT_MONSTER) { return(false); } //检查阵营 ENUM_RELATION eCampType = GameProcedure.s_pGameInterface.GetCampType(pMySlef, pSelectObj); //必须是友好NPC if ((targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND_MONSTER && eCampType == ENUM_RELATION.RELATION_FRIEND) || (targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY_MONSTER && eCampType == ENUM_RELATION.RELATION_ENEMY)) { objID = pSelectObj.ServerID; return(true); } } return(false); case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND_PET: //友好宠物 case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY_PET: //敌对宠物 { //必须需要一个目标 if (pSelectObj == null) { return(false); } //必须是角色 if (!(pSelectObj is CObject_Character)) { return(false); } //必须是NPC if (((CObject_Character)pSelectObj).GetCharacterType() != CHARACTER_TYPE.CT_MONSTER) { return(false); } //必须是宠物 if (((CObject_PlayerNPC)pSelectObj).GetNpcType() != ENUM_NPC_TYPE.NPC_TYPE_PET) { return(false); } //检查阵营 ENUM_RELATION eCampType = GameProcedure.s_pGameInterface.GetCampType(pMySlef, pSelectObj); //必须是友好宠物 if ((targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_FRIEND_MONSTER && eCampType == ENUM_RELATION.RELATION_FRIEND) || (targetType == ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ENEMY_PET && eCampType == ENUM_RELATION.RELATION_ENEMY)) { objID = pSelectObj.ServerID; return(true); } } return(false); case ENUM_ITEM_TARGET_TYPE.ITEM_TARGET_TYPE_ALL_CHARACTER: //所有角色 { //必须需要一个目标 if (pSelectObj == null) { return(false); } //必须是角色 if (!(pSelectObj is CObject_Character)) { return(false); } return(true); } //return false; default: break; } return(false); }
//激活动作 public override void DoAction() { SCLIENT_SKILL pSkill = (SCLIENT_SKILL)GetSkillImpl(); if (pSkill == null) { return; } OPERATE_RESULT oResult; // oResult = pSkill.IsCanUse_Leaned(); if (GameDefineResult.Instance.OR_FAILED(oResult)) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult)); return; } ////检查冷却是否结束 oResult = pSkill.IsCanUse_CheckCoolDown(); if (GameDefineResult.Instance.OR_FAILED(oResult)) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult)); return; } // 消耗检测 int idUser; CObject_PlayerMySelf pMySelf = CObjectManager.Instance.getPlayerMySelf(); idUser = (pMySelf != null) ? (pMySelf.ID) : (MacroDefine.INVALID_ID); oResult = pSkill.IsCanUse_CheckDeplete(idUser); if (GameDefineResult.Instance.OR_FAILED(oResult)) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult)); return; } oResult = pSkill.IsCanUse_CheckLevel(idUser, pSkill.m_nLevel); if (GameDefineResult.Instance.OR_FAILED(oResult)) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(oResult)); return; } //如果是连续的那么就换为选中状态。 AutoKeepOn(); //根据操作类型 switch ((ENUM_SELECT_TYPE)pSkill.m_pDefine.m_nSelectType) { case ENUM_SELECT_TYPE.SELECT_TYPE_NONE: { CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID()); //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case ENUM_SELECT_TYPE.SELECT_TYPE_CHARACTER: { //取得技能数据 int idMyself = CObjectManager.Instance.getPlayerMySelf().ServerID; if (CObjectManager.Instance.GetMainTarget() != null) { int idTarget = CObjectManager.Instance.GetMainTarget().ServerID; // 陈治要求使用增益型技能的时候,选中为敌人的情况下,强制改为自己 [11/14/2011 Ivan edit] if (pSkill.m_pDefine.m_nFriendness >= 0 && idTarget != idMyself) // 减少判断 { CObject_Character pTargetObj = (CObject_Character)CObjectManager.Instance.FindServerObject(idTarget); //阵营判断 ENUM_RELATION eCampType = pTargetObj.GetCampType(CObjectManager.Instance.getPlayerMySelf()); // 通过PK模式判断是否为敌人 [8/19/2011 edit by ZL] if (eCampType != ENUM_RELATION.RELATION_ENEMY) { int tempRelation = CObjectManager.Instance.getPlayerMySelf().GetRelationOther(pTargetObj); eCampType = (ENUM_RELATION)tempRelation; } // 增益型技能:目标不是友好对象的情况下必须强制对自己使用 [11/14/2011 Ivan edit] if (eCampType != ENUM_RELATION.RELATION_FRIEND) { idTarget = idMyself; } } CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), idTarget); } else { // 陈治要求如果增益型技能没有选中对象,则默认目标为自己 [11/14/2011 Ivan edit] if (pSkill.m_pDefine.m_nFriendness >= 0) { CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), idMyself); } else { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, GameDefineResult.Instance.GetOResultText(OPERATE_RESULT.OR_NO_TARGET)); CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), (uint)idMyself); } } //恢复激活Action CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); } break; case ENUM_SELECT_TYPE.SELECT_TYPE_POS: CActionSystem.Instance.SetDefaultAction(this); break; case ENUM_SELECT_TYPE.SELECT_TYPE_DIR: CActionSystem.Instance.SetDefaultAction(this); //CActionSystem.Instance.SetDefaultAction(CObjectManager.Instance.getPlayerMySelf().GetActiveSkill()); // CGameProcedure::s_pGameInterface->Skill_SetActive(this); break; case ENUM_SELECT_TYPE.SELECT_TYPE_SELF: { CObjectManager.Instance.getPlayerMySelf().Player_UseSkill(GetDefineID(), CObjectManager.Instance.getPlayerMySelf().ServerID); //恢复激活Action // CActionSystem.Instance.SetDefaultAction(GameProcedure.Skill_GetActive()); } break; case ENUM_SELECT_TYPE.SELECT_TYPE_HUMAN_GUID: { //待实现 //当前是否已经选择了一个队友 //uint guid; //CObjectManager::GetMe()->GetMainTarget(guid); //if(guid == (GUID_t)-1) //{ // //尚未选择合法的对象 // CEventSystem::GetMe()->PushEvent(GE_INFO_SELF, "无效目标"); // return; //} //CGameProcedure::s_pGameInterface->Player_UseSkill(GetID(), (GUID_t)guid); ////恢复激活Action //CActionSystem::GetMe()->SetDefaultAction(CGameProcedure::s_pGameInterface->Skill_GetActive()); } break; } }
//private void AddFriend( CObject_PlayerOther* pObj ); //创建轨迹特效 //private void CreateMoveTrackProjTex(); //private void Tick_MoveTrack(); //CObject_ProjTex_MoveTrack* GetFreeProjTex(); //void FreeMoveTrackProjTex(CObject_ProjTex_MoveTrack* pMoveTrack); //private void FreeAllMoveTrackProjTex(); //private void ClearAllFreeProjTex(); // 刷新地图信息 [3/19/2012 Ivan] public void UpdateMinimapData() { ClearMapData(); // 更新队友列表 //if(CUIDataPool::GetMe()->GetTeamOrGroup()) //{ // for( int i = 0; i < CUIDataPool::GetMe()->GetTeamOrGroup()->GetTeamMemberCount(); i ++ ) // { // const TeamMemberInfo* pInfo = CUIDataPool::GetMe()->GetTeamOrGroup()->GetMemberByIndex( i ); // if( pInfo ) // { // /*if( pInfo->m_SceneID != m_pActiveScene->GetSceneDefine()->nID ) // continue;*/ // if( pInfo->m_OjbID == CObjectManager::GetMe()->GetMySelf()->GetServerID() ) // continue; // data.pos.x = pInfo->m_WorldPos.m_fX; // data.pos.z = pInfo->m_WorldPos.m_fZ; // _snprintf( data.name, 128, "%s", pInfo->m_szNick ); // data.nServerID = pInfo->m_OjbID; // data.dwSceneID = pInfo->m_SceneID; // m_FriendlistObj.push_back( data ); // } // } //} MAP_POS_DEFINE data; CObject_PlayerMySelf mySelf = CObjectManager.Instance.getPlayerMySelf(); // 遍历所有的对象 [3/19/2012 Ivan] foreach (KeyValuePair <int, CObject> obj in CObjectManager.Instance.ServerObjects) { data = new MAP_POS_DEFINE(); // 如果是角色 [3/19/2012 Ivan] if (obj.Value is CObject_Character) { CObject curObj = obj.Value; if (curObj == mySelf) { continue; } ENUM_RELATION sCamp = GameInterface.Instance.GetCampType(curObj, mySelf); // 如果已经死了,就不加如列表了。 if (((CObject_Character)curObj).CharacterLogic_Get() == ENUM_CHARACTER_LOGIC.CHARACTER_LOGIC_DEAD) { continue; } if (((CObject_Character)curObj).GetFakeObjectFlag() == true) { continue; } // 判断是不是宠物 // 此处还有判断m_FlashlistObj和m_ActivelistObj的逻辑,没有使用,屏蔽 [3/19/2012 Ivan] data.pos.x = curObj.GetPosition().x; data.pos.y = curObj.GetPosition().z; data.name = ((CObject_Character)curObj).GetCharacterData().Get_Name(); data.nServerID = ((CObject_PlayerNPC)curObj).ServerID; if (curObj is CObject_PlayerOther) // 如果是玩家 { if (sCamp == ENUM_RELATION.RELATION_FRIEND) // 如果是同一阵营的 { // 如果是队友,就替掉本来已经存在的位置 // if( CheckIsFriend( pCurObj->GetServerID() ) ) // { // AddFriend( (CObject_PlayerOther*)pCurObj ); // continue; // } m_PlayerlistObj.Add(data); } else if (sCamp == ENUM_RELATION.RELATION_ENEMY) // 敌人 { m_AnimylistObj.Add(data); } } else if (curObj is CObject_PlayerNPC) // 如果是npc { //data.nServerID = ((CObject_PlayerNPC)curObj).GetCharacterData().Get_RaceID(); if (((CObject_PlayerNPC)curObj).IsDisplayBoard() == false) { continue; } // 如果是宠物 if (((CObject_PlayerNPC)curObj).GetNpcType() == ENUM_NPC_TYPE.NPC_TYPE_PET) { if (((CObject_PlayerNPC)curObj).GetOwnerId() == -1) // 还没有主人 { m_PetlistObj.Add(data); } } else if (sCamp == ENUM_RELATION.RELATION_FRIEND) // 如果是同阵营的,是npc,否则是敌人 { // TODO 以后要判断该npc身上是否带了任务,有的话需要放到任务列表里面去 [3/19/2012 Ivan] m_ExpNPClistObj.Add(data); } else if (sCamp == ENUM_RELATION.RELATION_ENEMY) { m_AnimylistObj.Add(data); } } } else if (obj.Value is CTripperObject_Resource) { CTripperObject_Resource resource = obj.Value as CTripperObject_Resource; data.pos.x = resource.GetPosition().x; data.pos.y = resource.GetPosition().z; data.name = resource.GetLifeAbility().szName; data.nServerID = resource.ServerID; m_ExpObjlistObj.Add(data); } // else if( obj.Value is CTripperObject_Transport ) // { // data.pos.x = (( CObject*)pCurObj)->GetPosition().x; // data.pos.z = (( CObject*)pCurObj)->GetPosition().z; // _snprintf( data.name, 128, "传送点" ); // } } }
public OPERATE_RESULT IsCanUse_CheckTarget(int idUser, int idTargetObj, float fTargetX, float fTargetZ, float fDir) { switch ((ENUM_SELECT_TYPE)m_pDefine.m_nSelectType) { case ENUM_SELECT_TYPE.SELECT_TYPE_NONE: break; case ENUM_SELECT_TYPE.SELECT_TYPE_CHARACTER: { if (idTargetObj == MacroDefine.INVALID_ID) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_FIGHT, "没有目标"); return(OPERATE_RESULT.OR_NO_TARGET); } // m_nTargetMustInSpecialState--> 0:活的;1:死的; -1:没有要求 bool TargetMustAliveFlag = (m_pDefine.m_nTargetMustInSpecialState == 0); CObject_Character pTargetObj = (CObject_Character)CObjectManager.Instance.FindServerObject(idTargetObj); if (pTargetObj == null) { return(OPERATE_RESULT.OR_ERROR); } else if (pTargetObj.CannotBeAttack()) // 敌对状态时,也要判断npc是否可以被攻击 [9/26/2011 Ivan edit] { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_FIGHT, "无效目标"); return(OPERATE_RESULT.OR_INVALID_TARGET); } CObject_Character pThisObj = (CObject_Character)CObjectManager.Instance.FindObject(idUser); if (pThisObj == null) { return(OPERATE_RESULT.OR_ERROR); } //阵营判断 _CAMP_DATA cap_a = pThisObj.GetCampData(); _CAMP_DATA cap_b = pTargetObj.GetCampData(); ENUM_RELATION eCampType = CampStand.Instance.CalcRelationType(cap_a.m_nCampID, cap_b.m_nCampID); // 通过PK模式判断是否为敌人 [8/19/2011 edit by ZL] if (eCampType != ENUM_RELATION.RELATION_ENEMY) { int tempRelation = CObjectManager.Instance.getPlayerMySelf().GetRelationOther(pTargetObj); if (tempRelation != -1) { eCampType = (ENUM_RELATION)tempRelation; } } if (m_pDefine.m_nFriendness < 0 && eCampType == ENUM_RELATION.RELATION_ENEMY) { } else if (m_pDefine.m_nFriendness > 0 && eCampType == ENUM_RELATION.RELATION_FRIEND) { } else if (m_pDefine.m_nFriendness == 0) { } else { return(OPERATE_RESULT.OR_INVALID_TARGET); } if (!pTargetObj.IsDie() && TargetMustAliveFlag) { // 该技能只对活目标有效 } else if (pTargetObj.IsDie() && !TargetMustAliveFlag) { // 该技能只对死目标有效 } else { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_FIGHT, "无效目标"); return(OPERATE_RESULT.OR_INVALID_TARGET); } } break; case ENUM_SELECT_TYPE.SELECT_TYPE_POS: { if (!(fTargetX >= 0.0f && fTargetZ >= 0.0f)) { CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_INFO_FIGHT, "无效目标"); return(OPERATE_RESULT.OR_INVALID_TARGET_POS); } } break; case ENUM_SELECT_TYPE.SELECT_TYPE_DIR: break; case ENUM_SELECT_TYPE.SELECT_TYPE_SELF: break; } return(OPERATE_RESULT.OR_OK); }
//加入好友功能(包括好友、临时好友、黑名单) 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; }