Actions.Units.cs 30 KB

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