Услуга "Бесконечные патроны"

Как сделать так, чтобы при покупки донат пистолета/винтовки и т.д, выдавались бесконечные патроны?
если не сложно, дайте код =(

Привет, не проверял, но работать должно
Это помести в 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)
1 симпатия

ох, спасибо Тебе Товарищ =)))))

а sv создавать нужно?

да, в igs_modification в папке autorun создай папку server, а там создаешь файл, например, sv_infiniteammo.lua, и туда вставляешь код, если не будет работать - пиши о багах в консоли, там все пишется, жду)

p.s. это для отдельной привилегии, если у пользователя куплен предмет с ID infiniteammo в автодонате, то будут бесконечные патроны, если надо сразу с покупкой оружия в донате - пиши в дс Decoder#1915, помогу

1 симпатия

Понятно, помощь пригодилась бы Твоя Дружище

Фикшенная версия:

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)