Compare commits

...

1 commit

Author SHA1 Message Date
e1ef031c4d
add: first steps of multithreading 2022-07-17 20:48:13 +08:00
3 changed files with 57 additions and 0 deletions

View file

@ -82,6 +82,8 @@ AddCSLuaFile("vgui/zshealtharea.lua")
AddCSLuaFile("vgui/zsstatusarea.lua")
AddCSLuaFile("vgui/zsgamestate.lua")
include("multithread.lua")
include("sh_globals.lua")
include("obj_entity_extend_sv.lua")

View file

@ -0,0 +1,53 @@
require("effil")
GM.MT = {}
local m = GM.MT
local charset = {}
for i = 48, 57 do table.insert(charset, string.char(i)) end
for i = 65, 90 do table.insert(charset, string.char(i)) end
for i = 97, 122 do table.insert(charset, string.char(i)) end
function randStr(length)
math.randomseed(os.time())
if length > 0 then
return randomStr(length - 1) .. charset[math.random(1, #charset)]
else
return ""
end
end
function m:WaitForAll(threads)
local results = {}
for i=1, #threads do
results[i] = threads[i]:get()
end
return results
end
function m:MarkEntity(ent)
if not ent or not ent:IsValid() then return nil end
ent._MT_ID = ent._MT_ID or randStr(5)
return {ent:GetClass(), ent._MT_ID}
end
function m:FindEnt(id)
if not id then return nil end
for _,v in pairs(ents.FindByClass(id[1])) do
if v._MT_ID == id[2] then return v end
end
return nil
end
hook.Add("PlayerSpawn", "aa", function(ply)
effil.thread(function()print("we are on the other thread")end)()
local id = GAMEMODE.MT.MarkEntity(ply)
PrintTable(id)
print("main")
--[[effil.thread(function(t)
local p = GAMEMODE.MT.FindEnt(t)
print("t p", p)
end)]]
end)

View file

@ -1,5 +1,7 @@
English | [中文(简体)](readme_zh-CN.md)
**WARNING: This edition of Zombie Survival requires extra library on server.**
# Zombie Survival
The definitive zombie experience.
A gamemode for Garry's Mod.