using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using NetData;
///
/// 描述:言灵世界数据
/// 作者:
///
public class YLBattleUnit
{
public bool mIsHero = true;
public GameHeroVo mHeroVo = null;
public sm_hero mMonsterVo = null;
///
/// 当前使用的技能
///
private string _curUseSkill = "";
///
/// 队长技ID
///
///
public string SkillLeader()
{
if (mIsHero)
{
return this.mHeroVo.mo.skill_leader;
}
else
{
return this.mMonsterVo.skill_leader;
}
}
///
/// 必杀ID
///
///
public string GetSkillBisha()
{
if (mIsHero)
{
return this.mHeroVo.mo.skill_bisha;
}
else
{
return this.mMonsterVo.skill_bisha;
}
}
///
/// 被动ID
///
///
public string GetSKillBeidong()
{
if (mIsHero)
{
return this.mHeroVo.mo.skill_beidong;
}
else
{
return this.mMonsterVo.skill_beidong;
}
}
///
/// 普攻ID
///
/// 技能索引
/// 子技能索引(连招)
///
public string GetSKillNormal(int skillIndex = 1, int subSkillIndex = 1)
{
int tempSkillIndex = skillIndex - 1;
int tempSubSkillIndex = subSkillIndex - 1;
if (mIsHero)
{
if (tempSkillIndex >= 0 && tempSkillIndex < this.mHeroVo.mo.GetNormalSkills().Count)
{
string tempSkill = this.mHeroVo.mo.GetNormalSkills()[tempSkillIndex];
if (tempSubSkillIndex >= 1)
{
sm_skill skill = sm_skill.GetMoByID(int.Parse(tempSkill));
List subSkills = skill.GetNextSkills();
if (tempSubSkillIndex - 1 < subSkills.Count)
{
return subSkills[tempSubSkillIndex - 1];
}
}
else
{
return tempSkill;
}
}
}
else
{
if (tempSkillIndex >= 0 && tempSkillIndex < mMonsterVo.GetNormalSkills().Count)
{
string tempSkill = mMonsterVo.GetNormalSkills()[tempSkillIndex];
if (tempSubSkillIndex >= 1)
{
sm_skill skill = sm_skill.GetMoByID(int.Parse(tempSkill));
List subSkills = skill.GetNextSkills();
if (tempSubSkillIndex - 1 < subSkills.Count)
{
return subSkills[tempSubSkillIndex - 1];
}
}
else
{
return tempSkill;
}
}
}
return "";
}
///
/// 极限闪避ID
///
///
public string GetSKillJixianshabi()
{
if (mIsHero)
{
return this.mHeroVo.mo.skill_jixianshanbi;
}
else
{
return this.mMonsterVo.skill_jixianshanbi;
}
}
///
/// 获取当前使用的技能
///
///
public string GetCurUseSkill()
{
if (_curUseSkill == "")
{
_curUseSkill = GetSKillNormal();
}
return _curUseSkill;
}
///
/// 设置当前使用的技能
///
///
public void SetCurUseSkill(string skillID)
{
_curUseSkill = skillID;
}
///
/// 唯一ID
///
public int UID { get { return _UID; } }
private int _UID = 0;
private static int StaticUID = 100000;
///
/// 模板ID
///
public int TID { get { return _TID; } }
private int _TID = 0;
///
/// 怪物模版ID 去除等级后
///
public int MTID { get { return _MTID; } }
private int _MTID;
///
/// 等级
///
public int LV { get { return _LV; } }
private int _LV = 0;
///
/// 血量
///
public int HP { get { return _HP; } }
private int _HP = 0;
public int HP_Final { get { return _HP_Final; } set { _HP_Final = value; } }
private int _HP_Final = 0;
///
/// 最大血量
///
public int MaxHP { get { return _MaxHP; } }
private int _MaxHP = 0;
public int MaxHP_Final { get { return _MaxHP_Final; } set { _MaxHP_Final = value; } }
private int _MaxHP_Final = 0;
///
/// 魔法值
///
public int MP { get { return _MP; } }
private int _MP = 0;
public int MP_Final { get { return _MP_Final; } set { _MP_Final = value; } }
private int _MP_Final = 0;
///
/// 最大魔法值
///
public int MaxMP { get { return _MaxMP; } }
private int _MaxMP = 0;
public int MaxMP_Final { get { return _MaxMP_Final; } set { _MaxMP_Final = value; } }
private int _MaxMP_Final = 0;
///
/// 物攻
///
public int ATK { get { return _ATK; } }
private int _ATK = 0;
public int ATK_Final { get { return _ATK_Final; } set { _ATK_Final = value; } }
private int _ATK_Final = 0;
///
/// 护甲(物防)
///
public int DEF { get { return _DEF; } }
private int _DEF = 0;
public int DEF_Final { get { return _DEF_Final; } set { _DEF_Final = value; } }
private int _DEF_Final = 0;
///
/// 魔攻
///
public int ADM { get { return _ADM; } }
private int _ADM = 0;
public int ADM_Final { get { return _ADM_Final; } set { _ADM_Final = value; } }
private int _ADM_Final = 0;
///
/// 魔防
///
public int MDF { get { return _MDF; } }
private int _MDF = 0;
public int MDF_Final { get { return _MDF_Final; } set { _MDF_Final = value; } }
private int _MDF_Final = 0;
///
/// 言力
///
public int YAN { get { return _YAN; } }
private int _YAN = 0;
public int YAN_Final { get { return _YAN_Final; } set { _YAN_Final = value; } }
private int _YAN_Final = 0;
///
/// 暴击率
///
public float CRT { get { return _CRT; } }
private float _CRT = 0;
public float CRT_Final { get { return _CRT_Final; } set { _CRT_Final = value; } }
private float _CRT_Final = 0;
///
/// 暴击伤害
///
public float CRD { get { return _CRD; } }
private float _CRD = 0;
public float CRD_Final { get { return _CRD_Final; } set { _CRD_Final = value; } }
private float _CRD_Final = 0;
///
/// 抗暴力
///
public float KBL { get { return _KBL; } }
private float _KBL = 0;
public float KBL_Final { get { return _KBL_Final; } set { _KBL_Final = value; } }
private float _KBL_Final = 0;
///
/// 攻击速度
///
public float ASP { get { return _ASP; } }
private float _ASP = 0;
public float ASP_Final { get { return _ASP_Final; } set { _ASP_Final = value; } }
private float _ASP_Final = 0;
///
/// 移动速度
///
public float MSP { get { return _MSP; } }
private float _MSP = 0;
public float MSP_Final { get { return _MSP_Final; } set { _MSP_Final = value; } }
private float _MSP_Final = 0;
///
/// CD 控制因子
///
public float CLT { get { return _CLT; } }
private float _CLT = 0;
public float CLT_Final { get { return _CLT_Final; } set { _CLT_Final = value; } }
private float _CLT_Final = 0;
///
/// 攻击范围
///
public float ARG { get { return _ARG; } }
private float _ARG = 0;
public float ARG_Final { get { return _ARG_Final; } set { _ARG_Final = value; } }
private float _ARG_Final = 0;
///
/// 观察范围
///
public float ORG { get { return _ORG; } }
private float _ORG = 0;
public float ORG_Final { get { return _ORG_Final; } set { _ORG_Final = value; } }
private float _ORG_Final = 0;
///
/// 晕眩
///
private int _BUFF_STU = 0;
public int BUFF_STU { get { return _BUFF_STU; } set { _BUFF_STU = value; } }
///
/// 静止
///
private int _BUFF_STA = 0;
public int BUFF_STA { get { return _BUFF_STA; } set { _BUFF_STA = value; } }
///
/// 护盾
///
private int _BUFF_SHI = 0;
public int BUFF_SHI { get { return _BUFF_SHI; } set { _BUFF_SHI = value; } }
///
/// 沉默
///
private int _BUFF_SIL = 0;
public int BUFF_SIL { get { return _BUFF_SIL; } set { _BUFF_SIL = value; } }
///
/// 灼烧burn
///
private int _BUFF_BUR = 0;
public int BUFF_BUR { get { return _BUFF_BUR; } set { _BUFF_BUR = value; } }
///
/// 寒冰Ice
/// CE
private int _BUFF_ICE = 0;
public int BUFF_ICE { get { return _BUFF_ICE; } set { _BUFF_ICE = value; } }
///
/// 黑暗dim
///
private int _BUFF_DIM = 0;
public int BUFF_DIM { get { return _BUFF_DIM; } set { _BUFF_DIM = value; } }
///
/// 霸体 SuperArmor 不被一切攻击打断 (不受眩晕 沉默 冰封 等效果限制)
///
private float _SAR = 0;
public float SAR { get { return _SAR; } }
private float _SAR_Final = 0;
public float SAR_Final { get { return _SAR_Final; } set { _SAR_Final = value; } }
///
/// 构造
///
/// 数据
/// VO
public YLBattleUnit(sm_hero monster, GameHeroVo hero = null)
{
// 普通单位
if (hero == null)
{
mIsHero = false;
mMonsterVo = monster;
_UID = StaticUID++;
_TID = monster.heroId;
_MTID = _TID / 100;
_LV = 1;
_HP = monster.hp;
_MaxHP = monster.hp;
_MP = 0;
_MaxMP = monster.nengliangzhi;
_ATK = monster.wuligongji;
_DEF = monster.fangyuhujia;
_ADM = monster.fashuqiangdu;
_MDF = monster.mofakangxing;
_CRT = monster.baoji;
_ASP = monster.atkSpeed;
_MSP = monster.moveSpeed;
_ARG = monster.atkRange;
_ORG = monster.alarmRange;
_YAN = monster.yanli;
_KBL = monster.kangbaoji;
}
// 英雄单位
else
{
mIsHero = true;
mHeroVo = hero;
_UID = int.Parse(hero.uid);
_TID = int.Parse(hero.typeId);
_MTID = _TID;
_LV = hero.level;
if (MapTcpProxy.Instance.Peer.Player.heroDict.ContainsKey(_UID))
{
_HP = MapTcpProxy.Instance.Peer.Player.heroDict[_UID].hp;
_MP = MapTcpProxy.Instance.Peer.Player.heroDict[_UID].mp;
}
else
{
_HP = (int)hero.getHpForBattle();
_MP = 0;
}
_MaxHP = (int)hero.getHpForBattle();
_MaxMP = (int)hero.getNengLiangZhiJiForBattle();
_ATK = (int)hero.getWuLiGongJiForBattle();
_DEF = (int)hero.getFangYuHuJiaForBattle();
_ADM = (int)hero.getFaShuQiangDuForBattle();
_MDF = (int)hero.getMoFaKangXingForBattle();
_CRT = (int)hero.getCriticalForBattle();
_YAN = (int)hero.getYanliForBattle();
_KBL = (int)hero.getKangbaojiForBattle();
_ASP = hero.mo.atkSpeed;
_MSP = hero.mo.moveSpeed;
_ARG = hero.mo.atkRange;
_ORG = hero.mo.alarmRange;
}
_HP_Final = _HP;
_MaxHP_Final = _MaxHP;
_MP_Final = _MP;
_MaxMP_Final = _MaxMP;
_MSP_Final = _MSP;
_ATK_Final = _ATK;
_DEF_Final = _DEF;
_ADM_Final = _ADM;
_MDF_Final = _MDF;
_CRT_Final = _CRT;
_ASP_Final = _ASP;
_MSP_Final = _MSP;
_ARG_Final = _ARG;
_ORG_Final = _ORG;
_YAN_Final = _YAN;
_KBL_Final = _KBL;
}
///
/// 刷新数据 去除 当前 HP 当前 MP
///
/// 怪物数据
public void RefreshDataUnit(sm_hero monster, GameHeroVo hero = null)
{
// 普通单位
if (hero == null)
{
mIsHero = false;
mMonsterVo = monster;
//_UID = StaticUID++;
_TID = monster.heroId;
_MTID = _TID / 100;
_LV = 1;
// _HP = monster.hp;
//_MaxHP = monster.hp;
//_MP = 0;
//_MaxMP = monster.nengliangzhi;
_ATK = monster.wuligongji;
_DEF = monster.fangyuhujia;
_ADM = monster.fashuqiangdu;
_MDF = monster.mofakangxing;
_CRT = monster.baoji;
_ASP = monster.atkSpeed;
_MSP = monster.moveSpeed;
_ARG = monster.atkRange;
_ORG = monster.alarmRange;
_YAN = monster.yanli;
_KBL = monster.kangbaoji;
}
else
{
mIsHero = true;
mHeroVo = hero;
_UID = int.Parse(hero.uid);
_TID = int.Parse(hero.typeId);
_MTID = _TID;
_LV = hero.level;
//_HP = (int)hero.getHpForBattle();
//_MaxHP = (int)hero.getHpForBattle();
//_MP = 0;
//_MaxMP = (int)hero.getNengLiangZhiJiForBattle();
_ATK = (int)hero.getWuLiGongJiForBattle();
_DEF = (int)hero.getFangYuHuJiaForBattle();
_ADM = (int)hero.getFaShuQiangDuForBattle();
_MDF = (int)hero.getMoFaKangXingForBattle();
_CRT = (int)hero.getCriticalForBattle();
_ASP = hero.mo.atkSpeed;
_MSP = hero.mo.moveSpeed;
_ARG = hero.mo.atkRange;
_ORG = hero.mo.alarmRange;
_YAN = hero.getYanliForBattle();
_KBL = hero.getKangbaojiForBattle();
}
//_HP_Final = _HP;
//_MaxHP_Final = _MaxHP;
//_MP_Final = _MP;
//_MaxMP_Final = _MaxMP;
_MSP_Final = _MSP;
_ATK_Final = _ATK;
_DEF_Final = _DEF;
_ADM_Final = _ADM;
_MDF_Final = _MDF;
_CRT_Final = _CRT;
_ASP_Final = _ASP;
_MSP_Final = _MSP;
_ARG_Final = _ARG;
_ORG_Final = _ORG;
_YAN_Final = _YAN;
_KBL_Final = _KBL;
}
///
/// 更新血量
///
///
public void UpdateHP(int val, bool updateUI = false)
{
if (val != 0)
{
_HP_Final += val;
if (_HP_Final > _MaxHP_Final)
{
_HP_Final = _MaxHP_Final;
}
if (_HP_Final < 0)
{
_HP_Final = 0;
}
if (mIsHero)
{
MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
}
}
if (updateUI)
{
BattleCanvas.Instance.ShowPlayerHP(_HP_Final, _MaxHP_Final);
}
}
///
/// 重置血量
///
///
public void ResetHpMp()
{
_HP_Final = _MaxHP_Final;
_MP_Final = _MaxMP_Final;
if (mIsHero && BattleCanvas.Instance != null)
{
MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
BattleCanvas.Instance.ShowPlayerHP(_HP_Final, _MaxHP_Final);
BattleCanvas.Instance.ShowPlayerPower(_MP_Final, _MaxMP_Final);
}
}
///
/// 世界BOSS更新血量
///
///
public void SetBossHP(int val, bool updateUI = false)
{
_HP_Final = val;
if (_HP_Final > _MaxHP_Final)
{
_HP_Final = _MaxHP_Final;
}
if (_HP_Final < 0)
{
_HP_Final = 0;
}
if (updateUI)
{
BattleCanvas.Instance.ShowPlayerHP(_HP_Final, _MaxHP_Final);
}
}
///
/// 更新蓝
///
///
public void UpdateMP(int val, bool updateUI = false)
{
if (val != 0)
{
_MP_Final += val;
if (_MP_Final > _MaxMP_Final)
{
_MP_Final = _MaxMP_Final;
}
if (_MP_Final < 0)
{
_MP_Final = 0;
}
if (mIsHero)
{
MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
}
}
if (updateUI)
{
BattleCanvas.Instance.ShowPlayerPower(_MP_Final, _MaxMP_Final);
}
}
///
/// 更新蓝
///
///
public void SetMP(int val, bool updateUI = false)
{
MP_Final = val;
if (MP_Final > MaxMP_Final)
{
MP_Final = MaxMP_Final;
}
if (mIsHero)
{
MapTcpProxy.Instance.Peer.ReportDataChange((Info_Map_Player_Hero)this);
}
if (updateUI)
{
BattleCanvas.Instance.ShowPlayerPower(_MP_Final, _MaxMP_Final);
}
}
}