123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using CommonLang.Property;
- using CommonAI.Zone.Attributes;
- using CommonAI.Zone;
- using CommonAI.Zone.ZoneEditor;
- using CommonAI.RTS;
- using CommonLang.Vector;
- using CommonAI.Zone.Instance;
- using CommonAI.Zone.EventTrigger;
- using CommonLang;
- using CommonAI.Zone.Helper;
- using CommonAI.data;
- namespace CommonAI.Zone.ZoneEditor.EventTrigger
- {
- [DescAttribute("激活单位事件触发器", "单位触发器")]
- public class UnitEventTriggerActive : AbstractAction
- {
- [DescAttribute("事件触发器名字")]
- [UnitEventIDAttribute]
- public string EventName;
- public override string ToString()
- {
- return string.Format("激活单位事件触发器({0})", EventName);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- api.Group.EventActive(EventName, args);
- }
- }
- [DescAttribute("关闭单位事件触发器", "单位触发器")]
- public class UnitEventTriggerDeactive : AbstractAction
- {
- [DescAttribute("事件触发器名字")]
- [UnitEventIDAttribute]
- public string EventName;
- public override string ToString()
- {
- return string.Format("关闭单位事件触发器({0})", EventName);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- api.Group.EventDeactive(EventName, args);
- }
- }
- //-------------------------------------------------------------------------------------------
- #region __单位动作__
- [DescAttribute("添加单位", "单位")]
- public class AddUnitAction : AbstractAction
- {
- [DescAttribute("单位模板ID")]
- [TemplateIDAttribute(typeof(UnitInfo))]
- public int UnitTemplateID = 0;
- [DescAttribute("单位等级")]
- [TemplateLevelAttribute]
- public int UnitLevel = 0;
- [DescAttribute("单位阵营")]
- public IntegerValue Force = new IntegerValue.VALUE(1);
- [DescAttribute("用户定义名字(编辑器名字)")]
- public string UnitName;
- [DescAttribute("位置")]
- public PositionValue Position = new PositionValue.VALUE();
- [DescAttribute("朝向")]
- public float Direction;
- [DescAttribute("开始寻路")]
- public FlagValue.EditorPoint StartPoint;
- [DescAttribute("场景内是否唯一")]
- public bool unique;
- [DescAttribute("初始当前生命百分比(0, 100)")]
- public int hpPrecent;
- public override string ToString()
- {
- return string.Format("添加单位({0})到({1})", UnitTemplateID, Position);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- if(this.unique)
- {
- InstanceUnit targetUnit = api.ZoneAPI.getUnitByTemplateID(UnitTemplateID);
- if (targetUnit != null)
- {
- return;
- }
- }
- Vector2 pos = Position.GetValue(api, args);
- if(pos != null)
- {
- InstanceUnit unit = api.ZoneAPI.AddUnit(UnitTemplateID, UnitName, (byte)Force.GetValue(api, args), UnitLevel, pos.X, pos.Y, Direction, false);
- if(unit is IGuardUnit && StartPoint != null)
- {
- IGuardUnit guard = unit as IGuardUnit;
- InstanceFlag flag = StartPoint.GetValue(api, args);
- if(flag != null)
- {
- guard.AttackTo(flag as ZoneWayPoint);
- }
- }
- if(0 < hpPrecent && hpPrecent < 100)
- {
- int reduceHP = (int)(unit.MaxHP * 0.01f * (100 -hpPrecent));
- unit.ReduceHP(reduceHP, null, null, true, null, false, Data.DamageSource.Def, true);
- }
- }
- }
- }
- [DescAttribute("替换单位模板", "单位")]
- public class ReplaceUnitAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("新单位模板ID与旧模板的差值")]
- public IntegerValue IDDiff = new IntegerValue.VALUE(0);
- public override string ToString()
- {
- return string.Format("替换单位({0})模板(ID Diff:{1})", Unit, IDDiff);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null)
- {
- int newid = unit.Info.TemplateID + IDDiff.GetValue(api, args);
- UnitInfo info = api.ZoneAPI.Templates.getUnit(newid);
- if (info != null)
- {
- api.ZoneAPI.RemoveObject(unit);
- api.ZoneAPI.AddUnit(newid, unit.Name, unit.Force, unit.Level, unit.X, unit.Y, unit.Direction, false, unit.ID, unit.Alias);
- }
- }
- }
- }
- [DescAttribute("单位增加金钱", "单位")]
- public class UnitAddMoneyAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("金钱")]
- public IntegerValue Money = new IntegerValue.VALUE(100);
- public override string ToString()
- {
- return string.Format("给({0})增加金钱({1})", Unit, Money);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- int money = Money.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null && money != 0)
- {
- unit.CurrentMoney += money;
- }
- }
- }
- [DescAttribute("单位隐身", "单位")]
- public class UnitStealthAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("隐身")]
- public IntegerValue stealth = new IntegerValue.VALUE(1);
- public IntegerValue flag = new IntegerValue.VALUE(0);
- public override string ToString()
- {
- return string.Format("设置({0})隐身状态({1}),标记:{2}", Unit, stealth, flag);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- int stealthState = stealth.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null)
- {
- if(stealthState > 0)
- {
- int extValue = flag.GetValue(api, args);
- unit.AddActionSubState(UnitActionSubStatus.Stealth, (short)extValue);
- }
- else
- {
- unit.RemoveActionSubState(UnitActionSubStatus.Stealth);
- }
-
- }
- }
- }
- [DescAttribute("杀死单位", "单位")]
- public class KillUnitAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- public override string ToString()
- {
- return string.Format("杀死({0})", Unit);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null)
- {
- unit.kill();
- }
- }
- }
- [DescAttribute("复活单位", "单位")]
- public class ReviveUnitAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- public override string ToString()
- {
- return string.Format("复活({0})", Unit);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null && unit.is_dead())
- {
- unit.startRebirth();
- }
- }
- }
- [DescAttribute("直接移除单位", "单位")]
- public class RemoveUnitAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- public override string ToString()
- {
- return string.Format("直接移除({0})", Unit);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null)
- {
- api.ZoneAPI.RemoveObject(unit);
- }
- }
- }
- [DescAttribute("给单位添加BUFF(过时,请用TrggerEvent)", "单位")]
- public class UnitAddBuffAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("Buff模板ID")]
- [TemplateIDAttribute(typeof(BuffTemplate))]
- public int BuffTemplateID;
- public override string ToString()
- {
- return string.Format("给({0})添加BUFF({1})", Unit, BuffTemplateID);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- //Console.WriteLine("-----------------DoAction : " + TimeUtil.GetTimestampMS()/1000);
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null)
- {
- unit.AddBuff(BuffTemplateID);
- }
- }
- }
- [DescAttribute("单位触发TrggerEvent(Buff)", "单位")]
- public class UnitTriggerEventAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- public int TriggerID;
- public override string ToString()
- {
- return string.Format("单位({0})触发事件({1})", Unit, TriggerID);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- //单位事件,只允许自己触发,有攻击者的需要绑定攻击。
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null)
- {
- BattleFunction.GetInstance().TriggrBattleFunction(TriggerID, unit.Virtual, unit.Virtual);
- }
- }
- }
- [DescAttribute("给单位删除BUFF", "单位")]
- public class UnitRemoveBuffAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("Buff")]
- public BuffTemplateValue Buff = new BuffTemplateValue.Template();
- public override string ToString()
- {
- return string.Format("给({0})删除BUFF({1})", Unit, Buff);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- var unit = Unit.GetValue(api, args);
- var buff = Buff.GetValue(api, args);
- if(unit != null && buff != null)
- {
- unit.removeBuff(buff.ID);
- }
- }
- }
- [DescAttribute("单位直接使用物品", "单位")]
- public class UnitUseItemAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public ItemTemplateValue Item = new ItemTemplateValue.Template();
- public override string ToString()
- {
- return string.Format("给({0})使用物品({1})", Unit, Item);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ItemTemplate item = Item.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null && item != null)
- {
- unit.UseItem(item, unit);
- }
- }
- }
- [DescAttribute("单位冻结技能", "单位")]
- public class UnitRemoveSkill : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public int skillID;
- public override string ToString()
- {
- return string.Format("单位({0})冻结技能({1})", Unit, skillID);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null)
- {
- unit.SetSkillActive(skillID, false);
- }
- }
- }
- [DescAttribute("单位激活技能", "单位")]
- public class UnitActiveSkill : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public int skillID;
- public override string ToString()
- {
- return string.Format("单位({0})激活技能({1})", Unit, skillID);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if (unit != null)
- {
- unit.SetSkillActive(skillID, true);
- }
- }
- }
- [DescAttribute("设置单位(建筑)攻击目标", "单位")]
- public class SetUnitTragetAtkAction : AbstractAction
- {
- [DescAttribute("单位(建筑)")]
- public UnitValue Unit1 = new UnitValue.Trigging();
- [DescAttribute("单位(攻击者)")]
- public UnitValue Unit2 = new UnitValue.Trigging();
- public override string ToString()
- {
- return string.Format("设置({0})攻击目标为({1})", Unit1, Unit2);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceBuilding unit1 = Unit1.GetValue(api, args) as InstanceBuilding;
- InstanceUnit unit2 = Unit2.GetValue(api, args);
- if (unit1 != null && unit2 != null)
- {
- unit1.SetTracingTarget(unit2);
- }
- }
- }
- [DescAttribute("给单位背包添加道具", "单位 - 背包")]
- public class UnitAddInventoryItemAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public ItemTemplateValue Item = new ItemTemplateValue.Template();
- [DescAttribute("数量")]
- public IntegerValue Count = new IntegerValue.VALUE(1);
- public override string ToString()
- {
- return string.Format("给({0})背包添加{2}个物品({1})", Unit, Item, Count);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ItemTemplate item = Item.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- int count = Count.GetValue(api, args);
- if(unit != null && item != null && count > 0)
- {
- unit.AddItemToEmptyInventory(item, count);
- }
- }
- }
- [DescAttribute("从单位背包丢弃道具", "单位 - 背包")]
- public class UnitDropInventoryItemAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public ItemTemplateValue Item = new ItemTemplateValue.Template();
- [DescAttribute("数量")]
- public IntegerValue Count = new IntegerValue.VALUE(1);
- public override string ToString()
- {
- return string.Format("从({0})背包丢弃{2}个物品({1})", Unit, Item, Count);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ItemTemplate item = Item.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- int count = Count.GetValue(api, args);
- if(unit != null && item != null && count > 0)
- {
- unit.DropInventoryItemByType(item.ID, count);
- }
- }
- }
- [DescAttribute("从单位背包清除道具", "单位 - 背包")]
- public class UnitClearInventoryItemAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public ItemTemplateValue Item = new ItemTemplateValue.Template();
- public override string ToString()
- {
- return string.Format("从({0})背包清除物品({1})", Unit, Item);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ItemTemplate item = Item.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null && item != null)
- {
- unit.ClearInventoryItemByType(item.ID);
- }
- }
- }
- [DescAttribute("使用背包内的道具", "单位 - 背包")]
- public class UnitUseInventoryItemAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("物品")]
- public ItemTemplateValue Item = new ItemTemplateValue.Template();
- [DescAttribute("数量")]
- public IntegerValue Count = new IntegerValue.VALUE(1);
- public override string ToString()
- {
- return string.Format("使用({0})背包内的{2}个道具({1})", Unit, Item, Count);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ItemTemplate item = Item.GetValue(api, args);
- InstanceUnit unit = Unit.GetValue(api, args);
- int count = Count.GetValue(api, args);
- if(unit != null && item != null && count > 0)
- {
- unit.UseInventoryItemByType(item.ID, count);
- }
- }
- }
- [DescAttribute("单位释放法术", "单位")]
- public class UnitLaunchSpellAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("释放法术")]
- public LaunchSpell Spell = new LaunchSpell();
- public override string ToString()
- {
- return string.Format("({0})释放法术({1})", Unit, Spell);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null && Spell != null)
- {
- api.ZoneAPI.unitLaunchSpell(XmdsSkillType.none, unit, Spell, unit.X, unit.Y);
- }
- }
- }
- [DescAttribute("单位释放技能", "单位")]
- public class UnitLaunchSkillAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("释放技能")]
- public LaunchSkill Skill = new LaunchSkill();
- public override string ToString()
- {
- return string.Format("({0})释放技能({1})", Unit, Skill);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null && Skill != null)
- {
- unit.launchSkill(Skill.SkillID, new InstanceUnit.LaunchSkillParam());
- }
- }
- }
- [DescAttribute("给单位添加被动触发", "单位")]
- public class UnitAddTriggerAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("UnitTrigger模板ID")]
- [TemplateIDAttribute(typeof(UnitTriggerTemplate))]
- public int TriggerTemplateID;
- public override string ToString()
- {
- return string.Format("给({0})添加BUFF({1})", Unit, TriggerTemplateID);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args) as InstanceUnit;
- if(unit != null)
- {
- unit.addTrigger(TriggerTemplateID);
- }
- }
- }
- [DescAttribute("单位添加HP", "单位")]
- public class UnitAddHPAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("增加HP")]
- public IntegerValue AddHP = new IntegerValue.VALUE();
- public override string ToString()
- {
- return string.Format("给({0})添加({1})HP", Unit, AddHP);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args) as InstanceUnit;
- if(unit != null)
- {
- int add_hp = AddHP.GetValue(api, args);
- unit.AddHP(add_hp, null);
- }
- }
- }
- [DescAttribute("单位添加HP百分比", "单位")]
- public class UnitAddHPPctAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("增加HP百分比")]
- public RealValue AddHPPct = new RealValue.VALUE();
- public override string ToString()
- {
- return string.Format("给({0})添加({1})%HP", Unit, AddHPPct);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args) as InstanceUnit;
- if(unit != null)
- {
- float add_hp = AddHPPct.GetValue(api, args);
- unit.AddHP_Pct(add_hp, unit);
- }
- }
- }
- [DescAttribute("单位清除所有BUFF(Debuff)", "单位")]
- public class UnitCleanBuffAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- public override string ToString()
- {
- return string.Format("清理{0}所有的BUFF", Unit);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- if(unit != null)
- {
- unit.clearBuffs();
- }
- }
- }
- [DescAttribute("单位传送", "单位")]
- public class UnitTransportAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("位置")]
- public PositionValue Pos = new PositionValue.VALUE();
- [DescAttribute("改变朝向")]
- public float Direction = 0f;
- public override string ToString()
- {
- return string.Format("{0}传送到{1}", Unit, Pos);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- Vector2 pos = Pos.GetValue(api, args);
- if(unit != null && pos != null)
- {
- if (Math.Abs(Direction) < 0.001f)
- {
- unit.transport(pos.X, pos.Y);
- }
- else
- {
- unit.transport(pos.X, pos.Y, true, Direction);
- }
- }
- }
- }
- [DescAttribute("单位暂停/继续逻辑", "单位")]
- public class UnitPauseAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue Unit = new UnitValue.Trigging();
- [DescAttribute("暂停/继续")]
- public BooleanValue Pause = new BooleanValue.VALUE();
- [DescAttribute("暂停时长(毫秒)")]
- public IntegerValue PauseTimeMS = new IntegerValue.VALUE(0);
- public override string ToString()
- {
- return string.Format("{0}.暂停逻辑={1}", Unit, Pause);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceUnit unit = Unit.GetValue(api, args);
- Boolean pause = Pause.GetValue(api, args);
- int timeMS = PauseTimeMS.GetValue(api, args);
- if(unit != null)
- {
- unit.Pause(pause, timeMS);
- }
- }
- }
- [DescAttribute("克隆单位", "单位")]
- public class CloneUnitAction : AbstractAction
- {
- [DescAttribute("克隆原始体")]
- public UnitValue SrcUnit = new UnitValue.Trigging();
- [DescAttribute("克隆单位类型")]
- public UnitInfo.UnitType NewType = UnitInfo.UnitType.TYPE_MANUAL;
- [DescAttribute("克隆单位名字")]
- public string NewName = "Clone";
- [DescAttribute("克隆单位阵营")]
- public IntegerValue NewForce = new IntegerValue.VALUE(0);
- [DescAttribute("克隆单位等级")]
- public int NewLevel = 0;
- [DescAttribute("位置")]
- public PositionValue Position = new PositionValue.VALUE();
- public override string ToString()
- {
- return string.Format("克隆单位({0})到({1})", SrcUnit, NewName);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- Vector2 pos = Position.GetValue(api, args);
- InstanceUnit src = SrcUnit.GetValue(api, args);
- if(pos != null && src != null)
- {
- UnitInfo info = (UnitInfo)src.Info.Clone();
- info.UType = NewType;
- InstanceUnit u = api.ZoneAPI.AddUnit(info, NewName, (byte)NewForce.GetValue(api, args), NewLevel, pos.X, pos.Y, src.Direction);
- if(u != null)
- {
- u.SetVisibleInfo(src.VisibleInfo);
- }
- }
- }
- }
- [DescAttribute("单位开始逃跑", "单位")]
- public class UnitEscapeAction : AbstractAction
- {
- [DescAttribute("单位")]
- public UnitValue SrcUnit = new UnitValue.Trigging();
- [DescAttribute("持续时间(ms)")]
- public IntegerValue KeepTimeMS = new IntegerValue.VALUE(10000);
- [DescAttribute("逃跑距离")]
- public RealValue EscapeDistance = new RealValue.VALUE(20);
- public override string ToString()
- {
- return string.Format("单位({0})开始逃跑", SrcUnit);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- var src = SrcUnit.GetValue(api, args);
- if(src != null)
- {
- var distance = EscapeDistance.GetValue(api, args);
- var time = KeepTimeMS.GetValue(api, args);
- src.startEscape(time, distance);
- }
- }
- }
- #endregion
- //-------------------------------------------------------------------------------------------
- #region __单组位动作__
- [DescAttribute("遍历某个阵营所有单位", "遍历单位组")]
- public class EveryForceUnitDoAction : AbstractAction
- {
- [DescAttribute("阵营")]
- public IntegerValue SelectForce = new IntegerValue.VALUE(0);
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历所有阵营{0}的单位 DO {1}", SelectForce, Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- byte force = (byte)SelectForce.GetValue(api, args);
- using(var units = ListObjectPool<InstanceUnit>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- api.ZoneAPI.GetForceUnits(force, units);
- foreach(InstanceUnit u in units)
- {
- args2.IteratingUnit = (u);
- Action.DoAction(api, args2);
- args2.IteratingUnit = (null);
- }
- }
- }
- }
- [DescAttribute("遍历所有单位", "遍历单位组")]
- public class EveryUnitDoAction : AbstractAction
- {
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历所有单位 DO {0}", Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- using (var units = ListObjectPool<InstanceUnit>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- api.ZoneAPI.GetAllUnits(units);
- foreach (InstanceUnit u in units)
- {
- args2.IteratingUnit = (u);
- Action.DoAction(api, args2);
- args2.IteratingUnit = (null);
- }
- }
- }
- }
- [DescAttribute("遍历坐标半径范围内所有单位", "遍历单位组")]
- public class EveryRangedUnitDoAction : AbstractAction
- {
- [DescAttribute("坐标")]
- public PositionValue Position = new PositionValue.VALUE();
- [DescAttribute("半径")]
- public float Range = 10f;
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历坐标({0})半径({1})范围内的单位 DO {2}", Position, Range, Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- Vector2 pos = Position.GetValue(api, args);
- if(pos != null)
- {
- using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- api.ZoneAPI.getObjectsRoundRange<InstanceUnit>(
- Collider.Object_Pos_IncludeInRound,
- pos.X, pos.Y, Range,
- list , null);
- foreach(InstanceUnit u in list)
- {
- args2.IteratingUnit = (u);
- Action.DoAction(api, args2);
- args2.IteratingUnit = (null);
- }
- }
- }
- }
- }
- [DescAttribute("遍历区域内所有单位", "遍历单位组")]
- public class EveryUnitInRegionDoAction : AbstractAction
- {
- [DescAttribute("区域")]
- public FlagValue Region = new FlagValue.EditorRegion();
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历区域({0})内的单位 DO {1}", Region, Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
- if(region != null)
- {
- using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- region.getObjectsInRegion<InstanceUnit>(list);
- foreach(InstanceUnit u in list)
- {
- args2.IteratingUnit = (u);
- Action.DoAction(api, args2);
- args2.IteratingUnit = (null);
- }
- }
- }
- }
- }
- [DescAttribute("遍历区域产生的所有单位", "遍历单位组")]
- public class EverySpawnedUnitInRegionDoAction : AbstractAction
- {
- [DescAttribute("区域")]
- public FlagValue Region = new FlagValue.EditorRegion();
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历区域({0})产生的单位 DO {1}", Region, Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
- if(region != null)
- {
- using(var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- region.getSpawnedObjectsInRegion<InstanceUnit>(list);
- foreach(InstanceUnit u in list)
- {
- args2.IteratingUnit = (u);
- Action.DoAction(api, args2);
- args2.IteratingUnit = (null);
- }
- }
- }
- }
- }
- #endregion
- }
|