aboutsummaryrefslogtreecommitdiff
path: root/gamemode/itemsystem/items/spell_fireball.lua
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2016-10-21 22:51:41 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2016-10-21 22:51:41 -0400
commit50537786ae45d0e12a1dc4265e0d40d2fd4fbc4b (patch)
treea75d44f275eeee4464570b0b3d238244830fcaf1 /gamemode/itemsystem/items/spell_fireball.lua
parent82bcf2c8e3c64fb06bd0094ab5d889bd15a4948a (diff)
parentb0169e7ca20fd9fa4ae889af8fff16d2bf638a18 (diff)
downloadwintersurvival2-50537786ae45d0e12a1dc4265e0d40d2fd4fbc4b.tar.gz
wintersurvival2-50537786ae45d0e12a1dc4265e0d40d2fd4fbc4b.tar.bz2
wintersurvival2-50537786ae45d0e12a1dc4265e0d40d2fd4fbc4b.zip
Various bugfixes and updates, gamemode should be playable again
Diffstat (limited to 'gamemode/itemsystem/items/spell_fireball.lua')
-rw-r--r--gamemode/itemsystem/items/spell_fireball.lua57
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