| !DisableBeacon <playername> [message #335070] | 
			Fri, 13 June 2008 06:20   | 
		 
		
			
				
				
				  | 
					
						  
						reborn
						 Messages: 3231 Registered: September 2004  Location: uk - london
						
	Karma: 
 
					 | 
					General (3 Stars)  | 
					 | 
		 
		 
	 | 
 
	
		In cnc_reborn there are some annoying places people can plant beacons. For the MP-Gaming server we have made those places "illegal" to plant, but some people either do not know about that rue, or try to d it anyway. Most people don't do it now, but some still do. For this reason I made a chat command for moderators in-game to use. 
I decided to post it here because I know beacon spamming in renegade could sometimes be a problem, and sometimes people planted in tunnels which some server owners do not allow. 
Also, it may shed some light to people who are struggling to get the GameObject * of another player who they are trying to get by typing there name into the chat hook (this was annoying me for an hour or two also, I thought it used 0 based indexing representing each word in the string, but I should of read the comments in the plug-in i guess). 
 
Like "!kill ren00b" or something... 
 
So here it is: 
 
 
class DisarmBeaconChatCommand : public ChatCommandClass {
void Triggered(int ID,const TokenClass &Text,int ChatType) {
	if(Is_Mod(Get_Player_Name_By_ID(ID))){
		int plantercount = 0;
if (!Text[1].empty()) {
std::string player = Text[1].c_str();
GameObject *obj = Get_GameObj_By_Player_Name(player.c_str());
if(!obj){
Console_Input(StrFormat("ppage %d You typed an invalid player name (%s), try again (case sensitive)",ID,player.c_str()).c_str());
}
else{
GenericSLNode *x = BaseGameObjList->HeadNode;
while (x){
GameObject *o = (GameObject *)x->NodeData;
if (o && As_ScriptableGameObj(o)){
if (Is_Beacon(o)) {
GameObject *planter = Get_Beacon_Planter(o);
if(planter == obj){
	plantercount +=1;
Disarm_Beacons(Get_Player_ID(obj));
Console_Input(StrFormat("ppage %d You just disarmed %s's beacon",ID,player.c_str()).c_str());
Console_Input(StrFormat("ppage %d Your beacon was just disarmed by a moderator (%s)",Get_Player_ID(obj),Get_Player_Name_By_ID(ID)).c_str());
}
	}
}
x = x->NodeNext;
}
if(plantercount == 0){
Console_Input(StrFormat("ppage %d You tried to disarm %s's beacon, but he hasn't planted one.",ID,player.c_str()).c_str());
}
}
}
plantercount = 0;
	}
	else {
Console_Input(StrFormat("ppage %d You're not a mod, GTFO.",ID).c_str());
		}
}
};
ChatCommandRegistrant<DisarmBeaconChatCommand> DisarmBeaconChatCommandReg("!DisarmBeacon",CHATTYPE_ALL,1,GAMEMODE_ALL);
 
 
the is_mod function has been posted before by Roshambo I think, but here it is if you do not have it: 
 
bool Is_Mod(const char *Name)
{
     fstream file("mods.txt", ios::in);
     string tmp;
     while(file >> tmp)
     { 
         if(strcmp(Name, tmp.c_str()) == 0)
          {
               return 1;
         }
     }
     return 0;
}
 
 
Where any name in mods.txt placed in your server's root folder will be counted as a mod.
		
		
 
  
		
 |  
	| 
		
	 | 
 
 
 |