public override bool Equals(object obj) { if (obj == null) { return(false); } _CAMP_DATA c = (_CAMP_DATA)obj; if ((object)c == null) { return(false); } return((m_nCampID == c.m_nCampID) && (m_nPKModeID == c.m_nPKModeID) && (m_uRelationFlags == c.m_uRelationFlags) && (m_uActiveFlags == c.m_uActiveFlags)); }
public int GetRelationOther(CObject_Character pCharObj) { if (pCharObj.GetCharacterType() != CHARACTER_TYPE.CT_PLAYEROTHER) { return(-1); } _CAMP_DATA playerCampData = GetCharacterData().Get_CampData(); // 目前只有和平全体组队模式 [8/19/2011 edit by ZL] switch (playerCampData.m_nPKModeID) { case (byte)PK_MODE.PK_MODE_PEACE: return(1); case (byte)PK_MODE.PK_MODE_GOODBAD: return(0); case (byte)PK_MODE.PK_MODE_PERSONAL: return(0); case (byte)PK_MODE.PK_MODE_GUILD: // return pCharObj->GetCharacterData()->Get_Guild() == // CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Guild() ? 0 : 1; return(0); case (byte)PK_MODE.PK_MODE_TEAM: //todo // CTeamOrGroup playerTeam = null; // playerTeam = CUIDataPool::GetMe()->GetTeamOrGroup(); // for ( int i = 0; i < playerTeam->GetTeamMemberCount(1); ++i ) { // if ( playerTeam->GetMemberByIndex(i, 1)->m_szNick && strcmp(playerTeam->GetMemberByIndex(i, 1)->m_szNick, // pCharObj->GetCharacterData()->Get_Name()) == 0 ) { // return 1; // } // } return(0); case (byte)PK_MODE.PK_MODE_FAMILY: return(0); default: return(1); } return(-1); }
public ENUM_RELATION GetCampType(CObject pObj_A, CObject pObj_B) { if (pObj_A == null || pObj_B == null) { return(ENUM_RELATION.RELATION_ENEMY); } if (pObj_A == pObj_B) { return(ENUM_RELATION.RELATION_FRIEND); } // int idOwner_A, idOwner_B, idA, idB; // idA = pObj_A.ServerID; // idB = pObj_B.ServerID; // idOwner_A = pObj_A.ownerid; // idOwner_B = pObj_B->GetOwnerID(); // if ( idOwner_A != INVALID_ID || idOwner_B != INVALID_ID ) // { // if ( idOwner_A == idOwner_B // || idOwner_A == idB // || idOwner_B == idA ) // { // return RELATION_FRIEND; // } // } //const _CAMP_DATA *pCamp_A, *pCamp_B; //BOOL bHuman_A, bHuman_B; //const CampAndStandDataMgr_T *pCampMgr; //pCamp_A = pObj_A->GetCampData(); //pCamp_B = pObj_B->GetCampData(); //bHuman_A = g_theKernel.IsKindOf( pObj_A->GetClass(), GETCLASS(CObject_PlayerMySelf)); //bHuman_B = g_theKernel.IsKindOf( pObj_B->GetClass(), GETCLASS(CObject_PlayerMySelf)); //pCampMgr = CGameProcedure::s_pCampDataMgr; _CAMP_DATA cap_a = pObj_A.GetCampData(); _CAMP_DATA cap_b = pObj_B.GetCampData(); return(CampStand.Instance.CalcRelationType(cap_a.m_nCampID, cap_b.m_nCampID)); }
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); }