Spell Force Staff

Discussion in 'Tutorials and Resources' started by Juggernaut, Jun 26, 2012.

  1. Juggernaut

    Juggernaut I don't know what to change it to

    Ratings:
    +32 / 0 / -0
    Force Staff
    By Trena99 (this is my first submision)​
    Description: This is an Item spell that lets you push units around.
    You can use it on Enemies, Allies.
    You can go through units/buildings/terrain with this spell. Since it is an item spell there is no need for leveling because it actually doesn't do any dmg (it can be made to deal dmg though). Anyways if someone wants I could make it leveled.

    Requirements: No software such as newgen are used here, it is made in WC3 - Editor.
    Only Winrar/7zip are needed to extract the map.
    Winrar | Download link
    • Made in GUI, it is a simple trigger
    • Customizable - Duration, Range, can be made to deal damage etc.
    • You can duplicate it easily
    • It does not leak (as far as i know)
    First part of the spell
    Trigger:
    • Force Spell
      • Events
      • Unit - A unit Starts the effect of an ability
      • Conditions
      • (Ability being cast) Equal to Push
      • Actions
      • -------- Defining the variables --------
      • Set Unit_Caster_Target[2] = (Target unit of ability being cast)
      • Set Unit_Caster_Target[1] = (Triggering unit)
      • Countdown Timer - Start Timer as a One-shot timer that will expire in 0.19 seconds
      • -------- Turning Collision Off so that you go through units/buildings/Cliffs etc. --------
      • Unit - Turn collision for Unit_Caster_Target[2] Off
      • Trigger - Turn on Force Push <gen>

    Part2 of the spell
    Trigger:
    • Force Push
      • Events
      • Time - Every 0.01 seconds of game time
      • Conditions
      • (Unit_Caster_Target[2] is alive) Equal to True
      • Actions
      • Set Position_Caster_Target[1] = (Position of Unit_Caster_Target[2])
      • Set Facing_Caster = (Facing of Unit_Caster_Target[2])
      • Set Position_Caster_Target[2] = (Position_Caster_Target[1] offset by 30.00 towards (Facing_Caster + 0.00) degrees)
      • Special Effect - Create a special effect at Position_Caster_Target[2] using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
      • Unit - Move Unit_Caster_Target[2] instantly to Position_Caster_Target[2]
      • Special Effect - Destroy (Last created special effect)
      • Custom script: call RemoveLocation(udg_Position_Caster_Target[1])
      • Custom script: call RemoveLocation(udg_Position_Caster_Target[2])

    The trigger that allows double tapping (Part1)
    Trigger:
    • Force DoubleTap
      • Events
      • Unit - A unit Starts the effect of an ability
      • Conditions
      • (Ability being cast) Equal to Push
      • (Target item of ability being cast) Equal to (Item carried by (Triggering unit) of type Force Staff)
      • Actions
      • -------- Variables --------
      • Set Unit_Caster_Target[2] = (Triggering unit)
      • -------- Turning Collision Off so that you go through units/buildings/Cliffs etc. --------
      • Unit - Turn collision for Unit_Caster_Target[2] Off
      • Countdown Timer - Start Timer as a One-shot timer that will expire in 0.19 seconds
      • -------- Turning off the other trigger to prevent double pushing --------
      • Trigger - Turn off Force Push <gen>
      • Trigger - Turn on Push Double Tap <gen>

    The trigger that allows double tapping (part2)
    Trigger:
    • Push Double Tap
      • Events
      • Time - Every 0.01 seconds of game time
      • Conditions
      • (Unit_Caster_Target[2] is alive) Equal to True
      • Actions
      • Set Position_Caster_Target[1] = (Position of Unit_Caster_Target[2])
      • Set Facing_Caster = (Facing of Unit_Caster_Target[2])
      • Set Position_Caster_Target[2] = (Position_Caster_Target[1] offset by 30.00 towards (Facing_Caster + 0.00) degrees)
      • Special Effect - Create a special effect at Position_Caster_Target[2] using Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
      • Unit - Move Unit_Caster_Target[2] instantly to Position_Caster_Target[2]
      • Special Effect - Destroy (Last created special effect)
      • Custom script: call RemoveLocation(udg_Position_Caster_Target[1])
      • Custom script: call RemoveLocation(udg_Position_Caster_Target[2])

    The end of the spell
    Trigger:
    • Force End
      • Events
      • Time - Timer expires
      • Conditions
      • Actions
      • Unit - Turn collision for Unit_Caster_Target[2] On
      • Set Unit_Caster_Target[1] = No unit
      • Set Unit_Caster_Target[2] = No unit
      • Set Facing_Caster = 0.00
      • Trigger - Turn off Force Push <gen>
      • Trigger - Turn off Push Double Tap <gen>
    Version 1.0.0 *First release
     

    Attached Files:

  2. BlackRose

    BlackRose Forum User

    Ratings:
    +239 / 0 / -0
    The ability name is actually Force by the way.

    Firstly, having a 0.01 timer that checks whether a unit variable is null or not to perform code isn't the best approach. It is inefficient as the timer is always running. Also, 0.01 isn't the best figure for the period. Something like 0.025 - 0.04 will do as 25-40 moves per second will still provide smooth movement in comparison with 100 moves per second.

    I suggest you also allow the user to easily edit the spell constants (e.g. distance, speed, duration) with simply one variable modification instead of forcing them to do it in your triggers. Something like placing variables such as "Force_Distance" in the force spell cast trigger would work.

    Although not a requirement of this site (or is it? o_O), I would recommend you make the ability MUI (Multi-Unit Instanceable) so that two units can cast Force at the same time.
     

Share This Page