X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=sv_ccmds.c;h=036f4c63f1588cae58155a02479a9ec77f9ae1b7;hp=613ae309475acb20a3fbe15bf22cb0601a98c9ae;hb=0024f172c0c10136e5ae18914be014a5b422ffb8;hpb=feb22f39c2c1a481b8c7a2364767b6402d5d94a1 diff --git a/sv_ccmds.c b/sv_ccmds.c index 613ae309..036f4c63 100644 --- a/sv_ccmds.c +++ b/sv_ccmds.c @@ -61,9 +61,9 @@ static void SV_Map_f(cmd_state_t *cmd) if (gamemode == GAME_DELUXEQUAKE) Cvar_Set(&cvars_all, "warpmark", ""); - cls.demonum = -1; // stop demo loop in case this fails + if(host.hook.Disconnect) + host.hook.Disconnect(false, NULL); - CL_Disconnect (); SV_Shutdown(); if(svs.maxclients != svs.maxclients_next) @@ -74,12 +74,8 @@ static void SV_Map_f(cmd_state_t *cmd) svs.clients = (client_t *)Mem_Alloc(sv_mempool, sizeof(client_t) * svs.maxclients); } -#ifdef CONFIG_MENU - // remove menu - if (key_dest == key_menu || key_dest == key_menu_grabbed) - MR_ToggleMenu(0); -#endif - key_dest = key_game; + if(host.hook.ToggleMenu) + host.hook.ToggleMenu(); svs.serverflags = 0; // haven't completed an episode yet strlcpy(level, Cmd_Argv(cmd, 1), sizeof(level)); @@ -112,12 +108,8 @@ static void SV_Changelevel_f(cmd_state_t *cmd) return; } -#ifdef CONFIG_MENU - // remove menu - if (key_dest == key_menu || key_dest == key_menu_grabbed) - MR_ToggleMenu(0); -#endif - key_dest = key_game; + if(host.hook.ToggleMenu) + host.hook.ToggleMenu(); SV_SaveSpawnparms (); strlcpy(level, Cmd_Argv(cmd, 1), sizeof(level)); @@ -149,12 +141,8 @@ static void SV_Restart_f(cmd_state_t *cmd) return; } -#ifdef CONFIG_MENU - // remove menu - if (key_dest == key_menu || key_dest == key_menu_grabbed) - MR_ToggleMenu(0); -#endif - key_dest = key_game; + if(host.hook.ToggleMenu) + host.hook.ToggleMenu(); strlcpy(mapname, sv.name, sizeof(mapname)); SV_SpawnServer(mapname); @@ -752,7 +740,7 @@ static void SV_Status_f(cmd_state_t *cmd) print ("version: %s build %s (gamename %s)\n", gamename, buildstring, gamenetworkfiltername); print ("protocol: %i (%s)\n", Protocol_NumberForEnum(sv.protocol), Protocol_NameForEnum(sv.protocol)); print ("map: %s\n", sv.name); - print ("timing: %s\n", Host_TimingReport(vabuf, sizeof(vabuf))); + print ("timing: %s\n", SV_TimingReport(vabuf, sizeof(vabuf))); print ("players: %i active (%i max)\n\n", players, svs.maxclients); if (in == 1) @@ -1038,6 +1026,7 @@ static void SV_Kick_f(cmd_state_t *cmd) { const char *who; const char *message = NULL; + char reason[512]; client_t *save; int i; qbool byNumber = false; @@ -1096,10 +1085,11 @@ static void SV_Kick_f(cmd_state_t *cmd) message++; } if (message) - SV_ClientPrintf("Kicked by %s: %s\n", who, message); + SV_DropClient (false, va(reason, sizeof(reason), "Kicked by %s: %s", who, message)); // kicked + //SV_ClientPrintf("Kicked by %s: %s\n", who, message); else - SV_ClientPrintf("Kicked by %s\n", who); - SV_DropClient (false); // kicked + //SV_ClientPrintf("Kicked by %s\n", who); + SV_DropClient (false, va(reason, sizeof(reason), "Kicked by %s", who)); // kicked } host_client = save; @@ -1423,7 +1413,6 @@ static void SV_Ent_Create_f(cmd_state_t *cmd) int i; qbool haveorigin; - qbool expectval = false; void (*print)(const char *, ...) = (cmd->source == src_client ? SV_ClientPrintf : Con_Printf); if(!Cmd_Argc(cmd)) @@ -1462,31 +1451,24 @@ static void SV_Ent_Create_f(cmd_state_t *cmd) } // Allow more than one key/value pair by cycling between expecting either one. - for(i = 2; i < Cmd_Argc(cmd); i++) + for(i = 2; i < Cmd_Argc(cmd); i += 2) { - if(!expectval) + if(!(key = PRVM_ED_FindField(prog, Cmd_Argv(cmd, i)))) { - if(!(key = PRVM_ED_FindField(prog, Cmd_Argv(cmd, i)))) - { - print("Key %s not found!\n", Cmd_Argv(cmd, i)); - PRVM_ED_Free(prog, ed); - return; - } + print("Key %s not found!\n", Cmd_Argv(cmd, i)); + PRVM_ED_Free(prog, ed); + return; + } - /* - * This is mostly for dedicated server console, but if the - * player gave a custom origin, we can ignore the traceline. - */ - if(!strcmp(Cmd_Argv(cmd, i), "origin")) - haveorigin = true; + /* + * This is mostly for dedicated server console, but if the + * player gave a custom origin, we can ignore the traceline. + */ + if(!strcmp(Cmd_Argv(cmd, i), "origin")) + haveorigin = true; - expectval = true; - } - else - { - PRVM_ED_ParseEpair(prog, ed, key, Cmd_Argv(cmd, i), false); - expectval = false; - } + if (i + 1 < Cmd_Argc(cmd)) + PRVM_ED_ParseEpair(prog, ed, key, Cmd_Argv(cmd, i+1), false); } if(!haveorigin) @@ -1521,7 +1503,7 @@ static void SV_Ent_Remove_f(cmd_state_t *cmd) { prvm_prog_t *prog = SVVM_prog; prvm_edict_t *ed; - int i, ednum; + int i, ednum = 0; void (*print)(const char *, ...) = (cmd->source == src_client ? SV_ClientPrintf : Con_Printf); if(!Cmd_Argc(cmd)) @@ -1576,7 +1558,7 @@ static void SV_Ent_Remove_f(cmd_state_t *cmd) return; } - if(!ed->priv.required->free) + if(!ed->free) { print("Removed a \"%s\"\n", PRVM_GetString(prog, PRVM_serveredictstring(ed, classname))); PRVM_ED_ClearEdict(prog, ed); @@ -1600,7 +1582,7 @@ static void SV_Ent_Remove_All_f(cmd_state_t *cmd) for (i = 0, rmcount = 0, ed = PRVM_EDICT_NUM(i); i < prog->num_edicts; i++, ed = PRVM_NEXT_EDICT(ed)) { - if(!ed->priv.required->free && !strcmp(PRVM_GetString(prog, PRVM_serveredictstring(ed, classname)), Cmd_Argv(cmd, 1))) + if(!ed->free && !strcmp(PRVM_GetString(prog, PRVM_serveredictstring(ed, classname)), Cmd_Argv(cmd, 1))) { if(!i) { @@ -1645,9 +1627,9 @@ void SV_InitOperatorCommands(void) Cmd_AddCommand(CF_SHARED, "viewnext", SV_Viewnext_f, "change to next animation frame of viewthing entity in current level"); Cmd_AddCommand(CF_SHARED, "viewprev", SV_Viewprev_f, "change to previous animation frame of viewthing entity in current level"); Cmd_AddCommand(CF_SHARED, "maxplayers", SV_MaxPlayers_f, "sets limit on how many players (or bots) may be connected to the server at once"); - Cmd_AddCommand(CF_SERVER, "sendcvar", SV_SendCvar_f, "sends the value of a cvar to the server as a sentcvar command, for use by QuakeC"); + host.hook.SV_SendCvar = SV_SendCvar_f; - // commands that do not have automatic forwarding from cmd_client, these are internal details of the network protocol and not of interest to users (if they know what they are doing they can still use a generic "cmd prespawn" or similar) + // commands that do not have automatic forwarding from cmd_local, these are internal details of the network protocol and not of interest to users (if they know what they are doing they can still use a generic "cmd prespawn" or similar) Cmd_AddCommand(CF_SERVER_FROM_CLIENT, "prespawn", SV_PreSpawn_f, "internal use - signon 1 (client acknowledges that server information has been received)"); Cmd_AddCommand(CF_SERVER_FROM_CLIENT, "spawn", SV_Spawn_f, "internal use - signon 2 (client has sent player information, and is asking server to send scoreboard rankings)"); Cmd_AddCommand(CF_SERVER_FROM_CLIENT, "begin", SV_Begin_f, "internal use - signon 3 (client asks server to start sending entities, and will go to signon 4 (playing) when the first entity update is received)");