From: <wrt...@us...> - 2007-06-10 21:32:01
|
Revision: 7301 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7301&view=rev Author: wrtlprnft Date: 2007-06-10 14:32:02 -0700 (Sun, 10 Jun 2007) Log Message: ----------- Yet another fix: The "you're not allowed to change your team" was sent to everyone if a player tried to create a new team, not just to the player. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-06-10 21:19:41 UTC (rev 7300) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-06-10 21:32:02 UTC (rev 7301) @@ -3796,7 +3796,7 @@ tASSERT ( nCLIENT != sn_GetNetState() ); if(!TeamChangeAllowed()) { - sn_ConsoleOut(tOutput("$player_teamchanges_disallowed")); + sn_ConsoleOut(tOutput("$player_teamchanges_disallowed"), Owner()); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2007-11-12 08:51:54
|
Revision: 7375 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7375&view=rev Author: luke-jr Date: 2007-11-12 00:51:57 -0800 (Mon, 12 Nov 2007) Log Message: ----------- rewrite of epsys PLAYER_MESSAGE Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 08:12:22 UTC (rev 7374) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 08:51:57 UTC (rev 7375) @@ -4055,6 +4055,27 @@ return 0; } +static void se_PlayerMessageConf(std::istream &s) +{ + int receiver = se_ReadUser( s ); + + tColoredString msg; + msg.ReadLine(s); + + if ( receiver <= 0 || s.good() ) + { + con << "Usage: PLAYER_MESSAGE <user ID or name> <Message>\n"; + return; + } + + msg << '\n'; + + sn_ConsoleOut(msg, 0); + sn_ConsoleOut(msg, receiver); +} + +static tConfItemFunc se_PlayerMessage_c("PLAYER_MESSAGE", &se_PlayerMessageConf); + static void se_KickConf(std::istream &s) { // get user ID This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2007-11-12 10:21:07
|
Revision: 7376 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7376&view=rev Author: luke-jr Date: 2007-11-12 02:21:07 -0800 (Mon, 12 Nov 2007) Log Message: ----------- allow intercepting of /-commands (configurable) Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 08:51:57 UTC (rev 7375) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 10:21:07 UTC (rev 7376) @@ -1156,6 +1156,17 @@ tColoredString message_; // the console message for the remote administrator }; +static tString se_InterceptCommands; +static tConfItemLine se_InterceptCommandsConf( "INTERCEPT_COMMANDS", se_InterceptCommands ); + +static bool se_interceptUnknownCommands = false; +static tSettingItem<bool> se_interceptUnknownCommandsConf("INTERCEPT_UNKNOWN_COMMANDS", + se_interceptUnknownCommands); + +void handle_command_intercept(tJUST_CONTROLLED_PTR< ePlayerNetID > &p, tString say) { + con << "[cmd] " << *p << ": " << say << '\n'; +} + void handle_chat_admin_commands(tJUST_CONTROLLED_PTR< ePlayerNetID > &p, tString say){ if (say.StartsWith("/login")) { tString params(""); @@ -1226,7 +1237,12 @@ } } else + if (se_interceptUnknownCommands) { + handle_command_intercept(p, say); + } + else + { sn_ConsoleOut("Unknown chat command.\n",p->Owner()); } } @@ -1334,6 +1350,12 @@ tString msg; tConfItemBase::EatWhitespace(s); msg.ReadLine(s); + if (se_InterceptCommands.StrPos(command) != -1) + { + handle_command_intercept(p, say); + return; + } + else if (command == "/me") { if ( IsSilencedWithWarning(p) ) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-11-12 14:37:31
|
Revision: 7377 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7377&view=rev Author: z-man Date: 2007-11-12 06:37:35 -0800 (Mon, 12 Nov 2007) Log Message: ----------- Fixed client compilation. Intercept_Commands is only supposed to work on the server, right? Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 10:21:07 UTC (rev 7376) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 14:37:35 UTC (rev 7377) @@ -1350,12 +1350,14 @@ tString msg; tConfItemBase::EatWhitespace(s); msg.ReadLine(s); +#ifdef DEDICATED if (se_InterceptCommands.StrPos(command) != -1) { handle_command_intercept(p, say); return; } else +#endif if (command == "/me") { if ( IsSilencedWithWarning(p) ) return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-30 10:55:09
|
Revision: 7707 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7707&view=rev Author: z-man Date: 2008-01-30 02:55:13 -0800 (Wed, 30 Jan 2008) Log Message: ----------- Eliminating duplicate password storage items on load. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-30 10:36:27 UTC (rev 7706) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-30 10:55:13 UTC (rev 7707) @@ -80,7 +80,12 @@ PasswordStorage(): save(false){}; }; - +static bool operator == ( PasswordStorage const & a, PasswordStorage const & b ) +{ + return + a.username == b.username; +} + static tArray<PasswordStorage> S_passwords; void se_DeletePasswords(){ @@ -155,7 +160,19 @@ PasswordStorage &storage = S_passwords[S_passwords.Len()]; nKrawall::ReadScrambledPassword(s, storage.password); storage.username.ReadLine(s); + storage.save = true; + + // check for duplicates + for( int i = S_passwords.Len() - 2; i >= 0; --i ) + { + PasswordStorage &other = S_passwords[i]; + if ( other == storage ) + { + storage.save = false; + break; + } + } } } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-30 11:19:41
|
Revision: 7708 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7708&view=rev Author: z-man Date: 2008-01-30 03:19:45 -0800 (Wed, 30 Jan 2008) Log Message: ----------- Made the random color picker dislike black even more. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-30 10:55:13 UTC (rev 7707) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-30 11:19:45 UTC (rev 7708) @@ -3202,8 +3202,8 @@ newRGB[i] = randomizer.Get(15); } - int currentMinDiff = se_ColorDistance( currentRGB, nullRGB ) * 2; - int newMinDiff = se_ColorDistance( newRGB, nullRGB ) * 2; + int currentMinDiff = se_ColorDistance( currentRGB, nullRGB )/2; + int newMinDiff = se_ColorDistance( newRGB, nullRGB )/2; // check the minimal distance of the new random color with all players for ( int i = se_PlayerNetIDs.Len()-1; i >= 0; --i ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-02-04 19:10:23
|
Revision: 7726 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7726&view=rev Author: wrtlprnft Date: 2008-02-04 11:10:15 -0800 (Mon, 04 Feb 2008) Log Message: ----------- something went wrong when i tried to compile it, added a missing _ Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-04 19:04:51 UTC (rev 7725) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-04 19:10:15 UTC (rev 7726) @@ -2342,7 +2342,7 @@ static tSettingItem<bool> se_allowShuffleUpConf("TEAM_ALLOW_SHUFFLE_UP", se_allowShuffleUp); #else -static tAccessLevel se_shuffleUpAccessLevel = tAccessLevelTeamMember; +static tAccessLevel se_shuffleUpAccessLevel = tAccessLevel_TeamMember; static tSettingItem< tAccessLevel > se_shuffleUpAccessLevelConf( "ACCESS_LEVEL_SHUFFLE_UP", se_shuffleUpAccessLevel ); #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-02-04 23:32:58
|
Revision: 7736 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7736&view=rev Author: z-man Date: 2008-02-04 15:33:00 -0800 (Mon, 04 Feb 2008) Log Message: ----------- Trimming whitespace from the end of the argument of /login. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-04 23:15:38 UTC (rev 7735) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-04 23:33:00 UTC (rev 7736) @@ -2151,20 +2151,33 @@ // the following function really is only supposed to be called from here and nowhere else // (access right escalation risk): // log in (via admin password or hash based login) -static void se_AdminLogin_ReallyOnlyCallFromChatKTHNXBYE( ePlayerNetID * p, tString const & say ) +static void se_AdminLogin_ReallyOnlyCallFromChatKTHNXBYE( ePlayerNetID * p, std::istream & s ) { tString params(""); - if (say.StrPos(" ") == -1) - { + params.ReadLine( s ); #ifndef KRAWALL_SERVER + if ( params == "" ) return; #endif - } - else + + // trim whitespace + + // for the trunk: + // params.Trim(); + // here,we have to do the work manually { - params = say.SubStr(say.StrPos(" ") + 1); + int lastNonSpace = params.Len() - 2; + while ( lastNonSpace >= 0 && isblank(params[lastNonSpace]) ) + { + --lastNonSpace; + } + + if ( lastNonSpace < params.Len() - 2 ) + { + params = params.SubStr( 0, lastNonSpace + 1 ); + } } - + #ifndef KRAWALL_SERVER // the password is not stored in the recording, hence we have to store the // result of the password test @@ -2269,7 +2282,7 @@ { // the following function really is only supposed to be called from here and nowhere else // (access right escalation risk) - se_AdminLogin_ReallyOnlyCallFromChatKTHNXBYE( p, say ); + se_AdminLogin_ReallyOnlyCallFromChatKTHNXBYE( p, s ); } else if (command == "/logout") { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-02-06 17:33:38
|
Revision: 7763 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7763&view=rev Author: wrtlprnft Date: 2008-02-06 09:33:42 -0800 (Wed, 06 Feb 2008) Log Message: ----------- Dunno if this is a very good idea, but it saves you one keystroke: If there's one of those enter password dialogs and the name that's suggested by the server matches a global ID (from any player) the password field is selected, otherwise it's the username field. Useful if you don't want to trust your password to user.cfg but still comfortably log in. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-06 17:16:41 UTC (rev 7762) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-06 17:33:42 UTC (rev 7763) @@ -521,7 +521,7 @@ eMenuItemPassword pw(&login, password); eMenuItemUserName us(&login, username); us.SetColorMode( rTextField::COLOR_IGNORE ); - + uMenuItemSelection<int> storepw(&login, "$login_storepw_text", "$login_storepw_help", @@ -540,6 +540,27 @@ login.SetSelected(1); + // check if the username the server sent us matches one of the players' + // global IDs. If it does we can directly select the password menu + // menu entry since the user probably just wants to enter the password. + for(int i = 0; i < MAX_PLAYERS; ++i) { + tString const &id = se_Players[i].globalID; + if(id.Len() <= username.Len() || id(username.Len() - 1) != '@') { + std::cerr << "?!\n"; + continue; + } + bool match = true; + for(int j = username.Len() - 2; j >= 0; --j) { + if(username(j) != id(j)) { + match = false; + break; + } + } + if(match) { + login.SetSelected(0); + } + } + // force a small console while we are in here rSmallConsoleCallback cb(&tr); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-02-06 17:45:26
|
Revision: 7764 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7764&view=rev Author: wrtlprnft Date: 2008-02-06 09:45:11 -0800 (Wed, 06 Feb 2008) Log Message: ----------- -?! Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-06 17:33:42 UTC (rev 7763) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-06 17:45:11 UTC (rev 7764) @@ -546,7 +546,6 @@ for(int i = 0; i < MAX_PLAYERS; ++i) { tString const &id = se_Players[i].globalID; if(id.Len() <= username.Len() || id(username.Len() - 1) != '@') { - std::cerr << "?!\n"; continue; } bool match = true; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-02-07 22:29:20
|
Revision: 7777 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7777&view=rev Author: wrtlprnft Date: 2008-02-07 14:29:19 -0800 (Thu, 07 Feb 2008) Log Message: ----------- Implemented ramps and flying cycles Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-07 21:48:32 UTC (rev 7776) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-07 22:29:19 UTC (rev 7777) @@ -702,7 +702,7 @@ { tASSERT( hider ); - return + return hider->GetAccessLevel() >= se_hideAccessLevelOf && currentLevel > se_hideAccessLevelTo; } @@ -4930,11 +4930,12 @@ for( int i = 2; i >= 0; --i ) { int diff = a[i] - b[i]; - diff = diff < 0 ? -diff : diff; - if ( diff > distance ) - { - distance = diff; - } + distance += diff * diff; + //diff = diff < 0 ? -diff : diff; + //if ( diff > distance ) + //{ + // distance = diff; + //} } return distance; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-02-20 19:39:53
|
Revision: 8019 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8019&view=rev Author: wrtlprnft Date: 2008-02-20 11:39:54 -0800 (Wed, 20 Feb 2008) Log Message: ----------- Added logging of /admin commands Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-20 18:45:16 UTC (rev 8018) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-02-20 19:39:54 UTC (rev 8019) @@ -2315,6 +2315,11 @@ sn_ConsoleOut( tOutput( "$access_level_admin_denied" ), p->Owner() ); return; } + + tString str; + str.ReadLine(s); + con << "Remote admin command by " << *p << "0xRESETT: " << str << "\n"; + std::istringstream stream(&str(0)); // install filter eAdminConsoleFilter consoleFilter( p->Owner() ); @@ -2325,7 +2330,7 @@ } else { - tConfItemBase::LoadLine(s); + tConfItemBase::LoadLine(stream); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-04 17:28:24
|
Revision: 8246 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8246&view=rev Author: z-man Date: 2008-03-04 09:28:18 -0800 (Tue, 04 Mar 2008) Log Message: ----------- Fixed armathentication compilation. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-04 16:47:12 UTC (rev 8245) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-04 17:28:18 UTC (rev 8246) @@ -5689,8 +5689,8 @@ if ( informPlayer ) { sn_ConsoleOut(tOutput("$player_teamchanges_accesslevel", - tCurrentAccessLevel.GetName( GetAccessLevel() ), - tCurrentAccessLevel.GetName( AccessLevelRequiredToPlay() ) ), + tCurrentAccessLevel::GetName( GetAccessLevel() ), + tCurrentAccessLevel::GetName( AccessLevelRequiredToPlay() ) ), Owner()); } return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-06 12:28:13
|
Revision: 8265 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8265&view=rev Author: z-man Date: 2008-03-06 04:28:06 -0800 (Thu, 06 Mar 2008) Log Message: ----------- Fixed spurious rename message bug; it happened when you authenticated and changed your color during the same round. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-06 12:15:37 UTC (rev 8264) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-06 12:28:06 UTC (rev 8265) @@ -6475,14 +6475,13 @@ ladder << "PLAYER_RENAMED " << oldLogName_ << " " << logName << " " << nMachine::GetMachine(player_.Owner()).GetIP() << " " << screenName << "\n"; se_SaveToLadderLog(ladder); - - if ( bool(player_.GetVoter() ) ) + if ( oldScreenName_ != screenName ) { - player_.GetVoter()->PlayerChanged(); - } + if ( bool(player_.GetVoter() ) ) + { + player_.GetVoter()->PlayerChanged(); + } - if ( oldPrintName_ != printName ) - { mess << "$player_renamed"; sn_ConsoleOut(mess); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-06 14:45:55
|
Revision: 8268 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8268&view=rev Author: z-man Date: 2008-03-06 06:37:25 -0800 (Thu, 06 Mar 2008) Log Message: ----------- Fixed screen name reservation. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-06 14:37:02 UTC (rev 8267) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-06 14:37:25 UTC (rev 8268) @@ -4356,7 +4356,6 @@ #ifdef KRAWALL_SERVER // check for reserved nicknames - if ( !exception ) { tString reservedFor = se_reserveNick.Get( name ); if ( reservedFor != "" && This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-07 13:20:36
|
Revision: 8273 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8273&view=rev Author: z-man Date: 2008-03-07 05:20:40 -0800 (Fri, 07 Mar 2008) Log Message: ----------- Don't show "IP=<empty>" in /players output. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-07 11:03:02 UTC (rev 8272) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-07 13:20:40 UTC (rev 8273) @@ -2853,7 +2853,11 @@ } if ( tCurrentAccessLevel::GetAccessLevel() <= se_ipAccessLevel ) { - tos << ", IP = " << p2->GetMachine().GetIP(); + tString IP = p2->GetMachine().GetIP(); + if ( IP.Len() > 1 ) + { + tos << ", IP = " << IP; + } } tos << "\n"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-03-11 19:36:35
|
Revision: 8308 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8308&view=rev Author: wrtlprnft Date: 2008-03-11 12:36:35 -0700 (Tue, 11 Mar 2008) Log Message: ----------- Actually make ACCESS_LEVEL_SHUFFLE_UP work... Don't look at the error, and if you do, please don't remember that I ever did such a stupid mistake. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-11 01:35:28 UTC (rev 8307) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-11 19:36:35 UTC (rev 8308) @@ -2917,7 +2917,7 @@ return; } #else - if ( !p->GetAccessLevel() > se_shuffleUpAccessLevel ) + if ( p->GetAccessLevel() > se_shuffleUpAccessLevel ) { sn_ConsoleOut(tOutput("$access_level_shuffle_up_denied"), p->Owner()); return; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-03-12 20:56:40
|
Revision: 8315 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8315&view=rev Author: wrtlprnft Date: 2008-03-12 13:56:31 -0700 (Wed, 12 Mar 2008) Log Message: ----------- Don't look at this patch. Especially not z-man. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-12 16:10:14 UTC (rev 8314) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-12 20:56:31 UTC (rev 8315) @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -124,7 +124,7 @@ a.username == b.username && a.methodCongested == b.methodCongested; } - + static tArray<PasswordStorage> S_passwords; // if set, user names of non-authenticated players are left as they are, @@ -138,7 +138,7 @@ // transform special characters in name to escape sequences static std::string se_EscapeName( tString const & original, bool keepAt = true ) { - std::ostringstream filter; + std::ostringstream filter; int lastC = 'x'; for( int i = 0; i < original.Len()-1; ++i ) @@ -174,11 +174,11 @@ { filter << "\\x"; break; - } + } default: if ( 0x20 < c && 0x7f >= c ) { - // normal ascii, print + // normal ascii, print filter.put(c); } else @@ -187,7 +187,7 @@ filter << '%' << std::hex << std::uppercase << std::setfill('0') << std::setw(2) << c; } } - + lastC = c; } @@ -199,7 +199,7 @@ // reverses se_EscapeName (left inverse only, UnEscape(Escape(x)) == x, but not Escape(UnEscape(y)) == y. ) static std::string se_UnEscapeName( tString const & original ) { - std::ostringstream filter; + std::ostringstream filter; int lastC = 'x'; for( int i = 0; i < original.Len()-1; ++i ) @@ -265,25 +265,25 @@ /* REAL timeout = tSysTimeFloat() + 3; - + while(tSysTimeFloat() < timeout){ - + sr_ResetRenderState(true); rViewport::s_viewportFullscreen.Select(); - + sr_ClearGL(); - + uMenu::GenericBackground(); REAL w=16*3/640.0; REAL h=32*3/480.0; - - + + //REAL middle=-.6; - + Color(1,1,1); DisplayText(0,.8,w,h,tOutput("$network_opts_deletepw_complete")); - + sr_SwapGL(); } @@ -470,8 +470,8 @@ PasswordStorage *storage = NULL; for (i = S_passwords.Len()-1; i>=0; i--) { - PasswordStorage & candidate = S_passwords(i); - if (answer.username == candidate.username && + PasswordStorage & candidate = S_passwords(i); + if (answer.username == candidate.username && methodCongested == candidate.methodCongested ) storage = &candidate; @@ -594,7 +594,7 @@ static void se_AdminLogin_ReallyOnlyCallFromChatKTHNXBYE( ePlayerNetID * p ) { // elevate access rights. We are currently in the context of player chat, - // therefore in his security context, but we need to log the player on, + // therefore in his security context, but we need to log the player on, // and that requires superior rights. { tCurrentAccessLevel elevator( tAccessLevel_Owner, true ); @@ -641,7 +641,7 @@ // count players above and on the current access level int countAbove = 0, countOn = 0; - + for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i ) { ePlayerNetID* player = se_PlayerNetIDs(i); @@ -649,7 +649,7 @@ // don't count AIs and spectators if ( !player->IsHuman() || !player->NextTeam() ) continue; - + if ( player->GetAccessLevel() < newAccessLevel ) { countAbove++; @@ -775,7 +775,7 @@ { tString username = result.username; tString authority = result.authority; - bool success = result.success; + bool success = result.success; ePlayerNetID * player = dynamic_cast< ePlayerNetID * >( static_cast< nNetObject * >( result.user ) ); if ( !player || player->Owner() <= 0 ) @@ -802,7 +802,7 @@ player->Authenticate( authName, result.accessLevel ); // log blurb to ladderlog. This is not important for debug playback, - // so we just don't record it. Once more is done with the blurb, + // so we just don't record it. Once more is done with the blurb, // we need to change that. for ( std::deque< tString >::const_iterator i = result.blurb.begin(); i != result.blurb.end(); ++i ) { @@ -1043,7 +1043,7 @@ StoreConfitem(tNEW(tConfItemLine) (confname, "$player_user_confitem_help", globalID)); - + confname.Clear(); confname << "AUTO_LOGIN_"<< id+1; StoreConfitem(tNEW(tConfItem<bool>)(confname, @@ -1259,12 +1259,12 @@ { return; } - + nMessage *m = new nMessage( se_loginWanted ); // write player *m << p; - + // write flag and name *m << p->loginWanted; @@ -1303,10 +1303,10 @@ nKrawall::SplitUserName( p->GetRawAuthenticatedName(), userName, authority ); } - p->loginWanted = - !nAuthentication::RequestLogin( authority, - userName, - *p, + p->loginWanted = + !nAuthentication::RequestLogin( authority, + userName, + *p, authority.Len() > 1 ? tOutput( "$login_request", authority ) : tOutput( "$login_request_local" ) ); #endif } @@ -1331,7 +1331,7 @@ // mark all players as wanting to log in for(int i=MAX_PLAYERS-1;i>=0;i--) { - ePlayer * lp = ePlayer::PlayerConfig(i); + ePlayer * lp = ePlayer::PlayerConfig(i); if ( lp && lp->netPlayer ) { lp->netPlayer->loginWanted = true; @@ -1419,11 +1419,11 @@ // search for exact or partial matches in player names ePlayerNetID * CompareBufferToPlayerNames - ( const tString & nameRaw, - int & num_matches, - ePlayerNetID * requester, - SE_NameGetter GetName, // = &ePlayerNetID::GetName, - SE_NameFilter Filter, // = &se_NameFilterID, + ( const tString & nameRaw, + int & num_matches, + ePlayerNetID * requester, + SE_NameGetter GetName, // = &ePlayerNetID::GetName, + SE_NameFilter Filter, // = &se_NameFilterID, SE_NameHider Hider )// = &se_NonHide ) { num_matches = 0; @@ -1511,7 +1511,7 @@ else if (num_matches > 1) { tOutput toSender( "$msg_toomanymatches", name ); if ( requester ) - { + { sn_ConsoleOut(toSender,requester->Owner() ); } else @@ -1524,7 +1524,7 @@ else { tOutput toSender( "$msg_nomatch", name ); if ( requester ) - { + { sn_ConsoleOut(toSender,requester->Owner() ); } else @@ -1547,7 +1547,7 @@ sn_ConsoleOut( tOutput( "$chatcommand_requires_player", command ), sender->Owner() ); return 0; } - + return ePlayerNetID::FindPlayerByName( player, sender ); } @@ -2006,7 +2006,7 @@ { accessLevel = level; } - + se_OpBase( admin, victim, "/op", accessLevel ); } @@ -2045,7 +2045,7 @@ { victim->SetAccessLevel( accessLevel ); - se_SecretConsoleOut( tOutput( "$access_level_promote", + se_SecretConsoleOut( tOutput( "$access_level_promote", victim->GetLogName(), tCurrentAccessLevel::GetName( accessLevel ), admin->GetLogName() ), victim, admin ); @@ -2071,7 +2071,7 @@ if ( accessLevel <= tAccessLevel_Authenticated ) { - se_SecretConsoleOut( tOutput( "$access_level_demote", + se_SecretConsoleOut( tOutput( "$access_level_demote", victim->GetLogName(), tCurrentAccessLevel::GetName( accessLevel ), admin->GetLogName() ), victim, admin ); @@ -2094,7 +2094,7 @@ // the team to invite to is, of course, the team the admin is in. eTeam * team = admin->CurrentTeam(); ePlayerNetID::eTeamSet const & invitations = admin->GetInvitations(); - + // unless, of course, he is in no team, then let him relay the one invitation // he has. if ( !team && invitations.size() == 1 ) @@ -2108,7 +2108,7 @@ // checks static bool se_CanManageTeam( ePlayerNetID * admin, bool emergency ) { - // check regular access level + // check regular access level if ( admin->GetAccessLevel() <= se_teamAccessLevel ) { return true; @@ -2215,7 +2215,7 @@ if ( params == "" ) return; #endif - + // trim whitespace // for the trunk: @@ -2242,7 +2242,7 @@ if ( !tRecorder::Playback( section, accept ) ) accept = ( params == sg_adminPass && sg_adminPass != "NONE" ); tRecorder::Record( section, accept ); - + //change this later to read from a password file or something... //or integrate it with auth if we ever get that done... if ( accept ) { @@ -2266,7 +2266,7 @@ sn_ConsoleOut( "$login_request_redundant", p->Owner() ); return; } - + if ( p->GetRawAuthenticatedName().Len() <= 1 || params.StrPos("@") >= 0 ) { if ( params.StrPos( "@" ) >= 0 ) @@ -2278,15 +2278,15 @@ p->SetRawAuthenticatedName( p->GetUserName() + "@" + params ); } } - + // check for stupid bans if ( se_IsUserBanned( p, p->GetRawAuthenticatedName() ) ) { return; } - + p->loginWanted = true; - + se_RequestLogin( p ); } #endif @@ -2323,7 +2323,7 @@ str.ReadLine(s); con << "Remote admin command by " << *p << "0xRESETT: " << str << "\n"; std::istringstream stream(&str(0)); - + // install filter eAdminConsoleFilter consoleFilter( p->Owner() ); tConfItemBase::LoadLine(stream); @@ -2342,19 +2342,19 @@ se_AdminLogout( p ); } #ifdef KRAWALL_SERVER - else if ( command == "/op" ) + else if ( command == "/op" ) { se_ChangeAccess( p, s, "/op", &se_Op ); } - else if ( command == "/deop" ) + else if ( command == "/deop" ) { se_ChangeAccess( p, s, "/deop", &se_DeOp ); } - else if ( command == "/promote" ) + else if ( command == "/promote" ) { se_ChangeAccess( p, s, "/promote", &se_Promote ); } - else if ( command == "/demote" ) + else if ( command == "/demote" ) { se_ChangeAccess( p, s, "/demote", &se_Demote ); } @@ -2476,7 +2476,7 @@ { lengthMalus = 4.0; } - + if ( nSpamProtection::Level_Mild <= player_->chatSpam_.CheckSpam( 1+lengthMalus, player_->Owner(), tOutput("$spam_chat") ) ) { return true; @@ -2497,11 +2497,11 @@ { sn_ConsoleOut( tOutput("$access_level_chat_denied" ), player_->Owner() ); } - + return true; } #endif - + // update last said record { for( short zz = 12; zz>=1; zz-- ) @@ -2509,11 +2509,11 @@ player_->lastSaid[zz] = player_->lastSaid[zz-1]; player_->lastSaidTimes[zz] = player_->lastSaidTimes[zz-1]; } - + player_->lastSaid[0] = say_; player_->lastSaidTimes[0] = currentTime; } - + return false; } @@ -2554,7 +2554,7 @@ { return; } - + tString msg; msg.ReadLine( s ); @@ -2563,12 +2563,12 @@ console << *p; console << tColoredString::ColorString(1,1,.5) << " " << msg; console << tColoredString::ColorString(1,1,1) << " *"; - + tColoredString forOldClients; forOldClients << tColoredString::ColorString(1,1,1) << "*" << tColoredString::ColorString(1,1,.5) << msg << tColoredString::ColorString(1,1,1) << "*"; - + se_BroadcastChatLine( p, console, forOldClients ); console << "\n"; sn_ConsoleOut(console,0); @@ -2587,13 +2587,13 @@ sn_ConsoleOut(tOutput("$player_disallowed_teamchange"), p->Owner() ); return; } - + eTeam * leftTeam = p->NextTeam(); if ( leftTeam ) { if ( !leftTeam ) leftTeam = p->CurrentTeam(); - + if ( leftTeam->NumPlayers() > 1 ) { sn_ConsoleOut( tOutput( "$player_leave_team_wish", @@ -2606,7 +2606,7 @@ tColoredString::RemoveColors(p->GetName()) ) ); } } - + p->SetTeamWish(0); } @@ -2620,14 +2620,14 @@ { return; } - + tString msg; msg.ReadLine( s ); // Log message to server and sender tColoredString messageForServerAndSender = se_BuildChatString(currentTeam, p, msg); messageForServerAndSender << "\n"; - + if (currentTeam != NULL) // If a player has just joined the game, he is not yet on a team. Sending a /team message will crash the server { sn_ConsoleOut(messageForServerAndSender, 0); @@ -2644,7 +2644,7 @@ for( int i = se_PlayerNetIDs.Len() - 1; i >=0; --i ) { ePlayerNetID * admin = se_PlayerNetIDs(i); - + if ( // well, you have to be a spectator. No spying on the enemy. se_GetManagedTeam( admin ) == 0 && admin != p && @@ -2669,7 +2669,7 @@ for( int i = se_PlayerNetIDs.Len() - 1; i >=0; --i ) { ePlayerNetID * spectator = se_PlayerNetIDs(i); - + if ( se_GetManagedTeam( spectator ) == 0 && spectator != p ) { se_SendTeamMessage(currentTeam, p, spectator, msg); @@ -2686,10 +2686,10 @@ { return; } - + // Check for player ePlayerNetID * receiver = se_FindPlayerInChatCommand( p, "/msg", s ); - + // One match, send it. if ( receiver ) { // extract rest of message: it is the true message to send @@ -2698,19 +2698,19 @@ // read the rest of the message tString msg_core; msg_core.ReadLine(s); - + // build chat string tColoredString toServer = se_BuildChatString( p, receiver, msg_core ); toServer << '\n'; - + if ( p->CurrentTeam() == receiver->CurrentTeam() || !IsSilencedWithWarning(p) ) { // log locally sn_ConsoleOut(toServer,0); - + // log to sender's console sn_ConsoleOut(toServer, p->Owner()); - + // send to receiver if ( p->Owner() != receiver->Owner() ) se_SendPrivateMessage( p, receiver, receiver, msg_core ); @@ -2719,7 +2719,7 @@ for( int i = se_PlayerNetIDs.Len() - 1; i >=0; --i ) { ePlayerNetID * admin = se_PlayerNetIDs(i); - + if ( admin != receiver && admin != p && admin->GetAccessLevel() <= se_msgSpyAccessLevel ) { se_SendPrivateMessage( p, receiver, admin, msg_core ); @@ -2757,7 +2757,7 @@ static void se_ListTeam( ePlayerNetID * receiver, eTeam * team ) { std::ostringstream tos; - + // send team name tColoredString teamName; teamName << tColoredStringProxy( team->R()/15.0f, team->G()/15.0f, team->B()/15.0f ) << team->Name(); @@ -2767,10 +2767,10 @@ tos << " " << tOutput( "$invite_team_locked_list" ); } tos << ":\n"; - + // send team members int teamMembers = team->NumPlayers(); - + int indent = 0; // print left wing, the odd team members for( int i = (teamMembers/2)*2-1; i>=0; i -= 2 ) @@ -2784,16 +2784,16 @@ se_SendTeamMember( team->Player(i), indent, tos ); indent -= 2; } - + tos << "\n"; - + se_SendTo( tos.str(), receiver ); } static void se_ListTeams( ePlayerNetID * receiver ) { int numTeams = 0; - + for ( int i = eTeam::teams.Len() - 1; i >= 0; --i ) { eTeam * team = eTeam::teams[i]; @@ -2835,7 +2835,7 @@ { // player username comes from authentication name and may be much different from // the screen name - tos << p2->GetFilteredAuthenticatedName() << " ( " << p2->GetName() << ", " + tos << p2->GetFilteredAuthenticatedName() << " ( " << p2->GetName() << ", " << tCurrentAccessLevel::GetName( p2->GetAccessLevel() ) << " )"; } @@ -2886,7 +2886,7 @@ return; } int len = p->CurrentTeam()->NumPlayers(); - + // but read the target position as additional parameter int IDWish = len-1; // default to shuffle to the outside @@ -2978,7 +2978,7 @@ } eChatSpamTester spam( p, say ); - + if (say.StartsWith("/")) { std::string sayStr(say); std::istringstream s(sayStr); @@ -3571,7 +3571,7 @@ object=NULL; ping=sn_Connections[m.SenderID()].ping; lastSync=tSysTimeFloat(); - + loginWanted = false; score=0; @@ -3859,7 +3859,7 @@ { return (*iter).second; } - + return GetDefault(); } protected: @@ -3879,14 +3879,14 @@ { tString name; s >> name; - + TransformName( name ); - + P value = ReadRawVal(name, s); - + properties[name] = value; } - + Properties properties; private: @@ -3894,7 +3894,7 @@ { tASSERT(0); } - + virtual bool Writable(){ return false; } @@ -3967,7 +3967,7 @@ TestEscape(); #endif } - + // filter the name so it is compatible with old school user names; those // will be used later for comparison virtual void TransformName( tString & name ) const @@ -4181,7 +4181,7 @@ tString order( "" ); if ( admin ) { - order = tOutput( "$login_message_byorder", + order = tOutput( "$login_message_byorder", admin->GetLogName() ); } @@ -4189,8 +4189,8 @@ { if ( GetAccessLevel() != tAccessLevel_Default ) { - se_SecretConsoleOut( tOutput( "$login_message_special", - GetName(), + se_SecretConsoleOut( tOutput( "$login_message_special", + GetName(), newAuthenticatedName, tCurrentAccessLevel::GetName( GetAccessLevel() ), order ), this, admin ); @@ -4377,7 +4377,7 @@ // check for reserved nicknames { tString reservedFor = se_reserveNick.Get( name ); - if ( reservedFor != "" && + if ( reservedFor != "" && ( !exception || exception->GetAccessLevel() >= tAccessLevel_Default || exception->GetRawAuthenticatedName() != reservedFor ) ) { @@ -5245,7 +5245,7 @@ ePlayerNetID* player = se_PlayerNetIDs(i); // only assign new team if it is possible - if ( player->NextTeam() != player->CurrentTeam() && player->TeamChangeAllowed() && + if ( player->NextTeam() != player->CurrentTeam() && player->TeamChangeAllowed() && ( !player->NextTeam() || player->NextTeam()->PlayerMayJoin( player ) ) ) { @@ -5693,7 +5693,7 @@ } return false; } - + int suspended = GetSuspended(); if ( suspended > 0 ) { @@ -6332,7 +6332,7 @@ { s >> rounds; } - + if ( p ) { p->Suspend( rounds ); @@ -6465,10 +6465,10 @@ printName << player_ << tColoredString::ColorString(.5,1,.5); tOutput mess; - + mess.SetTemplateParameter(1, printName); mess.SetTemplateParameter(2, oldPrintName_); - + // is the player new? if ( oldLogName_.Len() <= 1 && logName.Len() > 0 ) { @@ -6477,7 +6477,7 @@ tString ladder; ladder << "PLAYER_ENTERED " << logName << " " << nMachine::GetMachine(player_.Owner()).GetIP() << " " << screenName << "\n"; se_SaveToLadderLog(ladder); - + player_.Greet(); // print spectating join message (regular join messages are handled by eTeam) @@ -6535,7 +6535,7 @@ // don't do a thing if we're not fully synced if ( this->ID() == 0 && nameFromClient_.Len() <= 1 && sn_GetNetState() == nSERVER ) return; - + // monitor name changes eNameMessenger messenger( *this ); @@ -6691,7 +6691,7 @@ { return; } - AllowRename( s , false, true ); + AllowRename( s , false, true ); } static tConfItemFunc DisAllowRename_conf("DISALLOW_RENAME_PLAYER", &DisAllowRename); static tAccessLevelSetter DisAllowRename_confLevel( DisAllowRename_conf, tAccessLevel_Moderator ); @@ -6866,7 +6866,7 @@ int i; static ePlayerCharacterFilter filter; out = tColoredString::RemoveColors( in ); - + // filter out illegal characters for ( i = out.Len()-1; i>=0; --i ) { @@ -6967,7 +6967,7 @@ // crappiest line ever :-/ newName << tColoredString::ColorString( r/15.0, g/15.0, b/15.0 ) << this->nameFromAdmin_ << tColoredString::ColorString( 1, 1, 1 ); - + con << tOutput("$player_will_be_renamed", newName, oldName); AllowRename ( false ); @@ -7204,7 +7204,7 @@ p->LogScoreDifference(); int suspended = p->GetSuspended(); - + // update suspension count if ( suspended > 0 ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-03-20 17:55:35
|
Revision: 8378 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=8378&view=rev Author: z-man Date: 2008-03-20 10:55:35 -0700 (Thu, 20 Mar 2008) Log Message: ----------- If a player who is currently on a team creates a new team, there is now an immediate message about it. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-20 17:35:47 UTC (rev 8377) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-03-20 17:55:35 UTC (rev 8378) @@ -6068,6 +6068,17 @@ return invitations_; } +// sends a team change notification message to everyone's console +static void se_TeamChangeMessage( ePlayerNetID const & player ) +{ + // send notification + tOutput message; + message.SetTemplateParameter(1, tColoredString::RemoveColors(player.GetName())); + message.SetTemplateParameter(2, tColoredString::RemoveColors(player.NextTeam()->Name()) ); + message << "$player_joins_team"; + sn_ConsoleOut( message ); +} + // create a new team and join it (on the server) void ePlayerNetID::CreateNewTeam() { @@ -6109,6 +6120,10 @@ { UpdateTeam(); } + else + { + se_TeamChangeMessage( *this ); + } } const unsigned short TEAMCHANGE = 0; @@ -6199,13 +6214,8 @@ // announce the change if ( bool(nextTeam) && !redundant ) { - tOutput message; - message.SetTemplateParameter(1, tColoredString::RemoveColors(GetName())); - message.SetTemplateParameter(2, tColoredString::RemoveColors(nextTeam->Name()) ); - message << "$player_joins_team"; + se_TeamChangeMessage( *this ); - sn_ConsoleOut( message ); - // count it as spam if it is obnoxious if ( obnoxious ) chatSpam_.CheckSpam( 4.0, Owner(), tOutput("$spam_teamchage") ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |