TTT Could not spawn all loadout weapons for "NAME"
8 replies, posted
Hey guys.
I have a problem with my custom crowbar skins (pointshop).
Everybody spawns with one of them without buying it! (standart weapon: crowbar)
Everybody get this : Could not spawn all loadout weapons for "Name"
Pointshop shared.lua (Item, Plank)
[CODE]ITEM.Name = 'Plank'
ITEM.Price = 10000
ITEM.Model = 'models/weapons/w_plank.mdl'
ITEM.SingleUse = false
ITEM.WeaponClass = 'weapon_ttt_plank'
function ITEM:OnEquip(ply)
ply:StripWeapon('weapon_zm_improvised')
ply:Give(self.WeaponClass)
ply:SelectWeapon(self.WeaponClass)
end
function ITEM:OnHolster(ply)
ply:StripWeapon(self.WeaponClass)
ply:Give('weapon_zm_improvised')
ply:SelectWeapon('weapon_zm_improvised')
end[/CODE]
Sorry for my ugly english!
(everybody spawns with the plank swep)
I spawned my custom melee sweps separately and cleared my weapons.
All of them are working but I want it so that the players spawn with the normal crowbar!
so what do you need help with do you need the pointshop code if so i can suppty you with that i had this working for awile then went to NO DL so i took the custom weapons out
I want crowbar replacements.
My problem is that everybody spawns with the "Plank" <- They did not buy it!
+
I get this (console):
Could not spawn all loadout weapons for "PLAYERS NAME", will retry.
that would have to do with your SWEP i think it makes it so that they spawn with that every round look for something where it says SWEP.InLoadoutFor = {} make sure nobodys name is in that like inno detective and traitor if you dont want them to spawn with it and also did you copy these files from the crowbar swep that came with gmod and just edit the models
Post your weapon code in [lua] tags.
One of them!:
[lua]
if SERVER then
AddCSLuaFile( "shared.lua" )
end
SWEP.HoldType = "melee"
if CLIENT then
SWEP.PrintName = "Plank"
SWEP.Slot = 0
SWEP.Icon = "VGUI/ttt/icon_cbar"
SWEP.ViewModelFOV = 54
end
SWEP.UseHands = true
SWEP.Base = "weapon_tttbase"
SWEP.ViewModel = "models/weapons/v_plank.mdl"
SWEP.WorldModel = "models/weapons/w_plank.mdl"
SWEP.Weight = 5
SWEP.DrawCrosshair = false
SWEP.ViewModelFlip = false
SWEP.Primary.Damage = 20
SWEP.Primary.ClipSize = -1
SWEP.Primary.DefaultClip = -1
SWEP.Primary.Automatic = true
SWEP.Primary.Delay = 0.5
SWEP.Primary.Ammo = "none"
SWEP.Secondary.ClipSize = -1
SWEP.Secondary.DefaultClip = -1
SWEP.Secondary.Automatic = true
SWEP.Secondary.Ammo = "none"
SWEP.Secondary.Delay = 5
SWEP.Kind = WEAPON_MELEE
SWEP.WeaponID = AMMO_CROWBAR
SWEP.InLoadoutFor = {ROLE_INNOCENT, ROLE_TRAITOR, ROLE_DETECTIVE}
SWEP.NoSights = true
SWEP.IsSilent = true
SWEP.AutoSpawnable = false
SWEP.AllowDelete = false -- never removed for weapon reduction
SWEP.AllowDrop = false
local sound_single = Sound("Weapon_Crowbar.Single")
local sound_open = Sound("DoorHandles.Unlocked3")
if SERVER then
CreateConVar("ttt_crowbar_unlocks", "1", FCVAR_ARCHIVE)
CreateConVar("ttt_crowbar_pushforce", "395", FCVAR_NOTIFY)
end
-- only open things that have a name (and are therefore likely to be meant to
-- open) and are the right class. Opening behaviour also differs per class, so
-- return one of the OPEN_ values
local function OpenableEnt(ent)
local cls = ent:GetClass()
if ent:GetName() == "" then
return OPEN_NO
elseif cls == "prop_door_rotating" then
return OPEN_ROT
elseif cls == "func_door" or cls == "func_door_rotating" then
return OPEN_DOOR
elseif cls == "func_button" then
return OPEN_BUT
elseif cls == "func_movelinear" then
return OPEN_NOTOGGLE
else
return OPEN_NO
end
end
local function CrowbarCanUnlock(t)
return not GAMEMODE.crowbar_unlocks or GAMEMODE.crowbar_unlocks[t]
end
-- will open door AND return what it did
function SWEP:OpenEnt(hitEnt)
-- Get ready for some prototype-quality code, all ye who read this
if SERVER and GetConVar("ttt_crowbar_unlocks"):GetBool() then
local openable = OpenableEnt(hitEnt)
if openable == OPEN_DOOR or openable == OPEN_ROT then
local unlock = CrowbarCanUnlock(openable)
if unlock then
hitEnt:Fire("Unlock", nil, 0)
end
if unlock or hitEnt:HasSpawnFlags(256) then
if openable == OPEN_ROT then
hitEnt:Fire("OpenAwayFrom", self.Owner, 0)
end
hitEnt:Fire("Toggle", nil, 0)
else
return OPEN_NO
end
elseif openable == OPEN_BUT then
if CrowbarCanUnlock(openable) then
hitEnt:Fire("Unlock", nil, 0)
hitEnt:Fire("Press", nil, 0)
else
return OPEN_NO
end
elseif openable == OPEN_NOTOGGLE then
if CrowbarCanUnlock(openable) then
hitEnt:Fire("Open", nil, 0)
else
return OPEN_NO
end
end
return openable
else
return OPEN_NO
end
end
function SWEP:PrimaryAttack()
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
if not IsValid(self.Owner) then return end
if self.Owner.LagCompensation then -- for some reason not always true
self.Owner:LagCompensation(true)
end
local spos = self.Owner:GetShootPos()
local sdest = spos + (self.Owner:GetAimVector() * 70)
local tr_main = util.TraceLine({start=spos, endpos=sdest, filter=self.Owner, mask=MASK_SHOT_HULL})
local hitEnt = tr_main.Entity
self.Weapon:EmitSound(sound_single)
if IsValid(hitEnt) or tr_main.HitWorld then
self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
if not (CLIENT and (not IsFirstTimePredicted())) then
local edata = EffectData()
edata:SetStart(spos)
edata:SetOrigin(tr_main.HitPos)
edata:SetNormal(tr_main.Normal)
--edata:SetSurfaceProp(tr_main.MatType)
--edata:SetDamageType(DMG_CLUB)
edata:SetEntity(hitEnt)
if hitEnt:IsPlayer() or hitEnt:GetClass() == "prop_ragdoll" then
util.Effect("BloodImpact", edata)
-- does not work on players rah
--util.Decal("Blood", tr_main.HitPos + tr_main.HitNormal, tr_main.HitPos - tr_main.HitNormal)
-- do a bullet just to make blood decals work sanely
-- need to disable lagcomp because firebullets does its own
self.Owner:LagCompensation(false)
self.Owner:FireBullets({Num=1, Src=spos, Dir=self.Owner:GetAimVector(), Spread=Vector(0,0,0), Tracer=0, Force=1, Damage=0})
else
util.Effect("Impact", edata)
end
end
else
self.Weapon:SendWeaponAnim( ACT_VM_MISSCENTER )
end
if CLIENT then
-- used to be some shit here
else -- SERVER
-- Do another trace that sees nodraw stuff like func_button
local tr_all = nil
tr_all = util.TraceLine({start=spos, endpos=sdest, filter=self.Owner})
self.Owner:SetAnimation( PLAYER_ATTACK1 )
if hitEnt and hitEnt:IsValid() then
if self:OpenEnt(hitEnt) == OPEN_NO and tr_all.Entity and tr_all.Entity:IsValid() then
-- See if there's a nodraw thing we should open
self:OpenEnt(tr_all.Entity)
end
local dmg = DamageInfo()
dmg:SetDamage(self.Primary.Damage)
dmg:SetAttacker(self.Owner)
dmg:SetInflictor(self.Weapon)
dmg:SetDamageForce(self.Owner:GetAimVector() * 1500)
dmg:SetDamagePosition(self.Owner:GetPos())
dmg:SetDamageType(DMG_CLUB)
hitEnt:DispatchTraceAttack(dmg, spos + (self.Owner:GetAimVector() * 3), sdest)
-- self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
-- self.Owner:TraceHullAttack(spos, sdest, Vector(-16,-16,-16), Vector(16,16,16), 30, DMG_CLUB, 11, true)
-- self.Owner:FireBullets({Num=1, Src=spos, Dir=self.Owner:GetAimVector(), Spread=Vector(0,0,0), Tracer=0, Force=1, Damage=20})
else
-- if tr_main.HitWorld then
-- self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
-- else
-- self.Weapon:SendWeaponAnim( ACT_VM_MISSCENTER )
-- end
-- See if our nodraw trace got the goods
if tr_all.Entity and tr_all.Entity:IsValid() then
self:OpenEnt(tr_all.Entity)
end
end
end
if self.Owner.LagCompensation then
self.Owner:LagCompensation(false)
end
end
function SWEP:SecondaryAttack()
self.Weapon:SetNextPrimaryFire( CurTime() + self.Primary.Delay )
self.Weapon:SetNextSecondaryFire( CurTime() + 0.1 )
local tr = self.Owner:GetEyeTrace(MASK_SHOT)
if tr.Hit and IsValid(tr.Entity) and tr.Entity:IsPlayer() and (self.Owner:EyePos() - tr.HitPos):Length() < 100 then
local ply = tr.Entity
if SERVER and (not ply:IsFrozen()) then
local pushvel = tr.Normal * GetConVar("ttt_crowbar_pushforce"):GetFloat()
-- limit the upward force to prevent launching
pushvel.z = math.Clamp(pushvel.z, 50, 100)
ply:SetVelocity(ply:GetVelocity() + pushvel)
self.Owner:SetAnimation( PLAYER_ATTACK1 )
ply.was_pushed = {att=self.Owner, t=CurTime()} --, infl=self}
end
self.Weapon:EmitSound(sound_single)
self.Weapon:SendWeaponAnim( ACT_VM_HITCENTER )
self.Weapon:SetNextSecondaryFire( CurTime() + self.Secondary.Delay )
end
end
function SWEP:GetClass()
return "weapon_ttt_plank"
end
function SWEP:OnDrop()
self:Remove()
end
[/lua]