function I4820234_Use(MapID, InstanceID, TypeID, TargetID) local giftPoints = { {3070085, 5000}, {3070084, 3000}, {3070083, 2000}, {3070082, 1500}, {3070081, 700}, {3070080, 500}, {3090030, 1000}, {3090029, 100}, {3090101, 80}, {3090105, 10}, {3090104, 5}, {3090103, 1}, {3090002, 300} } for _, item in ipairs(giftPoints) do local itemID, points = item[1], item[2] local num = role.GetRoleItemNum(TargetID, itemID) if num >= 1 then -- Разбиваем обработку на более мелкие части local chunkSize = 100 -- Размер чанка для обработки while num > 0 do local chunk = math.min(num, chunkSize) role.AddRoleGiftPoints(MapID, InstanceID, TargetID, points * chunk) role.RemoveFromRole(MapID, InstanceID, TargetID, itemID, chunk, 101) num = num - chunk end end end end function I4820234_CanUse(MapID, InstanceID, TypeID, TargetID) local giftPoints = { 3070085, 3070084, 3070083, 3070082, 3070081, 3070080, 3090030, 3090029, 3090101, 3090105, 3090104, 3090103, 3090002 } local sum = 0 for _, itemID in ipairs(giftPoints) do sum = sum + role.GetRoleItemNum(TargetID, itemID) end if sum == nil or sum <= 0 then return 32, false end return 0, false end aux.RegisterItemEvent(4820234, 1, "I4820234_Use") aux.RegisterItemEvent(4820234, 0, "I4820234_CanUse") -- Функция для использования предмета 6600570 function I6600570_Use(MapID, InstanceID, TypeID, TargetID) local itemsToConvert = { {4820177, "I4820177_Use"}, {4820236, "I4820236_Use"} } for _, item in ipairs(itemsToConvert) do local itemID, useFunction = item[1], item[2] local num = role.GetRoleItemNum(TargetID, itemID) if num and num >= 1 then -- Разбиваем обработку на более мелкие части local chunkSize = 100 -- Размер чанка для обработки while num > 0 do local chunk = math.min(num, chunkSize) for i = 1, chunk do _G[useFunction](MapID, InstanceID, TypeID, TargetID) end role.RemoveFromRole(MapID, InstanceID, TargetID, itemID, chunk, 101) num = num - chunk end end end end -- Функция для проверки возможности использования предмета 6600570 function I6600570_CanUse(MapID, InstanceID, TypeID, TargetID) local itemsToCheck = {4820177, 4820236} local sum = 0 for _, itemID in ipairs(itemsToCheck) do local num = role.GetRoleItemNum(TargetID, itemID) if num then sum = sum + num end end if sum == nil or sum <= 0 then return 32, false end return 0, false end -- Регистрируем событие для предмета 6600570 aux.RegisterItemEvent(6600570, 1, "I6600570_Use") aux.RegisterItemEvent(6600570, 0, "I6600570_CanUse") -- Функция для использования предмета 4820177 и 4820236 function I4820177_Use(MapID, InstanceID, TypeID, TargetID) local curGodSoul, curMonsterSoul = role.GetRoleSoul(MapID, InstanceID, TargetID) role.SetRoleSoul(MapID, InstanceID, TargetID, curGodSoul + 100, curMonsterSoul) end function I4820236_Use(MapID, InstanceID, TypeID, TargetID) local curGodSoul, curMonsterSoul = role.GetRoleSoul(MapID, InstanceID, TargetID) role.SetRoleSoul(MapID, InstanceID, TargetID, curGodSoul + 100, curMonsterSoul) end -- Регистрируем события для предметов 4820177 и 4820236 aux.RegisterItemEvent(4820177, 1, "I4820177_Use") aux.RegisterItemEvent(4820236, 1, "I4820236_Use") -- Функция для использования предмета 6600571 function I6600571_Use(MapID, InstanceID, TypeID, TargetID) local itemsToConvert = { {4820178, "I4820178_Use"}, {4820237, "I4820237_Use"} } for _, item in ipairs(itemsToConvert) do local itemID, useFunction = item[1], item[2] local num = role.GetRoleItemNum(TargetID, itemID) if num and num >= 1 then -- Разбиваем обработку на более мелкие части local chunkSize = 100 -- Размер чанка для обработки while num > 0 do local chunk = math.min(num, chunkSize) for i = 1, chunk do _G[useFunction](MapID, InstanceID, TypeID, TargetID) end role.RemoveFromRole(MapID, InstanceID, TargetID, itemID, chunk, 101) num = num - chunk end end end end -- Функция для проверки возможности использования предмета 6600571 function I6600571_CanUse(MapID, InstanceID, TypeID, TargetID) local itemsToCheck = {4820178, 4820237} local sum = 0 for _, itemID in ipairs(itemsToCheck) do local num = role.GetRoleItemNum(TargetID, itemID) if num then sum = sum + num end end if sum == nil or sum <= 0 then return 32, false end return 0, false end -- Регистрируем событие для предмета 6600571 aux.RegisterItemEvent(6600571, 1, "I6600571_Use") aux.RegisterItemEvent(6600571, 0, "I6600571_CanUse") -- Функция для использования предмета 4820178 и 4820237 function I4820178_Use(MapID, InstanceID, TypeID, TargetID) local curGodSoul, curMonsterSoul = role.GetRoleSoul(MapID, InstanceID, TargetID) role.SetRoleSoul(MapID, InstanceID, TargetID, curGodSoul, curMonsterSoul + 100) end function I4820237_Use(MapID, InstanceID, TypeID, TargetID) local curGodSoul, curMonsterSoul = role.GetRoleSoul(MapID, InstanceID, TargetID) role.SetRoleSoul(MapID, InstanceID, TargetID, curGodSoul, curMonsterSoul + 100) end -- Регистрируем события для предметов 4820178 и 4820237 aux.RegisterItemEvent(4820178, 1, "I4820178_Use") aux.RegisterItemEvent(4820237, 1, "I4820237_Use")