• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Nether Swap

Level 12
Joined
Aug 3, 2005
Messages
745
Nether Swap


Instantly swaps location with target unit:

NetherSwap1.jpg

NetherSwap2.jpg

Intro
This is a very basic and simplistic spell, which makes it ideal for starting out with jass.
This tutorial does not cover the introduction to jass but rather goes straight into making a spell.
It also has a brief introduction to the Channel ability

Starters
Firstly go into the object editor and create a nether swap ability.
I recommend basing it of Channel, which is found under Neutral Hostile> Hero Abilities

Here is a screenshot to show how you should modify it
Ability.jpg

1 & 2 - These are the special effects that will be added to Caster and Target, I chose Blink, its up to you.
3 - Make sure you have the same options.
> Disable other abilities = false
> Follow Through Time = 0.00
> Options = Visible
> Target Type = Unit

Next we need to create the trigger
Go into the Trigger Editor and create a trigger called: Nether Swap
Please Note: NOT NetherSwap or nether swap etc.but Nether Swap

Should look like this:
A2-1.jpg

Next you need to converted it to custom script:
A3.jpg

For now we will skip the Conditions/Actions bit as this is quite boring, Once weve made a few spells I'll explain this to you
So Ill give you a base code to copy paste.

This is what you should currently have:
B1.jpg

Copy Paste this:
JASS:
function Trig_Nether_Swap_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A00P'
endfunction

function Trig_Nether_Swap_Actions takes nothing returns nothing
    
endfunction

//===========================================================================
function InitTrig_Nether_Swap takes nothing returns nothing
    set gg_trg_Nether_Swap = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Nether_Swap, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_Nether_Swap, Condition(function Trig_Nether_Swap_Conditions))
    call TriggerAddAction(gg_trg_Nether_Swap, function Trig_Nether_Swap_Actions)
endfunction

So now it should look like this:
B2.jpg

Now we need to make sure the correct ability is in the condition.
For this go back into the Object Editor and click
View > Display Values as Raw Data
C1.jpg

Next we need to get the raw data for the ability
In this case it is A000
C2.jpg

Note: In your map if may differ so make sure to check.
Next go back into the trigger editor and lets alter the condition
C3.jpg

Notice how Ive changed it to 'A000'

Ok we are now ready to start coding the spell :p

Method
This is how we will do the spell:
- Create a local to store: Casting Unit
- Create a local to store: Target Unit of Ability Being Cast Unit
- Create locals to store: Casting Unit's co-ordinates
- Create locals to store: Target Unit of Ability Being Cast's co-ordinates

- Move Casting Unit
- Move Target Unit of ability being cast

- Clean up leaks

Jass Code
The following code will go inside the Actions section:
Actions.jpg

Where the cursor is begin typing in there

Firstly we declare the locals

JASS:
    local unit c = GetTriggerUnit()
    local unit t = GetSpellTargetUnit()

c = the Casting Unit
t = The Target Unit of ability being cast

Next we create locals for their co-ordinates

JASS:
    local real xc = GetUnitX(c)
    local real yc = GetUnitY(c)
    local real xt = GetUnitX(t)
    local real yt = GetUnitY(t)

xc & yc = the co-ordinates of the Casting Unit
xt & yt = the co-ordinates of the Target Unit of ability being cast

Now we will set each unit's new position

JASS:
    call SetUnitX(c, xt)
    call SetUnitY(c, yt)
    call SetUnitX(t, xc)
    call SetUnitY(t, yc)

This will place:
- Casting unit at co-ordinates stored for the Target Unit of ability being cast
- Target Unit of ability being cast at co-ordinates stored for the Casting Unit

Finally we clean up the leaks

JASS:
    set c = null
    set t = null

This is overall how your code should look

JASS:
function Trig_Nether_Swap_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A00P'
endfunction

function Trig_Nether_Swap_Actions takes nothing returns nothing
    local unit c = GetTriggerUnit()
    local unit t = GetSpellTargetUnit()
    local real xc = GetUnitX(c)
    local real yc = GetUnitY(c)
    local real xt = GetUnitX(t)
    local real yt = GetUnitY(t)
    call SetUnitX(c, xt)
    call SetUnitY(c, yt)
    call SetUnitX(t, xc)
    call SetUnitY(t, yc)
    set c = null
    set t = null
endfunction

//===========================================================================
function InitTrig_Nether_Swap takes nothing returns nothing
    set gg_trg_Nether_Swap = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Nether_Swap, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_Nether_Swap, Condition(function Trig_Nether_Swap_Conditions))
    call TriggerAddAction(gg_trg_Nether_Swap, function Trig_Nether_Swap_Actions)
endfunction

You can make the code, slightly more efficient by replacing:

JASS:
    local real xt = GetUnitX(t)
    local real yt = GetUnitY(t)
    call SetUnitX(c, xt)
    call SetUnitY(c, yt)

with:

JASS:
    call SetUnitX(c, GetUnitX(t))
    call SetUnitY(c, GetUnitY(t))

Your jass spell should now work, have fun and enjoy and stay tuned for more step by step mini jass tuts :)

thx
Fulla
 
Last edited by a moderator:
Level 40
Joined
Dec 14, 2005
Messages
10,532
Yeah, diablo, that's what I meant.

And less variables would be simpler for beginners, I would imagine. However, that's your choice.

And yes, JASS tags are preferrable. try replacing [code][/code] with [code=jass][/code] and making no other changes, and seeing if it works. If not, you should probably report it in the bug report forum.
 
Level 32
Joined
Oct 23, 2006
Messages
5,291
I renamed the thread for you Fulla: Jass Tut: 1.01 - Nether Swap

Before we can approve it you will have to review:
[self="http://hiveworkshop.com/forums/announcement.php?f=283"]General Tutorial Submitting Rules and Guidelines - Read Before Posting![/self]
and bring the tutorial up to those standards.
  • All image files must be attached to your post. We don't wish to be dependent on other sites (to avoid situations in which the server that hosts images fails, thus damaging the tutorial).

  • No signature files may be attached to tutorials. Instead, edit your tutorial to include your signature's contents (no attached or linked images are permitted).

You should detach your siggy from the tut and use the [ATTACH][/ATTACH] tags instead of the [IMG][/IMG] tags.
 
Level 8
Joined
May 13, 2007
Messages
392
Wait... cant you just do it with GUI ?

Event - Unit castes and ability
Condition - Casting ability equal to Nether Swap
Action - Create Effect over casting unit (an effect)
- Move instantly casting unit to position of (the unit targeted by ability)
- Create Effect over unit targeted by ability (an effect)

I did it, i used it in a map of mine, i played it multiplayer and i had no leaks.
 
Top