I'm getting this error, anyone know why (I'm not too experienced with lua :P)?:
[CODE][ERROR] [ERROR] gamemodes/terrortown/entities/weapons/weapon_zm_improvised/shared.lua:273: attempt to index global 'SWEP' (a nil value)
1. unknown - gamemodes/terrortown/entities/weapons/weapon_zm_improvised/shared.lua:273
2. Give - [C]:-1
3. GiveLoadoutWeapons - gamemodes/terrortown/gamemode/weaponry.lua:69
4. Call - gamemodes/terrortown/gamemode/weaponry.lua:166
5. unknown - gamemodes/terrortown/gamemode/player.lua:83[/CODE]
Here is my lua for weapon_zm_improvise:
[CODE]
if SERVER then
AddCSLuaFile( "shared.lua" )
end
SWEP.HoldType = "melee"
if CLIENT then
SWEP.PrintName = "Diamond Minecraft Sword"
SWEP.Slot = 0
SWEP.Icon = "VGUI/ttt/icon_cbar"
SWEP.ViewModelFOV = 70
end
SWEP.UseHands = true
SWEP.Base = "weapon_tttbase"
SWEP.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_iron_mc_sword.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:S
[code]
function SWEP:Equip(ply)
if ply:IsUserGroup("premium") then
SWEP.ViewModel = "models/weapons/v_gold_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_gold_mc_sword.mdl"
else
SWEP.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_iron_mc_sword.mdl"
end
end[/code]
Replace SWEP with self inside a SWEP:* hook.
[QUOTE=Robotboy655;43754197][code]
function SWEP:Equip(ply)
if ply:IsUserGroup("premium") then
SWEP.ViewModel = "models/weapons/v_gold_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_gold_mc_sword.mdl"
else
SWEP.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_iron_mc_sword.mdl"
end
end[/code]
Replace SWEP with self inside a SWEP:* hook.[/QUOTE]
How would I go about doing that? (LUA Noobie Sorry :()
[U]Inside[/U] the function, highlight the first instance of SWEP.
Press delete or backspace.
Type "self" (without quotes).
Repeat for next instance of SWEP inside a function
[QUOTE=Bo98;43754289][U]Inside[/U] the function, highlight the first instance of SWEP.
Press delete or backspace.
Type "self" (without quotes).
Repeat for next instance of SWEP inside a function[/QUOTE]
Does this look correct?
[CODE]function SWEP:Equip(ply)
if ply:IsUserGroup("premium") then
self.ViewModel = "models/weapons/v_gold_mc_sword.mdl"
self.WorldModel = "models/weapons/w_gold_mc_sword.mdl"
else
self.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
self.WorldModel = "models/weapons/w_iron_mc_sword.mdl"
end
end[/CODE]
or
[CODE]function SWEP:Equip(ply)
if ply:IsUserGroup("premium") then
self.ViewModel = "models/weapons/v_gold_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_gold_mc_sword.mdl"
else
SWEP.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_iron_mc_sword.mdl"
end
end[/CODE]
Just fucking put in the code and launch the game, try both, see which ones works. Is this really something supernatural to ask for? If you don't know how to code, [b]learn how to do it FIRST[/b]. There are hundreds of tutorials all around the Internet.
[QUOTE=ImmoralTruth;43754346]Does this look correct?
[CODE]function SWEP:Equip(ply)
if ply:IsUserGroup("premium") then
self.ViewModel = "models/weapons/v_gold_mc_sword.mdl"
self.WorldModel = "models/weapons/w_gold_mc_sword.mdl"
else
self.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
self.WorldModel = "models/weapons/w_iron_mc_sword.mdl"
end
end[/CODE]
or
[CODE]function SWEP:Equip(ply)
if ply:IsUserGroup("premium") then
self.ViewModel = "models/weapons/v_gold_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_gold_mc_sword.mdl"
else
SWEP.ViewModel = "models/weapons/v_iron_mc_sword.mdl"
SWEP.WorldModel = "models/weapons/w_iron_mc_sword.mdl"
end
end[/CODE][/QUOTE]
One of them follows step 4, one of them doesn't. I'm sure you can work it out.
[QUOTE=Bo98;43754710]One of them follows step 4, one of them doesn't. I'm sure you can work it out.[/QUOTE]
Okay, seems to have fixed it, thanks. Admin users have a separate crowbar, but for both 'User' and 'Premium' their model is uncoloured (plain black, they should have separate coloured ones as well); think it's something wrong with the actual files?
Edit: Found out that there's something with the files.
Sorry, you need to Log In to post a reply to this thread.