diff options
Diffstat (limited to 'gamemode/itemsystem/items/spell_fireball.lua')
| -rw-r--r-- | gamemode/itemsystem/items/spell_fireball.lua | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/gamemode/itemsystem/items/spell_fireball.lua b/gamemode/itemsystem/items/spell_fireball.lua index 0cdb356..481fd2f 100644 --- a/gamemode/itemsystem/items/spell_fireball.lua +++ b/gamemode/itemsystem/items/spell_fireball.lua @@ -22,8 +22,12 @@ ITEM.Recipe = { ITEM.CD = 0.25 -ITEM.NumFireballs = 0 -ITEM.MaxFireballs = 3 +--[[ + The number of fireballs a player has is held in a global table where each entry is + [player] = # of fireballs +]] +local NumFireballs = {} +local MaxFireballs = 3 local fireball = {} fireball["model"] = "models/hunter/blocks/cube025x025x025.mdl" @@ -31,16 +35,14 @@ fireball["speed"] = 700 fireball["drop"] = 50 fireball["init"] = function(fb) fb:Ignite(10) end fireball["onhit"] = function (self,data,phys) - 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 + if v.TakeDamage then + local dmg = (200 - v:GetPos():Distance(self:GetPos())) / 2 v:TakeDamage(dmg,nil,self) - print("Takeing " .. dmg .. " dammage") end end @@ -48,20 +50,16 @@ fireball["onhit"] = function (self,data,phys) end function ITEM:DoFireball(pl) - print("Fully successfull fireball callback:") + print("Fully successfull fireball callback:") print(pl) local aim = pl:GetAimVector() 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 - if(fireball.onhit) then D.onhit = fireball.onhit end - - print("D's speed:" .. D.speed) + for k,v in pairs(fireball) do + D[k] = v + end - D:SetPos(pl:GetShootPos()+aim*50) + D:SetPos(pl:GetShootPos() + aim * 50) D:SetOwner(pl) D:SetAngles(aim:Angle()) D:Spawn() @@ -70,22 +68,37 @@ end function ITEM:OnSecondary(pl,tr) ParticleEffect("firetest",pl:GetPos(),pl:GetAngles(),pl) - if(self.NumFireballs > 0) then + if NumFireballs[pl] ~= nil and NumFireballs[pl] > 0 then self:DoFireball(pl) - self.NumFireballs = self.NumFireballs-1 + NumFireballs[pl] = NumFireballs[pl]-1 end end +hook.Add("PlayerDeath","remove_fireball_count",function(victim,inflictor,attacker) + if NumFireballs ~= nil then + NumFireballs[victim] = 0 + else + error("Tried to remove fireball count from non-existant table!") + end +end) + +hook.Add("PlayerDisconnected","clean_fireball_count",function(ply) + NumFireballs[ply] = nil +end) + local fireballfunc = function(num,pl,self) - if(num == 0) then return end - if(self.NumFireballs < self.MaxFireballs) then - self.NumFireballs = self.NumFireballs+1 - print("New num fireballs:" .. self.NumFireballs) + print("Fireball func called with ",num,pl,self) + print("NumFireballs was",NumFireballs) + if num == 0 then return end + if NumFireballs[pl] == nil then + NumFireballs[pl] = 1 + elseif NumFireballs[pl] < MaxFireballs then + NumFireballs[pl] = NumFireballs[pl] + 1 end end function ITEM:OnPrimary(pl,tr) - if(CLIENT) then return end + if CLIENT then return end print("Attempting to cast...") pl:Cast("Fireball",fireballfunc,self) end |
