Files
JJBB/Assets/Project/Script/Player/AI/Reputation.cs
2024-08-23 15:49:34 +08:00

228 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************************************
* 文件名: 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;
}
}
}