| 03-26-2007, 12:09 AM | #1 |
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 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 |
