I am certain that this code is not 100% finished, but I want to know what errors might reside within it. I would also like to know if ALL of the code works as I want it (Like getting an angle for the surface normal).
This is the fireball's code:
Init.lua
-- This code is not complete!
I need to add the deflection off of surfaces who's Normal is not level to be accurate.
[code]AddCSLuaFile( "cl_init.lua" )AddCSLuaFile( "shared.lua" )
include("shared.lua")
local XVelCur = self.Entity:GetVelocity().x
local YVelCur = self.Entity:GetVelocity().y
local ZVelCur = self.Entity:GetVelocity().z
function ENT:Initialize()
timer.Simple( 0.05, function()
XVelCur = self.Entity:GetVelocity().x;
YVelCur = self.Entity:GetVelocity().y;
end)
self.Entity:SetModel( "models/error.mdl" )
-- self.Entity:PhysicsInit( SOLID_VPHYSICS )
self.Entity:PhysicsInitSphere( 15 )
self.Entity:SetMoveType( MOVETYPE_FLY )
self.Entity:SetSolid( SOLID_VPHYSICS ) -- BBox would not work.
self.Entity:SetUseType(SIMPLE_USE) -- Should hit the user.
local phys = self.Entity:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
end
end
local EntHit = nil
function ENT:Think()
ZVelCur = self.Entity:GetVelocity().z
----other functions
if XVelCur != self:GetPhysicsObject():GetVelocity().x then
local CurVelX = self:GetPhysicsObject():GetVelocity().x
local AddVel = XVelCur - CurVelX
self:GetPhysicsObject():AddVelocity(AddVel)
end
if self.PlayerUsing != nil then
if self.PlayerUsing:Alive() == true then
self.PlayerUsing:Kill()
end
end
end
function ENT:Touch( hitEnt )
local dmginfo = DamageInfo()
dmginfo:SetDamage( 20 ) -- Almost 1 HP
dmginfo:SetDamageType( DMG_BURN ) -- Fire damage... sortof.
dmginfo:SetAttacker( self.Owner ) -- The Owner Wins!
dmginfo:SetDamageForce( Vector( 0, 0, 0 ) ) --No force!
if hitEnt:IsValid() then
if hitEnt:IsPlayer() or hitEnt:IsNPC() or hitEnt:Health() > 0 then
hitEnt:TakeDamageInfo(dmginfo)
hitEnt:Ignite(math.Random(4,20), 0) -- Catch on fire for anywhere between 4 seconds, and 20 seconds. Will increase damage, and burn after death.
end
end
EntHit = hitEnt
self:Remove()
end
function ENT:Remove()
EntHit = nil -- We hit nothing, anymore.
end
function ENT:SpawnFunction( ply, tr )
if ( !tr.Hit ) then
return
end
local SpawnPos = tr.HitPos + tr.HitNormal * 16
local ent = ents.Create( "mariofire" )
ent:SetPos( SpawnPos )
ent:Spawn()
ent:Activate()
ent.Owner = ply
end
function ENT:PhysicsCollide( data, physobj )
ParticleEffect("FireBallHit",data.HitPos,Angle(0,0,0),nil) -- Hit FX, for whatever it was that we hit... ANYTHING! not air
-- local z = self.Entity:GetAngles() --(Shouldn't change, ever)
local ballphys = self:GetPhysicsObject()
local NewVelocityDefault = Angle(45,0,0) * -64 -- 64 unit speed.
local SurfNorm = data.HitNormal:GetAngle()
local VelCurrent = Vector(XVelCur, YVelCur, ZVelCur)
-- Bounce off an irregular surface. ToDo: Figure the equation in New Super Mario Bros. Wii, and apply it.
if SurfNorm.p == 0 then
-- Regular Bounce
ballphys:SetVelocity( NewVelocityDefault+XVelCur+YVelCur )
elseif SurfNorm.p != 0 then
if SurfNorm.p > 45 or SurfNorm.p < -45 then -- We can't bounce this much! The angle would make us go up too much.
self:Remove()
return
elseif SurfNorm.p >= -45 && SurfNorm.p < 0 then -- It is going UP!
-- NOT realistic, these physics.
-- local VertVel = ballphys:GetVelocity().z
-- if VertVel < 0 then -- We are going down...
local NewVelocityDefault2 = (Angle(45,0,0) + SurfNorm.p/3) * -64
ballphys:SetVelocity( (VelCurrent)+(NewVelocityDefault) ) -- We go DOWN
-- end
elseif SurfNorm.p <= 45 && SurfNorm.p > 0 then -- It are going DOWN!
local NewVelocityDefault2 = (Angle(-45,0,0) + SurfNorm.p/3) * -64
ballphys:SetVelocity( (VelCurrent)+(NewVelocityDefault) ) -- We go DOWN
end
end
end[/code]
Cl_init.lua
[code]include('shared.lua')local IVis = false
function ENT:Initialize()
PrecacheParticleSystem("Fireball")
PrecacheParticleSystem("FireBallHit")
local IVis = true
end
function ENT:Draw()
if not IVis then
local IVis = false
end
-- self.Entity:DrawModel() -- We don't want a model for the fireballs.
-- Create a parented particle effect. When we hit, create one there, too.
if IVis then
local CPoint0 = {
["entity"] = self
["attachtype"] = PATTACH_ABSORIGIN_FOLLOW
}
self:CreateParticleEffect("Fireball",{CPoint0})
end
end
function ENT:PhysicsCollide( data, physobj )
ParticleEffect("FireBallHit",data.HitPos,Angle(0,0,0),nil)
end
function ENT:Remove()
self:StopParticleEmission( "Fireball" ) -- If it doesn't stop with our death, force it to stop.
end[/code]
Shared.lua
[code]include('cl_init.lua')include('init.lua')
ENT.Type = "anim"
ENT.PrintName = "Fireball"
ENT.Author = "LuaVirusFree"
ENT.Category = "New Super Mario Bros. PC"
ENT.Spawnable = false
ENT.AdminSpawnable = false
ENT.Information = "Hot; It hurts!"[/code]
You rate me dumb, but I hold fear. Also, I don't want to run this, just to get errors... oh, that was just brandonj4, again....
[QUOTE=luavirusfree;39134461][B]I am certain that this code is not 100% finished[/B], but [B]I want to know what errors might reside within it[/B]. [B]I would also like to know if ALL of the code works as I want it.[/B]
You rate me [B]dumb[/B], but I hold fear. Also, [B]I don't want to run this, just to get errors[/B]... oh, that was just brandonj4, again....[/QUOTE]
Do you know how fucking stupid you sound?
just out of curiosity, why would you ask what errors there are when for 1.) the console will tell you and 2.) test it if its not fully finished?
Uhm, because the last time I tried to make this, I asked for help on the problems, and the one person who was helping me got BANNED! ... so I don't want that to happen again! :tinfoil:
Sorry, you need to Log In to post a reply to this thread.