simple Equipment System trigger not working

Bogomil16

New Member
Reaction score
1
Im jst making it so a hero can only have one of each item class(permanent,campaign,artifact...) but it doesnt work properly at all.Here is the code I added a debugmsg to see whats going on:

JASS:
function ItemCheckWeaponPermanent_Conditions takes nothing returns boolean
    if ( not ( GetItemType(GetManipulatedItem()) == ITEM_TYPE_PERMANENT ) ) then
        return false
    endif
    return true
endfunction

function ItemCheckWeaponPermanent_Actions takes nothing returns nothing

local integer i = 1
local integer count = 0

loop
exitwhen( i == 6 )

if ( GetItemType(UnitItemInSlot(GetManipulatingUnit(), i )) == ITEM_TYPE_PERMANENT ) then

set count = count + 1

endif

set i = i + 1

endloop

if( count == 1 ) then

call UnitDropItemPoint( GetTriggerUnit(), GetManipulatedItem(), GetUnitX( GetTriggerUnit() ), GetUnitY( GetTriggerUnit() ) )

endif

call BJDebugMsg( I2S( count ) )

endfunction

function InitTrig_ItemCheckWeaponPermanent takes nothing returns nothing

set gg_trg_ItemCheckWeaponPermanent = CreateTrigger(  )

call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(0), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(1), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(2), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(3), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(4), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(5), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(6), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(7), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(8), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(9), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(10), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(11), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )

call TriggerAddCondition( gg_trg_ItemCheckWeaponPermanent, Condition( function ItemCheckWeaponPermanent_Conditions ) )
call TriggerAddAction( gg_trg_ItemCheckWeaponPermanent, function ItemCheckWeaponPermanent_Actions )

endfunction


I made one of these triggers for each item class and when i test the map nothing works like i want it to :confused:
 

Bogomil16

New Member
Reaction score
1
What doesn't work properly? Can you please clarify?

Well first off the loop that increases count is supposed to increase it to 2 if the hero has 2 items of the type PERMANENT i mean if it has one and picks up a second one,the trigger should detect that when count becomes 2,yet it always becomes 1,i don't know why,so I set the condition for dropping the item to be count == 1 instead of 2,because it doesn't work.The other problem is when i made the same trigger for the item classes.Then it doesnt even make a difference between them(it only lets you have only 1 item).I'm confused :banghead:
 

Elfian

New Member
Reaction score
0
JASS:

//this whole function could be shortened to return (GetItemType(GetManipulatedItem()) == ITEM_TYPE_PERMANENT ))
function ItemCheckWeaponPermanent_Conditions takes nothing returns boolean
    if ( not ( GetItemType(GetManipulatedItem()) == ITEM_TYPE_PERMANENT ) ) then
        return false
    endif
    return true
endfunction

function ItemCheckWeaponPermanent_Actions takes nothing returns nothing

//if I'm not mistaken the first slot is indexed with 0, not 1, but I'm not sure
local integer i = 1
local integer count = 0

loop
exitwhen( i == 6 )

//shouldn't you check if there is actually an item in the slot? (not equal to null)
if ( GetItemType(UnitItemInSlot(GetManipulatingUnit(), i )) == ITEM_TYPE_PERMANENT ) then

set count = count + 1

endif

set i = i + 1

endloop

if( count == 1 ) then

call UnitDropItemPoint( GetTriggerUnit(), GetManipulatedItem(), GetUnitX( GetTriggerUnit() ), GetUnitY( GetTriggerUnit() ) )

endif

call BJDebugMsg( I2S( count ) )

endfunction

function InitTrig_ItemCheckWeaponPermanent takes nothing returns nothing

set gg_trg_ItemCheckWeaponPermanent = CreateTrigger(  )

//all of this should be done with a loop
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(0), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(1), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(2), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(3), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(4), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(5), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(6), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(7), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(8), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(9), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(10), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(11), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )

call TriggerAddCondition( gg_trg_ItemCheckWeaponPermanent, Condition( function ItemCheckWeaponPermanent_Conditions ) )
call TriggerAddAction( gg_trg_ItemCheckWeaponPermanent, function ItemCheckWeaponPermanent_Actions )

endfunction


I wrote comments on your code. Hope I helped :)
 

millz-

New Member
Reaction score
25
Im jst making it so a hero can only have one of each item class(permanent,campaign,artifact...) but it doesnt work properly at all.Here is the code I added a debugmsg to see whats going on:

JASS:
function ItemCheckWeaponPermanent_Actions takes nothing returns nothing

local integer i = 1
local integer count = 0

loop
    exitwhen( i == 6 )
    if ( GetItemType(UnitItemInSlot(GetManipulatingUnit(), i )) == GetItemType(GetManipulatedItem()) ) then
        set count = count + 1
    endif
    set i = i + 1
endloop

if ( count > 1 ) then
    call UnitDropItemPoint( GetTriggerUnit(), GetManipulatedItem(), GetUnitX( GetTriggerUnit() ), GetUnitY( GetTriggerUnit() ) )
endif

call BJDebugMsg( I2S( count ) )

endfunction

function InitTrig_ItemCheckWeaponPermanent takes nothing returns nothing

set gg_trg_ItemCheckWeaponPermanent = CreateTrigger(  )

call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(0), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(1), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(2), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(3), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(4), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(5), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(6), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(7), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(8), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(9), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(10), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )
call TriggerRegisterPlayerUnitEvent( gg_trg_ItemCheckWeaponPermanent, Player(11), EVENT_PLAYER_UNIT_PICKUP_ITEM, null )

call TriggerAddAction( gg_trg_ItemCheckWeaponPermanent, function ItemCheckWeaponPermanent_Actions )

endfunction


I made one of these triggers for each item class and when i test the map nothing works like i want it to :confused:

Made some changes, removed the condition. Changed to check if itemtype in inventory is = to itemtype of manipulated item. And corrected the count. Try and see if it works.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      • Ghan
        Administrator - Servers are fun

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top