• Mario Fireballs Errors
    57 replies, posted
1: WHY was my thread closes? 2: I fixed the damage types, and still got an error. My threads keep getting closed >_< If there's already an active thread, please link me and I will stop this madness! [code] [ERROR] lua/entities/mariofire/init.lua:18: attempt to call global 'curtime' (a nil value) 1. unknown - lua/entities/mariofire/init.lua:18 2. Spawn - [C]:-1 3. unknown - lua/weapons/mario_fireballs/shared.lua:77 I have yet to investigate, though. I will update the code above. [/code] [code]AddCSLuaFile( "shared.lua" )include( 'shared.lua' ) /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self.Entity:SetMoveType( MOVETYPE_FLYGRAVITY ) self.Entity:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 1 ) -- Use the model's physics self.Entity:PhysicsInitSphere(7, "foliage") self.CrTime = CurTime() + 3 self.LifeLeft = 1 -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject() if phys:IsValid() then phys:Wake() end timer.Simple( 3, function() SafeRemoveEntity( self.Entity ) end ) end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) local tr tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ) tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ) tr.filter = self.Entity tr2 = util.TraceLine( tr ) local vecNormalizedVel = self.Entity:GetVelocity() vecNormalizedVel = ( vecNormalizedVel ):GetNormalized() if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 25 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ) pOther:Ignite(3, 0) else local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 0 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ) pOther:Ignite(30, 0) timer.Simple(30, pOther.Extinguish() ) end self.Entity:Remove() -- play body "thwack" sound -- self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) -- Fireballs don't thwack. local vForward vForward = self.Entity:GetUp() vForward = ( vForward ):GetNormalized() self.Touch = function( ... ) return end self.Think = function( ... ) return end local Pos1 = tr.HitPos + tr.HitNormal local Pos2 = tr.HitPos - tr.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch! if pOther:IsNPC() or pOther:IsPlayer() then SafeRemoveEntity( self.Entity ) end end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) -- Shoot some blood -- local effectdata = EffectData() -- effectdata:SetOrigin( self.Entity:GetPos() ) -- util.Effect( "BloodImpact", effectdata ) -- function ENT:PhysicsCollide( data, physobj ) if data.Speed <= 12 then timer.Simple(5, function() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end) end local LastSpeed = math.max( data.OurOldVelocity:Length(), data.Speed ) local NewVelocity = physobj:GetVelocity() NewVelocity:Normalize() LastSpeed = math.max( NewVelocity:Length(), LastSpeed ) local TargetVelocity = NewVelocity * LastSpeed physobj:SetVelocity( TargetVelocity ) -- local Pos1 = data.HitPos + data.HitNormal -- local Pos2 = data.HitPos - data.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch -- Play sound on death --[[ if (data.Speed > 80 && data.DeltaTime > 0.2 ) then self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) end]] SafeRemoveEntityDelayed( self.Entity, 0.1 ) end --function ENT:Think() -- if math.Round(self.CrTime - CurTime()) == 0 then SafeRemoveEntity( self.Entity ) end --end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ --[[function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end ] [/code] It wasn't doing damage, but that's likely because of the new error. [code][ERROR] lua/entities/mariofire/init.lua:50: ')' expected near '|' 1. unknown - lua/entities/mariofire/init.lua:0[/code] ^ Fixed... [code]dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) )[/code] ... Next error: [code][ERROR] lua/entities/mariofire/init.lua:18: attempt to call global 'curtime' (a nil value) 1. unknown - lua/entities/mariofire/init.lua:18 2. Spawn - [C]:-1 3. unknown - lua/weapons/mario_fireballs/shared.lua:77 [ERROR] lua/entities/mariofire/init.lua:132: attempt to perform arithmetic on field 'CrTime' (a nil value) 1. unknown - lua/entities/mariofire/init.lua:132 [ERROR] lua/entities/mariofire/init.lua:105: attempt to index global 'tr' (a nil value) 1. unknown - lua/entities/mariofire/init.lua:105 [/code]
Post in what do you need help with, Post all of it with mario fireballs in a .zip file and I'll fix it up for you.
*sigh* I posted the last one there... But the thread got deleted, and that forum is a PITA to keep up with!!
CurTime(), not curtime()
[code][ERROR] lua/entities/mariofire/init.lua:105: attempt to index global 'tr' (a nil value) 1. unknown - lua/entities/mariofire/init.lua:10 [/code] Called when the weapon is fired. Not for the first shot, last test. curtime() == CurTime() now.
[lua]AddCSLuaFile() ENT.Type = "anim" ENT.Base = "base_anim" /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ); self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 0.5 ); -- Use the model's physics //self.Entity:PhysicsInitSphere(7, "metal"); -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject(); if (phys:IsValid()) then phys:Wake() end end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) local tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ); tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ); tr.filter = self.Entity; tr2 = util.TraceLine( tr ); local vecNormalizedVel = self.Entity:GetVelocity(); if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo(); dmgInfo:SetInflictor( self.Entity ); dmgInfo:SetAttacker( pOther ); dmgInfo:SetDamage( 25 ); dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ); dmgInfo:SetDamagePosition( tr2.HitPos ); pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr2.HitPos ); pOther:Ignite(3, 0) else local dmgInfo = DamageInfo(); dmgInfo:SetInflictor( self.Entity ); dmgInfo:SetAttacker( pOther ); dmgInfo:SetDamage( 0 ); dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ); dmgInfo:SetDamagePosition( tr2.HitPos ); pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr2.HitPos ); pOther:Ignite(30, 0) timer.Simple(30, function() if pOther:Health() > 0 then pOther:Extinguish() end end) end SafeRemoveEntity( self.Entity ); end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) if data.Speed <= 12 then local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end end function ENT:Think() end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end[/lua] Fixed and tested in singleplayer Does what you want spawn code: [lua]local ply = Entity(1) local ent = ents.Create("mariofire") ent:SetPos(ply:GetEyeTrace().HitPos + ply:GetEyeTrace().HitNormal * 16 ) ent:Spawn() ent:Activate() [/lua] Change ply to what ever is in the weapon code local ply = self.Owner Ignites the player when it touches them Explodes when touches the ground
I don't want them to explode immediately, only after about 5 seconds (Like in Mario). I still want the effect at every hit.
[QUOTE=luavirusfree;38814519]I don't want them to explode immediately, only after about 5 seconds (Like in Mario). I still want the effect at every hit.[/QUOTE] change it to [lua]function ENT:PhysicsCollide( data, physobj ) if data.Speed <= 12 then timer.Simple(5, function() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end) end end [/lua] and if you want it to ignite in Initialize [lua]self:Ignite(5, 0)[/lua]
1: Why ignite it? I plan to use particle effects. 2: Explode isn't a particle effect, except in the source code. [code] function ENT:Think() self.LifeLeft = 3-self.CrTime if self.LifeLeft <= 0 then self:Remove() end <to be added: Particle Function, or code> end[/code] ...I will rate you dumb, ninjas.
[QUOTE=luavirusfree;38814730]1: Why ignite it? I plan to use particle effects. 2: Explode isn't a particle effect, except in the source code. [code] function ENT:Think() self.LifeLeft = 3-self.CrTime if self.LifeLeft <= 0 then self:Remove() end <to be added: Particle Function, or code> end[/code][/QUOTE] Why are you even using it in think, When you can do it in PhysicsCollide, util.Effect( "Explosion", ..) was just an example you can replace it with an particle effect and you're doing self.LifeLeft wrong.. and that would error since you're removing the entity before even adding the particle effect, unless you're getting the last position of the entity! My dumb rating was to what you just said in your post no need to be offended, I'm not saying you're dumb, just what you typed..
Bah. I can figure that out if it doesn't work. I don't want it to wait until it collides, but I haven't fully observed its behavior in New Super Mario Wii... If it disappears when it hits, then I will code it that way. [SUP][I][U]Edited:[/U][/I][/SUP] [code]function SWEP:PrimaryAttack() local Player = self.Owner[/code] Current code.
If you want something like this more understanding way in a think hook Also it's best to slow the Think hook down so [lua] self.SlowDown = 0 self.CrTime = CurTime() + 3 if CurTime() >= self.SlowDown then if math.Round(self.CrTime - CurTime()) == 0 then self:Remove() //.. particle effect at last position end self.SlowDown = CurTime() + 1 end [/lua] Initialize [lua]self.CrTime = CurTime() + 3 // set the timer to 3 seconds [/lua] Think [lua] if math.Round(self.CrTime - CurTime()) == 0 then // If our timer goes to 0 end [/lua] Every time you spawn another entity timer is reset already.
[code]timer.Simple( 3, SafeRemoveEntity( self.Entity ) )[/code] No more think.
[QUOTE=luavirusfree;38814911][code]timer.Simple( 3, SafeRemoveEntity( self.Entity ) )[/code] No more think.[/QUOTE] Did my test in a think hook [lua] //lua_run local ply = Entity(1) local ent = ents.Create("mariofireball") ent:SetPos(ply:GetEyeTrace().HitPos + ply:GetEyeTrace().HitNormal * 16 ) ent:Spawn() ent:Activate() AddCSLuaFile() ENT.Type = "anim" ENT.Base = "base_anim" /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetMoveType( MOVETYPE_VPHYSICS ); self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 0.5 ); -- Use the model's physics //self.Entity:PhysicsInitSphere(7, "metal"); self.Touched = 0 self.SlowDown = 0 self.CrTime = CurTime() + 3 -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject(); if (phys:IsValid()) then phys:Wake() end end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) self.Touched = 1 local tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ); tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ); tr.filter = self.Entity; tr2 = util.TraceLine( tr ); local vecNormalizedVel = self.Entity:GetVelocity(); if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo(); dmgInfo:SetInflictor( self.Entity ); dmgInfo:SetAttacker( pOther ); dmgInfo:SetDamage( 25 ); dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ); dmgInfo:SetDamagePosition( tr2.HitPos ); pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr2.HitPos ); pOther:Ignite(3, 0) else local dmgInfo = DamageInfo(); dmgInfo:SetInflictor( self.Entity ); dmgInfo:SetAttacker( pOther ); dmgInfo:SetDamage( 0 ); dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ); dmgInfo:SetDamagePosition( tr2.HitPos ); //print(dmgInfo, vecNormalizedVel, tr2.HitPos) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr2.HitPos ); pOther:Ignite(30, 0) timer.Simple(30, function() if pOther:Health() > 0 then pOther:Extinguish() end end) end SafeRemoveEntityDelayed( self.Entity, 0.1 ); end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) end function ENT:Think() if CurTime() >= self.SlowDown then if math.Round(self.CrTime - CurTime()) == 0 and self.Touched ~= 1 then local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) SafeRemoveEntityDelayed( self.Entity, 0.1 ) end self.SlowDown = CurTime() + 1 end end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end[/lua] ENT:Touch( pOther ) // SafeRemoveEntityDelayed( self.Entity, 0.1 ); The entity will only get removed when it touches something and not the world only works on Entitys / Players Added self.Touched check, or it'll crash you. Works perfectly now, Only problem is timer.Simple stops working when you remove the entity if removed to early so you may want to delay the remove to another 0.2 or 0.3 seconds.
If I did that, it would also have to check the health. If health is 0, ignite it and stay alive. If it's -1, do nothing except bounce. I still need to program the bounce logic. [editline]13th December 2012[/editline] [code] [ERROR] lua/entities/mariofire/init.lua:29: bad argument #2 to 'Simple' (function expected, got no value) 1. Simple - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:29 3. Spawn - [C]:-1 4. unknown - lua/weapons/mario_fireballs/shared.lua:77 [/code] [code]AddCSLuaFile( "shared.lua" ) include( 'shared.lua' ) /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self.Entity:SetMoveType( MOVETYPE_FLYGRAVITY ); self.Entity:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM ); self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 1 ); -- Use the model's physics self.Entity:PhysicsInitSphere(7, metal); self.CrTime = CurTime() + 3; self.LifeLeft = 1; -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject(); if (phys:IsValid()) then phys:Wake() end timer.Simple( 3, SafeRemoveEntity( self.Entity ) ) end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) local tr; tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ); tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ); tr.filter = self.Entity; tr2 = util.TraceLine( tr ); local vecNormalizedVel = self.Entity:GetVelocity(); vecNormalizedVel = ( vecNormalizedVel ):GetNormalized(); if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo(); dmgInfo:SetInflictor( self.Entity ); dmgInfo:SetAttacker( self.Entity:GetOwner() ); dmgInfo:SetDamage( 25 ); dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ); pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ); pOther:Ignite(3, 0) else local dmgInfo = DamageInfo(); dmgInfo:SetInflictor( self.Entity ); dmgInfo:SetAttacker( self.Entity:GetOwner() ); dmgInfo:SetDamage( 0 ); dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ); pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ); pOther:Ignite(30, 0) timer.Simple(30, pOther.Extinguish() ) end self.Entity:Remove(); -- play body "thwack" sound -- self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ); -- Fireballs don't thwack. local vForward; vForward = self.Entity:GetUp(); vForward = ( vForward ):GetNormalized(); self.Touch = function( ... ) return end; self.Think = function( ... ) return end; local Pos1 = tr.HitPos + tr.HitNormal local Pos2 = tr.HitPos - tr.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch! if pOther:IsNPC() or pOther:IsPlayer() then SafeRemoveEntity( self.Entity ); end end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) -- Shoot some blood -- local effectdata = EffectData(); -- effectdata:SetOrigin( self.Entity:GetPos() ); -- util.Effect( "BloodImpact", effectdata ); function ENT:PhysicsCollide( data, physobj ) if data.Speed <= 12 then timer.Simple(5, function() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end) end end local Pos1 = data.HitPos + data.HitNormal local Pos2 = data.HitPos - data.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch -- Play sound on death --[[ if (data.Speed > 80 && data.DeltaTime > 0.2 ) then self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ); end]] SafeRemoveEntityDelayed( self.Entity, 0.1 ); end --function ENT:Think() -- if math.Round(self.CrTime - CurTime()) == 0 then SafeRemoveEntity( self.Entity ) end --end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end [/code] [editline]13th December 2012[/editline] I'd prefer to be told what to change, not be given a whole block of code.
[lua][ERROR] lua/entities/mariofire/init.lua:29: bad argument #2 to 'Simple' (function expected, got no value) 1. Simple - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:29 3. Spawn - [C]:-1 4. unknown - lua/weapons/mario_fireballs/shared.lua:77 timer.Simple(30, pOther.Extinguish() ) [/lua] It's saying you need a function now in timer.Simple [lua]timer.Simple(30, function() pOther.Extinguish() end)[/lua] For bouncing you can look at [URL="https://bitbucket.org/facepunch/garrysmod/src/641f2547884a101cb64bc2c100d598e75d12eb3f/garrysmod/lua/entities/sent_ball.lua?at=master"]sent_ball.lua[/URL] source code Change: [lua]self.Entity:PhysicsInitSphere(7, metal);[/lua] to [lua]self:PhysicsInitSphere( 16, "metal_bouncy" )[/lua] Default is 16 I think Read the wiki and learn what each bit does, then you'll understand what my code does, it does the exact same thing what yours does.
Isn't that inches, though??
[QUOTE=luavirusfree;38818288]Isn't that inches, though??[/QUOTE] It's in a Sphere so basically like a circle how big the ball is, or prop.
Yes, but the wiki says it's radius, not diameter. Radius = 1/2, Diameter = 100%, in total width. [code]self.Entity:PhysicsInitSphere(7, foliage);[/code]
[QUOTE=luavirusfree;38820155]Yes, but the wiki says it's radius, not diameter. Radius = 1/2, Diameter = 100%, in total width. [code]self.Entity:PhysicsInitSphere(7, foliage);[/code][/QUOTE] I think the 2nd argument should be a string, like garry has his in sent_ball.lua.
[ERROR] lua/entities/mariofire/init.lua:29: ')' expected near '(' 1. unknown - lua/entities/mariofire/init.lua:0 [code]function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self.Entity:SetMoveType( MOVETYPE_FLYGRAVITY ); self.Entity:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM ); self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 1 ); -- Use the model's physics self.Entity:PhysicsInitSphere(7, "foliage"); self.CrTime = CurTime() + 3; self.LifeLeft = 1; -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject(); if (phys:IsValid()) then phys:Wake() end 29: timer.Simple( 3, function (SafeRemoveEntity( self.Entity ) ) ) end[/code] ...Even if I remove that, my editor acts like somethings still there [ a '(' ] (Notepad++) [code]AddCSLuaFile( "shared.lua" )include( 'shared.lua' ) /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self.Entity:SetMoveType( MOVETYPE_FLYGRAVITY ) self.Entity:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 1 ) -- Use the model's physics self.Entity:PhysicsInitSphere(7, "foliage") self.CrTime = CurTime() + 3 self.LifeLeft = 1 -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject() if phys:IsValid() then phys:Wake() end timer.Simple( 3, function (SafeRemoveEntity( self.Entity ) ) ) end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) local tr tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ) tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ) tr.filter = self.Entity tr2 = util.TraceLine( tr ) local vecNormalizedVel = self.Entity:GetVelocity() vecNormalizedVel = ( vecNormalizedVel ):GetNormalized() if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 25 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ) pOther:Ignite(3, 0) else local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 0 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ) pOther:Ignite(30, 0) timer.Simple(30, pOther.Extinguish() ) end self.Entity:Remove() -- play body "thwack" sound -- self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) -- Fireballs don't thwack. local vForward vForward = self.Entity:GetUp() vForward = ( vForward ):GetNormalized() self.Touch = function( ... ) return end self.Think = function( ... ) return end local Pos1 = tr.HitPos + tr.HitNormal local Pos2 = tr.HitPos - tr.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch! if pOther:IsNPC() or pOther:IsPlayer() then SafeRemoveEntity( self.Entity ) end20 end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) -- Shoot some blood -- local effectdata = EffectData() -- effectdata:SetOrigin( self.Entity:GetPos() ) -- util.Effect( "BloodImpact", effectdata ) function ENT:PhysicsCollide( data, physobj ) if data.Speed <= 12 then timer.Simple(5, function() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end) end end local Pos1 = data.HitPos + data.HitNormal local Pos2 = data.HitPos - data.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch -- Play sound on death --[[ if (data.Speed > 80 && data.DeltaTime > 0.2 ) then self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) end]] SafeRemoveEntityDelayed( self.Entity, 0.1 ) end --function ENT:Think() -- if math.Round(self.CrTime - CurTime()) == 0 then SafeRemoveEntity( self.Entity ) end --end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end [/code]
change [lua]timer.Simple( 3, function (SafeRemoveEntity( self.Entity ) ) )[/lua] to [lua]timer.Simple( 3, function() SafeRemoveEntity( self.Entity ) end)[/lua] And you don't need 2 functions of ENT:PhysicsCollide( data, physobj ) in there only 1 :P
I didn't see that, thank you. [editline]13th December 2012[/editline] I still got it. [ERROR] lua/entities/mariofire/init.lua:29: '(' expected near 'SafeRemoveEntity' 1. unknown - lua/entities/mariofire/init.lua:0 [editline]13th December 2012[/editline] I have fixed the end20 ...
[QUOTE=luavirusfree;38820533]I didn't see that, thank you. [editline]13th December 2012[/editline] I still got it. [ERROR] lua/entities/mariofire/init.lua:29: '(' expected near 'SafeRemoveEntity' 1. unknown - lua/entities/mariofire/init.lua:0 [editline]13th December 2012[/editline] I have fixed the end20 ...[/QUOTE] Repost your code again lol, so I can see what it looks like. Nvm i saw it [lua]if pOther:IsNPC() or pOther:IsPlayer() then SafeRemoveEntity( self.Entity ) end20[/lua] Remove the 20 of end If it still errors repost full code
Yeah, newest code is at the top... What fixes these ( and ) errors?
[QUOTE=luavirusfree;38821064]Yeah, newest code is at the top... What fixes these ( and ) errors?[/QUOTE] Throws lua code at your face :P replace with your new code [lua]AddCSLuaFile( "shared.lua" ) include( 'shared.lua' ) /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self.Entity:SetMoveType( MOVETYPE_FLYGRAVITY ) self.Entity:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 1 ) -- Use the model's physics self.Entity:PhysicsInitSphere(7, "foliage") self.CrTime = CurTime() + 3 self.LifeLeft = 1 -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject() if phys:IsValid() then phys:Wake() end timer.Simple( 3, function() SafeRemoveEntity( self.Entity ) end) end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) local tr tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ) tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ) tr.filter = self.Entity tr2 = util.TraceLine( tr ) local vecNormalizedVel = self.Entity:GetVelocity() vecNormalizedVel = ( vecNormalizedVel ):GetNormalized() if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 25 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ) pOther:Ignite(3, 0) else local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 0 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr.HitPos ) pOther:Ignite(30, 0) timer.Simple(30, pOther.Extinguish() ) end self.Entity:Remove() -- play body "thwack" sound -- self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) -- Fireballs don't thwack. local vForward vForward = self.Entity:GetUp() vForward = ( vForward ):GetNormalized() self.Touch = function( ... ) return end self.Think = function( ... ) return end local Pos1 = tr.HitPos + tr.HitNormal local Pos2 = tr.HitPos - tr.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch! if pOther:IsNPC() or pOther:IsPlayer() then SafeRemoveEntity( self.Entity ) end end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) -- Shoot some blood -- local effectdata = EffectData() -- effectdata:SetOrigin( self.Entity:GetPos() ) -- util.Effect( "BloodImpact", effectdata ) if data.Speed <= 12 then timer.Simple(5, function() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end) end end local Pos1 = data.HitPos + data.HitNormal local Pos2 = data.HitPos - data.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch -- Play sound on death --[[ if (data.Speed > 80 && data.DeltaTime > 0.2 ) then self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) end]] SafeRemoveEntityDelayed( self.Entity, 0.1 ) end --function ENT:Think() -- if math.Round(self.CrTime - CurTime()) == 0 then SafeRemoveEntity( self.Entity ) end --end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end[/lua]
Okay, I fixed that. [ERROR] lua/entities/mariofire/init.lua:56: bad argument #1 to 'SetDamagePosition' (Vector expected, got nil) 1. SetDamagePosition - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:56 [ERROR] lua/entities/mariofire/init.lua:56: bad argument #1 to 'SetDamagePosition' (Vector expected, got nil) 1. SetDamagePosition - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:56
[QUOTE=luavirusfree;38821155]Okay, I fixed that. [ERROR] lua/entities/mariofire/init.lua:56: bad argument #1 to 'SetDamagePosition' (Vector expected, got nil) 1. SetDamagePosition - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:56 [ERROR] lua/entities/mariofire/init.lua:56: bad argument #1 to 'SetDamagePosition' (Vector expected, got nil) 1. SetDamagePosition - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:56[/QUOTE] Copy the new code over and change, I've updated it again. [lua] local tr tr = {}[/lua] to [lua]local tr = {}[/lua]
Okay... [ERROR] lua/entities/mariofire/init.lua:83: bad argument #2 to '__add' (Vector expected, got nil) 1. __add - [C]:-1 2. unknown - lua/entities/mariofire/init.lua:83 [code]AddCSLuaFile( "shared.lua" ) include( 'shared.lua' ) /*--------------------------------------------------------- Name: Initialize ---------------------------------------------------------*/ function ENT:Initialize() -- Use the doll model self.Entity:SetModel( "models/props_c17/doll01.mdl" ) self.Entity:SetMoveType( MOVETYPE_FLYGRAVITY ) self.Entity:SetMoveCollide( MOVECOLLIDE_FLY_CUSTOM ) self:PhysicsInit( SOLID_VPHYSICS ) self:SetSolid( SOLID_VPHYSICS ) self.Entity:SetGravity( 1 ) -- Use the model's physics self.Entity:PhysicsInitSphere(7, "foliage") self.CrTime = CurTime() + 3 self.LifeLeft = 1 -- Wake the physics object up. It's time to have babies! local phys = self.Entity:GetPhysicsObject() if phys:IsValid() then phys:Wake() end timer.Simple( 3, function() SafeRemoveEntity( self.Entity ) end ) end ------------------------------------------------------------------------------- -- Purpose: -- Input : *pOther - ------------------------------------------------------------------------------- function ENT:Touch( pOther ) local tr = {} tr.startpos = self.Entity:NearestPoint( pOther:OBBCenter() ) tr.endpos = pOther:NearestPoint( self.Entity:OBBCenter() ) tr.filter = self.Entity tr2 = util.TraceLine( tr ) local vecNormalizedVel = self.Entity:GetVelocity() vecNormalizedVel = ( vecNormalizedVel ):GetNormalized() if( self.Entity:GetOwner() && self.Entity:GetOwner():IsPlayer() ) then local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 25 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr2.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr2.HitPos ) pOther:Ignite(3, 0) else local dmgInfo = DamageInfo() dmgInfo:SetInflictor( self.Entity ) dmgInfo:SetAttacker( self.Entity:GetOwner() ) dmgInfo:SetDamage( 0 ) dmgInfo:SetDamageType( bit.bor( DMG_BURN, DMG_PREVENT_PHYSICS_FORCE ) ) dmgInfo:SetDamagePosition( tr2.HitPos ) pOther:DispatchTraceAttack( dmgInfo, vecNormalizedVel, tr2.HitPos ) pOther:Ignite(30, 0) timer.Simple(30, pOther.Extinguish() ) end self.Entity:Remove() -- play body "thwack" sound -- self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) -- Fireballs don't thwack. local vForward vForward = self.Entity:GetUp() vForward = ( vForward ):GetNormalized() self.Touch = function( ... ) return end self.Think = function( ... ) return end local Pos1 = tr2.HitPos + tr.HitNormal local Pos2 = tr2.HitPos - tr.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch! if pOther:IsNPC() or pOther:IsPlayer() then SafeRemoveEntity( self.Entity ) end end /*--------------------------------------------------------- Name: PhysicsCollide ---------------------------------------------------------*/ function ENT:PhysicsCollide( data, physobj ) -- Shoot some blood -- local effectdata = EffectData() -- effectdata:SetOrigin( self.Entity:GetPos() ) -- util.Effect( "BloodImpact", effectdata ) -- function ENT:PhysicsCollide( data, physobj ) if data.Speed <= 12 then timer.Simple(5, function() local vPoint = self:GetPos() local effectdata = EffectData() effectdata:SetStart( vPoint ) effectdata:SetOrigin( vPoint ) effectdata:SetScale( 1 ) util.Effect( "Explosion", effectdata ) if IsValid(self) then self:Remove() end end) end local LastSpeed = math.max( data.OurOldVelocity:Length(), data.Speed ) local NewVelocity = physobj:GetVelocity() NewVelocity:Normalize() LastSpeed = math.max( NewVelocity:Length(), LastSpeed ) local TargetVelocity = NewVelocity * LastSpeed physobj:SetVelocity( TargetVelocity ) -- local Pos1 = data.HitPos + data.HitNormal -- local Pos2 = data.HitPos - data.HitNormal -- util.Decal( "Blood", Pos1, Pos2 ) -- Scorch -- Play sound on death --[[ if (data.Speed > 80 && data.DeltaTime > 0.2 ) then self.Entity:EmitSound( "Weapon_Crossbow.BoltHitBody" ) end]] SafeRemoveEntityDelayed( self.Entity, 0.1 ) end --function ENT:Think() -- if math.Round(self.CrTime - CurTime()) == 0 then SafeRemoveEntity( self.Entity ) end --end /*--------------------------------------------------------- Name: OnTakeDamage ---------------------------------------------------------*/ --[[function ENT:OnTakeDamage( dmginfo ) -- React physically when shot/getting blown self.Entity:TakePhysicsDamage( dmginfo ) end ]] [/code]
Change [lua]tr.HitNormal[/lua] To [lua]tr2.HitNormal[/lua] On both lines 83,84.
Sorry, you need to Log In to post a reply to this thread.