• Error in Code Please Help
    7 replies, posted
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.