!DisableBeacon <playername> [message #335070] |
Fri, 13 June 2008 06:20 |
|
reborn
Messages: 3231 Registered: September 2004 Location: uk - london
Karma: 0
|
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.
|
|
|
|
|
Re: !DisableBeacon <playername> [message #335094 is a reply to message #335079] |
Fri, 13 June 2008 08:24 |
|
reborn
Messages: 3231 Registered: September 2004 Location: uk - london
Karma: 0
|
General (3 Stars) |
|
|
ಥ_ಥ wrote on Fri, 13 June 2008 10:10 | Thanks very much Reborn, now i know how Tokens work in C++
!Rec Reborn another nice Job
*EDIT* about these Bad Places why not creating a ANTI beacon zone?
|
I can write the function for the zone pretty easily (when someone enters it I mean), but creating the zones for each map on load is a bit of a nuisance problem. I heard using the API to makes zones is bugged anyway. Not that I've tried. I might give it a go at some point.
[Updated on: Fri, 13 June 2008 08:58] Report message to a moderator
|
|
|
Re: !DisableBeacon <playername> [message #335163 is a reply to message #335070] |
Fri, 13 June 2008 15:54 |
_SSnipe_
Messages: 4121 Registered: May 2007 Location: Riverside Southern Califo...
Karma: 0
|
General (4 Stars) |
|
|
i like anti beacon zone...may take up some time but worth it...i mean wat if no mods are ingame and someone puts a beacon where not allowed then waht
|
|
|
Re: !DisableBeacon <playername> [message #335347 is a reply to message #335070] |
Sat, 14 June 2008 21:08 |
|
Veyrdite
Messages: 1471 Registered: August 2006 Location: Australia, Sydney
Karma: 0
|
General (1 Star) |
|
|
Could it be possible to make a script zone where ever the play should not be able to plant a nuke, and then just make it execute the console command disarmb *playerID/name*?
WOL: Veyrdite Previously: Dthdealer ( a long time ago )
[Updated on: Sat, 14 June 2008 21:21] Report message to a moderator
|
|
|
Re: !DisableBeacon <playername> [message #335369 is a reply to message #335070] |
Sun, 15 June 2008 02:51 |
|
reborn
Messages: 3231 Registered: September 2004 Location: uk - london
Karma: 0
|
General (3 Stars) |
|
|
Yes, that it possible, you can create zones on map load using the API, but I've never done it. Someone told me that is possibly bugged though, I heard that the zone works once then not again :-/
That might just be crap though. I've never tried.
|
|
|
|