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.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top