--local tblf = include("/../gamemodes/artery/gamemode/utility/mapfuncs.lua") print("Hello from cl_ncpmap in core") local drawmap = false hook.Add( "ScoreboardShow", "ShowNPCMap", function() print("Showing npc map") drawmap = true return true end ) hook.Add( "ScoreboardHide", "ShowNPCMap", function() print("Hiding npc map") drawmap = false end ) local white = Color( 255, 255, 255, 255 ) local mapicons = --[[mapicons or]] { ["global"] = { ["isleaf"] = false, ["border"] = { {-10000,-10000}, {-10000,10000}, {10000,10000}, {10000,-10000} }, } } hook.Add( "HUDPaint", "paintsprites", function() local function drawsubarea(node) print("drawing") PrintTable(node) if node.isleaf then render.SetMaterial( node.material ) render.DrawSprite( node.pos, 64, 64, white ) print("Actually drawing") PrintTable(node) else if not node.icons then print("found area without any icons!") for k,v in pairs(node) do print(k,":",v) end end for k,v in pairs(node.icons or {}) do drawsubarea(v) end end end if drawmap then print("starting this draw") cam.Start3D() drawsubarea(mapicons["global"]) cam.End3D() print("done with this draw") end end ) --When the player loads in, load the npcmap for this map hook.Add("Initialize","loadmapicons",function() LocalPlayer().MapIcons = LocalPlayer().MapIcons or {} local mapname = game.GetMap() if not file.Exists("artery/client/"..mapname,"DATA") then file.CreateDir("artery/client/"..mapname) end local mapiconstxt = file.Read("artery/client/"..mapname.."/known.txt") if not mapiconstxt then return end --File does not exist! for k,v in pairs(string.Explode("\r?\n",mapiconstxt,true)) do local isleaf = tobool(v[1]) local ttbl = string.Explode(",",v) if isleaf then local subarea = ttbl[2] local material = ttbl[3] local pos = Vector(ttbl[4],ttbl[5],ttbl[6]) else local name = v[2] local boundry = {} for i = 3, #ttbl, 3 do boundry[#boundry+1] = ttbl[i],ttbl[i + 1],ttbl[i + 2] end end end end) --When the player disconnects (or changes levels) save the npcmap --Add an icon to the map local function addmapicon(material, subarea, position) print("adding map icon, material:",material,"subarea:",subarea,"bordertbl:",bordertbl) print("mat",material,"subarea",subarea,"position",position) local parts = string.Explode(":",subarea) print("parts:",parts) PrintTable(parts) local cursor = mapicons for k,v in pairs(parts) do print("Traverseing down tree:",k,v) print("cursor was") PrintTable(cursor) if cursor[v] == nil then cursor[v] = {} end cursor = cursor[v] print("cursor is") PrintTable(cursor) end if cursor.isleaf and v.pos == position then return end cursor.icons = cursor.icons or {} for k,v in pairs(cursor.icons) do if v.pos == position then return end --This position already has an icon! end table.insert(cursor.icons,{ ["isleaf"] = true, ["material"] = Material(material), ["pos"] = position, }) assert(type(cursor) == "table","Attempted to add subarea that dosen't exist:" .. subarea) end local function addmaparea(material, subarea, bordertbl) print("adding map area, material:",material,"subarea:",subarea,"bordertbl:",bordertbl) local parts = string.Explode(":",subarea) print("parts:",parts) PrintTable(parts) local cursor = mapicons if #parts > 1 then for k,v in pairs(parts) do print("Traverseing down tree:",k,v) cursor = cursor[v] end end print("Cursor is",cursor) if cursor ~= nil then cursor[subarea] = { ["isleaf"] = false, ["material"] = "", ["border"] = bordertbl, ["subparts"] = {} } else print("Error, cursor was nil!") end end --[[ addmaparea("","global",{ {-10000,-10000}, {-10000,10000}, {10000,10000}, {10000,-10000} }) ]] net.Receive("addmapicon",function() print("got recieve for map icon") local matstr = net.ReadString() local subarea = net.ReadString() local matpos = net.ReadVector() addmapicon(matstr,subarea,matpos) print("MapIcons is now") PrintTable(mapicons) end) net.Receive("addmaparea",function() print("got receive for map area") local matstr = net.ReadString() local subarea = net.ReadString() local boarders = net.ReadTable() end)