Как сделать, чтобы игроку давали донат, который он купил в арсенале

это код:

netstream.Hook("ArmoryData",function(ply,class,CurEnt)
    local pack = Paim_Packs[ply:Team()]
    if pack and pack[class] and CurEnt:GetPos():Distance(ply:GetPos()) < 400 then
        if ply.CurPackGived and ply.CurPackGived == class then
            ply:ChatPrint(gal.YouHaveThat)
            return
        end
        
        for k,v in pairs(ply:GetWeapons()) do
            ply:StripWeapon( v:GetClass() )
                
            local player_data = ply:GetNVar('mo_data')
        	if player_data.data.features and player_data.data.features['stick'] == true  then
        		ply:Give('stun_baton')
        	end
        end

        pack = pack[class]
        ply.CurPackGived = class
        for k,_ in pairs(pack.weapons) do
            local wep = ply:Give(k)
        end
        ply.Weapons = ply:GetWeapons()
    else
        ply:ChatPrint(gal.NothingForYou)
    end
end)

тут по сути полноценный код надо писать
как таблица выглядит с оружием (pack.weapons)?

upd.
вообще берешь в sh_additems создаешь оружие, копируешь его id
далее в pack.weapons = {} к нужному оружию делаешь приписку igs = ‘id’
затем тут

for k,_ in pairs(pack.weapons) do
    local wep = ply:Give(k)
end

добавляешь

  net.Start('IGSGiveWeaponPack')
  net.WriteUInt(k, 8)
  net.SendToServer()

т.е получается

    for k,_ in pairs(pack.weapons) do
         net.Start('IGSGiveWeaponPack')
         net.WriteUInt(k, 8)
         net.SendToServer()
     end

далее создаешь в аддоне по пути arsenal/lua/autorun/server файл sv_igs.lua

и вставляешь туда

net.Receive('IGSGiveWeaponPack', function(_, ply)
    local t = net.ReadUInt(8)
    local weptbl = pack.weapons[t]
    local igsid = weptbl.igs
    IGS.PlayerActivateItem(ply, igsid, function() end)
    IGS.Notify(ply, 'Вы успешно купили оружие')
end)

по идее все, если у тебя таблица создана так, как я думаю
если покупка за деньги, то добавляй еще и
local wepprice = weptbl.price в net.Receive() и делай проверку на canAfford(), добавляй ply:addMoney(-wepprice), но только проверь как у тебя параметр цены оружия называется

1 лайк

В этом месте закрадывается уязвимость, позволяющая злоумышленнику выдать себе любое оружие из набора

Никогда не доверяй клиенту

1 лайк

Paim_Packs[TEAM_WAGNER_RAD] = {

["default"] = {
	name = "Оборудование по умолчанию",
	armor = 30,
	weapons = {
		['weapon_hands'] = "Hands",
		['gal_ak47'] = "AK-47",
		['weapon_doc'] = "ID",
		['weapon_frag'] = "Frag"
	},
},

["shotgunner"] = {
	name = "Оборудование 'Дробовик'",
	armor = 40,
	weapons = {
		['weapon_hands'] = "Hands",
		['gal_saiga12'] = "Saiga-12",
		['weapon_doc'] = "ID",
		['weapon_frag'] = "Frag"
	},
},

["support"] = {
	name = "Оборудование 'Поддержка'",
	armor = 100,
	weapons = {
		['weapon_hands'] = "Hands",
		['gal_rpd'] = "RPD",
		['gal_rpg'] = "RPG",
		['weapon_doc'] = "ID",
		['weapon_frag'] = "Frag"
	},
},

}

Мне надо, чтобы оружие, которое он купил в donate, выдавалось в арсенале. ( Не важно какой он класс. )