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.
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/
  • The Helper The Helper:
    Decided to put up a healthier type recipe to mix it up - Honey Garlic Shrimp Stir-Fry https://www.thehelper.net/threads/recipe-honey-garlic-shrimp-stir-fry.193595/

      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