Добавлен DarkLigthing,
не публикуется
Алгоритмы, Наработки и Способности
Способ реализации:
Lua
Тип:
Наработка
StackItData = {id = 1, ItemList = {}, Result = {}}
local data
local id
function StackIt(...)
id = StackItData.id
data = table.pack(...)
for i = 1, #data-1 do
data[i] = FourCC(data[i])
end
StackItData.Result[id] = FourCC(data[#data])
data[#data] = nil
StackItData.ItemList[id] = data
StackItData.id = StackItData.id + 1
end
function UnitRemoveItemById (unit,id,amount)
local c = amount
local d = 0
for i = 0, 5 do
d = d + 1
if GetItemTypeId(UnitItemInSlot(unit,i)) == id then
RemoveItem(UnitItemInSlot(unit,i))
if d == c then return end
end
end
end
local StackSystem = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS do
TriggerRegisterPlayerUnitEvent(StackSystem,Player(i),EVENT_PLAYER_UNIT_PICKUP_ITEM)
end
TriggerAddAction(StackSystem,function()
local u = GetTriggerUnit()
local Inventory = {}
for i = 0, 5 do
Inventory[i] = GetItemTypeId(UnitItemInSlot(u,i))
end
local n
local isLocked = {}
function isInventoryHaveItem(comparable,list)
if n ~= list then
n = list
isLocked[0] = false
isLocked[1] = false
isLocked[2] = false
isLocked[3] = false
isLocked[4] = false
isLocked[5] = false
end
for i = 0, 5 do
if comparable == Inventory[i] and isLocked[i] ~= true then
isLocked[i] = true
return true
end
end
end
local GotYa = {}
for i = 1, #StackItData.ItemList do
GotYa[i] = 0
end
for RO = 1, #StackItData.ItemList do
for CR = 1, #StackItData.ItemList[RO] do
if isInventoryHaveItem(StackItData.ItemList[RO][CR],RO) == true then
GotYa[RO] = GotYa[RO] + 1
end
end
end
function ItemExterminator(list)
for i = 1, #StackItData.ItemList[list] do
UnitRemoveItemById(u,StackItData.ItemList[list][i],1)
end
end
for i = 1, #StackItData.ItemList do
if GotYa[i] == #StackItData.ItemList[i] then
ItemExterminator(i)
UnitAddItem(u,CreateItem(StackItData.Result[i],0,0))
DestroyEffect(AddSpecialEffect('Abilities\\Spells\\Human\\Polymorph\\PolyMorphDoneGround.mdl', GetUnitX(u),GetUnitY(u)))
end
end
end)
Функция может принять сколько угодно значений, однако последнее значение всегда является тем, во что преобразуются предыдущие заявленные предметы.
Пример функции:
StackIt('ratc','ratc','ratc','rat9','rat9','rat9','ratf')
UPD: Система была отлажена и работает без ошибок, код поправлен. Поддержки предметов с зарядами пока нет.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован nazarpunk
Отредактирован Immoral