aboutsummaryrefslogtreecommitdiff
path: root/gamemode/shared
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/shared')
-rw-r--r--gamemode/shared/player_spellcast.lua45
1 files changed, 45 insertions, 0 deletions
diff --git a/gamemode/shared/player_spellcast.lua b/gamemode/shared/player_spellcast.lua
new file mode 100644
index 0000000..fcc9484
--- /dev/null
+++ b/gamemode/shared/player_spellcast.lua
@@ -0,0 +1,45 @@
+
+local meta = FindMetaTable("Player")
+
+--Number of bits used for networking spell casting success rate. Even though by default it shouldn't be more than 100, 8 lets it go to 256 in case you want to add buffs/bonuses.
+local BITCOUNT = 256
+
+if(SERVER) then
+ util.AddNetworkString("CastSpell")
+ util.AddNetworkString("FinishedCasting")
+
+ function meta:Cast(spellname, callback)
+ if(self.casting) then return end
+ self.casting = callback
+ print("Casting " .. spellname)
+ net.Start("CastSpell")
+ net.WriteString(spellname)
+ net.Send(self)
+ end
+
+ net.Receive("FinishedCasting",function(len,pl)
+ if(pl.casting) then
+ print("Finished casting message received by server")
+ pl.casting(net.ReadInt(BITCOUNT))
+ pl.casting = nil
+ end
+ end)
+else
+
+ function finishedcasting(score)
+ net.Start("FinishedCasting")
+ net.WriteInt(score,BITCOUNT)
+ net.SendToServer()
+ end
+
+ net.Receive("CastSpell",function()
+ local spellname = net.ReadString()
+ print("Request to cast spell" .. spellname)
+ StartMinigame(spellname)
+ end)
+end
+
+function meta:IsCasting()
+ if(self.casting) then return false end
+ return true
+end