когда-то, может уже с год назад, рамазон мне скинул клёвую штуку. там было что-то вроде тригера, но как я понял, написан он был в Jass. смысл был в том что в триггере была полоска с нулями. был 0 для конечной шмотки и шесть нулей для шмоток нужных для создания этой шмотки. было очень удобно так как просто заменяешь 0 на id шмотки и всё. не надо было париться с триггерами особо, и сборочная шмотка делалась буквально за секунды если понять смысл. Может рамазон, ты сам увидишь этот пост и сможешь кидануть мне ещё раз этот триг, ибо я потерял, а может ещё кто-то понял что за ересь я тут написал, и у него тоже есть эта штука, в общем выложите плиз, очень надо, если не трудно и не жалко...
Последняя цифра - номер предмета который ты собираешь по рецепту. функция RI
Code
function RI takes unit u, integer s1, integer s2, integer s3, integer s4, integer s5, integer s6 returns nothing if (s1 != 0) then call RemoveItem(ItemInSlot(u, s1)) endif if (s2 != 0) then call RemoveItem(ItemInSlot(u, s2)) endif if (s3 != 0) then call RemoveItem(ItemInSlot(u, s3)) endif if (s4 != 0) then call RemoveItem(ItemInSlot(u, s4)) endif if (s5 != 0) then call RemoveItem(ItemInSlot(u, s5)) endif call UnitAddItemById(u, s6) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl", u, "origin")) endfunction
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 01 Мая 2011, 23:56:21
Если не затруднит. просто мне тогда кинули по аське в блокноте, я потом вставил тригер как текст, и за 5 минут сделал все сеты что хотел, проще и быстрее чем обычными триггерами было.
1)Создаешь триггер Reseptions с событием Юнит поднимает предмет. 2)Копируешь эти коды к себе на карту в нестандартный код, эти коды переделывать не надо они сами по себе работают. Копируй в точной последовательности.
function ItemInSlot takes unit u, integer id returns item local integer index = 0 loop exitwhen index > 5 if (id == GetItemTypeId(UnitItemInSlot(u, index))) then return UnitItemInSlot(u, index) endif set index = index + 1 endloop return null endfunction
function RI takes unit u, integer s1, integer s2, integer s3, integer s4, integer s5, integer s6 returns nothing if (s1 != 0) then call RemoveItem(ItemInSlot(u, s1)) endif if (s2 != 0) then call RemoveItem(ItemInSlot(u, s2)) endif if (s3 != 0) then call RemoveItem(ItemInSlot(u, s3)) endif if (s4 != 0) then call RemoveItem(ItemInSlot(u, s4)) endif if (s5 != 0) then call RemoveItem(ItemInSlot(u, s5)) endif call UnitAddItemById(u, s6) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl", u, "origin")) endfunction
function ItemInSlotBoolean takes unit u, integer id returns integer local integer index = 0 local integer n = 0 loop exitwhen index > 5 if (id == GetItemTypeId(UnitItemInSlot(u, index))) and id != 0 then return n + 1 endif set index = index + 1 endloop return 0 endfunction
function UHT takes unit u, integer i1, integer i2, integer i3, integer i4, integer i5, integer i6 returns integer local integer n = 0 if (ItemInSlotBoolean(u, i1) > 0) then set n = n + 1 endif if (ItemInSlotBoolean(u, i2) > 0) then set n = n + 1 endif if (ItemInSlotBoolean(u, i3) > 0) then set n = n + 1 endif if (ItemInSlotBoolean(u, i4) > 0) then set n = n + 1 endif if (ItemInSlotBoolean(u, i5) > 0) then set n = n + 1 endif if (ItemInSlotBoolean(u, i6) > 0) then set n = n + 1 endif return n endfunction
Дальше все просто в триггере Reseptions делаешь так if (UHT(GetTriggerUnit(), 'I003', 'bgst', 'gcel', 'I01Z', 0, 0) == 4) then call RI(GetTriggerUnit(), 'I003', 'bgst', 'gcel', 'I01Z', 0, 'shen') endif И так функция UHT будет узнавать есть ли у юнита предмет и выводить кол-во нужных предметов для сборки рецепта, тоесть в этом случае 4 дальше будет функция RI которая будет удалять предметы из рецепта и добавлять предмет который ты собирал по рецепту.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Понедельник, 02 Мая 2011, 00:13:48