HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Grimoire Logs reporting the following but i cant see the bug.

03-26-2007, 12:09 AM#1
n13astra
It's really annoying me. I've finally found the area it crashes using grimoire and i tried to fix the problem but its still crashing. I thought, maybe at some point in the game, im passing U as null or the Module (item) = 0 when calling UnitAddItemByIdSwapped. Rep if you can figure out the problem :) cause i cant.

CRASH INFO

jM :: 0 0 44 0x13:push 0
jM :: 0 4:integer 45 0xc:literal 5
jM :: 0 0 46 0x14:setreg 0
jM :: 45 46 46 0x1a:== 0
jM :: 0 0 46 0x2a:jump if false 3161
jM :: 0 4:integer 48 0xe:getvar 92:i
jM :: 0 0 48 0x13:push 0
jM :: 0 4:integer 49 0xc:literal 1
jM :: 0 0 50 0x14:setreg 0
jM :: 49 50 50 0x20:add 0
jM :: 0 0 50 0x11:setvar 92:i
jM :: 0 0 0 0x28:jump dest 3162
jM :: 0 0 0 0x2b:unknown 3139
jM :: 0 4:integer 11 0xe:getvar 8614:jP
jM :: 0 0 11 0x13:push 0
jM :: 0 4:integer 12 0xc:literal 0
jM :: 0 0 13 0x14:setreg 0
jM :: 12 13 13 0x1b:unknown 0
jM :: 0 0 13 0x29:jump if true 3140
jM :: 0 4:integer 51 0xe:getvar 8614:jP
jM :: 0 0 51 0x13:push 0
jM :: 0 4:integer 52 0xc:literal 0
jM :: 0 0 53 0x14:setreg 0
jM :: 52 53 53 0x1a:== 0
jM :: 0 0 53 0x2a:jump if false 3163
jM :: 0 0 0 0x28:jump dest 3164
jM :: 0 7:handle 60 0xe:getvar 4258:U
jM :: 0 0 60 0x13:push 0
jM :: 0 7:handle 61 0xc:literal 0
jM :: 0 0 62 0x14:setreg 0
jM :: 61 62 62 0x1a:== 0
jM :: 0 0 62 0x2a:jump if false 3165
jM :: 0 0 0 0x28:jump dest 3166
jM :: 0 4:integer 67 0xe:getvar 8614:jP
jM :: 0 0 67 0x13:push 0
jM :: 0 7:handle 68 0xe:getvar 4258:U
jM :: 0 0 68 0x13:push 0
jM :: 0 0 0 0x16:callfunc 2817:UnitAddItemByIdSwapped
UnitAddItemByIdSwapped :: 0 2 4:integer 0x8:pop 1023:itemId
UnitAddItemByIdSwapped :: 0 1 7:handle 0x8:pop 1113:whichHero
UnitAddItemByIdSwapped :: 0 4:integer 66 0xe:getvar 1023:itemId
UnitAddItemByIdSwapped :: 0 0 66 0x13:push 0
UnitAddItemByIdSwapped :: 0 7:handle 67 0xe:getvar 1113:whichHero
UnitAddItemByIdSwapped :: 0 0 67 0x13:push 0
UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 1180:GetUnitX
UnitAddItemByIdSwapped :: 0 0 0 0x13:push 0
UnitAddItemByIdSwapped :: 0 7:handle 68 0xe:getvar 1113:whichHero
UnitAddItemByIdSwapped :: 0 0 68 0x13:push 0
UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 1181:GetUnitY
UnitAddItemByIdSwapped :: 0 0 0 0x13:push 0
UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 999:CreateItem
UnitAddItemByIdSwapped :: 0 0 0 0x11:setvar 2460:bj_lastCreatedItem
UnitAddItemByIdSwapped :: 0 7:handle 69 0xe:getvar 1113:whichHero
UnitAddItemByIdSwapped :: 0 0 69 0x13:push 0
UnitAddItemByIdSwapped :: 0 7:handle 70 0xe:getvar 2460:bj_lastCreatedItem
UnitAddItemByIdSwapped :: 0 0 70 0x13:push 0
UnitAddItemByIdSwapped :: 0 0 0 0x15:callnative 1163:UnitAddItem


FUNCTION
Collapse JASS:
function Trig_Tower_Modules_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A036'
endfunction

function Trig_Tower_Modules_Actions takes nothing returns nothing
    local integer array ModuleWeapon
    local integer array ModuleRadar
    local integer array ModuleTroop
    local integer array ModuleHeal
    local integer array ModuleHP
    local integer i
    local integer Slot
    local integer Module
    local integer SkillLevel = GetUnitAbilityLevel(GetTriggerUnit(), 'A036')
    local boolean TargetHasModuleWeapon = false
        local boolean TargetHasModuleRadar = false
    local boolean TargetHasModuleTroop = false
    local boolean TargetHasModuleHeal = false
    local boolean TargetHasModuleHP = false
    local boolean ValidModule = false
    if UnitInventoryCount(GetSpellTargetUnit()) != 6 and GetUnitAbilityLevel(GetSpellTargetUnit(), 'A03P') == 1 then
        set ModuleWeapon[1] = 'I03R'
        set ModuleWeapon[2] = 'I044'
        set ModuleWeapon[3] = 'I045'
        set ModuleWeapon[4] = 'I046'
        set ModuleWeapon[5] = 'I047'
                set ModuleRadar[1] = 'I04F'
        set ModuleRadar[2] = 'I04G'
        set ModuleRadar[3] = 'I04H'
        set ModuleRadar[4] = 'I04I'
        set ModuleRadar[5] = 'I04J'
        set ModuleTroop[1] = 'I03Q'
        set ModuleTroop[2] = 'I040'
        set ModuleTroop[3] = 'I041'
        set ModuleTroop[4] = 'I042'
        set ModuleTroop[5] = 'I043'
        set ModuleHeal[1] = 'I03Y'
        set ModuleHeal[2] = 'I03Z'
        set ModuleHeal[3] = 'I03P'
        set ModuleHeal[4] = 'I03W'
        set ModuleHeal[5] = 'I03X'
        set ModuleHP[1] = 'I03V'
        set ModuleHP[2] = 'I03U'
        set ModuleHP[3] = 'I03T'
        set ModuleHP[4] = 'I03S'
        set ModuleHP[5] = 'I03O'

        set Slot = 1
        loop
            exitwhen Slot > 6
            set Module = GetItemTypeId(UnitItemInSlotBJ(GetSpellTargetUnit(), Slot))
            set i = 1
            loop
                exitwhen i > 5
                if Module == ModuleWeapon[i] then
                    set TargetHasModuleWeapon = true
                endif
                if Module == ModuleTroop[i] then
                    set TargetHasModuleTroop = true
                endif
                if Module == ModuleHeal[i] then
                    set TargetHasModuleHeal = true
                endif
                if Module == ModuleHP[i] then
                    set TargetHasModuleHP = true
                endif
                                if Module == ModuleRadar[i] then
                    set TargetHasModuleRadar = true
                endif
                set i = i + 1
            endloop
            set Slot = Slot + 1
        endloop

        if not (TargetHasModuleWeapon and TargetHasModuleTroop and TargetHasModuleHeal and TargetHasModuleHP and TargetHasModuleRadar) then
            set Module = 0
            set i = GetRandomInt(1, 5)
            loop
                exitwhen Module != 0
                if i == 1 and not TargetHasModuleWeapon then
                    set Module = ModuleWeapon[SkillLevel]
                endif
                if i == 2 and not TargetHasModuleTroop then
                    set Module = ModuleTroop[SkillLevel]
                endif
                if i == 3 and not TargetHasModuleHeal then
                    set Module = ModuleHeal[SkillLevel]
                endif
                if i == 4 and not TargetHasModuleHP then
                    set Module = ModuleHP[SkillLevel]
                endif
                                if i == 5 and not TargetHasModuleRadar then
                    set Module = ModuleRadar[SkillLevel]
                endif
                if i == 5 then
                    set i = 1
                else
                    set i = i + 1
                endif
            endloop
            call UnitAddItemByIdSwapped( Module, GetSpellTargetUnit() )
        else
            call IssueImmediateOrder( GetTriggerUnit(), "stop" )
            call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())), "|cfffed312The target has already modules of all types.|r" )
            call TriggerSleepAction ( 0 )
            call SetUnitManaBJ( GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_MANA, GetTriggerUnit()) + I2R(5 * SkillLevel)) )
        endif
    else
        call IssueImmediateOrder( GetTriggerUnit(), "stop" )
        call DisplayTextToForce( GetForceOfPlayer(GetOwningPlayer(GetTriggerUnit())), "|cfffed312The target has to have an empty inventory slot.|r" )
        call TriggerSleepAction ( 0 )
        call SetUnitManaBJ( GetTriggerUnit(), ( GetUnitStateSwap(UNIT_STATE_MANA, GetTriggerUnit()) + I2R(5 * SkillLevel) ) )
    endif
endfunction

//===========================================================================
function InitTrig_Tower_Modules takes nothing returns nothing
    set gg_trg_Tower_Modules = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Tower_Modules, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Tower_Modules, Condition( function Trig_Tower_Modules_Conditions ) )
    call TriggerAddAction( gg_trg_Tower_Modules, function Trig_Tower_Modules_Actions )
endfunction