Система очень проста, все, что от вас требуется - это скопировать к себе триггер, и все. Система складывает предметы категории "Имеющие заряды". Принцип работы: Если у героя 2 одинаковых предмета, то один предмет удаляется, а к другому прибавляеться кол-во зарядов удаленного. Скачать
Code
function CombinirCond takes nothing returns boolean return GetItemCharges(GetManipulatedItem())>0 endfunction function Combinir takes nothing returns nothing local integer il=0 local integer c=0 local integer max=50//max Charges local item new=GetManipulatedItem() local unit u=GetManipulatingUnit() local item si loop exitwhen il>6 si=UnitItemInSlot(u,il) if GetItemTypeId(new)==GetItemTypeId(si) and GetItemCharges(si)+GetItemCharges(new)<=max and si!=new then set c=GetItemCharges(si)+GetItemCharges(new) call SetItemCharges(si,c) call RemoveItem(new) set il=7 endif if il<7then set il=il+1 endif endloop set u=null set new=null set si=null endfunction function InitTrig_Combine takes nothing returns nothing set gg_trg_Combine = CreateTrigger() call TriggerRegisterAnyUnitEventBJ( gg_trg_Combine, EVENT_PLAYER_UNIT_PICKUP_ITEM ) call TriggerAddCondition(gg_trg_Combine, Condition(function CombinirCond)) call TriggerAddAction(gg_trg_Combine,function Combinir) endfunction
function Combinir takes nothing returns nothing local integer ic=0 local integer il=0 local integer c=0 local integer max=999//Макимальное кол-во зарядов local item new local unit u if GetItemCharges(GetManipulatedItem())>0 then set new=GetManipulatedItem() set u=GetManipulatingUnit() loop exitwhen il>6 if GetItemTypeId(new)==GetItemTypeId(UnitItemInSlot(u,il)) and GetItemCharges(UnitItemInSlot(u,il))+GetItemCharges(new)<=max and UnitItemInSlot(u,il)!=new then set c=GetItemCharges(UnitItemInSlot(u,il))+GetItemCharges(new) call SetItemCharges(UnitItemInSlot(u,il),c) call RemoveItem(new) set il=7 endif if il<7then set il=il+1 endif endloop endif set u=null endfunction function InitTrig_Combine takes nothing returns nothing local integer index=0 set gg_trg_Combine = CreateTrigger() loop exitwhen index==11 call TriggerRegisterPlayerUnitEvent(gg_trg_Combine,Player(index),EVENT_PLAYER_UNIT_PICKUP_ITEM,null) set index=index+1 endloop call TriggerAddAction(gg_trg_Combine,function Combinir) endfunction
через elseif добавь проверку и если больше max, то set temp integer = currentcharges+newcharges-max charges, set current charges = max, create item, set charges = temp integer
а то получится = берешь предмет с 50 charges за 40 000, а у тебя уже max-49 и весь предмет с деньгами сгорает.
Кстати,изначальный автор ИДЕИ и первой наработки этого типа ramazan(off).
Добавлено (01-02-2011, 17:23) --------------------------------------------- Dreii, о нет!Освободи нас от своего божественного гнева!Мы недостойны этого!
Давным давно,в далекой далекой галактике...Предметы научились складываться!Но кто!?Кто,тот великий джедай,обревший СиЛу,и сумевший всунуть множество предметов в один слот!?
Quote (Dreii)
,Преподнисите жертву самого нубского ГУИшники,дабы я постебался над ним!
function CombinirCond takes nothing returns boolean return GetItemCharges(GetManipulatedItem())>0 endfunction function Combinir takes nothing returns nothing local integer il=0 local integer c=0 local integer max=50//max Charges local item new=GetManipulatedItem() local unit u=GetManipulatingUnit() local item si loop exitwhen il>6 si=UnitItemInSlot(u,il) if GetItemTypeId(new)==GetItemTypeId(si) and GetItemCharges(si)+GetItemCharges(new)<=max and si!=new then set c=GetItemCharges(si)+GetItemCharges(new) call SetItemCharges(si,c) call RemoveItem(new) set il=7 endif if il<7then set il=il+1 endif endloop set u=null set new=null set si=null endfunction function InitTrig_Combine takes nothing returns nothing set gg_trg_Combine = CreateTrigger() call TriggerRegisterAnyUnitEventBJ( gg_trg_Combine, EVENT_PLAYER_UNIT_PICKUP_ITEM ) call TriggerAddCondition(gg_trg_Combine, Condition(function CombinirCond)) call TriggerAddAction(gg_trg_Combine,function Combinir) endfunction