jass help - 1st time

exge

New Member
Reaction score
15
ok, i finally know the basics of jass ... yay .. so can some1 tell me of a spell which cannot be done in gui at all .. cos now i feel all can be done in gui too ... :D

yea .. and mayb some tutorials for jass-spells ... thanks all
 
D

dadads

Guest
A spell that can't be done in GUI?
Yes, try creating a multi-instancable dash-type spell (try make a Time Walk like in dota, or Greater Bash like in dota). Make sure that the sliding is smooth and does not look "broken".

What I mean by multi-instancable is that the spell would work such that the spell will run when any unit that has the skill uses it, and that it should still work correctly even when two units are using the same spell at the same time. Oh, and btw do not use global variables coz it would make the spell not multi-instancable.
 

exge

New Member
Reaction score
15
thanks dadads .. but this is my 1st time making a jass spell .. lol so i need at least a tutorial or a example to refer to ..
 

Arkan

Nobody rides for free
Reaction score
92
Daelin has a knockback example in one of his JASS tutorials, it uses Kattana's local vars system which I never got to work myself, however I managed to get it working by using vexorian's CScache system.
 

emjlr3

Change can be a good thing
Reaction score
395
or you might want to try my Dash spell tutorial ^^
 
D

dadads

Guest
lol, I actually learned how to create slides with JASS by studying his (the guy above me) Spiritbreaker map.

Once you can create a dash-type spell, you can try make a keyboard-controlled racing game, a "Snake" game, or whatever.
 

exge

New Member
Reaction score
15
ok so i got somehthing like this .... but the unit moves more like blinking ... see for yourself
Code:
function Trig_Dash_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A000' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Dash_Actions takes nothing returns nothing

    local unit caster = GetSpellAbilityUnit()
    local location targetloc = GetSpellTargetLoc()
    local location casterloc = GetUnitLoc(caster)
    
    loop

        set casterloc = GetUnitLoc(caster)
        call SetUnitPositionLoc(caster, PolarProjectionBJ(casterloc, 10.00, AngleBetweenPoints(casterloc, targetloc)))
        call PolledWait( 0.0001 )
        
        exitwhen DistanceBetweenPoints(casterloc, targetloc) <= 50
        endloop
endfunction

//===========================================================================
function InitTrig_Dash takes nothing returns nothing
    set gg_trg_Dash = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Dash, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Dash, Condition( function Trig_Dash_Conditions ) )
    call TriggerAddAction( gg_trg_Dash, function Trig_Dash_Actions )
endfunction
i think we need to improve the jass tag ..

EDIT: i made a new version with KaTTana's Local Handle Vars .. and now it cant even compile ...

Code:
function Trig_Dash_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function Dash_Move takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit caster = GetHandleUnit(t, "caster")
   local location casterloc = GetHandleUnit(casterloc, "casterloc")
   local location targetloc = GetHandleUnit(targetloc, "targetloc")
   
   call SetUnitPositionLoc(caster, PolarProjectionBJ(casterloc, 50.00, AngleBetweenPoints(casterloc, targetloc)))
endfunction

function Trig_Dash_Actions takes nothing returns nothing

    local unit caster = GetSpellAbilityUnit()
    local location targetloc = GetSpellTargetLoc()
    local location casterloc = GetUnitLoc(caster)

    call SetHandleHandle(t, "caster", caster)
    call SetHandleHandle(casterloc, "casterloc", casterloc)
    call SetHandleHandle(targetloc, "targetloc", targetloc)
    
    call TimerStart(t, 0.035, true, function Dash_Move)
    call TriggerSleepAction(0.5)
    call FlushHandleLocals(t)




//===========================================================================
//=========================Clear the leaks===================================
//===========================================================================

    call RemoveLocation(targetloc)
    call RemoveLocation(casterloc)
    set caster = null

endfunction

//===========================================================================
function InitTrig_Dash takes nothing returns nothing
    set gg_trg_Dash = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Dash, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Dash, Condition( function Trig_Dash_Conditions ) )
    call TriggerAddAction( gg_trg_Dash, function Trig_Dash_Actions )
endfunction

pls help thx

here is the script in my header in case the error is there

Code:
// ===========================
function H2I takes handle h returns integer
    return h
    return 0
endfunction

// ===========================
function LocalVars takes nothing returns gamecache
    [B]// Replace InitGameCache("jasslocalvars.w3v") with a global variable!![/B]
    [COLOR=Red]set udg_myCache=InitGameCacheBJ( "jasslocalvars.w3v" )[/COLOR]
    return InitGameCache("jasslocalvars.w3v")
endfunction

function SetHandleHandle takes handle subject, string name, handle value returns nothing
    if value==null then
        call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreInteger(LocalVars(), I2S(H2I(subject)), name, H2I(value))
    endif
endfunction

function SetHandleInt takes handle subject, string name, integer value returns nothing
    if value==0 then
        call FlushStoredInteger(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreInteger(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function SetHandleBoolean takes handle subject, string name, boolean value returns nothing
    if value==false then
        call FlushStoredBoolean(LocalVars(),I2S(H2I(subject)),name)
    else
        call StoreBoolean(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function SetHandleReal takes handle subject, string name, real value returns nothing
    if value==0 then
        call FlushStoredReal(LocalVars(), I2S(H2I(subject)), name)
    else
        call StoreReal(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function SetHandleString takes handle subject, string name, string value returns nothing
    if value==null then
        call FlushStoredString(LocalVars(), I2S(H2I(subject)), name)
    else
        call StoreString(LocalVars(), I2S(H2I(subject)), name, value)
    endif
endfunction

function GetHandleHandle takes handle subject, string name returns handle
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleInt takes handle subject, string name returns integer
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
endfunction
function GetHandleBoolean takes handle subject, string name returns boolean
    return GetStoredBoolean(LocalVars(), I2S(H2I(subject)), name)
endfunction
function GetHandleReal takes handle subject, string name returns real
    return GetStoredReal(LocalVars(), I2S(H2I(subject)), name)
endfunction
function GetHandleString takes handle subject, string name returns string
    return GetStoredString(LocalVars(), I2S(H2I(subject)), name)
endfunction

function GetHandleUnit takes handle subject, string name returns unit
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleTimer takes handle subject, string name returns timer
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleTrigger takes handle subject, string name returns trigger
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleEffect takes handle subject, string name returns effect
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleGroup takes handle subject, string name returns group
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleLightning takes handle subject, string name returns lightning
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction
function GetHandleWidget takes handle subject, string name returns widget
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction

function FlushHandleLocals takes handle subject returns nothing
    call FlushStoredMission(LocalVars(), I2S(H2I(subject)) )
endfunction

i dont understand the bold part, i think it means the red part
 

corvusHaunt

New Member
Reaction score
96
Code:
function LocalVars takes nothing returns gamecache
    // Replace InitGameCache("jasslocalvars.w3v") with a global variable!!
    set udg_myCache=InitGameCacheBJ( "jasslocalvars.w3v" )
    return InitGameCache("jasslocalvars.w3v")
endfunction

Try this:

Code:
function LocalVars takes nothing returns gamecache
   if udg_myCache == null then
      call FlushGameCache ( InitGameCache ( "jasslocalvars.w3v" ) )
      set udg_myCache = InitGameCache ( "jasslocalvars.w3v" )
   endif
      return udg_myCache
endfunction
 

emjlr3

Change can be a good thing
Reaction score
395
dadads said:
lol, I actually learned how to create slides with JASS by studying his (the guy above me) Spiritbreaker map.

Once you can create a dash-type spell, you can try make a keyboard-controlled racing game, a "Snake" game, or whatever.


hehe another one, I cant tell you how many ppl have told me they learned JASS looking at my dota spell maps heh
 
D

dadads

Guest
The reason why "set udg_myCache=InitGameCacheBJ( "jasslocalvars.w3v" )" won't compile might be that you forgot to create a global variable named "myCache".

That's the problem I encountered when using Kattana's local handle vars for the first time.

Go to the GUI variable editor, make a new variable called "myCache" (the udg_ prefix will be inserted automatically in the JASS script, but it won't appear in GUI - so don't put the udg_ prefix in GUI).

The variable "myCache" should be of type "game cache"

CorvusHaunt said:
function LocalVars takes nothing returns gamecache
if udg_myCache == null then
call FlushGameCache ( InitGameCache ( "jasslocalvars.w3v" ) )
set udg_myCache = InitGameCache ( "jasslocalvars.w3v" )
endif
return udg_myCache
endfunction

This is also a good idea, much more improved
 

exge

New Member
Reaction score
15
i couldnt find your map ... so i was pretty much alone .... and using a system in my 1st spell .. didnt help much
EDIT: it still wont compile ..now the error is from my handle part ... which means the trigger is wrong ... can some1 help me take a look at my trigger
 

phyrex1an

Staff Member and irregular helper
Reaction score
447
Code:
function Dash_Move takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit caster = GetHandleUnit(t, "caster")
   local location casterloc = GetHandleUnit(casterloc, "casterloc")
   local location targetloc = GetHandleUnit(targetloc, "targetloc")
   
   call SetUnitPositionLoc(caster, PolarProjectionBJ(casterloc, 50.00, AngleBetweenPoints(casterloc, targetloc)))
endfunction
Should be
Code:
function Dash_Move takes nothing returns nothing
   local timer t = GetExpiredTimer()
   local unit caster = GetHandleUnit(t, "caster")
   local location casterloc = GetHandleLocation(t, "casterloc")
   local location targetloc = GetHandleLocation(t, "targetloc")
   
   call SetUnitPositionLoc(caster, PolarProjectionBJ(casterloc, 50.00, AngleBetweenPoints(casterloc, targetloc)))

endfunction

And
Code:
function Trig_Dash_Actions takes nothing returns nothing

    local unit caster = GetSpellAbilityUnit()
    local location targetloc = GetSpellTargetLoc()
    local location casterloc = GetUnitLoc(caster)

    call SetHandleHandle(t, "caster", caster)
    call SetHandleHandle(casterloc, "casterloc", casterloc)
    call SetHandleHandle(targetloc, "targetloc", targetloc)
    
    call TimerStart(t, 0.035, true, function Dash_Move)
    call TriggerSleepAction(0.5)
    call FlushHandleLocals(t)




//======================================================================  =====
//=========================Clear the leaks===================================
//======================================================================  =====

    call RemoveLocation(targetloc)
    call RemoveLocation(casterloc)
    set caster = null

endfunction

Should be
Code:
function Trig_Dash_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local unit caster = GetSpellAbilityUnit()
    local location targetloc = GetSpellTargetLoc()
    local location casterloc = GetUnitLoc(caster)

    call SetHandleHandle(t, "caster", caster)
    call SetHandleHandle(casterloc, "casterloc", casterloc)
    call SetHandleHandle(targetloc, "targetloc", targetloc)
    
    call TimerStart(t, 0.035, true, function Dash_Move)
    call TriggerSleepAction(0.5)
    call FlushHandleLocals(t)




//======================================================================  =====
//=========================Clear the leaks===================================
//======================================================================  =====

    call RemoveLocation(targetloc)
    call RemoveLocation(casterloc)
    call DestroyTimer(t)
    set t = null
    set caster = null

endfunction

And you must add this to your Handle Vars system (normaly you uses X and Y real values and not locations in jass)
Code:
function GetHandleLocation takes handle subject, string name returns location
    return GetStoredInteger(LocalVars(), I2S(H2I(subject)), name)
    return null
endfunction

Also, you have missed to null a lot of handle child variables in there.
 

exge

New Member
Reaction score
15
it still doesnt work, now the guy just moves too fast ... i cant even see it
you can see the map for yourself , he keeps going to the center of the map
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Monovertex Monovertex:
    How are you all? :D
    +1
  • Ghan Ghan:
    Howdy
  • 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

      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