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;
}
}
}