Hello everyone, glad to see there is still activity in these forums.
I have been away for a few years now and Im trying to fix a map to play with friends, and it uses the script attached below at the bottom. It is an item combine system that is functioning 100% and consists of two triggers.
I do not take credit for it and I have no clue who made it or to give credit too, never the less the map exists with it unprotected and I am not trying to steal or take credit for anything.
I would simply like to add a boolean check similar to this to the FIRST script, so it checks for a unit type manipulating items before peforming any actions. How can this be done?
Thank you and very much appreciated.
I believe the script can be found, open source, somewhere on the forums but I am not sure where and/or how, but it is definitely made for public use and I give credit for it.
I have been away for a few years now and Im trying to fix a map to play with friends, and it uses the script attached below at the bottom. It is an item combine system that is functioning 100% and consists of two triggers.
I do not take credit for it and I have no clue who made it or to give credit too, never the less the map exists with it unprotected and I am not trying to steal or take credit for anything.
I would simply like to add a boolean check similar to this to the FIRST script, so it checks for a unit type manipulating items before peforming any actions. How can this be done?
Thank you and very much appreciated.
I believe the script can be found, open source, somewhere on the forums but I am not sure where and/or how, but it is definitely made for public use and I give credit for it.
JASS:
function Trig_fdgssdfg_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(GetManipulatingUnit()) == GetUnitTypeId(udg_UNITTYPE[GetConvertedPlayerId(GetOwningPlayer(GetManipulatingUnit()))]) ) ) then
return false
endif
return true
endfunction
function Trig_fdgssdfg_Actions takes nothing returns nothing
endfunction
//===========================================================================
function InitTrig_fdgssdfg takes nothing returns nothing
set gg_trg_fdgssdfg = CreateTrigger( )
call TriggerAddCondition( gg_trg_fdgssdfg, Condition( function Trig_fdgssdfg_Conditions ) )
call TriggerAddAction( gg_trg_fdgssdfg, function Trig_fdgssdfg_Actions )
endfunction
JASS:
library DDItemCombineBasic initializer Init
globals
// *** Edit to your own will ***
private constant string ITEM_COMBINE_EFFECT = "Abilities\\Spells\\Items\\AIlm\\AIlmTarget.mdl"
private constant string ATTACH_POINT = "origin"
// *** End edit ***
private sound ItemCombineSound = null
private integer array CType[8191]
private integer ItemN = 0
endglobals
function NewItemGroup takes nothing returns nothing
local integer i = ItemN*6 + 7
local integer h = 1
set ItemN = ItemN + 1
loop
exitwhen (h == 7)
set udg_CItemType[i] = udg_CItemType[h]
set udg_CItemType[h] = 0
set h = h + 1
set i = i + 1
endloop
set CType[ItemN-1] = udg_CItemType[0]
set udg_CItemType[0] = 0
endfunction
private function UnitRemoveItemById takes unit whichUnit, integer itemId returns nothing
local integer i = 0
local item it
loop
exitwhen (i >= bj_MAX_INVENTORY)
set it = UnitItemInSlot(whichUnit, i)
if GetItemTypeId(it) == itemId then
call RemoveItem(it)
exitwhen (true)
endif
set i = i + 1
endloop
set it = null
endfunction
private function Actions takes nothing returns nothing
local integer n = 0
local integer array it
local integer i = 7
local integer h = 0
local integer x = 0
local unit u = GetTriggerUnit()
local boolean b = true
local integer y = 0
local integer z = 0
local integer array hero_item_type
// Get hero items
loop
exitwhen (x >= bj_MAX_INVENTORY)
set hero_item_type[x] = GetItemTypeId(UnitItemInSlot(u, x))
set x = x + 1
endloop
loop
exitwhen (n >= ItemN)
set h = i + 6
set x = 0
set it[x] = hero_item_type[x]
set x = x + 1
set it[x] = hero_item_type[x]
set x = x + 1
set it[x] = hero_item_type[x]
set x = x + 1
set it[x] = hero_item_type[x]
set x = x + 1
set it[x] = hero_item_type[x]
set x = x + 1
set it[x] = hero_item_type[x]
set x = x + 1
set y = 0 // N of items that hero has ()
set z = 0 // N of items needed ()
loop
exitwhen (i >= h or udg_CItemType[i] == 0)
set z = z + 1
// Does unit contain item n
set x = 0
loop
exitwhen (x >= bj_MAX_INVENTORY)
if (it[x] == udg_CItemType[i]) then
// Kick out the item
set it[x] = 0
set y = y + 1
// And increase by 1
exitwhen (true)
endif
set x = x + 1
endloop
set i = i + 1
endloop
set i = h
if (y == z) then
set h = i
set i = i-6
loop
exitwhen (i > h or udg_CItemType[i] == 0)
call UnitRemoveItemById(u, udg_CItemType[i])
set i = i + 1
endloop
call UnitAddItemById(u, CType[n])
call SetSoundPosition(ItemCombineSound, GetUnitX(u), GetUnitY(u), 0.)
call StartSound(ItemCombineSound)
call DestroyEffect(AddSpecialEffectTarget(ITEM_COMBINE_EFFECT, u, ATTACH_POINT))
set u = null
return
endif
set n = n + 1
endloop
endfunction
//===========================================================================
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddAction( t, function Actions )
call Preload(ITEM_COMBINE_EFFECT)
set ItemCombineSound = CreateSound( "Abilities\\Spells\\Orc\\AncestralSpirit\\AncestralSpirit.wav", false, true, true, 10, 10, "" )
call SetSoundParamsFromLabel( ItemCombineSound, "AncestralSpirit" )
call SetSoundDuration( ItemCombineSound, 1756 )
call SetSoundPitch(ItemCombineSound, 1.2)
call SetSoundVolume(ItemCombineSound, 100)
endfunction
endlibrar
Last edited by a moderator: