using CommonAI.Zone; using CommonLang; using CommonLang.Log; using System; using System.Collections.Generic; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { /// /// XmdsBuff包,包含BuffTemplate以及XmdsBuff.用于组装绑定buff模板. /// public class XmdsBuffPack { public BuffTemplate mBuffTemplate = null; private List mXmdsBuffList = null; private XmdsBuffPack() { mXmdsBuffList = new List(); } public static XmdsBuffPack AllocAutoRelease() { //XmdsBuffPack ret = s_ListPool.Get(); return new XmdsBuffPack(); } private static XmdsBuffPack s_ListPool_OnCreate() { return new XmdsBuffPack(); } public void BindTemplateAndDispose() { for (int i = 0; i < mXmdsBuffList.Count; i++) { mXmdsBuffList[i].OverrideTemplate(ref mBuffTemplate); } Dispose(); } public void AddXmdsBuff(XmdsBuffBase buff) { mXmdsBuffList.Add(buff); } public XmdsBuffBase GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility ability) { XmdsBuffBase ret = null; int id = (int)ability; for (int i = 0; i < mXmdsBuffList.Count; i++) { if (mXmdsBuffList[i].GetAbilityID() == id) { ret = mXmdsBuffList[i]; break; } } return ret; } public List GetXmdsBuffList() { return mXmdsBuffList; } public XmdsBuffBase GetXmdsBuff(int index) { XmdsBuffBase ret = null; if (index >= 0 && index < mXmdsBuffList.Count) { ret = mXmdsBuffList[index]; } return ret; } private void Dispose() { OnDispose(); //s_ListPool.Release(this); } private void OnDispose() { foreach(var buf in mXmdsBuffList) { buf.Dispose(); } mXmdsBuffList.Clear(); mBuffTemplate = null; } } /// /// FileName: XmdsBuffFactory.cs /// Author: Alex.Yu /// Corporation:... /// Description: /// DateTime: 2015/6/24 16:04:48 /// public class XmdsBuffFactory { protected static Logger log = LoggerFactory.GetLogger("XmdsBuffFactory"); private static XmdsBuffFactory mInstance = null; private XmdsBuffFactory() { } public static XmdsBuffFactory GetInstance() { if (mInstance == null) { mInstance = new XmdsBuffFactory(); } return mInstance; } /// /// 获取指定的Buff. /// /// /// public XmdsBuffPack GetXmdsBuffPack(int buffID) { BuffTemplate bt = XmdsBattleSkill.GetBuffTemplate(buffID); if (bt == null) { return null; } XmdsBuffProperties zbp = null; zbp = (bt.Properties as XmdsBuffProperties); if (zbp == null) { return null; } XmdsBuffPack ret = XmdsBuffPack.AllocAutoRelease(); ret.mBuffTemplate = bt; if (zbp.BuffAbilityList != null) { for (int i = 0; i < zbp.BuffAbilityList.Count; i++) { PackAddXmdsBuff(ret, zbp.BuffAbilityList[i].ability); } } return ret; } public void GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility ability, ref XmdsBuffBase buff) { switch (ability) { case (XmdsBuffProperties.XmdsBuffAbility.None): buff = new XmdsBuffBase(); break; case (XmdsBuffProperties.XmdsBuffAbility.Burn): buff = new XmdsBuff_Burn(); break; case (XmdsBuffProperties.XmdsBuffAbility.MoveSpeedDown): buff = new XmdsBuff_MoveSpeedDown(); break; case (XmdsBuffProperties.XmdsBuffAbility.MoveSpeedUp): buff = new XmdsBuff_MoveSpeedUp(); break; case (XmdsBuffProperties.XmdsBuffAbility.STUN): buff = new XmdsBuff_Stun(); break; case (XmdsBuffProperties.XmdsBuffAbility.DamageRemit): buff = new XmdsBuff_DamageRemit(); break; case (XmdsBuffProperties.XmdsBuffAbility.PropChange): buff = new XmdsBuff_PropChange(); break; case (XmdsBuffProperties.XmdsBuffAbility.AddHP): buff = new XmdsBuff_AddHP(); break; case (XmdsBuffProperties.XmdsBuffAbility.AddHP_Unbroken): buff = new XmdsBuff_AddHP_UnBroken(); break; case (XmdsBuffProperties.XmdsBuffAbility.AttakUp_ByHp): buff = new XmdsBuff_AttackUpByHp(); break; case (XmdsBuffProperties.XmdsBuffAbility.Lock_HP): buff = new XmdsBuff_LockHP(); break; case (XmdsBuffProperties.XmdsBuffAbility.FROZEN): buff = new XmdsBuff_Frozen(); break; case (XmdsBuffProperties.XmdsBuffAbility.JINGU): buff = new XmdsBuff_Durance(); break; case (XmdsBuffProperties.XmdsBuffAbility.SpeedUpAndIngoreCtrl): buff = new XmdsBuff_SpeedUpAndIngoreCtr(); break; case (XmdsBuffProperties.XmdsBuffAbility.Fridge): buff = new Xmds_Fridge(); break; case (XmdsBuffProperties.XmdsBuffAbility.Stealth): buff = new XmdsBuff_Stealth(); break; case (XmdsBuffProperties.XmdsBuffAbility.Bleed): buff = new XmdsBuff_Bleed(); break; case (XmdsBuffProperties.XmdsBuffAbility.IngoreCtrl): buff = new XmdsBuff_IngoreCtrl(); break; case (XmdsBuffProperties.XmdsBuffAbility.Sap): buff = new XmdsBuff_Sap(); break; case (XmdsBuffProperties.XmdsBuffAbility.SHIELD_AbsorbDamage): buff = new XmdsBuff_Shield_AbsorbDamage(); break; case (XmdsBuffProperties.XmdsBuffAbility.ShadowState): buff = new XmdsBuff_ShadowState(); break; case (XmdsBuffProperties.XmdsBuffAbility.Brand): buff = new XmdsBuff_Brand(); break; case (XmdsBuffProperties.XmdsBuffAbility.Mocking): buff = new XmdsBuff_Mocking(); break; case (XmdsBuffProperties.XmdsBuffAbility.SkillDamageChange): buff = new XmdsBuff_SkillDamageChange(); break; case (XmdsBuffProperties.XmdsBuffAbility.Event_OnHitOther): buff = new XmdsBuff_Event_OnHitOther(); break; case (XmdsBuffProperties.XmdsBuffAbility.Event_OnHitDamageEvent): buff = new XmdsBuff_Event_OnHitDamage(); break; case (XmdsBuffProperties.XmdsBuffAbility.ActiveSkill): buff = new XmdsBuff_ActiveSkill(); break; case (XmdsBuffProperties.XmdsBuffAbility.ChangeSkillTotalTime): buff = new XmdsBuff_ChangeSkillTotalTime(); break; case (XmdsBuffProperties.XmdsBuffAbility.Silent): buff = new XmdsBuff_Silent(); break; case (XmdsBuffProperties.XmdsBuffAbility.Invincible): buff = new XmdsBuff_Invincible(); break; case (XmdsBuffProperties.XmdsBuffAbility.Invincible_luanchSkillBreak): buff = new XmdsBuff_Invincible_LuanchSkillBreak(); break; case (XmdsBuffProperties.XmdsBuffAbility.Nothingness): buff = new XmdsBuff_Nothingness(); break; case (XmdsBuffProperties.XmdsBuffAbility.UnitLink): buff = new XmdsBuff_UnitLink(); break; case XmdsBuffProperties.XmdsBuffAbility.Selectable: buff = new XmdsBuff_Selectable(); break; case XmdsBuffProperties.XmdsBuffAbility.SHIELD_LimitingDamage: buff = new XmdsBuff_Shield_LimitingDamage(); break; case XmdsBuffProperties.XmdsBuffAbility.Fear: buff = new XmdsBuff_Fear(); break; case XmdsBuffProperties.XmdsBuffAbility.SHIELD_IronMaiden: buff = new XmdsBuff_Shield_IronMaiden(); break; case XmdsBuffProperties.XmdsBuffAbility.Mark: buff = new XmdsBuff_Mark(); break; case XmdsBuffProperties.XmdsBuffAbility.HitAttHp: buff = new XmdsBuff_HitAddHp(); break; case XmdsBuffProperties.XmdsBuffAbility.SpeedChg_DamageRemit: buff = new XmdsBuff_SpeedChg_DamageRemit(); break; case XmdsBuffProperties.XmdsBuffAbility.IgnorCtrl_To_SpeedDown: buff = new XmdsBuff_IgnorCtrlToSpeedDown(); break; case XmdsBuffProperties.XmdsBuffAbility.IgnorCtrl_And_SpeedChg: buff = new XmdsBuff_IgnorCtrlAndSpeedChg(); break; case XmdsBuffProperties.XmdsBuffAbility.Brand_1: buff = new XmdsBuff_Brand_1(); break; case XmdsBuffProperties.XmdsBuffAbility.Brand_2: buff = new XmdsBuff_Brand_2(); break; case XmdsBuffProperties.XmdsBuffAbility.Brand_3: buff = new XmdsBuff_Brand_3(); break; case XmdsBuffProperties.XmdsBuffAbility.Brand_4: buff = new XmdsBuff_Brand_4(); break; case XmdsBuffProperties.XmdsBuffAbility.Brand_5: buff = new XmdsBuff_Brand_5(); break; case XmdsBuffProperties.XmdsBuffAbility.Brand_6: buff = new XmdsBuff_Brand_6(); break; case XmdsBuffProperties.XmdsBuffAbility.KillCreateSpeel: buff = new XmdsBuff_KillCreateSpeel(); break; case XmdsBuffProperties.XmdsBuffAbility.AttackSpeed: buff = new XmdsBuff_AttackSpeed(); break; case XmdsBuffProperties.XmdsBuffAbility.SpeedDown_Attenuation: buff = new XmdsBuff_SpeedDownAttenuation(); break; case XmdsBuffProperties.XmdsBuffAbility.Attack_AddHP: buff = new XmdsBuff_AttackAddHP(); break; case XmdsBuffProperties.XmdsBuffAbility.Remit_DeadlyDamage: buff = new XmdsBuff_RemitDeadlyDamage(); break; case XmdsBuffProperties.XmdsBuffAbility.SpeedUp_Attenuation: buff = new XmdsBuff_SpeedUpAttenuation(); break; case XmdsBuffProperties.XmdsBuffAbility.Curse_RealDamage: buff = new XmdsBuff_RealDamage(); break; case XmdsBuffProperties.XmdsBuffAbility.Hit_CreateSpell: buff = new XmdsBuff_HitCreateSpell(); break; case XmdsBuffProperties.XmdsBuffAbility.Sunder_Armor: buff = new XmdsBuff_SunderArmor(); break; case XmdsBuffProperties.XmdsBuffAbility.AddHPExt: buff = new XmdsBuff_AddHPByHPPrecent(); break; case XmdsBuffProperties.XmdsBuffAbility.CanNotMove: buff = new XmdsBuff_CanNotMove(); break; case XmdsBuffProperties.XmdsBuffAbility.Attack_RoundAddHP: buff = new XmdsBuff_AttackRoundAddHP(); break; case XmdsBuffProperties.XmdsBuffAbility.AddBuff: buff = new XmdsBuff_AddBuff(); break; case XmdsBuffProperties.XmdsBuffAbility.NextAttakCrit_AddHP: buff = new XmdsBuff_NextAttackCrit_AddHP(); break; case XmdsBuffProperties.XmdsBuffAbility.JSGTestBuff: buff = new XmdsBuff_TestBuff(); break; case XmdsBuffProperties.XmdsBuffAbility.AttackCreateSpell: buff = new XmdsBuff_AttackCreateSpell(); break; case XmdsBuffProperties.XmdsBuffAbility.AddHPByLossHP: buff = new XmdsBuff_AddHPByLossHP(); break; case XmdsBuffProperties.XmdsBuffAbility.Attack_AddHPEXT: buff = new XmdsBuff_AttackAddHPExt(); break; case XmdsBuffProperties.XmdsBuffAbility.Damage: buff = new XmdsBuff_Damage(); break; case XmdsBuffProperties.XmdsBuffAbility.RemedyPoison: buff = new XmdsBuff_RemedyPoison(); break; case XmdsBuffProperties.XmdsBuffAbility.SHIELD_HitLaunchSpell: buff = new XmdsBuff_Shield_HitLaunchSpell(); break; case XmdsBuffProperties.XmdsBuffAbility.ADD_TALENT: buff = new XmdsBuff_AddTalent(); break; default: buff = null; break; } } private void PackAddXmdsBuff(XmdsBuffPack pack, XmdsBuffProperties.XmdsBuffAbility ability) { XmdsBuffBase buff = null; GetXmdsBuff(ability, ref buff); if(buff == null) { string content = string.Format("GetXmdsBuffPack Error,BUFF ID = {0},Ability = {1}找不到匹配的BUFF.", pack == null ? -1 : pack.mBuffTemplate.ID, ability.ToString()); throw new Exception(content); } if (buff != null && pack != null) { pack.AddXmdsBuff(buff); } } /// /// pack检测,返回是否通过检测. /// /// /// /// public bool XmdsBuffPackTest(int buffID, XmdsBuffProperties.XmdsBuffAbility ability) { bool pass = false; BuffTemplate bt = XmdsBattleSkill.GetBuffTemplate(buffID, false); if (bt == null) { log.Error("初始化事件绑定buff错误1, 找不到BuffID: " + buffID); return pass; } XmdsBuffProperties zbp = null; zbp = (bt.Properties as XmdsBuffProperties); if (zbp == null) { return pass; } if (zbp.BuffAbilityList != null) { for (int i = 0; i < zbp.BuffAbilityList.Count; i++) { if (ability == zbp.BuffAbilityList[i].ability) { pass = true; break; } } } if (!pass) { log.Error("初始化事件绑定buff错误1, BuffID: " + buffID + ", 能力: " + ability); } return pass; } public bool XmdsBuffPackTest(int buffID, List abilityList) { bool pass = false; BuffTemplate bt = XmdsBattleSkill.GetBuffTemplate(buffID, false); if (bt == null) { log.Error("初始化事件绑定buff错误2, 找不到BuffID: " + buffID); return pass; } XmdsBuffProperties zbp = null; zbp = (bt.Properties as XmdsBuffProperties); if (zbp == null) { return pass; } if (zbp.BuffAbilityList != null && abilityList.Count == zbp.BuffAbilityList.Count) { bool check = true; for (int i = 0; i < abilityList.Count; i++) { if (abilityList[i] != zbp.BuffAbilityList[i].ability) { check = false; break; } } pass = check; } if (!pass) { log.Error("初始化事件绑定buff错误2, BuffID: " + buffID + ", 能力: " + abilityList); } return pass; } } }