XmdsBuffFactory.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. using CommonAI.Zone;
  2. using CommonLang;
  3. using CommonLang.Log;
  4. using System;
  5. using System.Collections.Generic;
  6. using XmdsCommon.Plugin;
  7. using XmdsCommonServer.Plugin;
  8. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  9. namespace XmdsCommonSkill.Plugin.Buffs
  10. {
  11. /// <summary>
  12. /// XmdsBuff包,包含BuffTemplate以及XmdsBuff.用于组装绑定buff模板.
  13. /// </summary>
  14. public class XmdsBuffPack
  15. {
  16. public BuffTemplate mBuffTemplate = null;
  17. private List<XmdsBuffBase> mXmdsBuffList = null;
  18. private XmdsBuffPack()
  19. {
  20. mXmdsBuffList = new List<XmdsBuffBase>();
  21. }
  22. public static XmdsBuffPack AllocAutoRelease()
  23. {
  24. //XmdsBuffPack ret = s_ListPool.Get();
  25. return new XmdsBuffPack();
  26. }
  27. private static XmdsBuffPack s_ListPool_OnCreate()
  28. {
  29. return new XmdsBuffPack();
  30. }
  31. public void BindTemplateAndDispose()
  32. {
  33. for (int i = 0; i < mXmdsBuffList.Count; i++)
  34. {
  35. mXmdsBuffList[i].OverrideTemplate(ref mBuffTemplate);
  36. }
  37. Dispose();
  38. }
  39. public void AddXmdsBuff(XmdsBuffBase buff)
  40. {
  41. mXmdsBuffList.Add(buff);
  42. }
  43. public XmdsBuffBase GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility ability)
  44. {
  45. XmdsBuffBase ret = null;
  46. int id = (int)ability;
  47. for (int i = 0; i < mXmdsBuffList.Count; i++)
  48. {
  49. if (mXmdsBuffList[i].GetAbilityID() == id)
  50. {
  51. ret = mXmdsBuffList[i];
  52. break;
  53. }
  54. }
  55. return ret;
  56. }
  57. public List<XmdsBuffBase> GetXmdsBuffList()
  58. {
  59. return mXmdsBuffList;
  60. }
  61. public XmdsBuffBase GetXmdsBuff(int index)
  62. {
  63. XmdsBuffBase ret = null;
  64. if (index >= 0 && index < mXmdsBuffList.Count)
  65. {
  66. ret = mXmdsBuffList[index];
  67. }
  68. return ret;
  69. }
  70. private void Dispose()
  71. {
  72. OnDispose();
  73. //s_ListPool.Release(this);
  74. }
  75. private void OnDispose()
  76. {
  77. foreach(var buf in mXmdsBuffList)
  78. {
  79. buf.Dispose();
  80. }
  81. mXmdsBuffList.Clear();
  82. mBuffTemplate = null;
  83. }
  84. }
  85. /// <summary>
  86. /// FileName: XmdsBuffFactory.cs
  87. /// Author: Alex.Yu
  88. /// Corporation:...
  89. /// Description:
  90. /// DateTime: 2015/6/24 16:04:48
  91. /// </summary>
  92. public class XmdsBuffFactory
  93. {
  94. protected static Logger log = LoggerFactory.GetLogger("XmdsBuffFactory");
  95. private static XmdsBuffFactory mInstance = null;
  96. private XmdsBuffFactory() { }
  97. public static XmdsBuffFactory GetInstance()
  98. {
  99. if (mInstance == null)
  100. {
  101. mInstance = new XmdsBuffFactory();
  102. }
  103. return mInstance;
  104. }
  105. /// <summary>
  106. /// 获取指定的Buff.
  107. /// </summary>
  108. /// <param name="buffID"></param>
  109. /// <returns></returns>
  110. public XmdsBuffPack GetXmdsBuffPack(int buffID)
  111. {
  112. BuffTemplate bt = XmdsBattleSkill.GetBuffTemplate(buffID);
  113. if (bt == null)
  114. {
  115. return null;
  116. }
  117. XmdsBuffProperties zbp = null;
  118. zbp = (bt.Properties as XmdsBuffProperties);
  119. if (zbp == null)
  120. {
  121. return null;
  122. }
  123. XmdsBuffPack ret = XmdsBuffPack.AllocAutoRelease();
  124. ret.mBuffTemplate = bt;
  125. if (zbp.BuffAbilityList != null)
  126. {
  127. for (int i = 0; i < zbp.BuffAbilityList.Count; i++)
  128. {
  129. PackAddXmdsBuff(ret, zbp.BuffAbilityList[i].ability);
  130. }
  131. }
  132. return ret;
  133. }
  134. public void GetXmdsBuff(XmdsBuffProperties.XmdsBuffAbility ability, ref XmdsBuffBase buff)
  135. {
  136. switch (ability)
  137. {
  138. case (XmdsBuffProperties.XmdsBuffAbility.None):
  139. buff = new XmdsBuffBase();
  140. break;
  141. case (XmdsBuffProperties.XmdsBuffAbility.Burn):
  142. buff = new XmdsBuff_Burn();
  143. break;
  144. case (XmdsBuffProperties.XmdsBuffAbility.MoveSpeedDown):
  145. buff = new XmdsBuff_MoveSpeedDown();
  146. break;
  147. case (XmdsBuffProperties.XmdsBuffAbility.MoveSpeedUp):
  148. buff = new XmdsBuff_MoveSpeedUp();
  149. break;
  150. case (XmdsBuffProperties.XmdsBuffAbility.STUN):
  151. buff = new XmdsBuff_Stun();
  152. break;
  153. case (XmdsBuffProperties.XmdsBuffAbility.DamageRemit):
  154. buff = new XmdsBuff_DamageRemit();
  155. break;
  156. case (XmdsBuffProperties.XmdsBuffAbility.PropChange):
  157. buff = new XmdsBuff_PropChange();
  158. break;
  159. case (XmdsBuffProperties.XmdsBuffAbility.AddHP):
  160. buff = new XmdsBuff_AddHP();
  161. break;
  162. case (XmdsBuffProperties.XmdsBuffAbility.AddHP_Unbroken):
  163. buff = new XmdsBuff_AddHP_UnBroken();
  164. break;
  165. case (XmdsBuffProperties.XmdsBuffAbility.AttakUp_ByHp):
  166. buff = new XmdsBuff_AttackUpByHp();
  167. break;
  168. case (XmdsBuffProperties.XmdsBuffAbility.Lock_HP):
  169. buff = new XmdsBuff_LockHP();
  170. break;
  171. case (XmdsBuffProperties.XmdsBuffAbility.FROZEN):
  172. buff = new XmdsBuff_Frozen();
  173. break;
  174. case (XmdsBuffProperties.XmdsBuffAbility.JINGU):
  175. buff = new XmdsBuff_Durance();
  176. break;
  177. case (XmdsBuffProperties.XmdsBuffAbility.SpeedUpAndIngoreCtrl):
  178. buff = new XmdsBuff_SpeedUpAndIngoreCtr();
  179. break;
  180. case (XmdsBuffProperties.XmdsBuffAbility.Fridge):
  181. buff = new Xmds_Fridge();
  182. break;
  183. case (XmdsBuffProperties.XmdsBuffAbility.Stealth):
  184. buff = new XmdsBuff_Stealth();
  185. break;
  186. case (XmdsBuffProperties.XmdsBuffAbility.Bleed):
  187. buff = new XmdsBuff_Bleed();
  188. break;
  189. case (XmdsBuffProperties.XmdsBuffAbility.IngoreCtrl):
  190. buff = new XmdsBuff_IngoreCtrl();
  191. break;
  192. case (XmdsBuffProperties.XmdsBuffAbility.Sap):
  193. buff = new XmdsBuff_Sap();
  194. break;
  195. case (XmdsBuffProperties.XmdsBuffAbility.SHIELD_AbsorbDamage):
  196. buff = new XmdsBuff_Shield_AbsorbDamage();
  197. break;
  198. case (XmdsBuffProperties.XmdsBuffAbility.ShadowState):
  199. buff = new XmdsBuff_ShadowState();
  200. break;
  201. case (XmdsBuffProperties.XmdsBuffAbility.Brand):
  202. buff = new XmdsBuff_Brand();
  203. break;
  204. case (XmdsBuffProperties.XmdsBuffAbility.Mocking):
  205. buff = new XmdsBuff_Mocking();
  206. break;
  207. case (XmdsBuffProperties.XmdsBuffAbility.SkillDamageChange):
  208. buff = new XmdsBuff_SkillDamageChange();
  209. break;
  210. case (XmdsBuffProperties.XmdsBuffAbility.Event_OnHitOther):
  211. buff = new XmdsBuff_Event_OnHitOther();
  212. break;
  213. case (XmdsBuffProperties.XmdsBuffAbility.Event_OnHitDamageEvent):
  214. buff = new XmdsBuff_Event_OnHitDamage();
  215. break;
  216. case (XmdsBuffProperties.XmdsBuffAbility.ActiveSkill):
  217. buff = new XmdsBuff_ActiveSkill();
  218. break;
  219. case (XmdsBuffProperties.XmdsBuffAbility.ChangeSkillTotalTime):
  220. buff = new XmdsBuff_ChangeSkillTotalTime();
  221. break;
  222. case (XmdsBuffProperties.XmdsBuffAbility.Silent):
  223. buff = new XmdsBuff_Silent();
  224. break;
  225. case (XmdsBuffProperties.XmdsBuffAbility.Invincible):
  226. buff = new XmdsBuff_Invincible();
  227. break;
  228. case (XmdsBuffProperties.XmdsBuffAbility.Invincible_luanchSkillBreak):
  229. buff = new XmdsBuff_Invincible_LuanchSkillBreak();
  230. break;
  231. case (XmdsBuffProperties.XmdsBuffAbility.Nothingness):
  232. buff = new XmdsBuff_Nothingness();
  233. break;
  234. case (XmdsBuffProperties.XmdsBuffAbility.UnitLink):
  235. buff = new XmdsBuff_UnitLink();
  236. break;
  237. case XmdsBuffProperties.XmdsBuffAbility.Selectable:
  238. buff = new XmdsBuff_Selectable();
  239. break;
  240. case XmdsBuffProperties.XmdsBuffAbility.SHIELD_LimitingDamage:
  241. buff = new XmdsBuff_Shield_LimitingDamage();
  242. break;
  243. case XmdsBuffProperties.XmdsBuffAbility.Fear:
  244. buff = new XmdsBuff_Fear();
  245. break;
  246. case XmdsBuffProperties.XmdsBuffAbility.SHIELD_IronMaiden:
  247. buff = new XmdsBuff_Shield_IronMaiden();
  248. break;
  249. case XmdsBuffProperties.XmdsBuffAbility.Mark:
  250. buff = new XmdsBuff_Mark();
  251. break;
  252. case XmdsBuffProperties.XmdsBuffAbility.HitAttHp:
  253. buff = new XmdsBuff_HitAddHp();
  254. break;
  255. case XmdsBuffProperties.XmdsBuffAbility.SpeedChg_DamageRemit:
  256. buff = new XmdsBuff_SpeedChg_DamageRemit();
  257. break;
  258. case XmdsBuffProperties.XmdsBuffAbility.IgnorCtrl_To_SpeedDown:
  259. buff = new XmdsBuff_IgnorCtrlToSpeedDown();
  260. break;
  261. case XmdsBuffProperties.XmdsBuffAbility.IgnorCtrl_And_SpeedChg:
  262. buff = new XmdsBuff_IgnorCtrlAndSpeedChg();
  263. break;
  264. case XmdsBuffProperties.XmdsBuffAbility.Brand_1:
  265. buff = new XmdsBuff_Brand_1();
  266. break;
  267. case XmdsBuffProperties.XmdsBuffAbility.Brand_2:
  268. buff = new XmdsBuff_Brand_2();
  269. break;
  270. case XmdsBuffProperties.XmdsBuffAbility.Brand_3:
  271. buff = new XmdsBuff_Brand_3();
  272. break;
  273. case XmdsBuffProperties.XmdsBuffAbility.Brand_4:
  274. buff = new XmdsBuff_Brand_4();
  275. break;
  276. case XmdsBuffProperties.XmdsBuffAbility.Brand_5:
  277. buff = new XmdsBuff_Brand_5();
  278. break;
  279. case XmdsBuffProperties.XmdsBuffAbility.Brand_6:
  280. buff = new XmdsBuff_Brand_6();
  281. break;
  282. case XmdsBuffProperties.XmdsBuffAbility.KillCreateSpeel:
  283. buff = new XmdsBuff_KillCreateSpeel();
  284. break;
  285. case XmdsBuffProperties.XmdsBuffAbility.AttackSpeed:
  286. buff = new XmdsBuff_AttackSpeed();
  287. break;
  288. case XmdsBuffProperties.XmdsBuffAbility.SpeedDown_Attenuation:
  289. buff = new XmdsBuff_SpeedDownAttenuation();
  290. break;
  291. case XmdsBuffProperties.XmdsBuffAbility.Attack_AddHP:
  292. buff = new XmdsBuff_AttackAddHP();
  293. break;
  294. case XmdsBuffProperties.XmdsBuffAbility.Remit_DeadlyDamage:
  295. buff = new XmdsBuff_RemitDeadlyDamage();
  296. break;
  297. case XmdsBuffProperties.XmdsBuffAbility.SpeedUp_Attenuation:
  298. buff = new XmdsBuff_SpeedUpAttenuation();
  299. break;
  300. case XmdsBuffProperties.XmdsBuffAbility.Curse_RealDamage:
  301. buff = new XmdsBuff_RealDamage();
  302. break;
  303. case XmdsBuffProperties.XmdsBuffAbility.Hit_CreateSpell:
  304. buff = new XmdsBuff_HitCreateSpell();
  305. break;
  306. case XmdsBuffProperties.XmdsBuffAbility.Sunder_Armor:
  307. buff = new XmdsBuff_SunderArmor();
  308. break;
  309. case XmdsBuffProperties.XmdsBuffAbility.AddHPExt:
  310. buff = new XmdsBuff_AddHPByHPPrecent();
  311. break;
  312. case XmdsBuffProperties.XmdsBuffAbility.CanNotMove:
  313. buff = new XmdsBuff_CanNotMove();
  314. break;
  315. case XmdsBuffProperties.XmdsBuffAbility.Attack_RoundAddHP:
  316. buff = new XmdsBuff_AttackRoundAddHP();
  317. break;
  318. case XmdsBuffProperties.XmdsBuffAbility.AddBuff:
  319. buff = new XmdsBuff_AddBuff();
  320. break;
  321. case XmdsBuffProperties.XmdsBuffAbility.NextAttakCrit_AddHP:
  322. buff = new XmdsBuff_NextAttackCrit_AddHP();
  323. break;
  324. case XmdsBuffProperties.XmdsBuffAbility.JSGTestBuff:
  325. buff = new XmdsBuff_TestBuff();
  326. break;
  327. case XmdsBuffProperties.XmdsBuffAbility.AttackCreateSpell:
  328. buff = new XmdsBuff_AttackCreateSpell();
  329. break;
  330. case XmdsBuffProperties.XmdsBuffAbility.AddHPByLossHP:
  331. buff = new XmdsBuff_AddHPByLossHP();
  332. break;
  333. case XmdsBuffProperties.XmdsBuffAbility.Attack_AddHPEXT:
  334. buff = new XmdsBuff_AttackAddHPExt();
  335. break;
  336. case XmdsBuffProperties.XmdsBuffAbility.Damage:
  337. buff = new XmdsBuff_Damage();
  338. break;
  339. case XmdsBuffProperties.XmdsBuffAbility.RemedyPoison:
  340. buff = new XmdsBuff_RemedyPoison();
  341. break;
  342. case XmdsBuffProperties.XmdsBuffAbility.SHIELD_HitLaunchSpell:
  343. buff = new XmdsBuff_Shield_HitLaunchSpell();
  344. break;
  345. case XmdsBuffProperties.XmdsBuffAbility.ADD_TALENT:
  346. buff = new XmdsBuff_AddTalent();
  347. break;
  348. default:
  349. buff = null;
  350. break;
  351. }
  352. }
  353. private void PackAddXmdsBuff(XmdsBuffPack pack, XmdsBuffProperties.XmdsBuffAbility ability)
  354. {
  355. XmdsBuffBase buff = null;
  356. GetXmdsBuff(ability, ref buff);
  357. if(buff == null)
  358. {
  359. string content = string.Format("GetXmdsBuffPack Error,BUFF ID = {0},Ability = {1}找不到匹配的BUFF.",
  360. pack == null ? -1 : pack.mBuffTemplate.ID, ability.ToString());
  361. throw new Exception(content);
  362. }
  363. if (buff != null && pack != null)
  364. {
  365. pack.AddXmdsBuff(buff);
  366. }
  367. }
  368. /// <summary>
  369. /// pack检测,返回是否通过检测.
  370. /// </summary>
  371. /// <param name="buffID"></param>
  372. /// <param name="ability"></param>
  373. /// <returns></returns>
  374. public bool XmdsBuffPackTest(int buffID, XmdsBuffProperties.XmdsBuffAbility ability)
  375. {
  376. bool pass = false;
  377. BuffTemplate bt = XmdsBattleSkill.GetBuffTemplate(buffID, false);
  378. if (bt == null)
  379. {
  380. log.Error("初始化事件绑定buff错误1, 找不到BuffID: " + buffID);
  381. return pass;
  382. }
  383. XmdsBuffProperties zbp = null;
  384. zbp = (bt.Properties as XmdsBuffProperties);
  385. if (zbp == null)
  386. {
  387. return pass;
  388. }
  389. if (zbp.BuffAbilityList != null)
  390. {
  391. for (int i = 0; i < zbp.BuffAbilityList.Count; i++)
  392. {
  393. if (ability == zbp.BuffAbilityList[i].ability)
  394. {
  395. pass = true;
  396. break;
  397. }
  398. }
  399. }
  400. if (!pass)
  401. {
  402. log.Error("初始化事件绑定buff错误1, BuffID: " + buffID + ", 能力: " + ability);
  403. }
  404. return pass;
  405. }
  406. public bool XmdsBuffPackTest(int buffID, List<XmdsBuffProperties.XmdsBuffAbility> abilityList)
  407. {
  408. bool pass = false;
  409. BuffTemplate bt = XmdsBattleSkill.GetBuffTemplate(buffID, false);
  410. if (bt == null)
  411. {
  412. log.Error("初始化事件绑定buff错误2, 找不到BuffID: " + buffID);
  413. return pass;
  414. }
  415. XmdsBuffProperties zbp = null;
  416. zbp = (bt.Properties as XmdsBuffProperties);
  417. if (zbp == null)
  418. {
  419. return pass;
  420. }
  421. if (zbp.BuffAbilityList != null && abilityList.Count == zbp.BuffAbilityList.Count)
  422. {
  423. bool check = true;
  424. for (int i = 0; i < abilityList.Count; i++)
  425. {
  426. if (abilityList[i] != zbp.BuffAbilityList[i].ability)
  427. {
  428. check = false;
  429. break;
  430. }
  431. }
  432. pass = check;
  433. }
  434. if (!pass)
  435. {
  436. log.Error("初始化事件绑定buff错误2, BuffID: " + buffID + ", 能力: " + abilityList);
  437. }
  438. return pass;
  439. }
  440. }
  441. }