123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672 |
- using CommonAI.Data;
- using CommonAI.Zone.Formula;
- using CommonAI.Zone.Helper;
- using CommonAI.ZoneClient;
- using CommonAI.ZoneServer.JSGModule;
- using CommonLang.Property;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Text;
- namespace CommonAI.Zone.Instance
- {
- partial class InstanceUnit
- {
- //-----------------------------------------------------------------------------------------------------------
- #region _sync_fields_
- protected readonly SyncUnitInfo mSyncInfo;
- private UnitFieldChangedEvent mSyncFields;
- private int m_dummy_0, m_dummy_1, m_dummy_2, m_dummy_3, m_dummy_4, m_dummy_5;
- //是否触发过破碎效果
- private bool isTriggerBroken = false;
- public void SetMaxHP(int value, bool auto_update_hp = false)
- {
- if (__mCurrentHP.SetMax(value, auto_update_hp))
- {
- syncFields(UnitFieldChangedEvent.MASK_HP | UnitFieldChangedEvent.MASK_MAX_HP);
- }
- }
- [DescAttribute("最大血量")]
- public int MaxHP
- {
- get { return __mCurrentHP.Max; }
- set
- {
- if (__mCurrentHP.SetMax(value, true))
- {
- syncFields(UnitFieldChangedEvent.MASK_HP | UnitFieldChangedEvent.MASK_MAX_HP);
- }
- }
- }
- [DescAttribute("最大能量")]
- public int MaxMP
- {
- get { return __mCurrentMP.Max; }
- set
- {
- if (__mCurrentMP.SetMax(value, true))
- {
- syncFields(UnitFieldChangedEvent.MASK_MP | UnitFieldChangedEvent.MASK_MAX_MP);
- }
- }
- }
- [DescAttribute("当前血量")]
- public int CurrentHP
- {
- get { return __mCurrentHP.Value; }
- set
- {
- if (!IsDead() && __mCurrentHP.SetValue(value))
- {
- syncFields(UnitFieldChangedEvent.MASK_HP);
- }
- }
- }
- [DescAttribute("当前能量")]
- public int CurrentMP
- {
- get { return __mCurrentMP.Value; }
- set
- {
- if (!IsDead() && __mCurrentMP.SetValue(value))
- {
- syncFields(UnitFieldChangedEvent.MASK_MP);
- }
- }
- }
- [DescAttribute("当前血量百分比")]
- public float CurrentHP_Pct { get { return __mCurrentHP.Value * 100f / __mCurrentHP.Max; } }
- [DescAttribute("当前能量百分比")]
- public float CurrentMP_Pct { get { return __mCurrentMP.Value * 100f / __mCurrentMP.Max; } }
- [DescAttribute("当前金币")]
- public int CurrentMoney
- {
- get { return mMoney; }
- set
- {
- if (mMoney != value)
- {
- int add = value - mMoney;
- mMoney = value;
- syncFields(UnitFieldChangedEvent.MASK_MONEY);
- Parent.cb_unitGotMoneyCallBack(this, add);
- }
- }
- }
- [DescAttribute("当前等级")]
- public int Level
- {
- get { return mLevel; }
- set
- {
- if (mLevel != value)
- {
- mLevel = value;
- syncFields(UnitFieldChangedEvent.MASK_LEVEL);
- }
- }
- }
- [DescAttribute("单位职业")]
- public int UnitPro()
- {
- return (int)this.Virtual.GetUnitPro();
- }
- [DescAttribute("性别0-男1-女")]
- public int UnitSex()
- {
- return (int)this.Virtual.GetUnitSex();
- }
- [DescAttribute("玩家职业")]
- public int PlayerPro()
- {
- if (this.IsPlayer)
- {
- return (int)this.Virtual.GetUnitPro();
- }
- return 0;
- }
- private void DoAddHP(int hp)
- {
- if (!IsDead())
- {
- if (__mCurrentHP.Add(hp))
- {
- syncFields(UnitFieldChangedEvent.MASK_HP);
- // 触发破碎效果
- if (this.Info.HitBreakPrecent > 0 && !this.isTriggerBroken)
- {
- int precent = (int)((double)this.CurrentHP / this.MaxHP * 100);
- if (precent <= this.Info.HitBreakPrecent)
- {
- //Console.WriteLine("触发破碎");
- this.isTriggerBroken = true;
- UnitHitBreak hitBreak = new UnitHitBreak(this.ID);
- this.Parent.queueObjectEvent(this, hitBreak);
- }
- }
- }
- }
- }
- private void DoAddMP(int mp, bool force = false)
- {
- if (IsDead() || (mp < 0 && !this.Virtual.IsCanReduceMP(force)))
- {
- return;
- }
- if (__mCurrentMP.Add(mp))
- {
- syncFields(UnitFieldChangedEvent.MASK_MP);
- //进入破定状态
- if (__mCurrentMP.Value == 0 && this.CurrentActionStatus != UnitActionStatus.BreakShield)
- {
- this.changeState(new StateBreakShield(this), true);
- }
- //System.Console.WriteLine("更新定力值:" + this.Info.Name + ", " + __mCurrentMP.Value);
- }
- }
- public void AddSP(int st)
- {
- // if (!IsDead)
- // {
- // if (__mCurrentSP.Add(st))
- // {
- // syncFields(UnitFieldChangedEvent.MASK_SP);
- // }
- // }
- }
- public int AddHP(int hp, InstanceUnit sender, bool sendHit = true, AttackSource source = null)
- {
- int finalHP = ReduceHP(-hp, sender, source, sendHit);
- //排除怪物回血
- JSGHackerModule.PrintDmgInfo(this, sender, source, hp, finalHP);
- return finalHP;
- }
- public void AddHP_Pct(float percent, InstanceUnit sender)
- {
- AddHP((int)(percent / 100f * MaxHP), sender);
- }
- /// <summary>
- /// 直接设置移动速度
- /// </summary>
- /// <param name="speed"></param>
- public void SetMoveSpeed(float speed)
- {
- if (speed < 0)
- {
- speed = 0;
- }
- if (speed != __mCurrentMoveSpeedSEC)
- {
- __mCurrentMoveSpeedSEC = speed;
- syncFields(UnitFieldChangedEvent.MASK_SPEED);
- }
- }
- /// <summary>
- /// 直接设置攻速
- /// </summary>
- /// <param name="speed"></param>
- public void SetAttackSpeed(int speed)
- {
- if (speed <= 0)
- {
- speed = GlobalData.DEFAULT_ATTACK_SPEED;
- }
- if (speed != __mCurrentAttackSpeed)
- {
- __mCurrentAttackSpeed = speed;
- }
- }
- public int GetAttackSpeed()
- {
- return this.__mCurrentAttackSpeed;
- }
- /// <summary>
- /// 直接设置当前技能cd减少
- /// </summary>
- /// <param name="value"></param>
- public void SetSkillCdReduce(float value)
- {
- if (value < 0)
- {
- value = 0;
- }
- if (value != __mCurrentSkillCdReduce)
- {
- __mCurrentSkillCdReduce = value;
- syncFields(UnitFieldChangedEvent.MASK_SKILL_CD_ACC);
- }
- }
- /// <summary>
- /// 直接设置受到控制效果的持续时间减少
- /// </summary>
- /// <param name="value"></param>
- public void SetControledTimeReduce(float value)
- {
- if (value < 0)
- {
- value = 0;
- }
- if (value != __mCurrentControledTimeReduce)
- {
- __mCurrentControledTimeReduce = value;
- syncFields(UnitFieldChangedEvent.MASK_CONTROLED_ACC);
- }
- }
- public void SetControledTimeAdd(float value)
- {
- if (value < 0)
- {
- value = 0;
- }
- if (value != __mControledTimeAdd)
- {
- __mControledTimeAdd = value;
- syncFields(UnitFieldChangedEvent.MASK_CONTROLED_ACC);
- }
- }
- /// <summary>
- /// 设置所有技能动作速度加成
- /// </summary>
- /// <param name="rate"></param>
- public void SetSkillActionSpeedRate(float rate)
- {
- if (rate < 0)
- {
- rate = 0;
- }
- if (rate != __mSkillActionSpeedRate)
- {
- __mSkillActionSpeedRate = rate;
- }
- }
- /** 是否满血 */
- public bool IsFullHP()
- {
- return this.CurrentHP == this.MaxHP;
- }
- /// <summary>
- /// 设置当前快速施法速度(基准0)(1是1倍速)
- /// </summary>
- /// <param name="fcr"></param>
- public void SetFastCastRate(float fcr)
- {
- if (mFastCastRate != fcr)
- {
- mFastCastRate = fcr;
- syncFields(UnitFieldChangedEvent.MASK_FCR);
- }
- }
- public int Dummy_0
- {
- get { return m_dummy_0; }
- set
- {
- if (m_dummy_0 != value)
- {
- m_dummy_0 = value;
- syncFields(UnitFieldChangedEvent.MASK_DUMMY_0);
- }
- }
- }
- public int Dummy_1
- {
- get { return m_dummy_1; }
- set
- {
- if (m_dummy_1 != value)
- {
- m_dummy_1 = value;
- syncFields(UnitFieldChangedEvent.MASK_DUMMY_1);
- }
- }
- }
- public int Dummy_2
- {
- get { return m_dummy_2; }
- set
- {
- if (m_dummy_2 != value)
- {
- m_dummy_2 = value;
- syncFields(UnitFieldChangedEvent.MASK_DUMMY_2);
- }
- }
- }
- public int Dummy_3
- {
- get { return m_dummy_3; }
- set
- {
- if (m_dummy_3 != value)
- {
- m_dummy_3 = value;
- syncFields(UnitFieldChangedEvent.MASK_DUMMY_3);
- }
- }
- }
- public int Dummy_4
- {
- get { return m_dummy_4; }
- set
- {
- if (m_dummy_4 != value)
- {
- m_dummy_4 = value;
- syncFields(UnitFieldChangedEvent.MASK_DUMMY_4);
- }
- }
- }
- public int Dummy_5
- {
- get { return m_dummy_5; }
- set
- {
- if (m_dummy_5 != value)
- {
- m_dummy_5 = value;
- syncFields(UnitFieldChangedEvent.MASK_DUMMY_5);
- }
- }
- }
- public void syncFields(uint mask)
- {
- if (mSyncFields == null)
- {
- mSyncFields = new UnitFieldChangedEvent();
- }
- mSyncFields.mask |= mask;
- }
- private void updateSyncFields()
- {
- if (mSyncFields != null)
- {
- GenSyncFields(mSyncFields);
- queueEvent(mSyncFields);
- mSyncFields = null;
- }
- }
- public void GenSyncFields(UnitFieldChangedEvent sync)
- {
- sync.currentHP = __mCurrentHP.Value;
- sync.currentMP = __mCurrentMP.Value;
- sync.maxHP = __mCurrentHP.Max;
- sync.maxMP = __mCurrentMP.Max;
- sync.maxSP = 0;
- sync.currentSP = 0;
- sync.currentSpeed = __mCurrentMoveSpeedSEC;
- sync.currentFCR = mFastCastRate;
- sync.currentMoney = mMoney;
- sync.level = mLevel;
- sync.dummy_0 = m_dummy_0;
- sync.dummy_1 = m_dummy_1;
- sync.dummy_2 = m_dummy_2;
- sync.dummy_3 = m_dummy_3;
- sync.dummy_4 = m_dummy_4;
- sync.dummy_5 = m_dummy_5;
- }
- public override SyncObjectInfo GenSyncInfo(bool net)
- {
- return GenSyncUnitInfo(net);
- }
- public SyncUnitInfo GenSyncUnitInfo(bool net = false)
- {
- mSyncInfo.status = (byte)CurrentActionStatus;
- mSyncInfo.sub_status = (byte)CurrentActionSubstate;
- mSyncInfo.sub_flag = mSubStateExt;
- mSyncInfo.Force = mForce;
- mSyncInfo.Level = mLevel;
- mSyncInfo.x = X;
- mSyncInfo.y = Y;
- mSyncInfo.direction = this.Direction;
- if (net)
- {
- mSyncInfo.CurrentBuffStatus = this.GetCurrentBuffStatus();
- mSyncInfo.fields.mask = UnitFieldChangedEvent.MASK_ALL;
- GenSyncFields(mSyncInfo.fields);
- }
- return mSyncInfo;
- }
- /// <summary>
- /// 设置单位显示信息
- /// </summary>
- /// <param name="visible_data"></param>
- public void SetVisibleInfo(IUnitVisibleData visible_data)
- {
- mSyncInfo.VisibleInfo = visible_data;
- }
- public void SetDiaplayerName(String name)
- {
- if (mSyncInfo.VisibleInfo != null)
- {
- mSyncInfo.VisibleInfo.setVisibleName(name);
- }
- this.mSyncInfo.Name = name;
- }
- public override String GetTemplateData()
- {
- return "Unit:" + this.mInfo.ID;
- }
- //设置自动拾取范围
- public virtual void SetAutoPickRange(int value) { }
- #endregion
- //-----------------------------------------------------------------------------------------------------------
- #region script_support
- public string get_name()
- {
- return mName;
- }
- public int get_force()
- {
- return mForce;
- }
- public int get_level()
- {
- return mLevel;
- }
- public bool is_dead()
- {
- return IsDead();
- }
- public bool is_enable()
- {
- return Enable;
- }
- public bool is_paused()
- {
- return IsPaused;
- }
- public bool is_none_block()
- {
- return IsNoneBlock;
- }
- public bool is_none_skill()
- {
- return IsNoneSkill;
- }
- public uint get_id()
- {
- return ID;
- }
- public UnitInfo get_info()
- {
- return mInfo;
- }
- public Random get_random()
- {
- return RandomN;
- }
- public float get_x()
- {
- return X;
- }
- public float get_y()
- {
- return Y;
- }
- public float get_direction()
- {
- return Direction;
- }
- public float set_direction(float d)
- {
- this.faceTo(d);
- return d;
- }
- public string get_unit_tag()
- {
- return UnitTag;
- }
- public string set_unit_tag(string str)
- {
- UnitTag = str;
- return str;
- }
- public int get_max_hp()
- {
- return MaxHP;
- }
- public int set_max_hp(int max)
- {
- MaxHP = max;
- return max;
- }
- public int get_max_mp()
- {
- return MaxMP;
- }
- //public int set_max_mp(int mp)
- //{
- // MaxMP = mp;
- // return mp;
- //}
- public int get_current_hp()
- {
- return __mCurrentHP.Value;
- }
- public int set_current_hp(int hp)
- {
- CurrentHP = hp;
- return hp;
- }
- public int get_current_mp()
- {
- return __mCurrentMP.Value;
- }
- //public int set_current_mp(int mp)
- //{
- // CurrentMP = mp;
- // return mp;
- //}
- public int set_level(int lv)
- {
- Level = lv;
- return lv;
- }
- //public void add_mp(int mp)
- //{
- // AddMP(mp);
- //}
- public void add_hp(int hp)
- {
- AddHP(hp, this);
- }
- public void add_sp(int sp)
- {
- AddSP(sp);
- }
- public void add_buff(int buffID)
- {
- AddBuff(buffID);
- }
- public void clear_buff()
- {
- clearBuffs();
- }
- public void use_item(int itemTemplateID)
- {
- ItemTemplate item = Templates.getItem(itemTemplateID);
- if (item != null)
- {
- UseItem(item);
- }
- }
- #endregion
- }
- }
|