]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/gamecommand.qc
effectindexdump added
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / gamecommand.qc
index 36113cbc7eb5e6a931bf949dd605be240521d36a..8c9dc0ece1c4738233402007302cfadc39d025a8 100644 (file)
@@ -638,7 +638,7 @@ void GameCommand_adminmsg(float request, string command)
        {
                case GC_REQUEST_HELP:
                        print("  adminmsg - Send an admin message to a client directly\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        if(argc >= 3 && argc <= 4) {
@@ -671,7 +671,7 @@ void GameCommand_adminmsg(float request, string command)
                                        }
                                }
                                if(!n) { print("Client not found\n"); } 
-                               break;
+                               return;
                        } 
                        
                default:
@@ -691,11 +691,11 @@ void GameCommand_allready(float request)
        {
                case GC_REQUEST_HELP:
                        print("  allready - Restart the server and reset the players\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        ReadyRestart();
-                       break;
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -713,7 +713,7 @@ void GameCommand_allspec(float request) // todo: Add ability to provide a reason
        {
                case GC_REQUEST_HELP:
                        print("  allspec - Force all players to spectate\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        FOR_EACH_PLAYER(client)
@@ -722,7 +722,7 @@ void GameCommand_allspec(float request) // todo: Add ability to provide a reason
                                ++i;
                        }
                        if(i) { bprint(strcat("Successfully forced all players to spectate (", ftos(i), ")\n")); } // should a message be added if no players were found? 
-                       break;
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -742,7 +742,7 @@ void GameCommand_anticheat(float request, string command) // FIXME: player entit
        {
                case GC_REQUEST_HELP:
                        print("  anticheat - Create an anticheat report for a client\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        if((entno < 1) | (entno > maxclients)) {
@@ -756,7 +756,7 @@ void GameCommand_anticheat(float request, string command) // FIXME: player entit
                        }
                        self = client;
                        anticheat_report();
-                       break;
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -772,7 +772,7 @@ void GameCommand_bbox(float request)
        {
                case GC_REQUEST_HELP:
                        print("  bbox - Print detailed information about world size\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        print("Original size: ", ftos(world.absmin_x), " ", ftos(world.absmin_y), " ", ftos(world.absmin_z));
@@ -848,7 +848,7 @@ void GameCommand_bbox(float request)
                                print(" ", ftos(trace_endpos_z));
                                
                        print("\n");
-                       break;
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -867,7 +867,7 @@ void GameCommand_bot_cmd(float request, string command) // what a mess... old ol
        {
                case GC_REQUEST_HELP:
                        print("  bot_cmd - Control and send commands to bots\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        if(argv(1) == "reset")
@@ -945,19 +945,20 @@ void GameCommand_bot_cmd(float request, string command) // what a mess... old ol
 
 void GameCommand_cointoss(float request) // todo: Perhaps add the ability to give your own arguments to pick between? (Like player names)
 {
+       entity client;
+       float choice = (random() > 0.5);
+       
        switch(request)
        {
                case GC_REQUEST_HELP:
                        print("  cointoss - Flip a virtual coin and give random result\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
-                       bprint("^3Throwing coin... Result: ");
-                       if (random() > 0.5)
-                               bprint("^1HEADS^3!\n");
-                       else
-                               bprint("^4TAILS^3!\n");
-                       break;
+                       FOR_EACH_CLIENT(client)
+                               centerprint(client, strcat("^3Throwing coin... Result: ", (choice ? "^1HEADS^3!\n" : "^4TAILS^3!\n")));
+                       bprint(strcat("^3Throwing coin... Result: ", (choice ? "^1HEADS^3!\n" : "^4TAILS^3!\n")));
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -973,11 +974,11 @@ void GameCommand_cvar_changes(float request)
        {
                case GC_REQUEST_HELP:
                        print("  cvar_changes - Prints a list of all changed server cvars\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        print(cvar_changes);
-                       break;
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -993,11 +994,11 @@ void GameCommand_cvar_purechanges(float request)
        {
                case GC_REQUEST_HELP:
                        print("  cvar_purechanges - Prints a list of all changed gameplay cvars\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        print(cvar_purechanges);
-                       break;
+                       return;
                        
                default:
                case GC_REQUEST_USAGE:
@@ -1007,6 +1008,50 @@ void GameCommand_cvar_purechanges(float request)
        }
 }
 
+void GameCommand_database(float request, string command)
+{
+       float argc = tokenize_console(command);
+       
+       switch(request)
+       {
+               case GC_REQUEST_HELP:
+                       print("  database - Extra controls of the serverprogs database\n");
+                       return;
+                       
+               case GC_REQUEST_COMMAND:
+                       if(argc == 3)
+                       {
+                               if(argv(1) == "save")
+                               {
+                                       db_save(ServerProgsDB, argv(2));
+                                       print(strcat("Copied serverprogs database to '", argv(2), "' in the data directory.\n"));
+                                       return;
+                               }
+                               else if(argv(1) == "dump")
+                               {
+                                       db_dump(ServerProgsDB, argv(2));
+                                       print("DB dumped.\n"); // wtf does this do?
+                                       return;
+                               }
+                               else if(argv(1) == "load")
+                               {
+                                       db_close(ServerProgsDB);
+                                       ServerProgsDB = db_load(argv(2));
+                                       print(strcat("Loaded '", argv(2), "' as new serverprogs database.\n"));
+                                       return;
+                               }
+                       }
+                       
+               default:
+               case GC_REQUEST_USAGE:
+                       print("\nUsage: sv_cmd database action filename\n");
+                       print("  Where action is the command to complete,\n");
+                       print("  and filename is what it acts upon.\n");
+                       print("  Full list of commands here: \"save, dump, load.\"\n");
+                       return;
+       }
+}
+
 void GameCommand_defer_clear(float request, string command)
 {
        entity client;
@@ -1017,7 +1062,7 @@ void GameCommand_defer_clear(float request, string command)
        {
                case GC_REQUEST_HELP:
                        print("  defer_clear - Clear all queued defer commands for client\n");
-                       break;
+                       return;
                        
                case GC_REQUEST_COMMAND:
                        if(argc == 2)
@@ -1049,6 +1094,142 @@ void GameCommand_defer_clear(float request, string command)
        }
 }
 
+void GameCommand_defer_clear_all(float request)
+{
+       entity client;
+       float i;
+       
+       switch(request)
+       {
+               case GC_REQUEST_HELP:
+                       print("  defer_clear_all - Clear all queued defer commands for all clients\n");
+                       return;
+                       
+               case GC_REQUEST_COMMAND:
+                       FOR_EACH_CLIENT(client)
+                       {
+                               GameCommand_defer_clear(GC_REQUEST_COMMAND, strcat("defer_clear ", ftos(num_for_edict(client))));       
+                               ++i;
+                       }
+                       if(i) { bprint(strcat("Successfully stuffed defer clear to all clients (", ftos(i), ")\n")); } // should a message be added if no players were found? 
+                       return;
+               
+               default:
+               case GC_REQUEST_USAGE:
+                       print("\nUsage: sv_cmd defer_clear_all\n");
+                       print("  No arguments required.\n");
+                       return;
+       }
+}
+
+void GameCommand_delrec(float request, string command) // UNTESTED
+{
+       float argc = tokenize_console(command);
+
+       switch(request)
+       {
+               case GC_REQUEST_HELP:
+                       print("  delrec - Delete race time record for a map\n");
+                       return;
+                       
+               case GC_REQUEST_COMMAND:
+                       if(argv(1))
+                       {
+                               if(argv(2))
+                                       race_deleteTime(argv(2), stof(argv(1)));
+                               else
+                                       race_deleteTime(GetMapname(), stof(argv(1)));
+                               return;
+                       }
+                       
+               default:
+               case GC_REQUEST_USAGE:
+                       print("\nUsage: sv_cmd delrec ranking [map]\n");
+                       print("  ranking is which ranking level to clear up to, \n");
+                       print("  it will clear all records up to nth place.\n");
+                       print("  if map is not provided it will use current map.\n");
+                       return;
+       }
+}
+
+void GameCommand_effectindexdump(float request)
+{
+       float fh, d;
+       string s;
+       
+       switch(request)
+       {
+               case GC_REQUEST_HELP:
+                       print("  effectindexdump - Dump list of effects from code and effectinfo.txt\n");
+                       return;
+                       
+               case GC_REQUEST_COMMAND:
+                       d = db_create();
+                       print("begin of effects list\n");
+                       db_put(d, "TE_GUNSHOT", "1"); print("effect TE_GUNSHOT is ", ftos(particleeffectnum("TE_GUNSHOT")), "\n");
+                       db_put(d, "TE_GUNSHOTQUAD", "1"); print("effect TE_GUNSHOTQUAD is ", ftos(particleeffectnum("TE_GUNSHOTQUAD")), "\n");
+                       db_put(d, "TE_SPIKE", "1"); print("effect TE_SPIKE is ", ftos(particleeffectnum("TE_SPIKE")), "\n");
+                       db_put(d, "TE_SPIKEQUAD", "1"); print("effect TE_SPIKEQUAD is ", ftos(particleeffectnum("TE_SPIKEQUAD")), "\n");
+                       db_put(d, "TE_SUPERSPIKE", "1"); print("effect TE_SUPERSPIKE is ", ftos(particleeffectnum("TE_SUPERSPIKE")), "\n");
+                       db_put(d, "TE_SUPERSPIKEQUAD", "1"); print("effect TE_SUPERSPIKEQUAD is ", ftos(particleeffectnum("TE_SUPERSPIKEQUAD")), "\n");
+                       db_put(d, "TE_WIZSPIKE", "1"); print("effect TE_WIZSPIKE is ", ftos(particleeffectnum("TE_WIZSPIKE")), "\n");
+                       db_put(d, "TE_KNIGHTSPIKE", "1"); print("effect TE_KNIGHTSPIKE is ", ftos(particleeffectnum("TE_KNIGHTSPIKE")), "\n");
+                       db_put(d, "TE_EXPLOSION", "1"); print("effect TE_EXPLOSION is ", ftos(particleeffectnum("TE_EXPLOSION")), "\n");
+                       db_put(d, "TE_EXPLOSIONQUAD", "1"); print("effect TE_EXPLOSIONQUAD is ", ftos(particleeffectnum("TE_EXPLOSIONQUAD")), "\n");
+                       db_put(d, "TE_TAREXPLOSION", "1"); print("effect TE_TAREXPLOSION is ", ftos(particleeffectnum("TE_TAREXPLOSION")), "\n");
+                       db_put(d, "TE_TELEPORT", "1"); print("effect TE_TELEPORT is ", ftos(particleeffectnum("TE_TELEPORT")), "\n");
+                       db_put(d, "TE_LAVASPLASH", "1"); print("effect TE_LAVASPLASH is ", ftos(particleeffectnum("TE_LAVASPLASH")), "\n");
+                       db_put(d, "TE_SMALLFLASH", "1"); print("effect TE_SMALLFLASH is ", ftos(particleeffectnum("TE_SMALLFLASH")), "\n");
+                       db_put(d, "TE_FLAMEJET", "1"); print("effect TE_FLAMEJET is ", ftos(particleeffectnum("TE_FLAMEJET")), "\n");
+                       db_put(d, "EF_FLAME", "1"); print("effect EF_FLAME is ", ftos(particleeffectnum("EF_FLAME")), "\n");
+                       db_put(d, "TE_BLOOD", "1"); print("effect TE_BLOOD is ", ftos(particleeffectnum("TE_BLOOD")), "\n");
+                       db_put(d, "TE_SPARK", "1"); print("effect TE_SPARK is ", ftos(particleeffectnum("TE_SPARK")), "\n");
+                       db_put(d, "TE_PLASMABURN", "1"); print("effect TE_PLASMABURN is ", ftos(particleeffectnum("TE_PLASMABURN")), "\n");
+                       db_put(d, "TE_TEI_G3", "1"); print("effect TE_TEI_G3 is ", ftos(particleeffectnum("TE_TEI_G3")), "\n");
+                       db_put(d, "TE_TEI_SMOKE", "1"); print("effect TE_TEI_SMOKE is ", ftos(particleeffectnum("TE_TEI_SMOKE")), "\n");
+                       db_put(d, "TE_TEI_BIGEXPLOSION", "1"); print("effect TE_TEI_BIGEXPLOSION is ", ftos(particleeffectnum("TE_TEI_BIGEXPLOSION")), "\n");
+                       db_put(d, "TE_TEI_PLASMAHIT", "1"); print("effect TE_TEI_PLASMAHIT is ", ftos(particleeffectnum("TE_TEI_PLASMAHIT")), "\n");
+                       db_put(d, "EF_STARDUST", "1"); print("effect EF_STARDUST is ", ftos(particleeffectnum("EF_STARDUST")), "\n");
+                       db_put(d, "TR_ROCKET", "1"); print("effect TR_ROCKET is ", ftos(particleeffectnum("TR_ROCKET")), "\n");
+                       db_put(d, "TR_GRENADE", "1"); print("effect TR_GRENADE is ", ftos(particleeffectnum("TR_GRENADE")), "\n");
+                       db_put(d, "TR_BLOOD", "1"); print("effect TR_BLOOD is ", ftos(particleeffectnum("TR_BLOOD")), "\n");
+                       db_put(d, "TR_WIZSPIKE", "1"); print("effect TR_WIZSPIKE is ", ftos(particleeffectnum("TR_WIZSPIKE")), "\n");
+                       db_put(d, "TR_SLIGHTBLOOD", "1"); print("effect TR_SLIGHTBLOOD is ", ftos(particleeffectnum("TR_SLIGHTBLOOD")), "\n");
+                       db_put(d, "TR_KNIGHTSPIKE", "1"); print("effect TR_KNIGHTSPIKE is ", ftos(particleeffectnum("TR_KNIGHTSPIKE")), "\n");
+                       db_put(d, "TR_VORESPIKE", "1"); print("effect TR_VORESPIKE is ", ftos(particleeffectnum("TR_VORESPIKE")), "\n");
+                       db_put(d, "TR_NEHAHRASMOKE", "1"); print("effect TR_NEHAHRASMOKE is ", ftos(particleeffectnum("TR_NEHAHRASMOKE")), "\n");
+                       db_put(d, "TR_NEXUIZPLASMA", "1"); print("effect TR_NEXUIZPLASMA is ", ftos(particleeffectnum("TR_NEXUIZPLASMA")), "\n");
+                       db_put(d, "TR_GLOWTRAIL", "1"); print("effect TR_GLOWTRAIL is ", ftos(particleeffectnum("TR_GLOWTRAIL")), "\n");
+                       db_put(d, "TR_SEEKER", "1"); print("effect TR_SEEKER is ", ftos(particleeffectnum("TR_SEEKER")), "\n");
+                       db_put(d, "SVC_PARTICLE", "1"); print("effect SVC_PARTICLE is ", ftos(particleeffectnum("SVC_PARTICLE")), "\n");
+
+                       fh = fopen("effectinfo.txt", FILE_READ);
+                       while((s = fgets(fh)))
+                       {
+                               tokenize(s); // tokenize_console would hit the loop counter :(
+                               if(argv(0) == "effect")
+                               {
+                                       if(db_get(d, argv(1)) != "1")
+                                       {
+                                               if(particleeffectnum(argv(1)) >= 0)
+                                                       print("effect ", argv(1), " is ", ftos(particleeffectnum(argv(1))), "\n");
+                                               db_put(d, argv(1), "1");
+                                       }
+                               }
+                       }
+                       print("end of effects list\n");
+
+                       db_close(d);
+                       return;
+                       
+               default:
+               case GC_REQUEST_USAGE:
+                       print("\nUsage: sv_cmd effectindexdump\n");
+                       print("  No arguments required.\n");
+                       return;
+       }
+}
+
 void GameCommand(string command)
 {
        // ===== TODO list =====
@@ -1080,14 +1261,15 @@ void GameCommand(string command)
                        GameCommand_cointoss(GC_REQUEST_HELP);
                        GameCommand_cvar_changes(GC_REQUEST_HELP);
                        GameCommand_cvar_purechanges(GC_REQUEST_HELP);
+                       GameCommand_database(GC_REQUEST_HELP, command);
                        GameCommand_defer_clear(GC_REQUEST_HELP, command);
+                       GameCommand_defer_clear_all(GC_REQUEST_HELP);
+                       GameCommand_delrec(GC_REQUEST_HELP, command);
+                       GameCommand_effectindexdump(GC_REQUEST_HELP);
                        print("  teamstatus\n");
                        print("  printstats\n");
                        print("  make_mapinfo\n");
                        print("  gametype dm|ctf|...\n");
-                       print("  savedb filename\n");
-                       print("  dumpdb filename\n");
-                       print("  loaddb filename\n");
                        print("  effectindexdump\n");
                        print("  radarmap [--force] [--quit | --loop] [sharpness]\n");
                        print("  find classname\n");
@@ -1128,7 +1310,11 @@ void GameCommand(string command)
                case "cointoss": GameCommand_cointoss(search_request_type); break; 
                case "cvar_changes": GameCommand_cvar_changes(search_request_type); break; 
                case "cvar_purechanges": GameCommand_cvar_purechanges(search_request_type); break; 
+               case "database": GameCommand_database(search_request_type, command); break;
                case "defer_clear": GameCommand_defer_clear(search_request_type, command); break;
+               case "defer_clear_all": GameCommand_defer_clear_all(search_request_type); break;
+               case "delrec": GameCommand_delrec(search_request_type, command); break;
+               case "effectindexdump": GameCommand_effectindexdump(search_request_type); break;
                
                default:
                        print("Invalid command. For a list of supported commands, try sv_cmd help.\n");