Как сделать так, чтобы при покупки донат пистолета/винтовки и т.д, выдавались бесконечные патроны?
если не сложно, дайте код =(
Привет, не проверял, но работать должно
Это помести в sv часть
function InfiniteAmmo()
local v = LocalPlayer()
if v:HasPurchase("infiniteammo") then
weapon = v:GetActiveWeapon()
if IsValid(weapon) then
local maxClip = weapon:GetMaxClip1()
local maxClip2 = weapon:GetMaxClip2()
local primAmmoType = weapon:GetPrimaryAmmoType()
local secAmmoType = weapon:GetSecondaryAmmoType()
if maxClip == -1 and maxClip2 == -1 then
maxClip = 100
maxClip2 = 100
end
if maxClip <= 0 and primAmmoType ~= -1 then
maxClip = 1
end
if maxClip2 == -1 and secAmmoType ~= -1 then
maxClip2 = 1
end
if maxClip > 0 then
weapon:SetClip1(maxClip)
end
if maxClip2 > 0 then
weapon:SetClip2(maxClip2)
end
if primAmmoType ~= -1 then
v:SetAmmo( maxClip, primAmmoType, true)
end
if secAmmoType ~= -1 and secAmmoType ~= primAmmoType then
v:SetAmmo( maxClip2, secAmmoType, true)
end
end
end
end
hook.Add("Think", "InfiniteAmmo", InfiniteAmmo)
ох, спасибо Тебе Товарищ =)))))
а sv создавать нужно?
да, в igs_modification в папке autorun создай папку server, а там создаешь файл, например, sv_infiniteammo.lua, и туда вставляешь код, если не будет работать - пиши о багах в консоли, там все пишется, жду)
p.s. это для отдельной привилегии, если у пользователя куплен предмет с ID infiniteammo в автодонате, то будут бесконечные патроны, если надо сразу с покупкой оружия в донате - пиши в дс Decoder#1915, помогу
Понятно, помощь пригодилась бы Твоя Дружище
Фикшенная версия:
function InfiniteAmmo()
for k,v in pairs (player.GetAll()) do
if v:HasPurchase("infiniteammo") then
weapon = v:GetActiveWeapon()
if IsValid(weapon) then
local maxClip = weapon:GetMaxClip1()
local maxClip2 = weapon:GetMaxClip2()
local primAmmoType = weapon:GetPrimaryAmmoType()
local secAmmoType = weapon:GetSecondaryAmmoType()
if maxClip == -1 and maxClip2 == -1 then
maxClip = 100
maxClip2 = 100
end
if maxClip <= 0 and primAmmoType ~= -1 then
maxClip = 1
end
if maxClip2 == -1 and secAmmoType ~= -1 then
maxClip2 = 1
end
if maxClip > 0 then
weapon:SetClip1(maxClip)
end
if maxClip2 > 0 then
weapon:SetClip2(maxClip2)
end
if primAmmoType ~= -1 then
v:SetAmmo( maxClip, primAmmoType, true)
end
if secAmmoType ~= -1 and secAmmoType ~= primAmmoType then
v:SetAmmo( maxClip2, secAmmoType, true)
end
end
end
end
end
hook.Add("Think", "InfiniteAmmo", InfiniteAmmo)
Для работы нужно создать в IGS предмет с ID infiniteammo
Предупреждение от себя. В скрипте сверху используется Think хук, а в нем тяжелый цикл прохода по всем игрокам на сервере с хорошим наборчиком инструкций
Написал более оптимизированную версию, но не тестировал ее
local function setInfAmmo(pl)
local weapon = pl:GetActiveWeapon()
if not IsValid(weapon) then return end
local maxClip = weapon:GetMaxClip1()
local maxClip2 = weapon:GetMaxClip2()
local primAmmoType = weapon:GetPrimaryAmmoType()
local secAmmoType = weapon:GetSecondaryAmmoType()
if maxClip == -1 and maxClip2 == -1 then
maxClip = 100
maxClip2 = 100
end
if maxClip <= 0 and primAmmoType ~= -1 then
maxClip = 1
end
if maxClip2 == -1 and secAmmoType ~= -1 then
maxClip2 = 1
end
if maxClip > 0 then
weapon:SetClip1(maxClip)
end
if maxClip2 > 0 then
weapon:SetClip2(maxClip2)
end
if primAmmoType ~= -1 then
pl:SetAmmo( maxClip, primAmmoType, true)
end
if secAmmoType ~= -1 and secAmmoType ~= primAmmoType then
pl:SetAmmo( maxClip2, secAmmoType, true)
end
end
local infammo_players = {}
timer.Create("infammo", 5, 0, function()
for i = #infammo_players, 0, -1 do -- reversed ipairs
local pl = infammo_players[i]
if IsValid(pl) then
setInfAmmo(pl)
else
table.remove(infammo_players, i)
end
end
end)
hook.Add("IGS.PlayerPurchasesLoaded", "filter_infammo_players", function(pl, purchases_)
for uid in pairs(purchases_ or {}) do
if uid == "infammo" and not table.HasValue(infammo_players, pl) then
table.insert(infammo_players, pl)
end
end
end)