Actions.Units.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937
  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, unit.Alias);
  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. [DescAttribute("改变朝向")]
  605. public float Direction = 0f;
  606. public override string ToString()
  607. {
  608. return string.Format("{0}传送到{1}", Unit, Pos);
  609. }
  610. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  611. {
  612. InstanceUnit unit = Unit.GetValue(api, args);
  613. Vector2 pos = Pos.GetValue(api, args);
  614. if(unit != null && pos != null)
  615. {
  616. if (Math.Abs(Direction) < 0.001f)
  617. {
  618. unit.transport(pos.X, pos.Y);
  619. }
  620. else
  621. {
  622. unit.transport(pos.X, pos.Y, true, Direction);
  623. }
  624. }
  625. }
  626. }
  627. [DescAttribute("单位暂停/继续逻辑", "单位")]
  628. public class UnitPauseAction : AbstractAction
  629. {
  630. [DescAttribute("单位")]
  631. public UnitValue Unit = new UnitValue.Trigging();
  632. [DescAttribute("暂停/继续")]
  633. public BooleanValue Pause = new BooleanValue.VALUE();
  634. [DescAttribute("暂停时长(毫秒)")]
  635. public IntegerValue PauseTimeMS = new IntegerValue.VALUE(0);
  636. public override string ToString()
  637. {
  638. return string.Format("{0}.暂停逻辑={1}", Unit, Pause);
  639. }
  640. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  641. {
  642. InstanceUnit unit = Unit.GetValue(api, args);
  643. Boolean pause = Pause.GetValue(api, args);
  644. int timeMS = PauseTimeMS.GetValue(api, args);
  645. if(unit != null)
  646. {
  647. unit.Pause(pause, timeMS);
  648. }
  649. }
  650. }
  651. [DescAttribute("克隆单位", "单位")]
  652. public class CloneUnitAction : AbstractAction
  653. {
  654. [DescAttribute("克隆原始体")]
  655. public UnitValue SrcUnit = new UnitValue.Trigging();
  656. [DescAttribute("克隆单位类型")]
  657. public UnitInfo.UnitType NewType = UnitInfo.UnitType.TYPE_MANUAL;
  658. [DescAttribute("克隆单位名字")]
  659. public string NewName = "Clone";
  660. [DescAttribute("克隆单位阵营")]
  661. public IntegerValue NewForce = new IntegerValue.VALUE(0);
  662. [DescAttribute("克隆单位等级")]
  663. public int NewLevel = 0;
  664. [DescAttribute("位置")]
  665. public PositionValue Position = new PositionValue.VALUE();
  666. public override string ToString()
  667. {
  668. return string.Format("克隆单位({0})到({1})", SrcUnit, NewName);
  669. }
  670. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  671. {
  672. Vector2 pos = Position.GetValue(api, args);
  673. InstanceUnit src = SrcUnit.GetValue(api, args);
  674. if(pos != null && src != null)
  675. {
  676. UnitInfo info = (UnitInfo)src.Info.Clone();
  677. info.UType = NewType;
  678. InstanceUnit u = api.ZoneAPI.AddUnit(info, NewName, (byte)NewForce.GetValue(api, args), NewLevel, pos.X, pos.Y, src.Direction);
  679. if(u != null)
  680. {
  681. u.SetVisibleInfo(src.VisibleInfo);
  682. }
  683. }
  684. }
  685. }
  686. [DescAttribute("单位开始逃跑", "单位")]
  687. public class UnitEscapeAction : AbstractAction
  688. {
  689. [DescAttribute("单位")]
  690. public UnitValue SrcUnit = new UnitValue.Trigging();
  691. [DescAttribute("持续时间(ms)")]
  692. public IntegerValue KeepTimeMS = new IntegerValue.VALUE(10000);
  693. [DescAttribute("逃跑距离")]
  694. public RealValue EscapeDistance = new RealValue.VALUE(20);
  695. public override string ToString()
  696. {
  697. return string.Format("单位({0})开始逃跑", SrcUnit);
  698. }
  699. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  700. {
  701. var src = SrcUnit.GetValue(api, args);
  702. if(src != null)
  703. {
  704. var distance = EscapeDistance.GetValue(api, args);
  705. var time = KeepTimeMS.GetValue(api, args);
  706. src.startEscape(time, distance);
  707. }
  708. }
  709. }
  710. #endregion
  711. //-------------------------------------------------------------------------------------------
  712. #region __单组位动作__
  713. [DescAttribute("遍历某个阵营所有单位", "遍历单位组")]
  714. public class EveryForceUnitDoAction : AbstractAction
  715. {
  716. [DescAttribute("阵营")]
  717. public IntegerValue SelectForce = new IntegerValue.VALUE(0);
  718. [DescAttribute("动作")]
  719. public AbstractAction Action = new DoNoting();
  720. public override string ToString()
  721. {
  722. return string.Format("遍历所有阵营{0}的单位 DO {1}", SelectForce, Action);
  723. }
  724. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  725. {
  726. byte force = (byte)SelectForce.GetValue(api, args);
  727. using(var units = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  728. {
  729. var args2 = args.Clone();
  730. api.ZoneAPI.GetForceUnits(force, units);
  731. foreach(InstanceUnit u in units)
  732. {
  733. args2.IteratingUnit = (u);
  734. Action.DoAction(api, args2);
  735. args2.IteratingUnit = (null);
  736. }
  737. }
  738. }
  739. }
  740. [DescAttribute("遍历所有单位", "遍历单位组")]
  741. public class EveryUnitDoAction : AbstractAction
  742. {
  743. [DescAttribute("动作")]
  744. public AbstractAction Action = new DoNoting();
  745. public override string ToString()
  746. {
  747. return string.Format("遍历所有单位 DO {0}", Action);
  748. }
  749. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  750. {
  751. using (var units = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  752. {
  753. var args2 = args.Clone();
  754. api.ZoneAPI.GetAllUnits(units);
  755. foreach (InstanceUnit u in units)
  756. {
  757. args2.IteratingUnit = (u);
  758. Action.DoAction(api, args2);
  759. args2.IteratingUnit = (null);
  760. }
  761. }
  762. }
  763. }
  764. [DescAttribute("遍历坐标半径范围内所有单位", "遍历单位组")]
  765. public class EveryRangedUnitDoAction : AbstractAction
  766. {
  767. [DescAttribute("坐标")]
  768. public PositionValue Position = new PositionValue.VALUE();
  769. [DescAttribute("半径")]
  770. public float Range = 10f;
  771. [DescAttribute("动作")]
  772. public AbstractAction Action = new DoNoting();
  773. public override string ToString()
  774. {
  775. return string.Format("遍历坐标({0})半径({1})范围内的单位 DO {2}", Position, Range, Action);
  776. }
  777. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  778. {
  779. Vector2 pos = Position.GetValue(api, args);
  780. if(pos != null)
  781. {
  782. using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  783. {
  784. var args2 = args.Clone();
  785. api.ZoneAPI.getObjectsRoundRange<InstanceUnit>(
  786. Collider.Object_Pos_IncludeInRound,
  787. pos.X, pos.Y, Range,
  788. list , null);
  789. foreach(InstanceUnit u in list)
  790. {
  791. args2.IteratingUnit = (u);
  792. Action.DoAction(api, args2);
  793. args2.IteratingUnit = (null);
  794. }
  795. }
  796. }
  797. }
  798. }
  799. [DescAttribute("遍历区域内所有单位", "遍历单位组")]
  800. public class EveryUnitInRegionDoAction : AbstractAction
  801. {
  802. [DescAttribute("区域")]
  803. public FlagValue Region = new FlagValue.EditorRegion();
  804. [DescAttribute("动作")]
  805. public AbstractAction Action = new DoNoting();
  806. public override string ToString()
  807. {
  808. return string.Format("遍历区域({0})内的单位 DO {1}", Region, Action);
  809. }
  810. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  811. {
  812. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  813. if(region != null)
  814. {
  815. using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  816. {
  817. var args2 = args.Clone();
  818. region.getObjectsInRegion<InstanceUnit>(list);
  819. foreach(InstanceUnit u in list)
  820. {
  821. args2.IteratingUnit = (u);
  822. Action.DoAction(api, args2);
  823. args2.IteratingUnit = (null);
  824. }
  825. }
  826. }
  827. }
  828. }
  829. [DescAttribute("遍历区域产生的所有单位", "遍历单位组")]
  830. public class EverySpawnedUnitInRegionDoAction : AbstractAction
  831. {
  832. [DescAttribute("区域")]
  833. public FlagValue Region = new FlagValue.EditorRegion();
  834. [DescAttribute("动作")]
  835. public AbstractAction Action = new DoNoting();
  836. public override string ToString()
  837. {
  838. return string.Format("遍历区域({0})产生的单位 DO {1}", Region, Action);
  839. }
  840. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  841. {
  842. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  843. if(region != null)
  844. {
  845. using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  846. {
  847. var args2 = args.Clone();
  848. region.getSpawnedObjectsInRegion<InstanceUnit>(list);
  849. foreach(InstanceUnit u in list)
  850. {
  851. args2.IteratingUnit = (u);
  852. Action.DoAction(api, args2);
  853. args2.IteratingUnit = (null);
  854. }
  855. }
  856. }
  857. }
  858. }
  859. #endregion
  860. }