Version = 1.0 Author = "im2good4u" Description = "all kinds of handy stuff for etpro players / admins\n" --[[---------------------------------------------------[[-- Changelog: 1.0: DebugLib / DebugLibDisabled is now nolonger needed since debuglib is automagicly included fixed ETProStuffPlugVar added advancedchat new client commands say_normal,say_team_normal,say_buddy_normal,say_teamnl_normal 0.9: added client / server / semiadmin cmd statuslist added semiadmindisable / semiadminenable disables the actual command other then setting variables added refereedisable / refereeenable disables the actual command other then setting variables 0.8: added cleint command iplist added config (not much setting but its a start :D) added server command dumpuserid 0.7: added semiadmin commmand iplist added server command iplist 0.6: added sepport for etpro lua 5 Clientsay() 0.5: added serversidecmd referee shoutcast and semiadmin + unreferee unsemiadmin unshoutcast added clientsidecmd semiadminlogout or salo 0.4: fixed cheaterdump on non playing players added et.RegisterModname() 0.3: included DebugLib added /cheatersdump 0.2: added /m in chat mode -- TODO added /etprostuffplug 0.1: initial release --]]---------------------------------------------------]]-- --inport require('etconst') -- Library Fixes et.CS_ETPRO_INFO = 2 et.CS_MUSIC = 53 et.SAY_PRIVATE = 5 -- --seported versions Configversion = 0.7 Debugversion = 0.5 -- --default settings (config is laoded over those) STUFFPLUGCONFIG = { ["sa_allow_hidden_login"] = true, ["cmd_allow_iplist"] = true, ["cmd_allow_statuslist"] = true, ["cmd_allow_semiadmin"] = true, ["cmd_allow_referee"] = true, ["statuslist_show_ref"] = true, ["statuslist_show_shoutcaster"] = true, ["statuslist_show_semiadmin"] = true, ["statuslist_show_semiadminlevel"] = true, ["statuslist_show_rcon"] = false, ["advanced_chat"] = true, ["debug"] = false, } select = function(num,...) return arg[num] end Debug = { ["Print"] = function(message,...) end, ["TimerStart"] = function(timeoffset) end, ["TimerGet"] = function() end, ["TimerStop"] = function() end, ["SetFunction"] = function(functionname,startrecording,timeoffset) end, ["SetSubFunction"] = function(subfunctionname) end, ["Starttime"] = 0, ["Function"] = "NULL", ["SubFunction"] = "NULL", ["Linenumber"] = 0, ["Filename"] = select(3,string.find(LUA_PATH,string.format("%s\\(.*)",et.trap_Cvar_Get("fs_game")))), ["Version"] = 0.5, } --init game function et_InitGame(levelTime,randomSeed,restart) Debug.SetFunction("et_InitGame(levelTime,randomSeed,restart)",true) Debug.SetSubFunction("ConfigLoading") local path = select(3,string.find(LUA_PATH,"(.*)?.lua")) config = loadfile(string.format("%s/ETProStuffPlugConfig.cfg",path)) if config ~= nil then config() if STUFFPLUGCONFIG.version ~= Configversion then et.G_Print("WARNING: ETProStuffPlug - ETProStuffPlugConfig version missmatch: " .. Configversion .. " - " .. STUFFPLUGCONFIG.version .. "\n all unset variables are set to default \n") else et.G_Print("ETProStuffPlug: Config Loaded\n") end else et.G_Print("WARNING: ETProStuffPlug fialed to load ETProStuffPlugConfig\n") end debuglib = loadfile(string.format("%s/DebugLib.lua",path)) if STUFFPLUGCONFIG.debug then if debuglib ~= nil then debuglib() if Debug.Version ~= Debugversion then et.G_Print("WARNING: ETProStuffPlug - DebugLib version missmatch: " .. Debugversion .. " - " .. Debug.Version .. "\n ETProstuffplug will attept to run on version " .. Debug.version .. "\n") else et.G_Print("ETProStuffPlug: Debug Loaded\n") end end end Debug.SetSubFunction("VariableLoading") local stuffplugvar = et.trap_Cvar_Get("ETProStuffPlugVar") local x x = string.find(stuffplugvar,"referee") if x then STUFFPLUGCONFIG.cmd_allow_referee = false end x = string.find(stuffplugvar,"semiadmin") if x then STUFFPLUGCONFIG.cmd_allow_semiadmin = false end Debug.SetSubFunction("Registering") --Debug.Print("omg!!!->",et.FindSelf(nil),et.FindMod(et.FindSelf()),select(2,et.FindMod(et.FindSelf()))) et.RegisterModname( "ETProStuffPlug:" .. Version .. "slot:" .. et.FindSelf()) et.G_Print(Author .. "'s ETProStuffPlug Version " .. Version .. " :" .. Description) et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("forcecvar mod_version \"%s ^%%StuffPlug\"",et.trap_Cvar_Get("mod_version"))) --et.trap_SendServerCommand(-1,"print \"^3Server is running^7: ^5ETProStuffPlug ^7Version ^1" .. Version .. "\n\"") end function et_ClientBegin(clientNum) et.trap_SendServerCommand(clientNum,"print \"^3Server is running^7: ^5ETProStuffPlug ^7Version ^1" .. Version .. "\n\"") end --TODO:semiadmin status fix we need conosle log parsing for it --we will log the server console and forward any info needed function et_Print(text) Debug.SetFunction("et_Print(text)",true) Debug.SetSubFunction("NULL") --et.G_Printf("Semiadmin fix recieved: %s\n",text) if bypass == nil then Debug.SetSubFunction("bypass == nil") local x,y,semiadmincmd --etpro semiadmin: 0 omg (level 1) command [status ] --for tempvar in string.gfind(text,"etpro semiadmin: %d+ %s \(level %d+\) command \[%s \]") do --clientNum,clientName,saLevel,semiadmincmd = string.find(text,"etpro semiadmin: (%d+) (%s) \(level (%d+)\) command \[(%s) \]") x,y,clientNum = string.find(text,"etpro%ssemiadmin:%s(%d+)%s") if clientNum then --et.G_Printf("Semiadmin fix DEBUG: slotnummer %d \n",clientNum) x,y,semiadmincmd = string.find(text,"%)%scommand%s%[(%a+)%s%]") --et.G_Printf("Semiadmin fix DEBUG: command %s \n",semiadmincmd) if semiadmincmd == "status" then --et.G_Print("setting bypasssss to map string\n") --bypass = "map:%s%a+" end end else Debug.SetSubFunction("bypass ~= nil") --et.G_Print("entering bypasssss\n") tempvar1 = string.find(text,bypass) if tempvar1 then --cheaterdump if bypass == "etpro%santicheat%sdatabase%srevision" then fd,len = et.trap_FS_FOpenFile(tempvar2,et.FS_WRITE) count = et.trap_FS_Write(text,string.len(text),fd) bypass = ".*" elseif bypass == ".*" then count = et.trap_FS_Write(text,string.len(text),fd) et.trap_FS_FCloseFile(fd) fd = nil bypass = nil -- end else bypass = nil --we assume this is any line that has nothing todo whit the things we want end end end -- --command functions ----both server / client function BothcmdStuffPlug(client) Debug.SetSubFunction("etprostuffplug") local message string.format("^gETProStuffPlug ^h%d by ^v%s^7: ^k%s\n",Version,Author,Description) if client == -1 then message = et.Q_CleanStr(message) et.G_Print(message) else et.trap_SendServerCommand(client,string.format("print \"%s\"",message)) end return 1 end function Bothcmdiplist(client) Debug.SetSubFunction("iplist") if client ~= -1 then if string.lower(et.trap_Argv(0)) == "sa" then et.G_Printf("etpro semiadmin: %d %s (level %d) command [listip ]",client,et.Info_ValueForKey(et.trap_GetUserinfo(client),"name"),et.gentity_get(client,"sess.semiadmin")) end if string.lower(et.trap_Argv(0)) == "semiadmin" then et.G_Printf("etpro semiadmin: %d %s (level %d) command [listip ]",client,et.Info_ValueForKey(et.trap_GetUserinfo(client),"name"),et.gentity_get(client,"sess.semiadmin")) end end for i=0,et.trap_Cvar_Get("sv_maxclients")-1,1 do -- use -1 case client slots start at 0 local userinfo = et.trap_GetUserinfo(i) if userinfo ~= "" then local name = et.Info_ValueForKey(userinfo,"name") local ip = et.Info_ValueForKey(userinfo,"ip") if client == -1 then et.G_Printf("%d : %s %s\n",i,name,ip) else et.trap_SendServerCommand(client,string.format("print \"%d ^1:^7 %s^7 %s\n\"",i,name,ip)) end end end return 1 end function Bothcmdstatuslist(client) Debug.SetSubFunction("statuslist") if client ~= -1 then if string.lower(et.trap_Argv(0)) == "sa" then et.G_Printf("etpro semiadmin: %d %s (level %d) command [statuslist ]",client,et.Info_ValueForKey(et.trap_GetUserinfo(client),"name"),et.gentity_get(client,"sess.semiadmin")) end if string.lower(et.trap_Argv(0)) == "semiadmin" then et.G_Printf("etpro semiadmin: %d %s (level %d) command [stautslist ]",client,et.Info_ValueForKey(et.trap_GetUserinfo(client),"name"),et.gentity_get(client,"sess.semiadmin")) end for i=0,toCarray(et.trap_Cvar_Get("sv_maxclients")),1 do --local userinfo = et.trap_GetUserinfo(i) --if userinfo ~= "" then local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS+i) if userconfig ~= "" then local ref = et.Info_ValueForKey(userconfig,"ref") local shoutcaster = et.Info_ValueForKey(userconfig,"sc") local semiadmin = et.gentity_get(i,"sess.semiadmin") local name = et.Info_ValueForKey(userconfig,"n") local p = et.Info_ValueForKey(userconfig,"p") local nothing = true local message = name .. " " if STUFFPLUGCONFIG.statuslist_show_ref then if ref == "1" then nothing = false message = message .. "^7,^4Referee " end end if STUFFPLUGCONFIG.statuslist_show_shoutcaster then if shoutcaster == "1" then nothing = false message = message .. "^7,^5Shoutcaster " end end if STUFFPLUGCONFIG.statuslist_show_semiadmin then if tonumber(semiadmin) > 0 then nothing = false message = message .. "^7,^3Semiadmin" if STUFFPLUGCONFIG.statuslist_show_semiadminlevel then message = message .. "^\]" .. semiadmin .. " " end end end if STUFFPLUGCONFIG.statuslist_show_rcon then if p == "4" then nothing = false message = message .. "^7,^1Rcon" end end if nothing then message = message .. "^7,^7Nothing " end et.trap_SendServerCommand(client,string.format("print \"%s\n\"",message)) end end else for i=0,toCarray(et.trap_Cvar_Get("sv_maxclients")),1 do --local userinfo = et.trap_GetUserinfo(i) --if userinfo ~= "" then local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS+i) if userconfig ~= "" then local ref = et.Info_ValueForKey(userconfig,"ref") local shoutcaster = et.Info_ValueForKey(userconfig,"sc") local semiadmin = et.gentity_get(i,"sess.semiadmin") local name = et.Info_ValueForKey(userinfo,"name") local nothing = true local message = name .. " " if ref == "1" then nothing = false message = message .. ",Referee " end if shoutcaster == "1" then nothing = false message = message .. ",Shoutcaster " end if tonumber(semiadmin) > 0 then nothing = false message = message .. ",Semiadmin" .. semiadmin .. " " end if p == "4" then nothing = false message = message .. ",Rcon" end if nothing then message = message .. "Nothing " end et.G_Printf("%s\n",message) end end end return 1 end ---- ---- server cmds function Servercmdiplist() Debug.SetSubFunction("iplist") return Bothcmdiplist(-1) end function Servercmdstatuslist() Debug.SetSubFunction("statuslist") return Bothcmdstatuslist(-1) end function ServercmdCheaterdump() Debug.SetFunction("cheaterdump",true) Debug.SetSubFunction("NULL") local slot = et.trap_Argv(1) slot = tonumber(slot) if slot ~= "" then --et.G_Printf("ETProStuffPlug::DEBUG slot value = %s",slot) if slot <= 64 then if slot >= 0 then local userinfo = et.trap_GetUserinfo(slot) if userinfo ~= "" then tempvar2 = et.trap_Argv(2) --et.G_Printf("ETProStuffPlug:et_ConsoleCommand():DEBUG: tempvar1 value = %s",tempvar1) --Debug.Print("tempvar1 value",slot,tempvar2,tempvar1) if tempvar2 ~= "" then et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("cheaters %d",slot)) bypass = "etpro%santicheat%sdatabase%srevision" else et.G_Print("invalid filename, useage: cheaterdump \n") end else et.G_Printf("invalid player slot %d,that player slot isnt in use, useage: cheaterdump \n",slot) end else et.G_Printf("invalid player slot %d, useage: cheaterdump \n",slot) end else et.G_Printf("invalid player slot %d, useage: cheaterdump \n",slot) end else et.G_Print("invalid player slot, useage: cheaterdump \n") end return 1 end function ServercmdTest() Debug.SetSubFunction("test") --local vec3_t = et.gentity_get(0,"r.currentAngles") Debug.Print("testing semiadminlevel 55",et.trap_Cvar_Get("b_semiadminlevels"),et.trap_Cvar_Get("b_semiadminpass60")) return 1 end function Servercmdreferee() Debug.SetSubFunction("referee") local slot = et.trap_Argv(1) if slot ~= "" then --local hidden = et.trap_Argv(2) --if hidden ~= "hidden" then --Debug.Print("its not hidden",hidden,et.CS_PLAYERS) et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("ref referee %d",slot)) --[[else Debug.Print("its hidden",hidden) local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS + slot) local key = et.Info_ValueForKey(userconfig,"ref") if key == "0" then userconfig = et.Info_SetValueForKey(userconfig,"ref","1") et.trap_SetConfigstring(et.CS_PLAYERS + slot,userconfig) else et.G_Print("that player is already a referee, useage: referee \n") end end--]] else et.G_Print("invalid player slot, useage: referee \n") end return 1 end function Servercmdunreferee() Debug.SetSubFunction("unreferee") local slot = et.trap_Argv(1) if slot ~= "" then local userconfig = et.trap_GetConfigstring( et.CS_PLAYERS + slot) --Debug.Print("userconfig",userconfig) local key = et.Info_ValueForKey(userconfig,"ref") --Debug.Print("wutkey",key) if key == "1" then et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("ref unreferee %d",slot)) else et.G_Print("that player isnt a referee, useage: unreferee \n") end else et.G_Print("invalid player slot, useage: unreferee \n") end return 1 end function Servercmdshoutcast() Debug.SetSubFunction("shoutcast") local slot = et.trap_Argv(1) if slot ~= "" then --local hidden = et.trap_Argv(2) --if hidden ~= "hidden" then --Debug.Print("its not hidden",hidden,et.CS_PLAYERS) local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS+slot) local key = et.Info_ValueForKey(userconfig,"sc") if key == "0" then et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("ref makeShoutcaster %d",slot)) else et.G_Printf("[lof]%s [lon]is already a Shoutcaster!",et.Info_ValueForKey(userconfig,"n")) --[[else Debug.Print("its hidden",hidden) local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS + slot) local key = et.Info_ValueForKey(userconfig,"ref") if key == "0" then userconfig = et.Info_SetValueForKey(userconfig,"ref","1") et.trap_SetConfigstring(et.CS_PLAYERS + slot,userconfig) else et.G_Print("that player is already a referee, useage: referee \n") end end--]] end else et.G_Print("invalid player slot, useage: shoutcast \n") end return 1 end function Servercmdunshoutcast() Debug.SetSubFunction("unshoutcast") local slot = et.trap_Argv(1) if slot ~= "" then local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS + slot) local key = et.Info_ValueForKey(userconfig,"sc") if key == "1" then et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("ref removeShoutcaster %d",slot)) else et.G_Print("that player isnt a shoutcaster, useage: unshoutcast \n") end else et.G_Print("invalid player slot, useage: unshoutcast \n") end return 1 end function Servercmdsemiadmin() Debug.SetSubFunction("semiadmin") local slot = et.trap_Argv(1) if slot ~= "" then local level = et.trap_Argv(2) if level ~= "" then local sal = et.trap_Cvar_Get("b_semiadminlevels") Debug.Print("sal",sal) if level <= sal then sal = et.trap_Cvar_Get(string.format("b_semiadminpass%d",level)) Debug.Print("sal",sal) if sal ~= "" then sal = et.gentity_get(slot,"sess.semiadmin") --Debug.Print("semiadminlevel is",sal) if sal ~= level then et.gentity_set(slot,"sess.semiadmin",level) local hidden = et.trap_Argv(3) if hidden ~= "hidden" then et.trap_SendServerCommand(-1,string.format("cp \"%s ^3has ^3become ^3a ^3Semiadmin\n\"",et.Info_ValueForKey(et.trap_GetUserinfo(0),"name"))) end else et.G_Printf("Client %s is already a level %s seniadmin, useage: semiadmin 'hidden'\n",slot,level) end else et.G_Printf("invalid semiadmin level %d the server doesnt got that level, useage: semiadmin 'hidden'\n",level) end else et.G_Printf("invalid semiadmin level %d the server only has %d, useage: semiadmin 'hidden'\n",level,sal) end else et.G_Print("invalid semiadmin level, useage: semiadmin 'hidden'\n") end else et.G_Print("invalid player slot, useage: semiadmin 'hidden'\n") end return 1 end function Servercmdunsemiadmin() Debug.SetSubFunction("unsemiadmin") local slot = et.trap_Argv(1) if slot ~= "" then et.gentity_set(slot,"sess.semiadmin",0) else et.G_Print("invalid player slot, useage: unsemiadmin \n") end return 1 end function Sercercmddumpuserid() Debug.SetSubFunction("dumpuserid") local slot = et.trap_Argv(1) if slot ~= "" then local name = et.Info_ValueForKey(et.trap_GetUserinfo(slot),"name") if name then et.trap_SendConsoleCommand(et.EXEC_APPEND,string.format("dumpuser %s",name)) else et.G_Printf("invalid player slot %d, useage: dumpuserid \n",slot) end else et.G_Print("invalid player slot, useage: dumpuserid \n") end return 1 end function Sercercmdsemiadmindisable() STUFFPLUGCONFIG.cmd_allow_semiadmin = false local stuffplugvar et.trap_Cvar_Get("ETProStuffPlugVar") local x x = string.find(stuffplugvar,"semiadmin") if not x then et.trap_Cvar_Set("ETProStuffPlugVar",stuffplugvar .. " semiadmin") else et.G_Print("Semiadmin was already enabled") end end function Sercercmdsemiadminenable() STUFFPLUGCONFIG.cmd_allow_semiadmin = true local stuffplugvar et.trap_Cvar_Get("ETProStuffPlugVar") local x x = string.find(stuffplugvar,"semiadmin") if x then stuffplugvar = string.gsub(stuffplugvar,"semiadmin","") et.trap_Cvar_Set("ETProStuffPlugVar",stuffplugvar) else et.G_Print("Semiadmin was already disabled") end end function Sercercmdrefereedisable() STUFFPLUGCONFIG.cmd_allow_semiadmin = false local stuffplugvar et.trap_Cvar_Get("ETProStuffPlugVar") local x x = string.find(stuffplugvar,"referee") if not x then et.trap_Cvar_Set("ETProStuffPlugVar",stuffplugvar .. " referee") else et.G_Print("Semiadmin was already enabled") end end function Sercercmdrefereeenable() STUFFPLUGCONFIG.cmd_allow_semiadmin = true local stuffplugvar et.trap_Cvar_Get("ETProStuffPlugVar") local x x = string.find(stuffplugvar,"referee") if x then stuffplugvar = string.gsub(stuffplugvar,"referee","") et.trap_Cvar_Set("ETProStuffPlugVar",stuffplugvar) else et.G_Print("Semiadmin was already disabled") end end function Clientcmdsemiadminlogout(client) Debug.SetSubFunction("semiadminlogout") et.gentity_set(client,"sess.semiadmin",0) return 1 end function Clientcmdsa(client) Debug.SetSubFunction("sa") if STUFFPLUGCONFIG.cmd_allow_semiadmin then local sal = et.gentity_get(client,"sess.semiadmin") if sal ~= 0 then local command = et.trap_Argv(1) if command == "iplist" then local commands = et.trap_Cvar_Get(string.format("b_semiadmincmds%d",sal)) if commands ~= "" then local x = string.find(commands,"iplist") if x then return Bothcmdiplist(client) else return 0 end else return 0 end elseif command == "statuslist" then local commands = et.trap_Cvar_Get(string.format("b_semiadmincmds%d",sal)) if commands ~= "" then local x = string.find(commands,"statuslist") if x then return Bothcmdstatus(client) else return 0 end else return 0 end else return 0 end else return 0 end else return 1 end end function Clientcmdsemiadminlogin(client) Debug.SetSubFunction("sal") if STUFFPLUGCONFIG.cmd_allow_semiadmin then if STUFFPLUGCONFIG.sa_allow_hidden_login then local hidden = et.trap_Argv(2) if hidden == "hidden" then local levels = et.trap_Cvar_Get("b_semiadminlevels") if levels > 0 then local password = et.trap_Argv(1) for i=1,levels,1 do local passy = et.trap_Cvar_Get(string.format("b_semiadminpass%d",i)) if passy ~= "" then if passy == password then et.gentity_set(client,"sess.semiadmin",i) return 1 end end end et.trap_SendConsoleCommand(et.EXEC_APPEND,"print \"^3etpro: ^5invalid semiadmin password\n") et.G_Printf("etpro semiadmin: %d %s invalid password\n",client,et.Info_ValueForKey(et.trap_GetUserinfo(client),"name")) return 1 else et.trap_SendConsoleCommand(et.EXEC_APPEND,"print \"^3etpro: ^5no semiadmin levels defined.\n") end else return 0 end else return 0 end else return 1 end end function Clientcmdiplist(client) Debug.SetSubFunction("iplist") if STUFFPLUGCONFIG.cmd_allow_iplist then return Bothcmdiplist(client) else return 0 end end function Clientcmdstatuslist(client) Debug.SetSubFunction("statuslist") if STUFFPLUGCONFIG.cmd_allow_statuslist then return Bothcmdstatuslist(client) else return 0 end end function Clientcmdreferee(client) Debug.SetSubFunction("ref") if STUFFPLUGCONFIG.cmd_allow_referee then return 0 else return 1 end end function Clientsaynormal(client,mode) Debug.SetSubFunction("saying") et.G_Say(client,mode,et.ConcatArgs(1)) return 1 end function Clientcmdsaynormal(client) Debug.SetSubFunction("say_all") return Clientsaynormal(client,et.SAY_ALL) end function Clientcmdsayteamnormal(client) Debug.SetSubFunction("say_team") return Clientsaynormal(client,et.SAY_TEAM) end function Clientcmdsaybuddynormal(client) Debug.SetSubFunction("say_buddy") return Clientsaynormal(client,et.SAY_BUDDY) end function Clientcmdsayteamnlnormal(client) Debug.SetSubFunction("say_teamnl") return Clientsaynormal(client,et.SAY_TEAMNL) end function Clientcmdprivatenormal(client) Debug.SetSubFunction("say_private") return Clientsaynormal(client,et.SAY_PRIVATE) end --commands StuffPlugBothcmds = { ["etprostuffplug"] = BothcmdStuffPlug, } StuffPlugServercmds = { ["iplist"] = Servercmdiplist, --client sa command therefor not listed in both ["statuslist"] = Servercmdstatuslist, --client sa command therefor not listed in both ["cheaterdump"] = ServercmdCheaterdump, --["test"] = ServercmdTest, ["referee"] = Servercmdreferee, ["unreferee"] = Servercmdunreferee, ["semiadmin"] = Servercmdsemiadmin, ["unsemiadmin"] = Servercmdunsemiadmin, ["shoutcast"] = Servercmdshoutcast, ["unshoutcast"] = Servercmdunshoutcast, ["dumpuserid"] = Sercercmddumpuserid, ["semiadminenable"] = Servercmdsemiadminenable, ["semiadmindisable"] = Servercmdsemiadmindisable, ["refereeenable"] = Servercmdrefereeenable, ["refereedisable"] = Servercmdrefereedisable, } StuffPlugClientcmds = { ["iplist"] = Clientcmdiplist, --client sa command therefor not listed in both ["statuslist"] = Clientcmdstatuslist, --client sa command therefor not listed in both ["salo"] = Clientcmdsemiadminlogout, ["semiadminlogout"] = Clientcmdsemiadminlogout, ["sa"] = Clientcmdsa, ["sal"] = Clientcmdsemiadminlogin, ["semiadminlogin"] = Clientcmdsemiadminlogin, ["ref"] = Clientcmdreferee, ["say_normal"] = Clientcmdsaynormal, ["say_team_normal"] = Clientcmdsayteamnormal, ["say_buddy_normal"] = Clientcmdsaybuddynormal, ["say_teamnl_normal"] = Clientcmdsayteamnlnormal, --["p_normal"] = Clientcmdprivatenormal, --["pm_normal"] = Clientcmdprivatenormal, --["msg_normal"] = Clientcmdprivatenormal, } ---- server side function et_ConsoleCommand() Debug.SetFunction("et_ConsoleCommand()",true) Debug.SetSubFunction("NULL") local cmd = string.lower(et.trap_Argv(0)) --Debug.Print("command ist ",cmd,StuffPlufServercmds[cmd]) if StuffPlugServercmds[cmd] then return StuffPlugServercmds[cmd]() elseif StuffPlugBothcmds[cmd] then return StuffPlugBothcmds[cmds](-1) end --Debug.Print("shouldnt get here",) return 0 end ---- ---- client side function et_ClientCommand(clientNum,command) Debug.SetFunction("et_ClientCommand(clientNum,command",true) Debug.SetSubFunction("NULL") --Debug.Print("doesnt command work?",command,et.trap_Argv(0)) local cmd = string.lower(et.trap_Argv(0)) if StuffPlugClientcmds[cmd] then return StuffPlugClientcmds[cmd](clientNum) elseif StuffPlugBothcmds[cmd] then return StuffPlugBothcmds[cmd](clientNum) -- et_ClientSay crapper elseif cmd == "say" then return et_ClientSay(clientNum,et.SAY_ALL,et.ConcatArgs(1)) elseif cmd == "say_team" then return et_ClientSay(clientNum,et.SAY_TEAM,et.ConcatArgs(1)) elseif cmd == "say_buddy" then return et_ClientSay(clientNum,et.SAY_BUDDY,et.ConcatArgs(1)) elseif cmd == "say_teamnl" then return et_ClientSay(clientNum,et.SAY_TEAMNL,et.ConcatArgs(1)) -- -- private message crapper --elseif cmd == "m" then -- return et_ClientSay(clientNum,et.SAY_PRIVATE,et.ConcatArgs(2)) --elseif cmd == "pm" then -- return et_ClientSay(clientNum,et.SAY_PRIVATE,et.ConcatArgs(2)) --elseif cmd == "msg" then -- return et_ClientSay(clientNum,et.SAY_PRIVATE,et.ConcatArgs(2)) end -- --Debug.Print("comand intercepted",et.ConcatArgs(0)) return 0 end ---- -- ---- ---- client commands --TODO:finish /say /m lol hi function et_ClientSay(clientNum,mode,text) Debug.SetFunction("et_ClientSay(clientNum,mode,text)",true) Debug.SetSubFunction("advanced chat") --local x,y,playername,message --x,y,playername,message = string.find(text,"/m%s([^%\%/])%s(.*)") --Debug.Print("saying",clientNum,mode,text,x,y,playername,message) --if x ~= nil then local userconfig = et.trap_GetConfigstring(et.CS_PLAYERS+clientNum) local Teams = { "Axis", "Allies", "Spectator", } local Class = { "Soldier", "Medic", "Engineer", "Field Ops", "Covert Ops", } local Weapons = { "Uknown", "Machinegun", "Browing", "MG42", "Grenade", "Rocket", "Knife", "Luger", "Cold", "MP40", "Thompson", "Sten", "Garand", "Snooperscope", "Silencer", "FG42", "FG42", "Panzerfaust", "Grenade Launcher", "Flamethrower", "Pineapple", "Cross", "Mortar", "Mortar", "Shove", "Grabber", "Dynamite", "Airstrike", "Syringe", "Ammo Pack", "Artillery", "Water", "Slime", "Lava", "Crush", "Telefrag", "Falling", "Suicide", "Target Laser", "Trigger hurt", "Explosive", "Carbine", "Kar98", "GPG40", "M7", "Landmine", "Satchel", "landmine", "Smoke Grenade", "Mobile MG42", "Silenced Cold", "Garand Scope", "Crush", "Crush", "Crush", "K43", "K43", "Mortar", "Akimbo Cold", "Akimbo Luger", "Akimbo Silenced Cold", "Akimbo Silenced Luger", "Smoke Grenade", "Swap Uniform", "Switch Team", } local Status = { ["0"] = "Normal Player", ["1"] = "Voted Referee", ["2"] = "Referee", ["3"] = "Semiadmin", ["4"] = "Rcon", } Debug.Print("text is",text) if STUFFPLUGCONFIG.advanced_chat then text = string.gsub(text,"=25slot",clientNum) text = string.gsub(text,"=25health",et.gentity_get(clientNum,"health")) --text = string.gsub(text,"$ping",et.gentity_get(clientNum,"ps.ping") text = string.gsub(text,"=25me",et.Info_ValueForKey(userconfig,"n")) text = string.gsub(text,"=25team",Teams[tonumber(et.gentity_get(clientNum,"sess.sessionTeam"))]) text = string.gsub(text,"=25class",Class[tonumber(et.gentity_get(clientNum,"sess.playerType"))]) text = string.gsub(text,"=25respawnclass",Class[tonumber(et.gentity_get(clientNum,"sess.latchPlayerType"))]) text = string.gsub(text,"=25weapon",Weapons[tonumber(et.gentity_get(clientNum,"sess.playerWeapon"))]) text = string.gsub(text,"=25altweapon",Weapons[tonumber(et.gentity_get(clientNum,"sess.playerWeapon2"))]) text = string.gsub(text,"=25respawnweapon",Weapons[tonumber(et.gentity_get(clientNum,"sess.latchPlayerWeapon"))]) text = string.gsub(text,"=25respawnaltweapon",Weapons[tonumber(et.gentity_get(clientNum,"sess.latchPlayerWeapon2"))]) text = string.gsub(text,"=25status",Status[et.Info_ValueForKey(userconfig, "p")]) if mode ~= et.SAY_PRIVATE then et.G_Say(clientNum,mode,text) else --todo return 0 end return 1 end return 0 end ---- -- --closing fd function et_Quit() Debug.SetFunction("et_Quit()",true) Debug.SetSubFunction("NULL") if fd then et.trap_FS_FCloseFile(fd) end end -- -- printf crapper function et.G_Printf(...) Debug.SetSubFunction("et.G_Printf(...)") et.G_Print(string.format(unpack(arg))) end -- -- argument selector function select(num,...) Debug.SetSubFunction("select(num,...)") return arg[num] end -- -- C style array crapper function toCarray(num) return num-1 end --