Actions.Units.cs 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using CommonLang.Property;
  5. using CommonAI.Zone.Attributes;
  6. using CommonAI.Zone;
  7. using CommonAI.Zone.ZoneEditor;
  8. using CommonAI.RTS;
  9. using CommonLang.Vector;
  10. using CommonAI.Zone.Instance;
  11. using CommonAI.Zone.EventTrigger;
  12. using CommonLang;
  13. using CommonAI.Zone.Helper;
  14. using CommonAI.data;
  15. namespace CommonAI.Zone.ZoneEditor.EventTrigger
  16. {
  17. [DescAttribute("激活单位事件触发器", "单位触发器")]
  18. public class UnitEventTriggerActive : AbstractAction
  19. {
  20. [DescAttribute("事件触发器名字")]
  21. [UnitEventIDAttribute]
  22. public string EventName;
  23. public override string ToString()
  24. {
  25. return string.Format("激活单位事件触发器({0})", EventName);
  26. }
  27. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  28. {
  29. api.Group.EventActive(EventName, args);
  30. }
  31. }
  32. [DescAttribute("关闭单位事件触发器", "单位触发器")]
  33. public class UnitEventTriggerDeactive : AbstractAction
  34. {
  35. [DescAttribute("事件触发器名字")]
  36. [UnitEventIDAttribute]
  37. public string EventName;
  38. public override string ToString()
  39. {
  40. return string.Format("关闭单位事件触发器({0})", EventName);
  41. }
  42. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  43. {
  44. api.Group.EventDeactive(EventName, args);
  45. }
  46. }
  47. //-------------------------------------------------------------------------------------------
  48. #region __单位动作__
  49. [DescAttribute("添加单位", "单位")]
  50. public class AddUnitAction : AbstractAction
  51. {
  52. [DescAttribute("单位模板ID")]
  53. [TemplateIDAttribute(typeof(UnitInfo))]
  54. public int UnitTemplateID = 0;
  55. [DescAttribute("单位等级")]
  56. [TemplateLevelAttribute]
  57. public int UnitLevel = 0;
  58. [DescAttribute("单位阵营")]
  59. public IntegerValue Force = new IntegerValue.VALUE(1);
  60. [DescAttribute("用户定义名字(编辑器名字)")]
  61. public string UnitName;
  62. [DescAttribute("位置")]
  63. public PositionValue Position = new PositionValue.VALUE();
  64. [DescAttribute("朝向")]
  65. public float Direction;
  66. [DescAttribute("开始寻路")]
  67. public FlagValue.EditorPoint StartPoint;
  68. [DescAttribute("场景内是否唯一")]
  69. public bool unique;
  70. [DescAttribute("初始当前生命百分比(0, 100)")]
  71. public int hpPrecent;
  72. public override string ToString()
  73. {
  74. return string.Format("添加单位({0})到({1})", UnitTemplateID, Position);
  75. }
  76. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  77. {
  78. if(this.unique)
  79. {
  80. InstanceUnit targetUnit = api.ZoneAPI.getUnitByTemplateID(UnitTemplateID);
  81. if (targetUnit != null)
  82. {
  83. return;
  84. }
  85. }
  86. Vector2 pos = Position.GetValue(api, args);
  87. if(pos != null)
  88. {
  89. InstanceUnit unit = api.ZoneAPI.AddUnit(UnitTemplateID, UnitName, (byte)Force.GetValue(api, args), UnitLevel, pos.X, pos.Y, Direction, false);
  90. if(unit is IGuardUnit && StartPoint != null)
  91. {
  92. IGuardUnit guard = unit as IGuardUnit;
  93. InstanceFlag flag = StartPoint.GetValue(api, args);
  94. if(flag != null)
  95. {
  96. guard.AttackTo(flag as ZoneWayPoint);
  97. }
  98. }
  99. if(0 < hpPrecent && hpPrecent < 100)
  100. {
  101. int reduceHP = (int)(unit.MaxHP * 0.01f * (100 -hpPrecent));
  102. unit.ReduceHP(reduceHP, null, null, true, null, false, Data.DamageSource.Def, true);
  103. }
  104. }
  105. }
  106. }
  107. [DescAttribute("替换单位模板", "单位")]
  108. public class ReplaceUnitAction : AbstractAction
  109. {
  110. [DescAttribute("单位")]
  111. public UnitValue Unit = new UnitValue.Trigging();
  112. [DescAttribute("新单位模板ID与旧模板的差值")]
  113. public IntegerValue IDDiff = new IntegerValue.VALUE(0);
  114. public override string ToString()
  115. {
  116. return string.Format("替换单位({0})模板(ID Diff:{1})", Unit, IDDiff);
  117. }
  118. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  119. {
  120. InstanceUnit unit = Unit.GetValue(api, args);
  121. if (unit != null)
  122. {
  123. int newid = unit.Info.TemplateID + IDDiff.GetValue(api, args);
  124. UnitInfo info = api.ZoneAPI.Templates.getUnit(newid);
  125. if (info != null)
  126. {
  127. api.ZoneAPI.RemoveObject(unit);
  128. api.ZoneAPI.AddUnit(newid, unit.Name, unit.Force, unit.Level, unit.X, unit.Y, unit.Direction, false, unit.ID);
  129. }
  130. }
  131. }
  132. }
  133. [DescAttribute("单位增加金钱", "单位")]
  134. public class UnitAddMoneyAction : AbstractAction
  135. {
  136. [DescAttribute("单位")]
  137. public UnitValue Unit = new UnitValue.Trigging();
  138. [DescAttribute("金钱")]
  139. public IntegerValue Money = new IntegerValue.VALUE(100);
  140. public override string ToString()
  141. {
  142. return string.Format("给({0})增加金钱({1})", Unit, Money);
  143. }
  144. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  145. {
  146. int money = Money.GetValue(api, args);
  147. InstanceUnit unit = Unit.GetValue(api, args);
  148. if(unit != null && money != 0)
  149. {
  150. unit.CurrentMoney += money;
  151. }
  152. }
  153. }
  154. [DescAttribute("单位隐身", "单位")]
  155. public class UnitStealthAction : AbstractAction
  156. {
  157. [DescAttribute("单位")]
  158. public UnitValue Unit = new UnitValue.Trigging();
  159. [DescAttribute("隐身")]
  160. public IntegerValue stealth = new IntegerValue.VALUE(1);
  161. public IntegerValue flag = new IntegerValue.VALUE(0);
  162. public override string ToString()
  163. {
  164. return string.Format("设置({0})隐身状态({1}),标记:{2}", Unit, stealth, flag);
  165. }
  166. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  167. {
  168. int stealthState = stealth.GetValue(api, args);
  169. InstanceUnit unit = Unit.GetValue(api, args);
  170. if (unit != null)
  171. {
  172. if(stealthState > 0)
  173. {
  174. int extValue = flag.GetValue(api, args);
  175. unit.AddActionSubState(UnitActionSubStatus.Stealth, (short)extValue);
  176. }
  177. else
  178. {
  179. unit.RemoveActionSubState(UnitActionSubStatus.Stealth);
  180. }
  181. }
  182. }
  183. }
  184. [DescAttribute("杀死单位", "单位")]
  185. public class KillUnitAction : AbstractAction
  186. {
  187. [DescAttribute("单位")]
  188. public UnitValue Unit = new UnitValue.Trigging();
  189. public override string ToString()
  190. {
  191. return string.Format("杀死({0})", Unit);
  192. }
  193. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  194. {
  195. InstanceUnit unit = Unit.GetValue(api, args);
  196. if(unit != null)
  197. {
  198. unit.kill();
  199. }
  200. }
  201. }
  202. [DescAttribute("复活单位", "单位")]
  203. public class ReviveUnitAction : AbstractAction
  204. {
  205. [DescAttribute("单位")]
  206. public UnitValue Unit = new UnitValue.Trigging();
  207. public override string ToString()
  208. {
  209. return string.Format("复活({0})", Unit);
  210. }
  211. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  212. {
  213. InstanceUnit unit = Unit.GetValue(api, args);
  214. if (unit != null && unit.is_dead())
  215. {
  216. unit.startRebirth();
  217. }
  218. }
  219. }
  220. [DescAttribute("直接移除单位", "单位")]
  221. public class RemoveUnitAction : AbstractAction
  222. {
  223. [DescAttribute("单位")]
  224. public UnitValue Unit = new UnitValue.Trigging();
  225. public override string ToString()
  226. {
  227. return string.Format("直接移除({0})", Unit);
  228. }
  229. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  230. {
  231. InstanceUnit unit = Unit.GetValue(api, args);
  232. if(unit != null)
  233. {
  234. api.ZoneAPI.RemoveObject(unit);
  235. }
  236. }
  237. }
  238. [DescAttribute("给单位添加BUFF(过时,请用TrggerEvent)", "单位")]
  239. public class UnitAddBuffAction : AbstractAction
  240. {
  241. [DescAttribute("单位")]
  242. public UnitValue Unit = new UnitValue.Trigging();
  243. [DescAttribute("Buff模板ID")]
  244. [TemplateIDAttribute(typeof(BuffTemplate))]
  245. public int BuffTemplateID;
  246. public override string ToString()
  247. {
  248. return string.Format("给({0})添加BUFF({1})", Unit, BuffTemplateID);
  249. }
  250. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  251. {
  252. //Console.WriteLine("-----------------DoAction : " + TimeUtil.GetTimestampMS()/1000);
  253. InstanceUnit unit = Unit.GetValue(api, args);
  254. if(unit != null)
  255. {
  256. unit.AddBuff(BuffTemplateID);
  257. }
  258. }
  259. }
  260. [DescAttribute("单位触发TrggerEvent(Buff)", "单位")]
  261. public class UnitTriggerEventAction : AbstractAction
  262. {
  263. [DescAttribute("单位")]
  264. public UnitValue Unit = new UnitValue.Trigging();
  265. public int TriggerID;
  266. public override string ToString()
  267. {
  268. return string.Format("单位({0})触发事件({1})", Unit, TriggerID);
  269. }
  270. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  271. {
  272. //单位事件,只允许自己触发,有攻击者的需要绑定攻击。
  273. InstanceUnit unit = Unit.GetValue(api, args);
  274. if (unit != null)
  275. {
  276. BattleFunction.GetInstance().TriggrBattleFunction(TriggerID, unit.Virtual, unit.Virtual);
  277. }
  278. }
  279. }
  280. [DescAttribute("给单位删除BUFF", "单位")]
  281. public class UnitRemoveBuffAction : AbstractAction
  282. {
  283. [DescAttribute("单位")]
  284. public UnitValue Unit = new UnitValue.Trigging();
  285. [DescAttribute("Buff")]
  286. public BuffTemplateValue Buff = new BuffTemplateValue.Template();
  287. public override string ToString()
  288. {
  289. return string.Format("给({0})删除BUFF({1})", Unit, Buff);
  290. }
  291. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  292. {
  293. var unit = Unit.GetValue(api, args);
  294. var buff = Buff.GetValue(api, args);
  295. if(unit != null && buff != null)
  296. {
  297. unit.removeBuff(buff.ID);
  298. }
  299. }
  300. }
  301. [DescAttribute("单位直接使用物品", "单位")]
  302. public class UnitUseItemAction : AbstractAction
  303. {
  304. [DescAttribute("单位")]
  305. public UnitValue Unit = new UnitValue.Trigging();
  306. [DescAttribute("物品")]
  307. public ItemTemplateValue Item = new ItemTemplateValue.Template();
  308. public override string ToString()
  309. {
  310. return string.Format("给({0})使用物品({1})", Unit, Item);
  311. }
  312. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  313. {
  314. ItemTemplate item = Item.GetValue(api, args);
  315. InstanceUnit unit = Unit.GetValue(api, args);
  316. if(unit != null && item != null)
  317. {
  318. unit.UseItem(item, unit);
  319. }
  320. }
  321. }
  322. [DescAttribute("单位冻结技能", "单位")]
  323. public class UnitRemoveSkill : AbstractAction
  324. {
  325. [DescAttribute("单位")]
  326. public UnitValue Unit = new UnitValue.Trigging();
  327. [DescAttribute("物品")]
  328. public int skillID;
  329. public override string ToString()
  330. {
  331. return string.Format("单位({0})冻结技能({1})", Unit, skillID);
  332. }
  333. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  334. {
  335. InstanceUnit unit = Unit.GetValue(api, args);
  336. if (unit != null)
  337. {
  338. unit.SetSkillActive(skillID, false);
  339. }
  340. }
  341. }
  342. [DescAttribute("单位激活技能", "单位")]
  343. public class UnitActiveSkill : AbstractAction
  344. {
  345. [DescAttribute("单位")]
  346. public UnitValue Unit = new UnitValue.Trigging();
  347. [DescAttribute("物品")]
  348. public int skillID;
  349. public override string ToString()
  350. {
  351. return string.Format("单位({0})激活技能({1})", Unit, skillID);
  352. }
  353. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  354. {
  355. InstanceUnit unit = Unit.GetValue(api, args);
  356. if (unit != null)
  357. {
  358. unit.SetSkillActive(skillID, true);
  359. }
  360. }
  361. }
  362. [DescAttribute("设置单位(建筑)攻击目标", "单位")]
  363. public class SetUnitTragetAtkAction : AbstractAction
  364. {
  365. [DescAttribute("单位(建筑)")]
  366. public UnitValue Unit1 = new UnitValue.Trigging();
  367. [DescAttribute("单位(攻击者)")]
  368. public UnitValue Unit2 = new UnitValue.Trigging();
  369. public override string ToString()
  370. {
  371. return string.Format("设置({0})攻击目标为({1})", Unit1, Unit2);
  372. }
  373. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  374. {
  375. InstanceBuilding unit1 = Unit1.GetValue(api, args) as InstanceBuilding;
  376. InstanceUnit unit2 = Unit2.GetValue(api, args);
  377. if (unit1 != null && unit2 != null)
  378. {
  379. unit1.SetTracingTarget(unit2);
  380. }
  381. }
  382. }
  383. [DescAttribute("给单位背包添加道具", "单位 - 背包")]
  384. public class UnitAddInventoryItemAction : AbstractAction
  385. {
  386. [DescAttribute("单位")]
  387. public UnitValue Unit = new UnitValue.Trigging();
  388. [DescAttribute("物品")]
  389. public ItemTemplateValue Item = new ItemTemplateValue.Template();
  390. [DescAttribute("数量")]
  391. public IntegerValue Count = new IntegerValue.VALUE(1);
  392. public override string ToString()
  393. {
  394. return string.Format("给({0})背包添加{2}个物品({1})", Unit, Item, Count);
  395. }
  396. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  397. {
  398. ItemTemplate item = Item.GetValue(api, args);
  399. InstanceUnit unit = Unit.GetValue(api, args);
  400. int count = Count.GetValue(api, args);
  401. if(unit != null && item != null && count > 0)
  402. {
  403. unit.AddItemToEmptyInventory(item, count);
  404. }
  405. }
  406. }
  407. [DescAttribute("从单位背包丢弃道具", "单位 - 背包")]
  408. public class UnitDropInventoryItemAction : AbstractAction
  409. {
  410. [DescAttribute("单位")]
  411. public UnitValue Unit = new UnitValue.Trigging();
  412. [DescAttribute("物品")]
  413. public ItemTemplateValue Item = new ItemTemplateValue.Template();
  414. [DescAttribute("数量")]
  415. public IntegerValue Count = new IntegerValue.VALUE(1);
  416. public override string ToString()
  417. {
  418. return string.Format("从({0})背包丢弃{2}个物品({1})", Unit, Item, Count);
  419. }
  420. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  421. {
  422. ItemTemplate item = Item.GetValue(api, args);
  423. InstanceUnit unit = Unit.GetValue(api, args);
  424. int count = Count.GetValue(api, args);
  425. if(unit != null && item != null && count > 0)
  426. {
  427. unit.DropInventoryItemByType(item.ID, count);
  428. }
  429. }
  430. }
  431. [DescAttribute("从单位背包清除道具", "单位 - 背包")]
  432. public class UnitClearInventoryItemAction : AbstractAction
  433. {
  434. [DescAttribute("单位")]
  435. public UnitValue Unit = new UnitValue.Trigging();
  436. [DescAttribute("物品")]
  437. public ItemTemplateValue Item = new ItemTemplateValue.Template();
  438. public override string ToString()
  439. {
  440. return string.Format("从({0})背包清除物品({1})", Unit, Item);
  441. }
  442. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  443. {
  444. ItemTemplate item = Item.GetValue(api, args);
  445. InstanceUnit unit = Unit.GetValue(api, args);
  446. if(unit != null && item != null)
  447. {
  448. unit.ClearInventoryItemByType(item.ID);
  449. }
  450. }
  451. }
  452. [DescAttribute("使用背包内的道具", "单位 - 背包")]
  453. public class UnitUseInventoryItemAction : AbstractAction
  454. {
  455. [DescAttribute("单位")]
  456. public UnitValue Unit = new UnitValue.Trigging();
  457. [DescAttribute("物品")]
  458. public ItemTemplateValue Item = new ItemTemplateValue.Template();
  459. [DescAttribute("数量")]
  460. public IntegerValue Count = new IntegerValue.VALUE(1);
  461. public override string ToString()
  462. {
  463. return string.Format("使用({0})背包内的{2}个道具({1})", Unit, Item, Count);
  464. }
  465. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  466. {
  467. ItemTemplate item = Item.GetValue(api, args);
  468. InstanceUnit unit = Unit.GetValue(api, args);
  469. int count = Count.GetValue(api, args);
  470. if(unit != null && item != null && count > 0)
  471. {
  472. unit.UseInventoryItemByType(item.ID, count);
  473. }
  474. }
  475. }
  476. [DescAttribute("单位释放法术", "单位")]
  477. public class UnitLaunchSpellAction : AbstractAction
  478. {
  479. [DescAttribute("单位")]
  480. public UnitValue Unit = new UnitValue.Trigging();
  481. [DescAttribute("释放法术")]
  482. public LaunchSpell Spell = new LaunchSpell();
  483. public override string ToString()
  484. {
  485. return string.Format("({0})释放法术({1})", Unit, Spell);
  486. }
  487. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  488. {
  489. InstanceUnit unit = Unit.GetValue(api, args);
  490. if(unit != null && Spell != null)
  491. {
  492. api.ZoneAPI.unitLaunchSpell(XmdsSkillType.none, unit, Spell, unit.X, unit.Y);
  493. }
  494. }
  495. }
  496. [DescAttribute("单位释放技能", "单位")]
  497. public class UnitLaunchSkillAction : AbstractAction
  498. {
  499. [DescAttribute("单位")]
  500. public UnitValue Unit = new UnitValue.Trigging();
  501. [DescAttribute("释放技能")]
  502. public LaunchSkill Skill = new LaunchSkill();
  503. public override string ToString()
  504. {
  505. return string.Format("({0})释放技能({1})", Unit, Skill);
  506. }
  507. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  508. {
  509. InstanceUnit unit = Unit.GetValue(api, args);
  510. if(unit != null && Skill != null)
  511. {
  512. unit.launchSkill(Skill.SkillID, new InstanceUnit.LaunchSkillParam());
  513. }
  514. }
  515. }
  516. [DescAttribute("给单位添加被动触发", "单位")]
  517. public class UnitAddTriggerAction : AbstractAction
  518. {
  519. [DescAttribute("单位")]
  520. public UnitValue Unit = new UnitValue.Trigging();
  521. [DescAttribute("UnitTrigger模板ID")]
  522. [TemplateIDAttribute(typeof(UnitTriggerTemplate))]
  523. public int TriggerTemplateID;
  524. public override string ToString()
  525. {
  526. return string.Format("给({0})添加BUFF({1})", Unit, TriggerTemplateID);
  527. }
  528. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  529. {
  530. InstanceUnit unit = Unit.GetValue(api, args) as InstanceUnit;
  531. if(unit != null)
  532. {
  533. unit.addTrigger(TriggerTemplateID);
  534. }
  535. }
  536. }
  537. [DescAttribute("单位添加HP", "单位")]
  538. public class UnitAddHPAction : AbstractAction
  539. {
  540. [DescAttribute("单位")]
  541. public UnitValue Unit = new UnitValue.Trigging();
  542. [DescAttribute("增加HP")]
  543. public IntegerValue AddHP = new IntegerValue.VALUE();
  544. public override string ToString()
  545. {
  546. return string.Format("给({0})添加({1})HP", Unit, AddHP);
  547. }
  548. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  549. {
  550. InstanceUnit unit = Unit.GetValue(api, args) as InstanceUnit;
  551. if(unit != null)
  552. {
  553. int add_hp = AddHP.GetValue(api, args);
  554. unit.AddHP(add_hp, null);
  555. }
  556. }
  557. }
  558. [DescAttribute("单位添加HP百分比", "单位")]
  559. public class UnitAddHPPctAction : AbstractAction
  560. {
  561. [DescAttribute("单位")]
  562. public UnitValue Unit = new UnitValue.Trigging();
  563. [DescAttribute("增加HP百分比")]
  564. public RealValue AddHPPct = new RealValue.VALUE();
  565. public override string ToString()
  566. {
  567. return string.Format("给({0})添加({1})%HP", Unit, AddHPPct);
  568. }
  569. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  570. {
  571. InstanceUnit unit = Unit.GetValue(api, args) as InstanceUnit;
  572. if(unit != null)
  573. {
  574. float add_hp = AddHPPct.GetValue(api, args);
  575. unit.AddHP_Pct(add_hp, unit);
  576. }
  577. }
  578. }
  579. [DescAttribute("单位清除所有BUFF(Debuff)", "单位")]
  580. public class UnitCleanBuffAction : AbstractAction
  581. {
  582. [DescAttribute("单位")]
  583. public UnitValue Unit = new UnitValue.Trigging();
  584. public override string ToString()
  585. {
  586. return string.Format("清理{0}所有的BUFF", Unit);
  587. }
  588. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  589. {
  590. InstanceUnit unit = Unit.GetValue(api, args);
  591. if(unit != null)
  592. {
  593. unit.clearBuffs();
  594. }
  595. }
  596. }
  597. [DescAttribute("单位传送", "单位")]
  598. public class UnitTransportAction : AbstractAction
  599. {
  600. [DescAttribute("单位")]
  601. public UnitValue Unit = new UnitValue.Trigging();
  602. [DescAttribute("位置")]
  603. public PositionValue Pos = new PositionValue.VALUE();
  604. public override string ToString()
  605. {
  606. return string.Format("{0}传送到{1}", Unit, Pos);
  607. }
  608. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  609. {
  610. InstanceUnit unit = Unit.GetValue(api, args);
  611. Vector2 pos = Pos.GetValue(api, args);
  612. if(unit != null && pos != null)
  613. {
  614. unit.transport(pos.X, pos.Y);
  615. }
  616. }
  617. }
  618. [DescAttribute("单位暂停/继续逻辑", "单位")]
  619. public class UnitPauseAction : AbstractAction
  620. {
  621. [DescAttribute("单位")]
  622. public UnitValue Unit = new UnitValue.Trigging();
  623. [DescAttribute("暂停/继续")]
  624. public BooleanValue Pause = new BooleanValue.VALUE();
  625. [DescAttribute("暂停时长(毫秒)")]
  626. public IntegerValue PauseTimeMS = new IntegerValue.VALUE(0);
  627. public override string ToString()
  628. {
  629. return string.Format("{0}.暂停逻辑={1}", Unit, Pause);
  630. }
  631. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  632. {
  633. InstanceUnit unit = Unit.GetValue(api, args);
  634. Boolean pause = Pause.GetValue(api, args);
  635. int timeMS = PauseTimeMS.GetValue(api, args);
  636. if(unit != null)
  637. {
  638. unit.Pause(pause, timeMS);
  639. }
  640. }
  641. }
  642. [DescAttribute("克隆单位", "单位")]
  643. public class CloneUnitAction : AbstractAction
  644. {
  645. [DescAttribute("克隆原始体")]
  646. public UnitValue SrcUnit = new UnitValue.Trigging();
  647. [DescAttribute("克隆单位类型")]
  648. public UnitInfo.UnitType NewType = UnitInfo.UnitType.TYPE_MANUAL;
  649. [DescAttribute("克隆单位名字")]
  650. public string NewName = "Clone";
  651. [DescAttribute("克隆单位阵营")]
  652. public IntegerValue NewForce = new IntegerValue.VALUE(0);
  653. [DescAttribute("克隆单位等级")]
  654. public int NewLevel = 0;
  655. [DescAttribute("位置")]
  656. public PositionValue Position = new PositionValue.VALUE();
  657. public override string ToString()
  658. {
  659. return string.Format("克隆单位({0})到({1})", SrcUnit, NewName);
  660. }
  661. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  662. {
  663. Vector2 pos = Position.GetValue(api, args);
  664. InstanceUnit src = SrcUnit.GetValue(api, args);
  665. if(pos != null && src != null)
  666. {
  667. UnitInfo info = (UnitInfo)src.Info.Clone();
  668. info.UType = NewType;
  669. InstanceUnit u = api.ZoneAPI.AddUnit(info, NewName, (byte)NewForce.GetValue(api, args), NewLevel, pos.X, pos.Y, src.Direction);
  670. if(u != null)
  671. {
  672. u.SetVisibleInfo(src.VisibleInfo);
  673. }
  674. }
  675. }
  676. }
  677. [DescAttribute("单位开始逃跑", "单位")]
  678. public class UnitEscapeAction : AbstractAction
  679. {
  680. [DescAttribute("单位")]
  681. public UnitValue SrcUnit = new UnitValue.Trigging();
  682. [DescAttribute("持续时间(ms)")]
  683. public IntegerValue KeepTimeMS = new IntegerValue.VALUE(10000);
  684. [DescAttribute("逃跑距离")]
  685. public RealValue EscapeDistance = new RealValue.VALUE(20);
  686. public override string ToString()
  687. {
  688. return string.Format("单位({0})开始逃跑", SrcUnit);
  689. }
  690. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  691. {
  692. var src = SrcUnit.GetValue(api, args);
  693. if(src != null)
  694. {
  695. var distance = EscapeDistance.GetValue(api, args);
  696. var time = KeepTimeMS.GetValue(api, args);
  697. src.startEscape(time, distance);
  698. }
  699. }
  700. }
  701. #endregion
  702. //-------------------------------------------------------------------------------------------
  703. #region __单组位动作__
  704. [DescAttribute("遍历某个阵营所有单位", "遍历单位组")]
  705. public class EveryForceUnitDoAction : AbstractAction
  706. {
  707. [DescAttribute("阵营")]
  708. public IntegerValue SelectForce = new IntegerValue.VALUE(0);
  709. [DescAttribute("动作")]
  710. public AbstractAction Action = new DoNoting();
  711. public override string ToString()
  712. {
  713. return string.Format("遍历所有阵营{0}的单位 DO {1}", SelectForce, Action);
  714. }
  715. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  716. {
  717. byte force = (byte)SelectForce.GetValue(api, args);
  718. using(var units = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  719. {
  720. var args2 = args.Clone();
  721. api.ZoneAPI.GetForceUnits(force, units);
  722. foreach(InstanceUnit u in units)
  723. {
  724. args2.IteratingUnit = (u);
  725. Action.DoAction(api, args2);
  726. args2.IteratingUnit = (null);
  727. }
  728. }
  729. }
  730. }
  731. [DescAttribute("遍历所有单位", "遍历单位组")]
  732. public class EveryUnitDoAction : AbstractAction
  733. {
  734. [DescAttribute("动作")]
  735. public AbstractAction Action = new DoNoting();
  736. public override string ToString()
  737. {
  738. return string.Format("遍历所有单位 DO {0}", Action);
  739. }
  740. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  741. {
  742. using (var units = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  743. {
  744. var args2 = args.Clone();
  745. api.ZoneAPI.GetAllUnits(units);
  746. foreach (InstanceUnit u in units)
  747. {
  748. args2.IteratingUnit = (u);
  749. Action.DoAction(api, args2);
  750. args2.IteratingUnit = (null);
  751. }
  752. }
  753. }
  754. }
  755. [DescAttribute("遍历坐标半径范围内所有单位", "遍历单位组")]
  756. public class EveryRangedUnitDoAction : AbstractAction
  757. {
  758. [DescAttribute("坐标")]
  759. public PositionValue Position = new PositionValue.VALUE();
  760. [DescAttribute("半径")]
  761. public float Range = 10f;
  762. [DescAttribute("动作")]
  763. public AbstractAction Action = new DoNoting();
  764. public override string ToString()
  765. {
  766. return string.Format("遍历坐标({0})半径({1})范围内的单位 DO {2}", Position, Range, Action);
  767. }
  768. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  769. {
  770. Vector2 pos = Position.GetValue(api, args);
  771. if(pos != null)
  772. {
  773. using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  774. {
  775. var args2 = args.Clone();
  776. api.ZoneAPI.getObjectsRoundRange<InstanceUnit>(
  777. Collider.Object_Pos_IncludeInRound,
  778. pos.X, pos.Y, Range,
  779. list , null);
  780. foreach(InstanceUnit u in list)
  781. {
  782. args2.IteratingUnit = (u);
  783. Action.DoAction(api, args2);
  784. args2.IteratingUnit = (null);
  785. }
  786. }
  787. }
  788. }
  789. }
  790. [DescAttribute("遍历区域内所有单位", "遍历单位组")]
  791. public class EveryUnitInRegionDoAction : AbstractAction
  792. {
  793. [DescAttribute("区域")]
  794. public FlagValue Region = new FlagValue.EditorRegion();
  795. [DescAttribute("动作")]
  796. public AbstractAction Action = new DoNoting();
  797. public override string ToString()
  798. {
  799. return string.Format("遍历区域({0})内的单位 DO {1}", Region, Action);
  800. }
  801. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  802. {
  803. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  804. if(region != null)
  805. {
  806. using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  807. {
  808. var args2 = args.Clone();
  809. region.getObjectsInRegion<InstanceUnit>(list);
  810. foreach(InstanceUnit u in list)
  811. {
  812. args2.IteratingUnit = (u);
  813. Action.DoAction(api, args2);
  814. args2.IteratingUnit = (null);
  815. }
  816. }
  817. }
  818. }
  819. }
  820. [DescAttribute("遍历区域产生的所有单位", "遍历单位组")]
  821. public class EverySpawnedUnitInRegionDoAction : AbstractAction
  822. {
  823. [DescAttribute("区域")]
  824. public FlagValue Region = new FlagValue.EditorRegion();
  825. [DescAttribute("动作")]
  826. public AbstractAction Action = new DoNoting();
  827. public override string ToString()
  828. {
  829. return string.Format("遍历区域({0})产生的单位 DO {1}", Region, Action);
  830. }
  831. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  832. {
  833. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  834. if(region != null)
  835. {
  836. using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  837. {
  838. var args2 = args.Clone();
  839. region.getSpawnedObjectsInRegion<InstanceUnit>(list);
  840. foreach(InstanceUnit u in list)
  841. {
  842. args2.IteratingUnit = (u);
  843. Action.DoAction(api, args2);
  844. args2.IteratingUnit = (null);
  845. }
  846. }
  847. }
  848. }
  849. }
  850. #endregion
  851. }