home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer 3.2 / 1997-05_Disc_3.2.iso / QUAKECTF / SRC / CTF / ADMIN.QC next >
Text File  |  1997-01-30  |  14KB  |  467 lines

  1. // CTFBOT EXTRAS [[[
  2. // this file has been heavily modified for CTF Bot
  3. // CTFBOT EXTRAS ]]]
  4.         
  5. //---------------------------------------------------------------------------
  6. //Quake
  7. //
  8. //Copyright (c) 1995-96 by Dave Kirsch
  9. //---------------------------------------------------------------------------
  10. //admin - remove server admin functions
  11. //---------------------------------------------------------------------------
  12.  
  13. // NOTE:  THE FOLLOWING VALUES ARE THE PASSWORD USED TO ENABLE
  14. // REMOTE ACCESS.
  15. //
  16. // The have the following properties and requirements:
  17. // a. Must not be an existing impulse
  18. // b. Must be entered in the specified order
  19. // c. Must be in the range 1 to 255 excluding previously used impulses
  20. //
  21. // They must be entered in the correct order which gives 256*256*256 or
  22. // 16777216 possible passwords.  If a specified order wasn't given, it
  23. // would only be 768 possibilities.
  24. //
  25. // BY DEFAULT, REMOTE ADMIN ACCESS IS DISABLED
  26. // This is done by setting the admin passwords all to -1.
  27. //
  28. // If you wanted to enable it, pick three random numbers (that aren't
  29. // existing impulses) and put 'em here, for example:
  30. //
  31. //        float    ADMIN_PWD_1    = 178;
  32. //        float    ADMIN_PWD_2    = 139;
  33. //        float    ADMIN_PWD_3    = 156;
  34. //
  35. // which would give you a password of 178, 139 and 156.  To send this from
  36. // a Quake client, do a bind like this:
  37. //
  38. // alias admin "impulse 178;wait;impulse 139;wait;impulse 156"
  39. // bind - admin
  40. //
  41. // When you hit -, you'll be granted remote admin functionality.
  42. //
  43. // Currently the only admin functions available right now are kick
  44. // team change, and level change.  They are bound to impulse 151, 
  45. // impulse 152 and impuluse 153 respectively.
  46. //
  47. // CTFBOT:  CTF Bot sysops also allows all CTF bot impulses.  impulse 199
  48. // for help after becoming an admin to see them all.
  49. //
  50. // The way it works is after you enter the admin password, do an
  51. // impulse 151/152/153.  You'll get a list of players on the server with their
  52. // numbers.  Send the next impulse with the number of the player
  53. // to act the command on.
  54.  
  55. // CHANGE THE FOLLOWING THREE -1 NUMBERS TO YOUR ADMIN PASSWD
  56. float    ADMIN_PWD_1    = 178;  // change me to first number of the passwd
  57. float    ADMIN_PWD_2    = 139;  // change me to second number of the passwd
  58. float    ADMIN_PWD_3    = 156;  // change me to third number of the passwd
  59.  
  60. float    ADMIN_KICK = 151;
  61. float    ADMIN_TEAMCHANGE = 152;
  62. float    ADMIN_CHANGEMAP = 153;
  63.  
  64. // used for admin to change maps
  65. void(string nmap) AdminChangeLevel =
  66. {
  67.     local entity o;
  68.  
  69.     bprint(self.netname);
  70.     bprint(" has changed the level to ");
  71.     bprint(nmap);
  72.     bprint("\n");
  73.  
  74.     o = spawn();
  75.     o.map = nmap;
  76.     nextmap = o.map;
  77.     gameover = TRUE;
  78.  
  79.     o.think = execute_changelevel;
  80.     o.nextthink = time + 0.1;
  81. };
  82.  
  83. void() CheckAdminCmd =
  84. {
  85.     local float n;
  86.     local entity p;
  87.     local string st;
  88.  
  89.     if (ADMIN_PWD_1 < 0 || ADMIN_PWD_2 < 0 || ADMIN_PWD_3 < 0)
  90.         return; // disabled
  91.  
  92.     if (self.impulse == ADMIN_PWD_1 && self.accesslvl == 0)
  93.         self.accesslvl = self.accesslvl + 1;
  94.  
  95.     else if (self.impulse == ADMIN_PWD_2 && self.accesslvl == 1)
  96.         self.accesslvl = self.accesslvl + 1;
  97.  
  98.     else if (self.impulse == ADMIN_PWD_3 && self.accesslvl == 2) {
  99.         self.accesslvl = self.accesslvl + 1;
  100.  
  101.         bprint(self.netname);
  102.         bprint(" has become a sysop\n");
  103.  
  104.         sprint(self, "Admin:\nImpulse ");
  105.         st = ftos(ADMIN_KICK);
  106.         sprint(self, st);
  107.         sprint(self, " to kick\nImpulse ");
  108.         st = ftos(ADMIN_TEAMCHANGE);
  109.         sprint(self, st);
  110.         sprint(self, " to switch teamplayer\nImpulse ");
  111.         st = ftos(ADMIN_CHANGEMAP);
  112.         sprint(self, st);
  113.         sprint(self, " to change map\n");
  114.         
  115.         sprint(self, "impulse 199 to list CTF Bot impulses\n");        // CTFBOT
  116.         
  117.         self.accessparm = 0;
  118.         return;
  119.     }
  120.  
  121.     if (self.accesslvl < 3) {
  122.         self.accessparm = 0;
  123.         return; // must be a sysop beyond this point
  124.     }
  125.  
  126.     if (self.accessparm == 1) { // kick cmd
  127.  
  128.         n = self.impulse - 1;
  129.         p = find(world, classname, "player");
  130.         while (p != world && n > 0) {
  131.             p = find(p, classname, "player");
  132.             n = n - 1;
  133.         }
  134.  
  135.         if (p != world) {
  136.             sprint(p, "\n\nYou have been kicked.\nGo abuse somewhere else.\n");
  137.             stuffcmd(p, "disconnect\n");
  138.             bprint(p.netname);
  139.             bprint(" was kicked by ");
  140.             bprint(self.netname);
  141.             bprint("\n");
  142.         } else {
  143.             sprint(self, "Can't kick #");
  144.             st = ftos(self.impulse);
  145.             sprint(self, st);
  146.             sprint(self, "\n");
  147.         }
  148.  
  149.         self.accessparm = 0;
  150.         return;
  151.  
  152.     } else if (self.accessparm == 2) { // switch teams
  153.  
  154.         n = self.impulse - 1;
  155.         p = find(world, classname, "player");
  156.         while (p != world && n > 0) {
  157.             p = find(p, classname, "player");
  158.             n = n - 1;
  159.         }
  160.  
  161.         if (p != world) {
  162.             TeamCaptureDropFlagOfPlayer(p);
  163.             centerprint(p, "YOU HAVE SWITCHED TEAMS!");
  164.             if (p.lastteam == TEAM_COLOR1 + 1) {
  165.                 p.team = p.lastteam = TEAM_COLOR2 + 1;
  166.                 st = ftos(TEAM_COLOR2);
  167.             } else {
  168.                 p.team = p.lastteam = TEAM_COLOR1 + 1;
  169.                 st = ftos(TEAM_COLOR1);
  170.             }
  171.             stuffcmd(p, "color ");
  172.             stuffcmd(p, st);
  173.             stuffcmd(p, "\n");
  174.             bprint(p.netname);
  175.             bprint(" changed teams (by ");
  176.             bprint(self.netname);
  177.             bprint(")\n");
  178.         } else {
  179.             sprint(self, "Can't change #");
  180.             st = ftos(self.impulse);
  181.             sprint(self, st);
  182.             sprint(self, "\n");
  183.         }
  184.  
  185.         self.accessparm = 0;
  186.         return;
  187.  
  188.     } else if (self.accessparm == 3) { // select episode
  189.  
  190.         if (self.impulse == 1) {
  191.             self.accessparm = 4;
  192.  
  193.             sprint(self, "Choose Level:\n");
  194.             sprint(self, "Waypoint maps marked with Éæ\n");
  195.             sprint(self, "1Ée1m1æSlipgate Complex\n");
  196.             sprint(self, "2Ée1m2æCastle of the Damned\n");
  197.             sprint(self, "3Ée1m3æThe Necropolis\n");
  198.             sprint(self, "4Ée1m4æThe Grisly Grotto\n");
  199.             sprint(self, "5Ée1m5æGloom Keep\n");
  200.             sprint(self, "6 e1m6 The Door To Chthon\n");
  201.             sprint(self, "7 e1m7 The House of Chthon\n");
  202.             sprint(self, "8 e1m8 Ziggurat Vertigo\n");
  203.  
  204.             self.impulse = 0;
  205.             return;
  206.  
  207.         } else if (self.impulse == 2) {
  208.             self.accessparm = 5;
  209.  
  210.             sprint(self, "Choose Level:\n");
  211.             sprint(self, "Waypoint maps marked with Éæ\n");
  212.             sprint(self, "1 e2m1 The Installation\n");
  213.             sprint(self, "2 e2m2 Ogre Citadel\n");
  214.             sprint(self, "3 e2m3 Crypt of Decay\n");
  215.             sprint(self, "4 e2m4 The Ebon Fortress \n");
  216.             sprint(self, "5 e2m5 The Wizard's Manse\n");
  217.             sprint(self, "6 e2m6 The Dismal Oubliette\n");
  218.             sprint(self, "7 e2m7 Underearth\n");
  219.  
  220.             self.impulse = 0;
  221.             return;
  222.  
  223.         } else if (self.impulse == 3) {
  224.             self.accessparm = 6;
  225.  
  226.             sprint(self, "Choose Level:\n");
  227.             sprint(self, "Waypoint maps marked with Éæ\n");
  228.             sprint(self, "1 e3m1 Termination Central\n");
  229.             sprint(self, "2 e3m2 The Vaults of Zin\n");
  230.             sprint(self, "3 e3m3 The Tomb of Terror\n");
  231.             sprint(self, "4 e3m4 Satan's Dark Delight\n");
  232.             sprint(self, "5 e3m5 Wind Tunnels\n");
  233.             sprint(self, "6 e3m6 Chambers of Torment\n");
  234.             sprint(self, "7 e3m7 The Haunted Halls\n");
  235.  
  236.             self.impulse = 0;
  237.             return;
  238.  
  239.         } else if (self.impulse == 4) {
  240.             self.accessparm = 7;
  241.  
  242.             sprint(self, "Choose Level:\n");
  243.             sprint(self, "Waypoint maps marked with Éæ\n");
  244.             sprint(self, "1 e4m1 The Sewage System\n");
  245.             sprint(self, "2 e4m2 The Tower of Despair\n");
  246.             sprint(self, "3 e4m3 The Elder God Shrine\n");
  247.             sprint(self, "4 e4m4 The Palace of Hate\n");
  248.             sprint(self, "5 e4m5 Hell's Atrium\n");
  249.             sprint(self, "6 e4m6 The Pain Maze\n");
  250.             sprint(self, "7 e4m7 Azure Agony\n");
  251.             sprint(self, "8 e4m8 The Nameless City\n");
  252.  
  253.             self.impulse = 0;
  254.             return;
  255.  
  256.         } else if (self.impulse == 5) {
  257.             self.accessparm = 8;
  258.  
  259.             sprint(self, "Choose Level:\n");
  260.             sprint(self, "Waypoint maps marked with Éæ\n");
  261.             sprint(self, "1Édm1æPlace of Two Deaths\n");
  262.             sprint(self, "2 dm2 Claustrophobopolis\n");
  263.             sprint(self, "3Édm3æThe Abandoned Base\n");
  264.             sprint(self, "4 dm4 The Bad Place\n");
  265.             sprint(self, "5 dm5 The Cistern\n");
  266.             sprint(self, "6Édm6æThe Dark Zone\n");
  267.  
  268.             self.impulse = 0;
  269.             return;
  270.  
  271.         } else if (self.impulse == 6) {
  272.             self.accessparm = 9;
  273.  
  274.             sprint(self, "Choose Level:\n");
  275.             sprint(self, "Waypoint maps marked with Éæ\n");
  276.             sprint(self, "1Éctf1æMcKinley Base\n");
  277.             sprint(self, "2Éctf2æThe Kiln\n");
  278.             sprint(self, "3Éctf3æDysphoria\n");
  279.             sprint(self, "4Éctf4æThe Forgotten Mines\n");
  280.             sprint(self, "5Éctf5æDa Ancient War Grounds\n");
  281.             sprint(self, "6Éctf6æVertigo\n");
  282.             sprint(self, "7Éctf7æTale of Two Cities\n");
  283.             sprint(self, "8Éctf8æThe Strongbox\n");
  284.  
  285.             self.impulse = 0;
  286.             return;
  287.             
  288.         } else if (self.impulse == 7) {
  289.             self.accessparm = 10;
  290.  
  291.             sprint(self, "Choose Level:\n");
  292.             sprint(self, "Waypoint maps marked with Éæ\n");
  293.             sprint(self, "1Éidctf1 æGloom Castles\n");
  294.             sprint(self, "2Ékoc1   æChthon's Capture House\n");
  295.             sprint(self, "3Émaniac1æMonkey Bar Mines\n");
  296.             sprint(self, "4Émaniac2æBoxed In\n");
  297.             sprint(self, "5Ésatyr1aæPenance of the Satyrs\n");
  298.             sprint(self, "6Émexx6  æSuicide Staccato\n");
  299.             sprint(self, "7Émartim5æSatan's Fifth Sin\n");
  300.  
  301.             self.impulse = 0;
  302.             return;
  303.         }
  304.         sprint(self, "Invalid episode\n");
  305.         self.accessparm = 0;
  306.         return;
  307.  
  308.     } else if (self.accessparm == 4) {
  309.  
  310.         if (self.impulse == 1) AdminChangeLevel("e1m1");
  311.         else if (self.impulse == 2) AdminChangeLevel("e1m2");
  312.         else if (self.impulse == 3) AdminChangeLevel("e1m3");
  313.         else if (self.impulse == 4) AdminChangeLevel("e1m4");
  314.         else if (self.impulse == 5) AdminChangeLevel("e1m5");
  315.         else if (self.impulse == 6) AdminChangeLevel("e1m6");
  316.         else if (self.impulse == 7) AdminChangeLevel("e1m7");
  317.         else if (self.impulse == 8) AdminChangeLevel("e1m8");
  318.         else sprint(self, "Invalid map\n");
  319.         self.impulse = 0;
  320.         self.accessparm = 0;
  321.         return;
  322.             
  323.     } else if (self.accessparm == 5) {
  324.  
  325.         if (self.impulse == 1)        AdminChangeLevel("e2m1");
  326.         else if (self.impulse == 2)    AdminChangeLevel("e2m2");
  327.         else if (self.impulse == 3)    AdminChangeLevel("e2m3");
  328.         else if (self.impulse == 4)    AdminChangeLevel("e2m4");
  329.         else if (self.impulse == 5)    AdminChangeLevel("e2m5");
  330.         else if (self.impulse == 6)    AdminChangeLevel("e2m6");
  331.         else if (self.impulse == 7)    AdminChangeLevel("e2m7");
  332.         else sprint(self, "Invalid map\n");
  333.         self.impulse = 0;
  334.         self.accessparm = 0;
  335.         return;
  336.             
  337.     } else if (self.accessparm == 6) {
  338.  
  339.         if (self.impulse == 1)        AdminChangeLevel("e3m1");
  340.         else if (self.impulse == 2)    AdminChangeLevel("e3m2");
  341.         else if (self.impulse == 3)    AdminChangeLevel("e3m3");
  342.         else if (self.impulse == 4)    AdminChangeLevel("e3m4");
  343.         else if (self.impulse == 5)    AdminChangeLevel("e3m5");
  344.         else if (self.impulse == 6)    AdminChangeLevel("e3m6");
  345.         else if (self.impulse == 7)    AdminChangeLevel("e3m7");
  346.         else sprint(self, "Invalid map\n");
  347.         self.impulse = 0;
  348.         self.accessparm = 0;
  349.         return;
  350.             
  351.     } else if (self.accessparm == 7) {
  352.  
  353.         if (self.impulse == 1)        AdminChangeLevel("e4m1");
  354.         else if (self.impulse == 2)    AdminChangeLevel("e4m2");
  355.         else if (self.impulse == 3)    AdminChangeLevel("e4m3");
  356.         else if (self.impulse == 4)    AdminChangeLevel("e4m4");
  357.         else if (self.impulse == 5)    AdminChangeLevel("e4m5");
  358.         else if (self.impulse == 6)    AdminChangeLevel("e4m6");
  359.         else if (self.impulse == 7)    AdminChangeLevel("e4m7");
  360.         else if (self.impulse == 8)    AdminChangeLevel("e4m8");
  361.         else sprint(self, "Invalid map\n");
  362.         self.impulse = 0;
  363.         self.accessparm = 0;
  364.         return;
  365.             
  366.     } else if (self.accessparm == 8) {
  367.  
  368.         if (self.impulse == 1)        AdminChangeLevel("dm1");
  369.         else if (self.impulse == 2)    AdminChangeLevel("dm2");
  370.         else if (self.impulse == 3)    AdminChangeLevel("dm3");
  371.         else if (self.impulse == 4)    AdminChangeLevel("dm4");
  372.         else if (self.impulse == 5)    AdminChangeLevel("dm5");
  373.         else if (self.impulse == 6)    AdminChangeLevel("dm6");
  374.         else sprint(self, "Invalid map\n");
  375.         self.impulse = 0;
  376.         self.accessparm = 0;
  377.         return;
  378.             
  379.     } else if (self.accessparm == 9) {
  380.  
  381.         if (self.impulse == 1)        AdminChangeLevel("ctf1");
  382.         else if (self.impulse == 2)    AdminChangeLevel("ctf2");
  383.         else if (self.impulse == 3)    AdminChangeLevel("ctf3");
  384.         else if (self.impulse == 4)    AdminChangeLevel("ctf4");
  385.         else if (self.impulse == 5)    AdminChangeLevel("ctf5");
  386.         else if (self.impulse == 6)    AdminChangeLevel("ctf6");
  387.         else if (self.impulse == 7)    AdminChangeLevel("ctf7");
  388.         else if (self.impulse == 8)    AdminChangeLevel("ctf8");
  389.         else sprint(self, "Invalid map\n");
  390.         self.impulse = 0;
  391.         self.accessparm = 0;
  392.         return;
  393.  
  394.     } else if (self.accessparm == 10) {
  395.  
  396.         if (self.impulse == 1)        AdminChangeLevel("idctf1");
  397.         else if (self.impulse == 2)    AdminChangeLevel("koc1");
  398.         else if (self.impulse == 3)    AdminChangeLevel("maniac1");
  399.         else if (self.impulse == 4)    AdminChangeLevel("maniac2");
  400.         else if (self.impulse == 5)    AdminChangeLevel("satyr1a");
  401.         else if (self.impulse == 6)    AdminChangeLevel("mexx6");
  402.         else if (self.impulse == 7)    AdminChangeLevel("martim5");
  403.         else sprint(self, "Invalid map\n");
  404.         self.impulse = 0;
  405.         self.accessparm = 0;
  406.         return;
  407.     }
  408.  
  409.     self.accessparm = 0;
  410.  
  411.     if (self.impulse == ADMIN_KICK) {
  412.  
  413.         sprint(self, "Kick:\n");
  414.         p = find(world, classname, "player");
  415.         n = 1;
  416.         while (p != world) {
  417.             st = ftos(n);
  418.             if (n < 10)
  419.                 sprint(self, " ");
  420.             sprint(self, st);
  421.             sprint(self, " ");
  422.             sprint(self, p.netname);
  423.             sprint(self, "\n");
  424.             p = find(p, classname, "player");
  425.             n = n + 1;
  426.         }
  427.  
  428.         self.accessparm = 1;
  429.  
  430.     } else if (self.impulse == ADMIN_TEAMCHANGE) {
  431.  
  432.         sprint(self, "Switch:\n");
  433.         p = find(world, classname, "player");
  434.         n = 1;
  435.         while (p != world) {
  436.             st = ftos(n);
  437.             if (n < 10)
  438.                 sprint(self, " ");
  439.             sprint(self, st);
  440.             sprint(self, " ");
  441.             sprint(self, p.netname);
  442.             sprint(self, "\n");
  443.             p = find(p, classname, "player");
  444.             n = n + 1;
  445.         }
  446.  
  447.         self.accessparm = 2;
  448.  
  449.     } else if (self.impulse == ADMIN_CHANGEMAP) {
  450.         sprint(self, "Select Episode:\n");
  451.         sprint(self, "1 Dimension of the Doomed\n");
  452.         sprint(self, "2 Realm of Black Magic\n");
  453.         sprint(self, "3 Netherworld\n");
  454.         sprint(self, "4 The Elder World\n");
  455.         sprint(self, "5 The Deathmatch Arenas\n");
  456.         sprint(self, "6 Standard Capture Levels\n");
  457.         sprint(self, "7 More Capture Levels\n");
  458.  
  459.         self.accessparm = 3;
  460.     }
  461.  
  462.     self.impulse = 0;
  463.     return;
  464. };
  465.  
  466.  
  467.