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

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

Привет, не проверял, но работать должно
Это помести в 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 хук, а в нем тяжелый цикл прохода по всем игрокам на сервере с хорошим наборчиком инструкций

Добавил в IGS метод ITEM:SetInfAmmo(), который более оптимизированный и делает то же самое

Пример:

IGS("Бесконечные патроны", "infammo", 100)
	:SetInfAmmo()
	:SetTerm(10)

Нашел более рабочий способ только выдает не всегда и приходится покупать патроны чтобы он выдал 999

IGS("999 патронов", "ammos")
	:SetPrice(299)
	:SetDescription("При каждом спавне выдает вам патроны\n\nЕсли патроны не выдались то просто купите 1 коробку")
	:SetTerm(30) 
	:SetCategory("Прочее")

hook.Add("PlayerLoadout", "IGS.Ammo", function(pl)
    if pl:HasPurchase("ammos") then
        for k, v in pairs(game.GetAmmoTypes()) do
            pl:GiveAmmo(999,k)
        end
    end
end)

hook.Add("PlayerAmmoChanged", "IGS.Ammo", function(pl, id, old, new)
    if pl:HasPurchase("ammos") and new <= 900 then
        pl:GiveAmmo(999, id)
    end
end)

1 лайк

Этот способ выдаст много патронов, но один раз, хотя в целом, решение более подходящее в большинстве случаев.