Advertisement
Guest User

Untitled

a guest
Dec 6th, 2018
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.18 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ComponentModel;
  6. using System.Xml.Serialization;
  7.  
  8. namespace Astral.Logic.UCC.Actions
  9. {
  10.     public class Spell : Classes.UCCAction
  11.     {
  12.         public override Classes.UCCAction Clone()
  13.         {
  14.             var newSpell = new Spell();
  15.             newSpell.SpellID = SpellID;
  16.             newSpell.CastingTime = CastingTime;
  17.             return BaseClone(newSpell);
  18.         }
  19.  
  20.         public override bool NeedToRun
  21.         {
  22.             get
  23.             {
  24.                 var power = NW.Powers.GetPowerByInternalName(SpellID);
  25.                 if (!power.IsValid)
  26.                 {
  27.                     return false;
  28.                 }
  29.                 if (power.UseCharges())
  30.                 {
  31.                     if (!power.ChargeAvailable())
  32.                     {
  33.                         return false;
  34.                     }
  35.                 }
  36.                 if (power.PowerDef.IsDaily && Shortcut.LocalPlayer.Character.AttribsBasic.ActionPoints < 1000)
  37.                 {
  38.                     return false;
  39.                 }
  40.                 if (power.IsOnCooldown())
  41.                 {
  42.                     return false;
  43.                 }
  44.                 if (!power.IsInTray)
  45.                 {
  46.                     if (!Classes.ActionsPlayer.combatBLActions.Contains(this))
  47.                         Classes.ActionsPlayer.combatBLActions.Add(this);
  48.                     return false;
  49.                 }
  50.                 return true;
  51.             }
  52.         }
  53.  
  54.         [Browsable(false), XmlIgnore()]
  55.         MyNW.Classes.Entity TargetEntity
  56.         {
  57.             get
  58.             {
  59.                 switch (Target)
  60.                 {
  61.                     case Ressources.Enums.Unit.Player:
  62.                         return Shortcut.LocalPlayer;
  63.                     case Ressources.Enums.Unit.MostInjuredAlly:
  64.                         return Classes.ActionsPlayer.MostInjuredAlly;
  65.                     case Ressources.Enums.Unit.StrongestAdd:
  66.                         return Classes.ActionsPlayer.AnAdd;
  67.                     case Ressources.Enums.Unit.StrongestTeamMember:
  68.                         return Classes.ActionsPlayer.StrongestTeamMember;
  69.                     default:
  70.                         return Core.CurrentTarget;
  71.                 }
  72.             }
  73.         }
  74.  
  75.         static Astral.Classes.Timeout stopMoveDodgeTO = new Astral.Classes.Timeout(0);
  76.         public override bool Run()
  77.         {
  78.            
  79.             var power = NW.Powers.GetPowerByInternalName(SpellID);
  80.             var powerDef = power.EffectivePowerDef();
  81.             if (Target != Ressources.Enums.Unit.Player)
  82.             {
  83.                 switch (Target)
  84.                 {
  85.                     case Ressources.Enums.Unit.MostInjuredAlly:
  86.                         Controllers.Movements.SpecificTarget = Classes.ActionsPlayer.MostInjuredAlly;
  87.                         break;
  88.                     case Ressources.Enums.Unit.StrongestTeamMember:
  89.                         Controllers.Movements.SpecificTarget = Classes.ActionsPlayer.StrongestTeamMember;
  90.                         break;
  91.                     case Ressources.Enums.Unit.StrongestAdd:
  92.                         Controllers.Movements.SpecificTarget = Classes.ActionsPlayer.AnAdd;
  93.                         break;
  94.                     default:
  95.                         Controllers.Movements.SpecificTarget = null;
  96.                         break;
  97.                 }
  98.                 int range = NW.Powers.getEffectiveRange(powerDef);
  99.                 if (Range > 0)
  100.                     range = Range;
  101.                 if (range > 1)
  102.                 {
  103.                     if (range < 7)
  104.                         range = 7;
  105.                     Controllers.Movements.RequireRange = range - 2;
  106.                     while (!Controllers.Movements.RangeIsOk)
  107.                     {
  108.                         if (Core.CurrentTarget.IsDead)
  109.                         {
  110.                             return true;
  111.                         }
  112.                         System.Threading.Thread.Sleep(100);
  113.                         if (stopMoveDodgeTO.IsTimedOut && Astral.Controllers.AOECheck.PlayerIsInAOE)
  114.                         {
  115.                             stopMoveDodgeTO.ChangeTime(3500);
  116.                             return true;
  117.                         }
  118.                     }
  119.                 }
  120.             }
  121.             int castTime = 0;
  122.             if (CastingTime > 0)
  123.                 castTime = CastingTime;
  124.             else
  125.             {
  126.                 castTime = NW.Powers.getEffectiveTimeCharge(powerDef);
  127.             }
  128.  
  129.  
  130.             var target = new MyNW.Classes.Entity(TargetEntity.Pointer);
  131.             if (target.ContainerId != Shortcut.LocalPlayer.ContainerId &&
  132.                 !target.Location.IsInYawFace)
  133.             {
  134.                 target.Location.Face();
  135.                 var faceTo = new Astral.Classes.Timeout(750);
  136.                 while (!target.Location.IsInYawFace)
  137.                 {
  138.                     if (faceTo.IsTimedOut)
  139.                         break;
  140.                     System.Threading.Thread.Sleep(20);
  141.                 }
  142.                 System.Threading.Thread.Sleep(100);
  143.             }
  144.  
  145.             var activateTimeTo = NW.Powers.getEffectiveTimeActivate(powerDef) * 1.5;
  146.  
  147.             var to = new Astral.Classes.Timeout(castTime);
  148.             try
  149.             {
  150.                 if (!powerDef.GroundTargeted && !powerDef.Categories.Contains(MyNW.Patchables.Enums.PowerCategory.IgnorePitch))
  151.                 {
  152.                     NW.Powers.ExecPower(power, target, true);
  153.                 }
  154.                 else
  155.                 {
  156.                     var aoeLoc = target.Location;
  157.                     aoeLoc.Z += 3;
  158.                     NW.Powers.ExecPower(power, aoeLoc, true);
  159.                 }
  160.  
  161.                 while (true)
  162.                 {
  163.                     if (power.UseCharges())
  164.                     {
  165.                         if (!power.ChargeAvailable())
  166.                             break;
  167.                     }
  168.                     if (Core.CurrentTarget.IsDead)
  169.                         return true;
  170.                     if (to.IsTimedOut)
  171.                         break;
  172.                     if (power.IsActive)
  173.                         break;
  174.                     System.Threading.Thread.Sleep(20);
  175.                     if (Astral.Controllers.AOECheck.PlayerIsInAOE)
  176.                         break;
  177.                 }
  178.             }
  179.             catch { }
  180.             finally
  181.             {
  182.                 NW.Powers.ExecPower(power, target, false);
  183.             }
  184.             NW.Powers.WaitPowerActivation(power, (int)activateTimeTo);            
  185.  
  186.             return true;
  187.         }
  188.  
  189.         [Browsable(false), XmlIgnore]
  190.         public bool Slotted
  191.         {
  192.             get
  193.             {
  194.                 var spell = NW.Powers.GetPowerByInternalName(spellID);
  195.                 foreach (var pid in Shortcut.LocalPlayer.Character.SlottedPowers)
  196.                 {
  197.                     if (spell.PowerId == pid)
  198.                         return true;
  199.                 }
  200.                 return false;
  201.             }
  202.         }
  203.        
  204.         public override string ToString()
  205.         {
  206.             if (SpellID.Length > 0)
  207.             {
  208.                 var spell = NW.Powers.GetPowerByInternalName(spellID);
  209.                 if (spell.IsValid)
  210.                 {
  211.                     var txt = string.Empty;
  212.                     if (Slotted)
  213.                         txt += "[Slotted] ";
  214.                     if (spell.EffectivePowerDef().DisplayName.Length > 0)
  215.                         txt += spell.EffectivePowerDef().DisplayName;
  216.                     else
  217.                         txt += spell.EffectivePowerDef().InternalName;
  218.                     txt += " (Spell)";
  219.                     return txt;
  220.                 }
  221.                 else
  222.                 {
  223.                     var spellDef = NW.Powers.GetPowerDefByPowerId(SpellID);
  224.                     if (spellDef.IsValid)
  225.                         return spellDef.DisplayName + " (Unknown Spell)";
  226.                 }
  227.             }
  228.             return "Unknow Spell";
  229.         }
  230.  
  231.         [Browsable(false)]
  232.         public new string ActionName { get; set; }
  233.  
  234.         public Spell()
  235.         {
  236.             spellID = string.Empty;
  237.             CastingTime = 0;
  238.         }
  239.  
  240.         string spellID = string.Empty;
  241.         [DisplayName("Spell ID"), Category("Required"), TypeConverter(typeof(Converters.AnSpell))]
  242.         public string SpellID
  243.         {
  244.             get
  245.             {
  246.                 return spellID;
  247.             }
  248.             set
  249.             {
  250.                 if (value.Length > 0)
  251.                 {
  252.                     var power = NW.Powers.GetPowerByDisplayName(value);
  253.                     if (power.IsValid)
  254.                     {
  255.                         spellID = power.PowerDef.InternalName;
  256.                         return;
  257.                     }
  258.                 }
  259.                 spellID = value;
  260.             }
  261.         }
  262.         [DisplayName("Casting Time (ms)"), Description("0 for automatic"), Category("Advanced (Optionnal)")]
  263.         public int CastingTime { get; set; }
  264.     }
  265.  
  266. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement