Zackreaver
New Member
- Reaction score
- 2
Hey there, still learning Jass, but I believe I got the hang of it, I read some tutorials and found jass to truly be a much more efficient method for triggering. Anyway, this one piece of code's been bugging me, it functions alright, but in certain occasion's it causes the game to crash
I had error's with this before, I think it was when I was trying to read real's as integer's, I think i fixed that, but now im getting strange crashes.
The way the trigger works is, i cast this spell over a group of rock chunks, each rock chunk is replaced with a bigger rock chunk with more hp, and the player gets gold depending on the size, and the unit type casting the spell.
Now the error is happening apparently when the rocks are being attacked after the spell has been cast. It's strange.
PS. I'm still getting the hang of jass, any advice would be lovely.
JASS:
function CondRockHarvest takes nothing returns boolean
return GetSpellAbilityId() == 039;A036039;
endfunction
function RockCasterSize takes unit u returns integer
if (GetUnitTypeId(u) == 039;h00S039; ) then
return 3
elseif (GetUnitTypeId(u) == 039;h00T039; ) then
return 2
endif
return 1
endfunction
function RockGroup takes nothing returns nothing
local unit u = GetTriggerUnit()
local texttag t
local location p = GetDestructableLoc(GetEnumDestructable())
local destructable d = GetEnumDestructable()
local integer money
local real rocklife
local real size
local integer multiplier
set multiplier = RockCasterSize(u)
if (GetDestructableTypeId(d) == 039;LTrc039;) then
call SetDestructableLife( d, (GetDestructableLife(d) + 50) * multiplier )
call AddSpecialEffectLocBJ( p, "Doodads\\LordaeronSummer\\Terrain\\LoardaeronRockChunks\\LoardaeronRockChunks0.mdl" )
call DestroyEffectBJ( GetLastCreatedEffectBJ() )
set rocklife = GetDestructableLife(d)
set money = R2I(GetDestructableLife(d) / 10)
set size = 0.10 + (0.05 * I2R(money))
set money = money * multiplier
call RemoveDestructable( d )
call CreateDestructableLoc( 039;LTrc039;, p, GetRandomDirectionDeg(), size, 0 )
set d = GetLastCreatedDestructable()
call SetDestructableOccluderHeight( d, 0.00 )
call SetDestructableLife( d, rocklife )
call AdjustPlayerStateBJ( money, GetOwningPlayer(u), PLAYER_STATE_RESOURCE_GOLD )
call CreateTextTagLocBJ( ( "+" + I2S(money) ), p, 0, 10, 100, 100, 0.00, 0 )
set t = GetLastCreatedTextTag()
call ShowTextTagForceBJ( false, t, GetPlayersAll() )
call ShowTextTagForceBJ( true, t, GetForceOfPlayer(GetOwningPlayer(u)) )
call SetTextTagPermanentBJ( t, false )
call SetTextTagVelocityBJ( t, 64, 90 )
call SetTextTagLifespanBJ( t, 5 )
call SetTextTagFadepointBJ( t, 3.00 )
endif
set size = 0
set rocklife = 0
set money = 0
set d = null
set t = null
set u = null
call RemoveLocation(p)
set p = null
endfunction
function StartRockHarvest takes nothing returns nothing
local location p = GetSpellTargetLoc()
call EnumDestructablesInCircleBJ( 200.00, p, function RockGroup )
call RemoveLocation(p)
endfunction
//===========================================================================
function InitTrig_Rock_Harvest takes nothing returns nothing
local trigger t
set t = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( t, Condition( function CondRockHarvest ) )
call TriggerAddAction( t, function StartRockHarvest )
endfunction
I had error's with this before, I think it was when I was trying to read real's as integer's, I think i fixed that, but now im getting strange crashes.
The way the trigger works is, i cast this spell over a group of rock chunks, each rock chunk is replaced with a bigger rock chunk with more hp, and the player gets gold depending on the size, and the unit type casting the spell.
Now the error is happening apparently when the rocks are being attacked after the spell has been cast. It's strange.
PS. I'm still getting the hang of jass, any advice would be lovely.