Files
JJBB/Assets/Project/Script/Obj/Obj_Characters/Obj_OtherPlayer.cs
2024-08-23 15:49:34 +08:00

1186 lines
45 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.

/********************************************************************************
* 文件名: Obj_OtherPlayer.cs
* 全路径: \Script\Obj\Obj_OtherPlayer.cs
* 创建人: 李嘉
* 创建时间2013-10-25
*
* 功能说明游戏其他玩家Obj逻辑类
* 修改记录:
*********************************************************************************/
using Games.ChatHistory;
using Games.Events;
using Games.GlobeDefine;
using Games.Scene;
using GCGame;
using GCGame.Table;
using Module.Log;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
namespace Games.LogicObj
{
public class Obj_Player_Init_Data : Obj_Character_Init_Data
{
public string ServerName; //跨服场景中头顶名字显示所在服务器
public string m_strTitleName; //称号名
public int m_CurTitleID; //称号ID
public int m_AdvanceMountId; // 坐骑ID
public int m_MountState; //双人坐骑
public ulong m_LinkID; //双人坐骑
public int m_MagicID; //法宝ID
public int m_nOtherVipCost; //vip info
public UInt64 m_GuildGuid; //帮会GUID
public int m_GuildJob; //帮会职位
public int m_nOtherCombatValue; //战力
public bool m_bIsWildEnemyForMainPlayer; //是否与主角敌对
public int m_nPaoShangState; //跑商状态
public int m_nLightSkillLevel; //轻功等级
public int _TeamLeader;
public int _CaptainWelfareLevel; //队长福利等级
public bool _IsInMeditate; //是否在打坐
public int m_hideMask; // 部件隐藏掩码
public bool m_IsShowWing;//是否显示翅膀
public ChildData.ChildInitData m_CurCarryChildData; //当前携带的孩子数据
public Obj_Player_Init_Data()
{
CleanUp();
}
public override void CleanUp()
{
base.CleanUp();
ServerName = string.Empty;
m_strTitleName = string.Empty;
m_CurTitleID = GlobeVar.INVALID_ID;
m_AdvanceMountId = -1;
m_MagicID = -1;
m_nOtherVipCost = -1;
m_GuildGuid = GlobeVar.INVALID_GUID;
m_GuildJob = (int)GameDefine_Globe.GUILD_JOB.INVALID;
m_nOtherCombatValue = 0;
m_bIsWildEnemyForMainPlayer = false;
m_nPaoShangState = -1;
m_nLightSkillLevel = -1;
_CaptainWelfareLevel = -1;
m_CurCarryChildData = new ChildData.ChildInitData();
//LinkId = 0;
//name = "";
//masterName = "";
//model = -1;
//weapon = -1;
}
}
public partial class Obj_OtherPlayer : Obj_Character
{
/// <summary>
/// Obj包含的身份部件类型
/// </summary>
public override int[] bodyParts
{
get { return new[] { ModelPart.body, ModelPart.weaponLeft, ModelPart.weaponRight, ModelPart.wing, ModelPart.mount }; }
}
public override UIPathData HeadUiPath
{
get
{
return Obj_PlayerHeadUI.pathData;
}
}
public Obj_OtherPlayer()
{
m_ObjType = GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER;
SetObjPoolLevel(ObjPoolLevel.otherPlayer);
}
// 暂时使用这个后期赋值的接口处理,似乎没有找到其他安全的位置
protected void SetObjPoolLevel(ObjPoolLevel objPoolLevel)
{
var models = GetPlayerModels();
for (var i = 0; i < models.Length; i++)
models[i].poolLevel = objPoolLevel;
}
protected ObjModelRecord[] GetPlayerModels()
{
return new []
{
ModelNode,
mountModel,
weaponLeft,
weaponRight,
wingObj,
effectAura,
weaponEffectLeft,
weaponEffectRight
};
}
public Obj_PlayerHeadUI m_headUIObj { get; private set; }
private int m_GuildJob = (int)GameDefine_Globe.GUILD_JOB.INVALID;
public virtual int GuildJob
{
get { return m_GuildJob; }
set { m_GuildJob = value; }
}
private UInt64 m_GuildGUID = GlobeVar.INVALID_GUID;
public virtual System.UInt64 GuildGUID
{
get { return m_GuildGUID; }
set { m_GuildGUID = value; }
}
private int m_fellowID;
public int FellowID
{
get { return m_fellowID; }
set { m_fellowID = value; }
}
public ChildData.ChildInitData m_CurCarryChildData;
protected string m_ServerName = "";
private string m_PaoShangTitle = "";
private bool m_bIsWildEnemyForMainPlayer = false;
public bool IsWildEnemyForMainPlayer
{
get { return m_bIsWildEnemyForMainPlayer; }
set { m_bIsWildEnemyForMainPlayer = value; }
}
public bool _IsTeamLeader = false;
public bool _IsInMeditate { get; set; }
public override bool Init(ObjParent_Init_Data initData1)
{
speedAdaption = true;
var result = base.Init(initData1);
if (result == false)
return false;
Obj_Player_Init_Data initData = initData1 as Obj_Player_Init_Data;
if (initData == null)
return false;
m_ServerName = initData.ServerName;
modelHideMask = initData.m_hideMask;
PkModle = initData.m_PkModel;
PkValue = initData.m_PkValue;
VipCost = initData.m_nOtherVipCost;
GuildGUID = initData.m_GuildGuid;
GuildJob = initData.m_GuildJob;
OtherCombatValue = initData.m_nOtherCombatValue;
IsWildEnemyForMainPlayer = initData.m_bIsWildEnemyForMainPlayer;
_IsTeamLeader = initData._TeamLeader > 0;
m_strTitleInvestitive = initData.m_strTitleName;
m_CurTitleID = initData.m_CurTitleID;
IsInMainPlayerPKList = initData.m_isInMainPlayerPKList;
AdcaneMountId = initData.m_AdvanceMountId;
DoubleRidingState = initData.m_MountState;
_LinkID = initData.m_LinkID;
IsShowWing = initData.m_IsShowWing;
#region childData
m_CurCarryChildData = new ChildData.ChildInitData()
{
childLevel = initData.m_CurCarryChildData.childLevel,
childName = initData.m_CurCarryChildData.childName,
childFashionId = initData.m_CurCarryChildData.childFashionId,
childGender = initData.m_CurCarryChildData.childGender,
childGuid = initData.m_CurCarryChildData.childGuid
};
#endregion
OrnamentFootPrintID = initData.m_OrnamentFootPrintId;
BaseAttr.HP = initData._InitCurHP;
BaseAttr.MaxHP = initData._InitMaxHP;
BaseAttr.CaptainWelfareLevel = initData._CaptainWelfareLevel;
m_ObjTransform.localRotation = Utils.DirServerToClient(initData.m_fDir);
m_nPaoShangState = initData.m_nPaoShangState;
_IsInMeditate = initData._IsInMeditate;
OptChangPKModle();
CreateNameBoard();
InitBindFromData(initData);
InitImpactInfo(initData);
CanLogic = true;
//初始化寻路代理
InitNavAgent();
CreateModel(ForceUseModel == null ? ModelID : ForceUseModel.modelData.Id);
CreateMagicModel(initData.m_MagicID);
CreateChildModel(new Child_Init_Data() {
childFashionId = initData.m_CurCarryChildData.childFashionId,
childName = initData.m_CurCarryChildData.childName,
childLevel = initData.m_CurCarryChildData.childLevel,
childGender = initData.m_CurCarryChildData.childGender,
childGuid = initData.m_CurCarryChildData.childGuid,
bindPlayerGuid = BaseAttr.Guid,
}, transform.position);
ObjManager.Instance.AddPoolObj(this);
Hashtable tab = new Hashtable();
tab["profession"] = initData.m_nProfession;
tab["type"] = Obj_Fellow.FellowDialogType.OtherPlayerCheck;
EventDispatcher.Instance.SendMessage(Games.Events.EventId.FellowDialogEvent, tab);
EventDispatcher.Instance.Dispatch(Events.EventId.FellowOwerEvent);
return true;
}
// 重载模型回调
protected override void CreateModelOver(Hashtable table)
{
base.CreateModelOver(table);
//if (m_nPaoShangState != -1)
// UpdatePaoShangStateEffect(m_nPaoShangState);
RealoadPlayerWeaponVisual();
if (ForceUseModel == null || ForceUseModel.useModel)
ReloadPlayerEffect();
RealoadWingModel();
if (SkillCore != null)
SkillCore.UserCacheSkill();
RideOrUnMount(AdcaneMountId);
ReloadOrnamentFootPrint(AdcaneMountId > 0);
if (_IsInMeditate)
EnterMeditateState(AdcaneMountId);
IsNeedBindWC();
}
public void IsNeedBindWC()
{
if (GameManager.gameManager.PlayerDataPool._WCBindObjDic.ContainsKey(GUID))
{
var info = GameManager.gameManager.PlayerDataPool._WCBindObjDic[GUID];
BindCloneModelToWC(info._BindParent, info._AnimationId, info._ScaleVal);
}
}
//创建孩子
protected virtual void CreateChildModel(Child_Init_Data _ChildData, Vector3 pos)
{
Child_Init_Data childData = new Child_Init_Data();
childData.childFashionId = _ChildData.childFashionId;
childData.childName = _ChildData.childName;
childData.childLevel = _ChildData.childLevel;
childData.childGender = _ChildData.childGender;
childData.childGuid = _ChildData.childGuid;
childData.bindPlayerGuid = GUID;
childData.m_fX = pos.x;
childData.m_fZ = pos.z;
childData.m_MoveSpeed = MoveSpeed;
childData.bindPlayerGuid = GUID;
childData.m_StrName = "Child";
var childObjParent = Singleton<ObjManager>.Instance.NewCharacterObj(GameDefine_Globe.OBJ_TYPE.OBJ_CHILD, childData);
if(m_CurCarryChild != null)
{
m_CurCarryChild.DestroyObj();
}
m_CurCarryChild = childObjParent.GetComponent<Obj_Child>();
}
public virtual void ReloadChildModel(Vector3 pos, ChildData.ChildInitData initData)
{
Child_Init_Data childData = new Child_Init_Data();
childData.childFashionId = initData.childFashionId;
childData.childName = initData.childName;
childData.childLevel = initData.childLevel;
childData.childGender = initData.childGender;
childData.childGuid = initData.childGuid;
childData.bindPlayerGuid = GUID;
childData.m_fX = pos.x;
childData.m_fZ = pos.z;
childData.m_MoveSpeed = MoveSpeed;
if (initData.childLevel == -1
|| initData.childGuid == -1)
{
if (m_CurCarryChild != null)
{
m_CurCarryChild.DestroyObj();
m_CurCarryChild = null;
}
return;
}
else
{
if (m_CurCarryChild != null)
{
m_CurCarryChild.ReloadChildModel(childData);
}
else
{
var childObjParent = Singleton<ObjManager>.Instance.NewCharacterObj(GameDefine_Globe.OBJ_TYPE.OBJ_CHILD, childData);
m_CurCarryChild = childObjParent.GetComponent<Obj_Child>();
}
}
}
protected override void Update()
{
//UpdateQingGong(); //由于轻功可能改变玩家坐标所以放在UpdateTargetMove之后进行
//UpdateLightSkill();
UpdateMagic();
base.Update();
}
public List<MyTuple<string, string>> GetAssetReference()
{
var result = new List<MyTuple<string, string>>();
GetAssetReference(result);
return result;
}
public void GetAssetReference(List<MyTuple<string, string>> list)
{
var models = GetPlayerModels();
for (var i = 0; i < models.Length; i++)
{
var model = models[i];
if (!string.IsNullOrEmpty(model.targetBundle) && !string.IsNullOrEmpty(model.targetModel))
{
var add = true;
for (var j = 0; j < list.Count; j++)
if (list[j].first == model.targetBundle && list[j].second == model.targetModel)
{
add = false;
break;
}
if (add)
list.Add(new MyTuple<string, string>(model.targetBundle, model.targetModel));
}
}
}
//改成了不管有没有跑商任务,都显示帮会名字
public void ChangePaoShangState(string title)
{
if (m_headUIObj != null)
{
m_headUIObj.UpdatePaoShangIcon(title);
}
m_PaoShangTitle = title;
}
public void UpdateTeamInfo(bool state)
{
if(m_headUIObj!=null)
m_headUIObj.UpdateCaptainIcon(state);
}
public override void InitNameBoard(Obj_HeadUI headUiItem)
{
base.InitNameBoard(headUiItem);
m_headUIObj = (Obj_PlayerHeadUI)headUiItem;
ShowTitleInvestitive();
UpdateVipInfo();
m_headUIObj.ShowOriginalHeadInfo(true);
m_headUIObj.UpdateCaptainIcon(true);
m_headUIObj.UpdateOtherPkModel(this);
m_headUIObj.UpdatePaoShangIcon(m_PaoShangTitle);
SetSpricelName();
}
public void SetSpricelName()
{
if (m_headUIObj == null)
return;
string name = BaseAttr.RoleName;
if (string.IsNullOrEmpty(m_ServerName) == false)
{
var fuben = TableManager.GetFubenByID(GlobalData.GetCurSceenFubenId(), 0);
if(fuben.IsShowCamp == 1)
{
if (BaseAttr.Force == 6)
name = StrDictionary.GetClientDictionaryString("#{5820}") + name;
if (BaseAttr.Force == 7)
name = StrDictionary.GetClientDictionaryString("#{5821}") + name;
if (BaseAttr.Force == 27)
name = StrDictionary.GetClientDictionaryString("#{5822}") + name;
}
if(fuben != null && fuben.CrossSrvType == 1)
{
name = m_ServerName + name;
}
m_headUIObj.ResetNameBoradPos(true);
}
else
{
m_headUIObj.ResetNameBoradPos(false);
}
m_headUIObj.SetName(name);
int Force = BaseAttr.Force;
if(ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
{
Force = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Force;
}
int WarForce = BaseAttr.WarForce;
if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
{
WarForce = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.WarForce;
}
Color nameColor = GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5554}"));
//暂时按照阵营来确定是不是在战场
if (WarForce != 0)
{
if (GameManager.gameManager.RunningScene == (int)GameDefine_Globe.SCENE_DEFINE.SCENE_GUANNING)
{
if (Force == 6)
{
m_headUIObj.SetName(StrDictionary.GetClientDictionaryString("#{9210}"));
}
else if (Force == 7)
{
m_headUIObj.SetName(StrDictionary.GetClientDictionaryString("#{9211}"));
}
}
if (Singleton<ObjManager>.Instance.MainPlayer!=null && (WarForce != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.WarForce || Force != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Force))
{
nameColor = GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5556}"));
//m_headUIObj.HideHp(true);
}
else
{
//m_headUIObj.HideHp(ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || GameManager.gameManager.PlayerDataPool.IsTeamMem(GUID));
}
m_headUIObj.SetNameColor(nameColor);
}
else
{
if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER
&& GameManager.gameManager.RunningScene == (int)GameDefine_Globe.SCENE_DEFINE.SCENE_GUILD
&& SceneData.sceneGuildGuid != GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid
&& m_GuildGUID != GlobeVar.INVALID_GUID
&& m_GuildGUID != GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid
&& Reputation.IsEnemy(this)==false)
{
m_headUIObj.SetNameColor(GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5556}")));
}
else
{
m_headUIObj.SetNameColor(GetNameBoardColor());
}
//m_headUIObj.HideHp(ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || GameManager.gameManager.PlayerDataPool.IsTeamMem(GUID));
}
m_headUIObj.HpSliderShowLogic();
m_headUIObj.HideChatBubble(false);
OptHPChange();
ChangeFellowNameColor();
}
//public virtual void UpdateCombatValue()
//{
// int nNeedEffect = -1;
// if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_5)
// {
// nNeedEffect = GlobeVar.COMBAT_EFFECT_5;
// }
// else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_4)
// {
// nNeedEffect = GlobeVar.COMBAT_EFFECT_4;
// }
// else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_3)
// {
// nNeedEffect = GlobeVar.COMBAT_EFFECT_3;
// }
// else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_2)
// {
// nNeedEffect = GlobeVar.COMBAT_EFFECT_2;
// }
// else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_1)
// {
// nNeedEffect = GlobeVar.COMBAT_EFFECT_1;
// }
//if (nNeedEffect > 0)
//{
// Tab_Effect EffectInfo = TableManager.GetEffectByID(nNeedEffect, 0);
// if (EffectInfo != null && IsHaveBindPoint(EffectInfo.ParentName) && GetEffectCountById(nNeedEffect) < 1)
// {
// StopEffect(GlobeVar.COMBAT_EFFECT_5);
// StopEffect(GlobeVar.COMBAT_EFFECT_4);
// StopEffect(GlobeVar.COMBAT_EFFECT_3);
// StopEffect(GlobeVar.COMBAT_EFFECT_2);
// StopEffect(GlobeVar.COMBAT_EFFECT_1);
// PlayEffect(nNeedEffect);
// }
//}
//else
//{
// StopEffect(GlobeVar.COMBAT_EFFECT_5);
// StopEffect(GlobeVar.COMBAT_EFFECT_4);
// StopEffect(GlobeVar.COMBAT_EFFECT_3);
// StopEffect(GlobeVar.COMBAT_EFFECT_2);
// StopEffect(GlobeVar.COMBAT_EFFECT_1);
//}
//}
public virtual void UpdateVipInfo()
{
if (null != m_headUIObj)
{
m_headUIObj.UpdateVipInfo(m_nVipCost);
}
}
private string m_strTitleInvestitive;
public string StrTitleInvestitive
{
get { return m_strTitleInvestitive; }
set { m_strTitleInvestitive = value; }
}
private int m_CurTitleID;
public int CurTitleID
{
get { return m_CurTitleID; }
set { m_CurTitleID = value; }
}
public void ShowTitleInvestitive()
{
if (null != m_headUIObj && m_ObjType != GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
{
m_headUIObj.ShowTitleInvestitiveByTable(m_CurTitleID, m_strTitleInvestitive);
}
}
//VIP
private int m_nVipCost = -1;
public virtual int VipCost
{
get { return m_nVipCost; }
set { m_nVipCost = value; UpdateVipInfo(); }
}
private int m_nOtherCombatValue = -1;
public virtual int OtherCombatValue
{
get { return m_nOtherCombatValue; }
set { m_nOtherCombatValue = value; }
}
//PK模式
private int m_nPkModle = -1;
public virtual int PkModle
{
get { return m_nPkModle; }
set { m_nPkModle = value; }
}
private int m_nPkValue = -1;
public virtual int PkValue
{
get { return m_nPkValue; }
set { m_nPkValue = value; }
}
//是否在主角的反击列表中
public bool IsInMainPlayerPKList { get; set; }
public Color GetOutLineColor()
{
if (Reputation.IsEnemy(this))
return Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5559}"));
int blueMin = 0;
int blueMax = 0;
int purpleMin = 1;
int purpleMax = 59;
int redMin = 60;
Tab_PKDetailInfo pkdata = TableManager.GetPKDetailInfoByID(1, 0);
if (pkdata != null)
{
blueMin = pkdata.BluePKValueMin;
blueMax = pkdata.BluePKValueMax;
purpleMin = pkdata.PurplePKValueMin;
purpleMax = pkdata.PurplePKValueMax;
redMin = pkdata.RedPKValueMin;
}
//新规则按PK值来定
string strColor = StrDictionary.GetClientDictionaryString("#{5557}");
if (BaseAttr.PKValue >= blueMin && BaseAttr.PKValue <= blueMax)
{
strColor = StrDictionary.GetClientDictionaryString("#{5557}");
}
if (BaseAttr.PKValue >= purpleMin && BaseAttr.PKValue <= purpleMax)
{
strColor = StrDictionary.GetClientDictionaryString("#{5558}");
}
if (BaseAttr.PKValue >= redMin)
{
strColor = StrDictionary.GetClientDictionaryString("#{5559}");
}
return GCGame.Utils.GetColorByString(strColor);
}
public Color GetColorByPK()
{
int blueMin = 0;
int blueMax = 0;
int purpleMin = 1;
int purpleMax = 59;
int redMin = 60;
Tab_PKDetailInfo pkdata = TableManager.GetPKDetailInfoByID(1, 0);
if (pkdata != null)
{
blueMin = pkdata.BluePKValueMin;
blueMax = pkdata.BluePKValueMax;
purpleMin = pkdata.PurplePKValueMin;
purpleMax = pkdata.PurplePKValueMax;
redMin = pkdata.RedPKValueMin;
}
//新规则按PK值来定
string strColor = StrDictionary.GetClientDictionaryString("#{5554}");
if (BaseAttr.PKValue >= blueMin && BaseAttr.PKValue <= blueMax)
{
strColor = StrDictionary.GetClientDictionaryString("#{5554}");
if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
strColor = StrDictionary.GetClientDictionaryString("#{5557}");
}
if (BaseAttr.PKValue >= purpleMin && BaseAttr.PKValue <= purpleMax)
{
strColor = StrDictionary.GetClientDictionaryString("#{5555}");
}
if (BaseAttr.PKValue >= redMin)
{
strColor = StrDictionary.GetClientDictionaryString("#{5556}");
}
return GCGame.Utils.GetColorByString(strColor);
}
public virtual Color GetNameBoardColor()
{
return Reputation.IsEnemy(this) ? Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5556}")) : GetColorByPK();
}
public virtual void OptChangPKModle()
{
if (null != m_headUIObj)
m_headUIObj.UpdateOtherPkModel(this);
ChangeFellowNameColor();
}
public void ChangeTeamLeaderFlag(int teamLeaderFlag)
{
_IsTeamLeader = teamLeaderFlag > 0;
if (m_headUIObj != null)
{
m_headUIObj.UpdateCaptainIcon(true);
}
}
public override void UpdateAttrBroadcastPackt(GC_BROADCAST_ATTR packet)
{
base.UpdateAttrBroadcastPackt(packet);
}
public void SetNameBoardColor()
{
if (m_headUIObj != null)
{
m_headUIObj.SetNameColor(GetNameBoardColor());
}
}
public override void OptNameChange()//名字变化后的操作
{
if (m_headUIObj != null)
SetSpricelName();
//m_headUIObj.SetName(BaseAttr.RoleName);
}
public override void OptHPChange() //血量变化后的操作
{
float rate = 1;
if (BaseAttr.MaxHP > 0)
{
rate = BaseAttr.HP / (float)BaseAttr.MaxHP;
}
if (m_headUIObj != null)
{
m_headUIObj.SetNewHp(rate);
}
}
private void ChangeFellowNameColor()
{
var ObjFellow = Singleton<ObjManager>.Instance.FindObjInScene(FellowID) as Obj_Fellow;
if (null != ObjFellow)
{
ObjFellow.ChangeNameColor(Reputation.IsEnemy(this));
}
}
public override void OptPKValueChange()
{
base.OptPKValueChange();
SetSpricelName();
}
public override void OptWarForceChange()
{
base.OptWarForceChange();
SetSpricelName();
if (Singleton<ObjManager>.Instance.MainPlayer != null)
Singleton<ObjManager>.Instance.MainPlayer.SetSpricelName();
}
public override void OptForceChange()
{
base.OptForceChange();
SetSpricelName();
if (Singleton<ObjManager>.Instance.MainPlayer != null)
Singleton<ObjManager>.Instance.MainPlayer.SetSpricelName();
}
public override bool OnCorpse()
{
ChangeCorpseCapsule();
return base.OnCorpse();
}
//Obj死亡时候调用
public override bool OnDie()
{
var result = base.OnDie();
if (result)
{
if (SceneLogic.CameraController != null && SceneLogic.CameraController.IsCurrFocus(this))
EventDispatcher.Instance.SendMessage(Events.EventId.MainCameraFocusValid);
ChangeCorpseCapsule();
}
return result;
}
/// <summary>
/// 胶囊像尸体一样横放
/// </summary>
private void ChangeCorpseCapsule()
{
// 特殊处理 - 非主角的其他玩家死亡后,胶囊碰撞体像尸体一样横放
if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
{
var capsulaCollider = GetComponent<CapsuleCollider>();
if (capsulaCollider == null)
LogModule.WarningLog(string.Format("角色{0}没有胶囊碰撞体", gameObject.name));
else
{
// 居然不是枚举
capsulaCollider.direction = 2;
capsulaCollider.center = Vector3.back * capsulaCollider.height * 0.5f;
}
}
}
public override bool OnRelife(bool isMotion = false)
{
base.OnRelife(isMotion);
return true;
}
// 放技能时换装需要等待
private bool m_UpdateModelWait = false;
private bool m_UpdateWeaponWait = false;
private bool m_UpdateWeaponGemWait = false;
private bool m_UpdateWingModelWait = false;
public void UpdateVisualAfterSkill()
{
if (m_UpdateModelWait)
{
ReloadPlayerModelVisual();
}
if (m_UpdateWeaponWait)
{
RealoadPlayerWeaponVisual();
}
if (m_UpdateWeaponGemWait)
{
ReloadPlayerEffect();
}
if (m_UpdateWingModelWait)
{
RealoadWingModel();
}
m_UpdateModelWait = false;
m_UpdateWeaponWait = false;
m_UpdateWeaponGemWait = false;
m_UpdateWingModelWait = false;
}
//玩家轻功部分处理
private bool m_bQingGongState = false;
public bool QingGongState
{
get { return m_bQingGongState; }
set { m_bQingGongState = value; }
}
private float m_DistanceValue = 0f;
private Vector3 m_QingGongSrc = Vector3.zero;
private Vector3 m_QingGongDst = Vector3.zero;
private int m_nQingGongType = GlobeVar.INVALID_ID;
private int m_nQingGongPointID = GlobeVar.INVALID_ID;
public int QingGongPointID
{
get { return m_nQingGongPointID; }
}
private float m_fQingGongMaxHeight = 0;
private float m_fQingGongTime = 0;
private float m_fQingGongBeginTime = 0;
//public virtual void BeginQingGong(GameEvent _event)
//{
// if (_event.EventID != GameDefine_Globe.EVENT_DEFINE.EVENT_QINGGONG)
// {
// return;
// }
//
// //得到目标点坐标
// Vector3 dstPos = new Vector3(_event.GetFloatParam(0), _event.GetFloatParam(1), _event.GetFloatParam(2));
// //dstPos.y = Terrain.activeTerrain.SampleHeight(dstPos);
//
// if (m_ObjTransform == null)
// {
// m_ObjTransform = transform;
// }
//
// m_bQingGongState = true;
// m_QingGongDst = dstPos;
// m_QingGongSrc = m_ObjTransform.position;
//
// //忽略阻挡前进
// if (null != NavAgent && NavAgent.enabled)
// {
// NavAgent.enabled = false;
// }
//
// m_fMoveSpeed = _event.GetFloatParam(3);
// m_nQingGongType = _event.GetIntParam(0);
// m_fQingGongMaxHeight = _event.GetFloatParam(4);
//
// m_nQingGongPointID = _event.GetIntParam(1);
//
// //记录朝向注意抛物线轨迹由UpdateQingGong进行位移操作不使用系统MoveTo
// FaceTo(m_QingGongDst);
//
// //根据不同类型模拟线路和调整玩家角度
// if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.PARABOLA)
// {
// //如果是抛物线移动
// CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_JUMP;
//
// //根据起始点和目标点计算本次轻功运动时间
// float fTreckDistance = Vector3.Distance(m_QingGongSrc, m_QingGongDst);
// if (m_fMoveSpeed > 0)
// {
// m_fQingGongTime = fTreckDistance / m_fMoveSpeed;
// }
//
// //本次允许最大浮动值
// m_DistanceValue = (fTreckDistance + Mathf.Abs(m_fQingGongMaxHeight)) * 1.5f;
//
// //记录轻功开始时间
// m_fQingGongBeginTime = Time.time;
// }
// else if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.TURN_LEFT)
// {
// //如果是线性移动
// CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_FASTRUN_LEFT;
// //直线移动使用底层MoveTo即可
// MoveAsMainPlayer(m_QingGongDst);
// }
// else if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.TURN_RIGHT)
// {
// //如果是线性移动
// CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_FASTRUN_RIGHT;
// //直线移动使用底层MoveTo即可
// MoveAsMainPlayer(m_QingGongDst);
// }
//
// //播放轻功特效
// if (null != ObjEffectLogic)
// {
// PlayEffect(GlobeVar.QINGGONG_EFFECT);
// }
//}
//
//public virtual void EndQingGong()
//{
// StopMove(MoveState.JumpDelay);
// m_bQingGongState = false;
//
// //恢复数据
// if (NavAgent)
// {
// NavAgent.enabled = true;
// }
//
// m_fMoveSpeed = BaseAttr.MoveSpeed;
//
// //重置参数
// m_fQingGongMaxHeight = 0;
// m_fQingGongTime = 0;
// m_fQingGongBeginTime = 0;
//
// m_DistanceValue = 0f;
// m_QingGongSrc = Vector3.zero;
// m_QingGongDst = Vector3.zero;
//}
//
//public virtual void UpdateQingGong()
//{
// if (false == m_bQingGongState)
// {
// return;
// }
//
// //计算从轻功开始到结束的流逝时间
// float fElapseTime = Time.time - m_fQingGongBeginTime;
//
// //到达目的地,轻功结束
// if (Vector3.Distance(m_ObjTransform.position, m_QingGongDst) < 0.4f
// || fElapseTime > m_fQingGongTime * 2) //添加时间限制。如果时间超出正常时间2倍后结束轻功
// {
// m_ObjTransform.position = m_QingGongDst;
// EndQingGong();
// return;
// }
//
// //如果是抛物线轨迹,根据最大高度进行抛物线轨迹更新
// if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.PARABOLA)
// {
// //更新运动轨迹
// Vector3 fMoveDirection = (m_QingGongDst - m_QingGongSrc).normalized;
//
// //当前点
// Vector3 curPos = m_QingGongSrc + fMoveDirection * m_fMoveSpeed * fElapseTime;
//
// if (m_fQingGongMaxHeight > 0 && m_fQingGongTime > 0)
// {
// //获得当前时间在轻功总行程中的路径比例
// float fRate = fElapseTime / m_fQingGongTime;
//
// float fHeightRefix = 0.0f;
// //抛物线分前半段和后半段,分别处于上升和下降
// if (fRate < 0.5f)
// {
// fHeightRefix = m_fQingGongMaxHeight * (fRate / 0.5f);
// }
// else
// {
// fHeightRefix = m_fQingGongMaxHeight * ((1 - fRate) / 0.5f);
// }
//
// //修正MainPlayer的高度
// //Vector3 pos = transform.position;
// curPos.y = curPos.y + fHeightRefix;
//
// //对位置进行验证。如果发现位置计算失败,直接到目的位置,结束本次轻功
// float difValue = Vector3.Distance(m_QingGongSrc, curPos);
// if (difValue > m_DistanceValue)
// {
// m_ObjTransform.position = m_QingGongDst;
// EndQingGong();
// return;
// }
//
// m_ObjTransform.position = curPos;
// }
// else
// {
// //数据出错
// m_ObjTransform.position = m_QingGongDst;
// EndQingGong();
// }
// }
//}
public override void ShowChatBubble(ChatHistoryItem history)
{
if (null != m_headUIObj)
{
m_headUIObj.ShowChatBubble(history);
}
}
public override void SetVisible(bool bVisible)
{
base.SetVisible(bVisible);
OnSwithObjAnimState(CurObjAnimState);
Obj_Character curFellow = Singleton<ObjManager>.Instance.FindObjInScene(m_fellowID) as Obj_Character;
if (null == curFellow)
{
return;
}
curFellow.SetVisible(bVisible);
}
//跑商
private int m_nPaoShangState = -1;
public int PaoShangState
{
get { return m_nPaoShangState; }
set { m_nPaoShangState = value; }
}
//public void UpdatePaoShangStateEffect(int nState)
//{
// //名字图标
// //if (m_headUIObj)
// //{
// // m_headUIObj.UpdatePaoShangIcon(nState);
// //}
// //特效
// switch (nState)
// {
// case (int)GC_BROADCASTPSSTATE.PSSTATE.REMOVE:
// StopEffect(238);
// StopEffect(239);
// break;
// case (int)GC_BROADCASTPSSTATE.PSSTATE.CANROB:
// StopEffect(239);
// PlayEffect(238);
// break;
// case (int)GC_BROADCASTPSSTATE.PSSTATE.NOTCANROB:
// StopEffect(238);
// PlayEffect(239);
// break;
// }
//}
// #region Jump功能
// private bool _jumpState;
// private float _jumpTimeStart = 1.0f;
// private float _jumpTime1;
// private float _jumpTime2;
// private float _jumpTime3;
// private string _jumpName1;
// private string _jumpName2;
// private string _jumpName3;
// private int _playingJumpAnim;
//
//protected void UpdateJumpState()
//{
// if (NavAgent != null && NavAgent.isActiveAndEnabled)
// {
// if (NavAgent.isOnOffMeshLink && !_jumpState)
// {
// if (!SkillAllowMove)
// return;
// if (AnimLogic.AnimationControl == null)
// return;
// //NavAgent.speed = NavAgent.currentOffMeshLinkData.offMeshLink.costOverride;
// _jumpState = true;
// _jumpTimeStart = Time.time;
// if (NavAgent.currentOffMeshLinkData.offMeshLink.costOverride <= 1)
// {
// var animTab =
// TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump01, 0);
// _jumpName1 = animTab.AnimName;
// animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump01_Loop,
// 0);
// _jumpName2 = animTab.AnimName;
// animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump01_End,
// 0);
// _jumpName3 = animTab.AnimName;
// }
// else if (NavAgent.currentOffMeshLinkData.offMeshLink.costOverride <= 2)
// {
// var animTab =
// TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump02, 0);
// _jumpName1 = animTab.AnimName;
// animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump02_Loop,
// 0);
// _jumpName2 = animTab.AnimName;
// animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump02_End,
// 0);
// _jumpName3 = animTab.AnimName;
// }
// var anims = AnimLogic.AnimationControl.runtimeAnimatorController.animationClips;
// foreach (var anim in anims)
// if (anim.name == _jumpName1)
// _jumpTime1 = anim.length;
// else if (anim.name == _jumpName2)
// _jumpTime2 = anim.length;
// else if (anim.name == _jumpName3)
// _jumpTime3 = anim.length;
// _playingJumpAnim = 0;
// CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_JUMP;
// NavAgent.transform.LookAt(new Vector3(NavAgent.currentOffMeshLinkData.endPos.x,
// NavAgent.transform.position.y, NavAgent.currentOffMeshLinkData.endPos.z));
// //AnimLogic.m_animator.Play(_JumpName1);
// }
// if (_jumpState)
// {
// var newPos = Vector3.zero;
// var deltaTime = Time.time - _jumpTimeStart;
// if (deltaTime < _jumpTime1)
// {
// newPos = NavAgent.currentOffMeshLinkData.startPos;
// //NavAgent.enabled = false;
// NavAgent.transform.position = newPos;
// NavAgent.transform.LookAt(new Vector3(NavAgent.currentOffMeshLinkData.endPos.x,
// NavAgent.transform.position.y, NavAgent.currentOffMeshLinkData.endPos.z));
// if (_playingJumpAnim != 1)
// {
// AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Jump01);
// _playingJumpAnim = 1;
// EnableMovingRotation(false);
// }
// }
// else if (deltaTime < _jumpTime1 + _jumpTime2)
// {
// var moveDelta = (deltaTime - _jumpTime1) / _jumpTime2;
// newPos = Vector3.Lerp(NavAgent.currentOffMeshLinkData.startPos,
// NavAgent.currentOffMeshLinkData.endPos, moveDelta);
// newPos.y += 2f * Mathf.Sin(Mathf.PI * moveDelta);
// NavAgent.transform.position = newPos;
//
// if (_playingJumpAnim != 2)
// {
// AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Jump01_Loop);
// _playingJumpAnim = 2;
// }
// NavAgent.transform.LookAt(new Vector3(NavAgent.currentOffMeshLinkData.endPos.x,
// NavAgent.transform.position.y, NavAgent.currentOffMeshLinkData.endPos.z));
// }
// else if (deltaTime < _jumpTime1 + _jumpTime2 + _jumpTime3)
// {
// newPos = NavAgent.currentOffMeshLinkData.endPos;
// NavAgent.transform.position = newPos;
// if (_playingJumpAnim != 3)
// {
// AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Jump01_End);
// _playingJumpAnim = 3;
// }
// }
// else
// {
// _playingJumpAnim = 0;
// NavAgent.CompleteOffMeshLink();
// NavAgent.Resume();
// CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_WALK;
// _jumpState = false;
// EnableMovingRotation(true);
// }
// }
// //else
// //{
// // if (_JumpState)
// // {
// // NavAgent.speed = BaseAttr.MoveSpeed;
// // _JumpState = false;
// // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_WALK;
// // }
// //}
// }
//}
//#endregion
}
}