if cvarchange_loaded then return end -- boo

-- taken from LUA_OBSK.lua
local function tableparse(x)
	local y = {}
	local i = 0
	for word in x:gmatch('[^,%s]+') do
		y[i+1] = word 
		i = $+1
	end	
	return y
end

local cvartable = {}
local restoretable = {}
local no_change = false -- yb fans be like

local function MapChangeCvar(mapnum)
	if not netgame then return end
	if mapheaderinfo[mapnum].cvarchange and not no_change then
		cvartable = tableparse(mapheaderinfo[mapnum].cvarchange)
		for i = 1,#cvartable,2 do
			if not CV_FindVar(cvartable[i]) then continue end
			-- no
			if string.lower(CV_FindVar(cvartable[i]).string) ~= string.lower(cvartable[i+1]) then 
				print(cvartable[i].." "..cvartable[i+1])
				table.insert(restoretable, cvartable[i].." "..CV_FindVar(cvartable[i]).string)
				COM_BufInsertText(server, cvartable[i].." "..cvartable[i+1])
			end
		end
		no_change = true
		COM_BufInsertText(server, "wait 1; map "..mapnum)
	end
end

local function EndMapChange(mapnum)
	if not netgame then return end
	if #cvartable > 0 and not no_change then
		cvartable = {}
		for k, e in ipairs(restoretable) do
			COM_BufInsertText(server, e)
		end
	end
end

addHook("IntermissionThinker", function()
	no_change = false
end)

addHook("MapChange", function(nm)
	if nm ~= gamemap then
		no_change = false
	end
	EndMapChange(gamemap)
	MapChangeCvar(gamemap)
end)

rawset(_G, "cvarchange_loaded", 1)