Exemple #1
0
    // 左键指令的分析
    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;
                }
            }
        }
    }
Exemple #2
0
        //是否是敌对阵营
        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);
        }
Exemple #4
0
    //该物品是否能够在某对象上使用
    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;
        }
    }
Exemple #6
0
    //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, "传送点" );
            //          }
        }
    }
Exemple #7
0
    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;
        }