228 lines
10 KiB
C#
228 lines
10 KiB
C#
/********************************************************************************
|
||
* 文件名: Reputation.cs
|
||
* 全路径: \Player\Reputation.cs
|
||
* 创建人: 李嘉
|
||
* 创建时间:2013-11-14
|
||
*
|
||
* 功能说明:Obj阵营势力相关接口
|
||
* 修改记录:将参数改为传入一个Obj_Character 客户端只要跟主角判断敌对友好关系
|
||
*********************************************************************************/
|
||
|
||
using Games.GlobeDefine;
|
||
using GCGame.Table;
|
||
|
||
namespace Games.LogicObj
|
||
{
|
||
public class Reputation
|
||
{
|
||
public static CharacterDefine.REPUTATION_TYPE GetObjReputionType(Obj_Character objChar)
|
||
{
|
||
var result = CharacterDefine.REPUTATION_TYPE.REPUTATION_INVALID;
|
||
if (objChar != null)
|
||
{
|
||
var mainPlayer = ObjManager.Instance.MainPlayer;
|
||
if (mainPlayer != null)
|
||
if (objChar.ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
|
||
{
|
||
result = CharacterDefine.REPUTATION_TYPE.REPUTATION_FRIEND;
|
||
}
|
||
else if (objChar.ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW)
|
||
{
|
||
var fellow = (Obj_Fellow) objChar;
|
||
if (fellow.OwnerObjId == mainPlayer.ServerID)
|
||
result = CharacterDefine.REPUTATION_TYPE.REPUTATION_FRIEND;
|
||
else
|
||
{
|
||
var owner = ObjManager.Instance.FindObjCharacterInScene(fellow.OwnerObjId);
|
||
// 已知问题,拥有者不在视野内时,会无法正常检查
|
||
result = owner != null && owner.ObjType != GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW ? GetObjReputionType(owner) : CharacterDefine.REPUTATION_TYPE.REPUTATION_DUMMY;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// 对其他玩家额外处理
|
||
if (objChar.ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
|
||
{
|
||
// 关宁只认临时队伍情况
|
||
switch (GameManager.gameManager.RunningScene)
|
||
{
|
||
case (int) GameDefine_Globe.SCENE_DEFINE.SCENE_GUANNING:
|
||
result = objChar.BaseAttr.Force == mainPlayer.BaseAttr.Force
|
||
? CharacterDefine.REPUTATION_TYPE.REPUTATION_FRIEND
|
||
: CharacterDefine.REPUTATION_TYPE.REPUTATION_HOSTILE;
|
||
break;
|
||
case (int) GameDefine_Globe.SCENE_DEFINE.SCENE_FACIONCHALLENGE:
|
||
result = CharacterDefine.REPUTATION_TYPE.REPUTATION_HOSTILE;
|
||
break;
|
||
default:
|
||
if (IsCanPk((Obj_OtherPlayer) objChar))
|
||
result = CharacterDefine.REPUTATION_TYPE.REPUTATION_HOSTILE;
|
||
break;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var npc = objChar as Obj_NPC;
|
||
if (npc != null && npc.OwerGUID == (long) mainPlayer.GUID)
|
||
result = CharacterDefine.REPUTATION_TYPE.REPUTATION_HOSTILE;
|
||
}
|
||
|
||
// 没有特殊规则时,下落到使用关系列表
|
||
if (result == CharacterDefine.REPUTATION_TYPE.REPUTATION_INVALID)
|
||
{
|
||
var reputation = TableManager.GetRelationByID(mainPlayer.BaseAttr.Force, 0);
|
||
if (reputation != null)
|
||
result =
|
||
(CharacterDefine.REPUTATION_TYPE) reputation.GetRelationbyIndex(objChar
|
||
.BaseAttr
|
||
.Force);
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
public static bool IsEnemy(Obj_Character character)
|
||
{
|
||
return IsReputation(character, CharacterDefine.REPUTATION_TYPE.REPUTATION_HOSTILE);
|
||
}
|
||
|
||
public static bool IsFriend(Obj_Character character)
|
||
{
|
||
return IsReputation(character, CharacterDefine.REPUTATION_TYPE.REPUTATION_FRIEND);
|
||
}
|
||
|
||
public static bool CanAttack(Obj_Character character)
|
||
{
|
||
var reputation = GetObjReputionType(character);
|
||
return CanAttack(reputation);
|
||
}
|
||
|
||
public static bool CanAttack(CharacterDefine.REPUTATION_TYPE reputation)
|
||
{
|
||
return reputation == CharacterDefine.REPUTATION_TYPE.REPUTATION_HOSTILE ||
|
||
reputation == CharacterDefine.REPUTATION_TYPE.REPUTATION_NEUTRAL;
|
||
}
|
||
|
||
public static bool IsReputation(Obj_Character character, CharacterDefine.REPUTATION_TYPE reputation)
|
||
{
|
||
return GetObjReputionType(character) == reputation;
|
||
}
|
||
|
||
//主角能否攻击玩家
|
||
public static bool IsCanPk(Obj_OtherPlayer objChar)
|
||
{
|
||
var result = false;
|
||
|
||
// 副本中和爱人关系不能攻击
|
||
if (objChar != null &&
|
||
GameManager.gameManager.PlayerDataPool.LoverGUID != objChar.GUID)
|
||
{
|
||
var mainPlayer = ObjManager.Instance.MainPlayer;
|
||
if (mainPlayer != null)
|
||
if (objChar.IsInMainPlayerPKList)
|
||
result = true;
|
||
else
|
||
{
|
||
var pkModel = (CharacterDefine.PKMODLE) mainPlayer.PkModle;
|
||
switch (pkModel)
|
||
{
|
||
case CharacterDefine.PKMODLE.Evil:
|
||
result = objChar.PkValue >= 60;
|
||
break;
|
||
case CharacterDefine.PKMODLE.Camp:
|
||
result = !GameManager.gameManager.PlayerDataPool.IsTeamMem(objChar.GUID) &&
|
||
!GameManager.gameManager.PlayerDataPool.IsGuildMember(objChar);
|
||
break;
|
||
case CharacterDefine.PKMODLE.KILL:
|
||
result = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
}
|
||
if (objChar != null && GameManager.gameManager.m_RunningScene == 658)
|
||
{
|
||
var mainPlayer = ObjManager.Instance.MainPlayer;
|
||
if (mainPlayer != null)
|
||
if (objChar.IsInMainPlayerPKList)
|
||
result = true;
|
||
else
|
||
{
|
||
var pkModel = (CharacterDefine.PKMODLE)mainPlayer.PkModle;
|
||
switch (pkModel)
|
||
{
|
||
case CharacterDefine.PKMODLE.Evil:
|
||
result = objChar.PkValue >= 60;
|
||
break;
|
||
case CharacterDefine.PKMODLE.Camp:
|
||
result = !GameManager.gameManager.PlayerDataPool.IsTeamMem(objChar.GUID) &&
|
||
!GameManager.gameManager.PlayerDataPool.IsGuildMember(objChar);
|
||
break;
|
||
case CharacterDefine.PKMODLE.KILL:
|
||
result = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
//玩家能否攻击主角
|
||
public static bool IsCanBeAttack(Obj_OtherPlayer objChar)
|
||
{
|
||
var result = false;
|
||
// 副本中和爱人关系不能攻击
|
||
if (objChar != null &&
|
||
GameManager.gameManager.PlayerDataPool.LoverGUID != objChar.GUID)
|
||
{
|
||
var mainPlayer = ObjManager.Instance.MainPlayer;
|
||
if (mainPlayer != null)
|
||
{
|
||
var pkModel = (CharacterDefine.PKMODLE) objChar.PkModle;
|
||
switch (pkModel)
|
||
{
|
||
case CharacterDefine.PKMODLE.Evil:
|
||
result = mainPlayer.PkValue >= 60;
|
||
break;
|
||
case CharacterDefine.PKMODLE.Camp:
|
||
result = !GameManager.gameManager.PlayerDataPool.IsTeamMem(objChar.GUID) &&
|
||
!GameManager.gameManager.PlayerDataPool.IsGuildMember(objChar);
|
||
break;
|
||
case CharacterDefine.PKMODLE.KILL:
|
||
result = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (objChar != null && GameManager.gameManager.m_RunningScene == 658)
|
||
{
|
||
var mainPlayer = ObjManager.Instance.MainPlayer;
|
||
if (mainPlayer != null)
|
||
if (objChar.IsInMainPlayerPKList)
|
||
result = true;
|
||
else
|
||
{
|
||
var pkModel = (CharacterDefine.PKMODLE)mainPlayer.PkModle;
|
||
switch (pkModel)
|
||
{
|
||
case CharacterDefine.PKMODLE.Evil:
|
||
result = objChar.PkValue >= 60;
|
||
break;
|
||
case CharacterDefine.PKMODLE.Camp:
|
||
result = !GameManager.gameManager.PlayerDataPool.IsTeamMem(objChar.GUID) &&
|
||
!GameManager.gameManager.PlayerDataPool.IsGuildMember(objChar);
|
||
break;
|
||
case CharacterDefine.PKMODLE.KILL:
|
||
result = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return result;
|
||
}
|
||
}
|
||
} |