diff options
| author | Apickx <Apickx@cogarr.org> | 2015-12-28 19:18:30 -0500 |
|---|---|---|
| committer | Apickx <Apickx@cogarr.org> | 2015-12-28 19:18:30 -0500 |
| commit | 868e729d68b5913716bfe5ddb512f4099851e9a2 (patch) | |
| tree | 6441108754145dfd68a6e23bea382b5cb1ab63d5 /gamemode/sh_var/shvar.lua | |
| download | gearfox-868e729d68b5913716bfe5ddb512f4099851e9a2.tar.gz gearfox-868e729d68b5913716bfe5ddb512f4099851e9a2.tar.bz2 gearfox-868e729d68b5913716bfe5ddb512f4099851e9a2.zip | |
Diffstat (limited to 'gamemode/sh_var/shvar.lua')
| -rw-r--r-- | gamemode/sh_var/shvar.lua | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/gamemode/sh_var/shvar.lua b/gamemode/sh_var/shvar.lua new file mode 100644 index 0000000..11e299e --- /dev/null +++ b/gamemode/sh_var/shvar.lua @@ -0,0 +1,84 @@ +local EPT = FindMetaTable("Entity") +local SHNonTemp = {} + + + +if (CLIENT) then + net.Receive("_ReceiveSHVar",function(size) + local Dat = net.ReadTable() + local Ent = Dat.Ent + + if (!IsValid(Ent)) then return end + if (!Ent._SHVarDat) then Ent._SHVarDat = {} end + Ent._SHVarDat[Dat.Name] = Dat.Value + end) +else + hook.Add("PlayerAuthed","_AddSHVar",function(pl,sid,uid) + for k,v in pairs( SHNonTemp ) do + local Ent = ents.GetByIndex(k) + if (IsValid(Ent)) then + for a,b in pairs( v ) do + Ent:SetSHVar(a,b,pl) + end + else + SHNonTemp[k] = nil + end + end + end) + + util.AddNetworkString("_ReceiveSHVar") +end + +function EPT:GetSHVarTable() + return self._SHVarDat +end + +function EPT:SearchSHVarTable(Name) + local DAT = {} + + if (!self._SHVarDat) then return {} end + for k,v in pairs(self._SHVarDat) do + if (k:find(Name) and v != nil) then + DAT[k] = v + end + end + + return DAT +end + +function EPT:AddNonTempSH(bKey,Value) + local ID = self:EntIndex() + + if (!SHNonTemp[ID]) then SHNonTemp[ID] = {} end + SHNonTemp[ID][bKey] = Value + + self:SetSHVar(bKey,Value) +end + +function EPT:SetSHVar(Name,Var,ply) --Third argument should only be defined if it is send specificly only for this player. + if (!self._SHVarDat) then self._SHVarDat = {} end + self._SHVarDat[Name] = Var + + if (CLIENT) then return end + + local Dat = { + Name = Name, + Ent = self, + Value = Var, + } + + net.Start( "_ReceiveSHVar" ) + net.WriteTable( Dat ) + + if (IsValid(ply)) then + net.Send(ply) + else + net.Broadcast() + end +end + +function EPT:GetSHVar(Name,Var) + local ID = self:EntIndex() + if (!self._SHVarDat or self._SHVarDat[Name] == nil) then return Var or nil end + return self._SHVarDat[Name] +end
\ No newline at end of file |
