From f9df323cf660cbe40eab897f5fe5af891ba2b66a Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sun, 7 Feb 2016 19:38:48 -0500 Subject: Finished fireball spell (still needs recipe) --- entities/entities/ws_projectile/cl_init.lua | 5 +++ entities/entities/ws_projectile/init.lua | 33 ++++++++++++++++ entities/entities/ws_projectile/shared.lua | 27 ++++++++++++++ gamemode/itemsystem/items/spell_fireball.lua | 26 ++++++++++++- gamemode/npcsystem/loadnpcs.lua | 56 ---------------------------- gamemode/shared/player_spellcast.lua | 4 +- 6 files changed, 91 insertions(+), 60 deletions(-) create mode 100644 entities/entities/ws_projectile/cl_init.lua create mode 100644 entities/entities/ws_projectile/init.lua create mode 100644 entities/entities/ws_projectile/shared.lua diff --git a/entities/entities/ws_projectile/cl_init.lua b/entities/entities/ws_projectile/cl_init.lua new file mode 100644 index 0000000..6bc006e --- /dev/null +++ b/entities/entities/ws_projectile/cl_init.lua @@ -0,0 +1,5 @@ +include('shared.lua') + +function ENT:Draw() + self.Entity:DrawModel() +end diff --git a/entities/entities/ws_projectile/init.lua b/entities/entities/ws_projectile/init.lua new file mode 100644 index 0000000..2898d88 --- /dev/null +++ b/entities/entities/ws_projectile/init.lua @@ -0,0 +1,33 @@ +AddCSLuaFile("cl_init.lua") +AddCSLuaFile("shared.lua") + +include('shared.lua') + +local Ab = Color(255,255,255,100) + +function ENT:Initialize() + if(self.model) then self:SetModel(self.model) + else self:SetModel("models/mixerman3d/other/arrow.mdl") + end + + if(self.init) then self:init(self) end + + if(self.speed) then print(self.speed) + else print("No speed for projectile!") end + + self:PhysicsInit(SOLID_VPHYSICS) + self:SetMoveType(MOVETYPE_VPHYSICS) + self:SetSolid(SOLID_VPHYSICS) + self:SetCollisionGroup(COLLISION_GROUP_INTERACTIVE) + self:PhysWake() + + util.SpriteTrail( self, 0, Ab, true, 1, 0, 1, 1, "sprites/smoke_trail.vmt" ) +end + + + +function ENT:Think() + print("speed is " .. self.speed) + self:GetPhysicsObject():ApplyForceCenter((self:GetForward() * self.speed) + ( Vector(0,0,-1)*self.drop)) + self:GetPhysicsObject():SetAngles(self:GetVelocity():Angle()) +end diff --git a/entities/entities/ws_projectile/shared.lua b/entities/entities/ws_projectile/shared.lua new file mode 100644 index 0000000..7eb12e8 --- /dev/null +++ b/entities/entities/ws_projectile/shared.lua @@ -0,0 +1,27 @@ +ENT.Type = "anim" +ENT.Base = "base_anim" + +function ENT:OnRemove() +end + +function ENT:PhysicsCollide(data, phys) + print("We're collideing!") + self:Explode() +end + +function ENT:Explode() + print("Explode called") + local exp = ents.Create("env_explosion") + exp:SetPos(self:GetPos()) + exp:Fire("Explode","",0) + exp:Spawn() + for k,v in pairs(ents.FindInSphere(self:GetPos(),200)) do + if(v.TakeDamage) then + local dmg = ( 200 - v:GetPos():Distance( self:GetPos() ) )/2 + v:TakeDamage(dmg,nil,self) + print("Takeing " .. dmg .. " dammage") + end + end + + self:Remove() +end diff --git a/gamemode/itemsystem/items/spell_fireball.lua b/gamemode/itemsystem/items/spell_fireball.lua index d8bad79..11b12b3 100644 --- a/gamemode/itemsystem/items/spell_fireball.lua +++ b/gamemode/itemsystem/items/spell_fireball.lua @@ -17,8 +17,29 @@ ITEM.Recipe = { ITEM.CD = 1 -function ITEM:DoFireball() - print("Fully successfull fireball callback") +function ITEM:DoFireball(pl) + print("Fully successfull fireball callback:") + print(pl) + local aim = pl:GetAimVector() + local fireball = {} + fireball["model"] = "models/hunter/blocks/cube025x025x025.mdl" + fireball["speed"] = 700 + fireball["drop"] = 50 + fireball["init"] = function(fb) fb:Ignite(10) end + + local D = ents.Create("ws_projectile") + if(fireball.speed) then D.speed = fireball.speed end + if(fireball.model) then D.model = fireball.model end + if(fireball.drop) then D.drop = fireball.drop end + if(fireball.init) then D.init = fireball.init end + + print("D's speed:" .. D.speed) + + D:SetPos(pl:GetShootPos()+aim*50) + D:SetOwner(pl) + D:SetAngles(aim:Angle()) + D:Spawn() + pl:EmitSound(Sound("physics/flesh/flesh_impact_hard.wav"),100,math.random(90,110)) end function ITEM:DoFireballFail() @@ -26,6 +47,7 @@ function ITEM:DoFireballFail() end function ITEM:OnPrimary(pl,tr) + ParticleEffect("particletest.pcf",pl:GetPos(),pl:GetAngles(),pl) if (CLIENT) then return end pl:Cast("Fireball",self.DoFireball) end diff --git a/gamemode/npcsystem/loadnpcs.lua b/gamemode/npcsystem/loadnpcs.lua index c522400..9bf839b 100644 --- a/gamemode/npcsystem/loadnpcs.lua +++ b/gamemode/npcsystem/loadnpcs.lua @@ -39,59 +39,3 @@ function GetNpcByName(name) return nil end ---[[ -function GM:SpawnNPCByName(name,pos) - print("Server side, spawning bird!") - - entdata = GetNpcByName(name) - if not entdata then - print("NPC not found!") - return - end - ent = ents.Create("ws_npc_ambient") - ent:SetPos(pos) - - - if(entdata.Speed) then - ent.Speed = entdata.Speed - end - if(entdata.Model) then - ent.Model = entdata.Model - end - if(entdata.vitality) then - ent:SetHealth(entdata.vitality) - end - if(entdata.Drops) then - ent.Drops = entdata.Drops - end - if(entdata.OnDammage) then - ent.OnDammage = entdata.OnDammage - end - if(entdata.Behave) then - ent.Behave = entdata.Behave - end - if(entdata.Act) then - ent.Act = entdata.Act - end - ent:Spawn() -end -]] ---[[ -function GetRecipeForItem(name) - for k,v in pairs( GAMEMODE.Recipes ) do - if (v.Name == name) then return v.Recipe,v end - end - - return nil -end -]]-- ---[[ -function GetItemsByClass(class) - local Dat = {} - for k,v in pairs( GAMEMODE.Items ) do - if (v.Class == class) then table.insert(Dat,v) end - end - - return Dat -end -]]-- diff --git a/gamemode/shared/player_spellcast.lua b/gamemode/shared/player_spellcast.lua index fcc9484..0cf2108 100644 --- a/gamemode/shared/player_spellcast.lua +++ b/gamemode/shared/player_spellcast.lua @@ -19,8 +19,8 @@ if(SERVER) then net.Receive("FinishedCasting",function(len,pl) if(pl.casting) then - print("Finished casting message received by server") - pl.casting(net.ReadInt(BITCOUNT)) + print("Finished casting message received by server: " .. pl:Nick()) + pl.casting(net.ReadInt(BITCOUNT),pl) pl.casting = nil end end) -- cgit v1.2.3-70-g09d2