/* Functions handling TeamFortress Administration for Net Servers !NOTE! parm15 is used to pass admin status across maps */ #include "defs.qh" #ifdef QUAKE_WORLD //Goes for whole file float() Admin_is_Disabled = { local string st; st = infokey(world, "no_admin"); if (st == "1" || st == "on") { sprint(self, PRINT_HIGH, "All admin actions are disabled.\n"); return TRUE; } return FALSE; }; float(entity theAdmin) HasValidAdminTarget = { if (theAdmin.admin_kick.classname != "player") { sprint(theAdmin, PRINT_HIGH, "No user selected!\n"); theAdmin.admin_kick = world; return FALSE; } if (theAdmin.admin_kick.has_disconnected) { sprint(theAdmin, PRINT_HIGH, "User has disconnected!\n"); theAdmin.admin_kick = world; return FALSE; } return TRUE; }; float(entity person) Is_Admin = { local string pass; if (person.admin_flag == TRUE) //I am admin :) return TRUE; else { pass = infokey(world, "adminpwd"); if (pass != string_null) { if (infokey(person, "adminpwd") == pass) { person.admin_flag = TRUE; stuffcmd(person, "setinfo adminpwd \"\"\n"); //Remove from info return TRUE; } } } person.admin_flag = FALSE; return FALSE; }; void(entity person) Check_Admin_Password = { if (person.admin_flag) { sprint(person, PRINT_HIGH, "You already have access as admin!\n"); stuffcmd(person, "setinfo adminpwd \"\"\n"); //Remove from info return; } local string pass; pass = infokey(world, "adminpwd"); if (pass != string_null) { if (infokey(person, "adminpwd") == pass) { person.admin_flag = TRUE; stuffcmd(person, "setinfo adminpwd \"\"\n"); //Remove from info sprint(person, PRINT_HIGH, "Admin password correct...\n"); return; } } RPrint(person.netname); RPrint(" requests admin password check with an incorrect or inexistent password set.\n"); }; void() Admin_Kick_Cycle = { if (!Is_Admin(self)) //If not an admin go away { sprint(self, PRINT_HIGH, "You are not allowed to use the 'get' command\n"); return; } if (Admin_is_Disabled()) return; local entity te; local float num; local float loopc; loopc = 0; num = FALSE; te = world; te = find(self.admin_kick, classname, "player"); while (te != world && num == FALSE) { num = TRUE; if (te.has_disconnected) num = FALSE; if (self.admin_kick==te) num = FALSE; if (num == FALSE) te = find(te, classname, "player"); } //te = world; /*while (num == FALSE && loopc < 32) { num = TRUE; te = checkclient(); if (te.classname != "player") num = FALSE; else if (te.has_disconnected) num = FALSE; //- OfN -// else if (!te) num = FALSE; if (self.admin_kick==te) num = FALSE; loopc = loopc + 1; }*/ //if (loopc >= 32) { if (te == world) { sprint(self, PRINT_HIGH, "No Clients Found!\n"); self.admin_kick=world; } else { self.admin_kick = te; //Set current selected person //sprint(self, PRINT_HIGH, "You can type λιγλ or βαξ to throw them out. Type ηετ again to select someone else."); sprint(self, PRINT_HIGH, "Γμιεξτ: "); sprint(self, PRINT_HIGH, self.admin_kick.netname); sprint(self, PRINT_HIGH, "\n"); } }; void() Admin_Kick_Person = { if (!Is_Admin(self)) //If not an admin go away { sprint(self, PRINT_HIGH, "You are not allowed to use the 'kick' command\n"); return; } if (Admin_is_Disabled()) return; if (self.admin_kick != world) //Bad { //WK Add checks so that it doesn't crash the server! /*if (self.admin_kick.classname != "player") { self.admin_kick = world; return; } if (self.admin_kick.has_disconnected) { self.admin_kick = world; return; }*/ if (!HasValidAdminTarget(self)) return; bprint(PRINT_HIGH, self.admin_kick.netname); bprint(PRINT_HIGH, " has been kicked by the admin "); bprint(PRINT_HIGH, self.netname); bprint(PRINT_HIGH, "\n"); stuffcmd(self.admin_kick, "disconnect\n"); //Kick them! self.admin_kick = world; //Clear it //WK BUG! Used to be == } else sprint(self, PRINT_HIGH, "No target client selected!\n"); }; //WK Same code as Bloggy's, but with some happy code for banning void() Admin_Ban_Person = { local string foo; if (!Is_Admin(self)) //If not an admin go away { sprint(self, PRINT_HIGH, "You are not allowed to use the 'ban' command\n"); return; } if (Admin_is_Disabled()) return; if (self.admin_kick != world) //Bad { //WK Add checks so that it doesn't crash the server! /*if (self.admin_kick.classname != "player") { self.admin_kick = world; return; } if (self.admin_kick.has_disconnected) { self.admin_kick = world; return; }*/ if (!HasValidAdminTarget(self)) return; bprint(PRINT_HIGH, self.admin_kick.netname); bprint(PRINT_HIGH, " has been BANNED by the admin "); bprint(PRINT_HIGH, self.netname); bprint(PRINT_HIGH, "\n"); foo = infokey(self.admin_kick,"ip"); localcmd("addip "); localcmd(foo); localcmd("\n"); stuffcmd(self.admin_kick, "disconnect\n"); //Kick them! self.admin_kick = world; //Clear it //WK BUG! Used to be == } else sprint(self, PRINT_HIGH, "No target client selected!\n"); }; void (entity player) RemoveHolo; float (float tno) TeamFortress_TeamGetLives; void(entity p) SetTeamName; //- OfN - my evil addition to the admin stuff void() Admin_Cmd = { local string st; if (!Is_Admin(self)) //If not an admin go away { sprint(self, PRINT_HIGH, "You are not allowed to use the 'cmnd' command\n"); return; } if (Admin_is_Disabled()) return; if (self.admin_kick != world) //Bad { //WK Add checks so that it doesn't crash the server! /*if (self.admin_kick.classname != "player") { sprint(self, PRINT_HIGH, "No user selected!\n"); self.admin_kick = world; return; } if (self.admin_kick.has_disconnected) { sprint(self, PRINT_HIGH, "User has disconnected!\n"); self.admin_kick = world; return; }*/ if (!HasValidAdminTarget(self)) return; st = infokey(self, "cmnd"); if (st == string_null) { sprint(self, PRINT_HIGH, "You have no CMND set!\n"); } else if (st == "curse") { local float tf; local string st2; tf = 0; st2 = infokey(world, "curse"); if (st2 == string_null) tf = stof(st2); bprint(PRINT_HIGH,"The admin "); bprint(PRINT_HIGH,self.netname); bprint(PRINT_HIGH," curses "); bprint(PRINT_HIGH,self.admin_kick.netname); bprint(PRINT_HIGH,"\n"); createBastard(self.admin_kick,tf); } else if (st == "gimmedat") { sprint(self.admin_kick,PRINT_HIGH,"If you are using this to cheat, you are LAME!\n"); self.admin_kick.money = 99999; } else if (st == "team1" || st == "team2" || st == "team3" || st == "team4") { local float targetteam, tc, tc2; local string st2; if (st == "team1") targetteam = 1; else if (st == "team2") targetteam = 2; else if (st == "team3") { if (number_of_teams < 3) { sprint(self,PRINT_HIGH,"No team 3 on this map!\n"); return; } targetteam = 3; } else { if (number_of_teams < 4) { sprint(self,PRINT_HIGH,"No team 4 on this map!\n"); return; } targetteam = 4; } if (self.admin_kick.team_no == targetteam) { st = ftos(targetteam); sprint(self,PRINT_HIGH,"Player "); sprint(self,PRINT_HIGH,self.admin_kick.netname); sprint(self,PRINT_HIGH," is already on team "); sprint(self,PRINT_HIGH,st); sprint(self,PRINT_HIGH,"!\n"); return; } if (self.admin_kick.playerclass == PC_UNDEFINED) { sprint(self,PRINT_HIGH,"Player "); sprint(self,PRINT_HIGH,self.admin_kick.netname); sprint(self,PRINT_HIGH," is observing the game\n"); return; } if (self.admin_kick.done_custom & CUSTOM_BUILDING) { sprint(self,PRINT_HIGH,"Player "); sprint(self,PRINT_HIGH,self.admin_kick.netname); sprint(self,PRINT_HIGH," is still customizing\n"); return; } local entity oself; oself = self; self = self.admin_kick; if (self.has_holo > 0 ) RemoveHolo(self); kill_my_demon();//FIXED? DetonateMines(self); //RemoveArmyTimer(); DetonateAllGuns(); self = oself; // Set the player's color tc = TeamGetColor (targetteam) - 1; tc2 = TeamGetNiceColor (targetteam); SetPlayerColor (self, tc, tc2); self.admin_kick.team_no = targetteam; makeImmune(self.admin_kick,time+15); self.admin_kick.lives = TeamFortress_TeamGetLives(targetteam); SetTeamName(self.admin_kick); bprint(PRINT_HIGH,"Player "); bprint(PRINT_HIGH,self.admin_kick.netname); bprint(PRINT_HIGH," is assigned to "); if (targetteam == 1) bprint(PRINT_HIGH,"team 1\n"); else if (targetteam == 2) bprint(PRINT_HIGH,"team 2\n"); else if (targetteam == 3) bprint(PRINT_HIGH,"team 3\n"); else bprint(PRINT_HIGH,"team 4\n"); oself = self; self = self.admin_kick; PutClientInServer(); self = oself; return; // job done! } else { stuffcmd(self.admin_kick,st); // execute command stuffcmd(self.admin_kick,"\n"); sprint(self,PRINT_HIGH, "Command '"); sprint(self,PRINT_HIGH, st); sprint(self,PRINT_HIGH, "' has been executed for "); sprint(self, PRINT_HIGH, self.admin_kick.netname); sprint(self, PRINT_HIGH, "\n"); } } else sprint(self, PRINT_HIGH, "No target client selected!\n"); }; void() Admin_Call_Ceasefire = { local string st; if (!Is_Admin(self)) //If not an admin go away { sprint(self, PRINT_HIGH, "You are not allowed to use the 'ceasefire' command\n"); return; } if (Admin_is_Disabled()) return; st = infokey(world, "ceasefire"); if (st == "on") { localcmd("localinfo ceasefire \"off\"\n"); //Turn it off //bprint(PRINT_HIGH, self.netname); bprint(PRINT_HIGH, "The game resumes now...\n"); } else { localcmd("localinfo ceasefire \"on\"\n"); //Turn it off bprint(PRINT_HIGH, self.netname); bprint(PRINT_HIGH, " forced a ceasefire.\n"); } }; //contains the list of impulses that can be used during ceasefire //returns TRUE if its good float(float inp) Good_Impulse = { if (inp == TF_MEDIC_HELPME || inp == TF_TAUNT || inp == TF_TAUNT2 || inp == TF_TAUNT3 || inp == TF_TAUNT4 || inp == TF_TAUNT5 || inp == TF_ADMIN_KICK_CYCLE || inp == TF_ADMIN_KICK_PERSON || inp == TF_ADMIN_BAN_PERSON || inp == TF_STATUS_QUERY || inp == TF_ADMIN_CEASEFIRE || inp == TF_DISPLAYLOCATION || inp == TF_STATUS_QUERY || inp == TF_HELP_MAP || inp == TF_INVENTORY || inp == TF_SHOWTF || inp == FLAG_INFO || inp == I_CHEAT_ONE || inp == I_CHEAT_TWO || inp == I_CHEAT_THREE || inp == IMPULSE_DEBUG || //- OfN - inp == IMPULSE_UPDATEINFO || //- OfN - inp == IMPULSE_CHECKADMIN || //- OfN - inp == IMPULSE_STUFFCMD) //- OfN - return TRUE; return FALSE; }; //contains the list of impulses that can be used during ceasefire //returns TRUE if its good float(float inp) Good_Impulse_OnMenu = { if (/*inp == TF_MEDIC_HELPME || inp == TF_TAUNT || inp == TF_TAUNT2 || inp == TF_TAUNT3 || inp == TF_TAUNT4 || inp == TF_TAUNT5 ||*/ inp == TF_ADMIN_KICK_CYCLE || inp == TF_ADMIN_KICK_PERSON || inp == TF_ADMIN_BAN_PERSON || inp == TF_STATUS_QUERY || inp == TF_ADMIN_CEASEFIRE || inp == TF_DISPLAYLOCATION || inp == TF_STATUS_QUERY || inp == TF_HELP_MAP || inp == TF_INVENTORY || inp == TF_SHOWTF || inp == FLAG_INFO || inp == I_CHEAT_ONE || inp == I_CHEAT_TWO || inp == I_CHEAT_THREE || inp == IMPULSE_DEBUG || //- OfN - inp == IMPULSE_UPDATEINFO || //- OfN - inp == IMPULSE_CHECKADMIN || //- OfN - inp == IMPULSE_STUFFCMD) //- OfN - return TRUE; return FALSE; }; #endif