Tutorial How To Trigger Nether Swap

Fulla

Evil Overlord
Reaction score
31
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


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

thx
Fulla
 

The Helper

Necromancy Power over 9000
Staff member
Reaction score
1,701
I like how you illustrated it. I like Tutorials that show step by step graphics of the process.
 

Andrewgosu

The Silent Pandaren Helper
Reaction score
716
You don't have to declare so many variables and what about using "SetUnitPosition", which takes an unit and x, y coordinates as arguments?

JASS:
function NetherSwap_Actions takes nothing returns nothing
    local unit caster = GetTriggerUnit()
    local unit target = GetSpellTargetUnit()
    local real x = GetUnitX(caster)
    local real y = GetUnitY(caster)
    //"Move instantly" the caster to the pos. of the target.
    call SetUnitPosition( caster, GetUnitX(target), GetUnitX(target) )
    //"Move instantly" the target to the pos. of the caster.
    call SetUnitPosition( target, x, y )
    
    set caster = null
    set target = null
endfunction


Anyway, enough of picking on your back, nice and simple tutorial for beginners.
 

Fulla

Evil Overlord
Reaction score
31
Yea I wanted to keep it real basic.
Any tips for improvement?

If it gets approved Id like to have a go at making a series of simple spell tutorials, to increase the interest in JASS.
Most Jass tut's Ive seen, tend to be a bit to advanced for the beginner.
 

The Helper

Necromancy Power over 9000
Staff member
Reaction score
1,701
Make the Tutorials even if it does not get approved right away. Take advantage of the interest now because if you burn out you will never write them. You can always improve them with feedback here.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    New recipe is another summer dessert Berry and Peach Cheesecake - https://www.thehelper.net/threads/recipe-berry-and-peach-cheesecake.194169/

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top