Добавлен , не публикуется
Алгоритмы, Наработки и Способности
Способ реализации:
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: Система была отлажена и работает без ошибок, код поправлен. Поддержки предметов с зарядами пока нет.
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
29
4 года назад
Отредактирован nazarpunk
2
Теже грабли, только на lua. Почему никто не делает работу с зарядами?

for i = 0, 6 do
	if GetItemTypeId(UnitItemInSlot(unit, i)) == id then
		RemoveItem(UnitItemInSlot(unit, i))
	end
end
у героя шесть слотов инвентаря, так сложно посмотреть в константах bj_MAX_PLAYER_SLOTS?

for i = 0, 11 do
	TriggerRegisterPlayerUnitEvent(ItemTransfigurationSystem, Player(i), EVENT_PLAYER_UNIT_PICKUP_ITEM)
end
В игре 24 игрока, что также можно узнать из bj_MAX_PLAYER_SLOTS
0
15
4 года назад
0
NazarPunk:
Теже грабли, только на lua. Почему никто не делает работу с зарядами?

for i = 0, 6 do
	if GetItemTypeId(UnitItemInSlot(unit, i)) == id then
		RemoveItem(UnitItemInSlot(unit, i))
	end
end
у героя шесть слотов инвентаря, так сложно посмотреть в константах bj_MAX_PLAYER_SLOTS?
Хм. буду фиксить )
0
7
4 года назад
0
DarkLigthing:
NazarPunk:
Теже грабли, только на lua. Почему никто не делает работу с зарядами?

for i = 0, 6 do
	if GetItemTypeId(UnitItemInSlot(unit, i)) == id then
		RemoveItem(UnitItemInSlot(unit, i))
	end
end
у героя шесть слотов инвентаря, так сложно посмотреть в константах bj_MAX_PLAYER_SLOTS?
Хм. буду фиксить )
а можно собирать на 6 слот?
0
1
3 года назад
Отредактирован Immoral
0
Краткий гайд по импорту или хоть карта-пример был бы окей.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.