From: <z-...@us...> - 2009-02-27 10:53:25
|
Revision: 9064 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9064&view=rev Author: z-man Date: 2009-02-27 10:53:19 +0000 (Fri, 27 Feb 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9056 to 9063: ------------------------------------------------------------------------ r9062 | bazaarmagetron | 2009-02-26 18:14:14 +0100 (Thu, 26 Feb 2009) | 2 lines Manuel Moos: Now switched to the more standard and easier to escape reading method that turns \\ into \, \\\\ into \\ and so on. ------------------------------------------------------------------------ r9061 | bazaarmagetron | 2009-02-26 18:12:42 +0100 (Thu, 26 Feb 2009) | 2 lines Manuel Moos: Backslash at the front of a read string now correctly escapes the following character. ------------------------------------------------------------------------ r9060 | bazaarmagetron | 2009-02-26 18:01:04 +0100 (Thu, 26 Feb 2009) | 1 line Manuel Moos: Removed obsolete rendering code and restored adaption of near clipping plane to close walls. ------------------------------------------------------------------------ r9059 | bazaarmagetron | 2009-02-26 15:34:14 +0100 (Thu, 26 Feb 2009) | 4 lines author: Manuel Moos Fixed unescaping of what becomes of \_ or, in fact any \<special character>, during escaping. ------------------------------------------------------------------------ r9058 | bazaarmagetron | 2009-02-26 12:54:49 +0100 (Thu, 26 Feb 2009) | 2 lines Manuel Moos: Made clear unknown methods are an internal error. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9056&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/eDisplay.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/tools/tString.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9056 + /armagetronad/branches/0.2.8:8751-8852,8855-9063 Modified: armagetronad/trunk/armagetronad/src/engine/eDisplay.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eDisplay.cpp 2009-02-27 09:01:47 UTC (rev 9063) +++ armagetronad/trunk/armagetronad/src/engine/eDisplay.cpp 2009-02-27 10:53:19 UTC (rev 9064) @@ -44,6 +44,7 @@ #include "rFont.h" #include "eTimer.h" #include "eCamera.h" +#include "eSensor.h" #include "rScreen.h" #include "rRender.h" #include "eWall.h" @@ -200,69 +201,76 @@ -eWall *displayed_eWall=0; - -void draw_eWall(eGrid* grid, int v,int i, REAL& zNear, eCamera const * cam) +class eZNearSensor: public eSensor { - if (i<se_wallsVisible[v].Len()) +public: + static bool AdaptZNear( REAL & zNear, eWall const * wall, eCamera const * camera ) { - eWallView *view=se_wallsVisible[v](i); -#ifdef DEBUG - if (view->Value()<=z) + REAL len = wall->Len(); + if ( len > .01) { -#endif - displayed_eWall = view->Belongs(); - REAL len = displayed_eWall->Len(); - if ( len > .01) + REAL zDist = ::z - wall->Height(); + if ( zDist < zNear ) { - REAL zDist = z - displayed_eWall->Height(); - if ( zDist < zNear ) + const eCoord& camPos = camera->CameraPos(); + const eCoord& camDir = camera->CameraDir(); + eCoord base = wall->EndPoint(0); + eCoord end = wall->EndPoint(1); + + if ( eCoord::F( base-camPos, camDir ) > 0.01f || eCoord::F( end-camPos, camDir ) > 0.01f ) { - const eCoord& camPos = cam->CameraPos(); - const eCoord& camDir = cam->CameraDir(); - eCoord base = displayed_eWall->EndPoint(0); - eCoord end = displayed_eWall->EndPoint(1); - - if ( eCoord::F( base-camPos, camDir ) > 0.01f || eCoord::F( end-camPos, camDir ) > 0.01f ) + eCoord dirNorm = end - base; + dirNorm.Normalize(); + eCoord camRelative = ( camPos - base ).Turn( dirNorm.Conj() ); + REAL dist = fabs( camRelative.y ); + if ( camRelative.x < 0 ) { - eCoord dirNorm = end - base; - dirNorm.Normalize(); - eCoord camRelative = ( camPos - base ).Turn( dirNorm.Conj() ); - REAL dist = fabs( camRelative.y ); - if ( camRelative.x < 0 ) - { - dist -= camRelative.x; - } - if ( camRelative.x > len ) - { - dist += camRelative.x - len; - } - if ( dist < zDist ) - { - dist = zDist; - } - // TODO: better criterion for ingoring of walls - if ( dist < zNear && dist > 0.001f ) - { - zNear = dist; - } + dist -= camRelative.x; } + if ( camRelative.x > len ) + { + dist += camRelative.x - len; + } + if ( dist < zDist ) + { + dist = zDist; + } + // TODO: better criterion for ingoring of walls + if ( dist < zNear && dist > 0.001f ) + { + zNear = dist; + return true; + } } - - displayed_eWall->Render(cam); } - displayed_eWall=0; + } - draw_eWall(grid,v,tHeapBase::UpperL(i),zNear,cam); - draw_eWall(grid,v,tHeapBase::UpperR(i),zNear,cam); + return false; + } -#ifdef DEBUG + eZNearSensor(eGameObject *o,const eCoord &start,const eCoord &d, REAL & zNear, eCamera const * camera ) + :eSensor( o, start, d ), zNear_( zNear ), camera_( camera ) + {} + + void Detect() + { + detect( zNear_ * 2 ); + } + + // called when passing an edge + void PassEdge( const eWall * w, REAL time, REAL, int) + { + // adapt zNear and be done + if( AdaptZNear( zNear_, w, camera_ ) ) + { + throw eSensorFinished(); } -#endif } -} +private: + REAL & zNear_; // the reference to the near clipping plane value + eCamera const * camera_; // the camera currently in use +}; - void paint_sr_lowerSky(eGrid *grid, int viewer,bool sr_upperSky, eCamera* cam ){ TexMatrix(); glLoadIdentity(); @@ -508,6 +516,22 @@ sr_CheckGLError(); if (eWalls){ + // send out sensors to find walls close to the camera + if ( z < 3 ) + { + eCamera const * camera = cameras(viewer); + if( camera ) + { + eCoord dir = camera->CameraDir().Turn(1,.5); + for(int i = 8; i > 0; --i) + { + dir = dir.Turn(sqrt(.5),sqrt(.5)); + eZNearSensor s( camera->Center(), camPos, dir, zNear, camera ); + s.Detect(); + } + } + } + // glDisable(GL_CULL_FACE); // draw_eWall(this,viewer,0,zNear,cam); Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-02-27 09:01:47 UTC (rev 9063) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-02-27 10:53:19 UTC (rev 9064) @@ -275,6 +275,9 @@ c = ' '; } filter.put(c); + + // don't chain escapes + c = 'x'; } else if ( c == '%' ) { @@ -496,7 +499,7 @@ if ( request.method != "md5" && request.method != "bmd5" ) { - con << "Unknown password scrambling method requested."; + con << "INTERNAL ERROR: Unknown password scrambling method requested."; answer.aborted = true; return; } @@ -4970,14 +4973,23 @@ class eReserveNick: public eUserConfig< tString > { #ifdef DEBUG - static void TestEscape() +#ifdef KRAWALL_SERVER + static void TestEscape( char const * t ) { -#ifdef KRAWALL_SERVER - tString test("ä@%bla:"); + tString test(t); tString esc(se_EscapeName( test, false ).c_str()); tString rev(se_UnEscapeName( esc ).c_str()); tASSERT( test == rev ); + } #endif + + static void TestEscape() + { +#ifdef KRAWALL_SERVER + TestEscape("ä@%bla:"); + TestEscape("a b@%bl%:"); + TestEscape("a\\_b@%bl%:"); +#endif } #endif public: Modified: armagetronad/trunk/armagetronad/src/tools/tString.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tString.cpp 2009-02-27 09:01:47 UTC (rev 9063) +++ armagetronad/trunk/armagetronad/src/tools/tString.cpp 2009-02-27 10:53:19 UTC (rev 9064) @@ -73,6 +73,7 @@ case '"': case ' ': case '\'': + case '\\': case '\n': // include quoting character as literal return true; @@ -128,29 +129,26 @@ c = s.get(); } + bool lastEscape = false; while((quoted || !( isblank(c) || c == '\n' || c == '\r' ) ) && s.good() && !s.eof()){ - x += c; - c=s.get(); - // read and interpret escape sequences - if ( !st_ReadEscapeSequence( c, s) ) + bool thisEscape = false; + if ( !lastEscape && !( thisEscape = st_ReadEscapeSequence( c, s ) ) && quoted && c == quoteChar ) { - // interpret special characters - if ( quoted && c == quoteChar ) - { - // this marks the end of a quoted string; abort. - c = s.get(); - break; - } + // no escape, this string is quoted and the current character is an end quote. We're finished. + c = s.get(); + break; } - else if ( isblank( c ) ) + else { - // include escaped spaces + // append escaped or regular character x += c; c=s.get(); } + // lastEscape = thisEscape; } + s.putback(c); return s; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-02 13:43:21
|
Revision: 9095 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9095&view=rev Author: z-man Date: 2009-03-02 13:40:05 +0000 (Mon, 02 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9063 to 9094: ------------------------------------------------------------------------ r9094 | bazaarmagetron | 2009-03-02 13:06:57 +0100 (Mon, 02 Mar 2009) | 4 lines author: Manuel Moos Reduced kill timeout in case cycle simulation gets stuck. Fixed cycles getting stuck because of tsTodo floating point rounding. ------------------------------------------------------------------------ r9093 | bazaarmagetron | 2009-03-02 12:51:09 +0100 (Mon, 02 Mar 2009) | 2 lines Manuel Moos: Forgot to update NEWS. ------------------------------------------------------------------------ r9071 | bazaarmagetron | 2009-02-27 15:10:30 +0100 (Fri, 27 Feb 2009) | 2 lines Manuel Moos: Injected Armatrator access level between Team Leader and Moderator and gave it IP and ID read rights by default. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9063&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/tools/tConfiguration.h armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9063 + /armagetronad/branches/0.2.8:8751-8852,8855-9094 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/NEWS 2009-03-02 13:40:05 UTC (rev 9095) @@ -90,6 +90,7 @@ Changes since 0.2.8.3_beta1: ============================ +- Made ready for Armatrators - Authentication routines now use utf8 as forward- compatibility with trunk. Previously, non-ASCII usernames simply didn't work at all. - Better lag slide protection: clients no longer get confused when Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2009-03-02 13:40:05 UTC (rev 9095) @@ -2717,6 +2717,7 @@ config_accesslevel_0 Besitzer config_accesslevel_1 Administrator config_accesslevel_2 Moderator +config_accesslevel_5 Armatrator config_accesslevel_7 Team-Anf\xFChrer config_accesslevel_8 Teammitglied config_accesslevel_12 Lokaler Benutzer Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-02 13:40:05 UTC (rev 9095) @@ -2789,6 +2789,7 @@ config_accesslevel_0 Owner config_accesslevel_1 Administrator config_accesslevel_2 Moderator +config_accesslevel_5 Armatrator config_accesslevel_7 Team Leader config_accesslevel_8 Team Member config_accesslevel_12 Local User Modified: armagetronad/trunk/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/language/english_base_notranslate.txt 2009-03-02 13:40:05 UTC (rev 9095) @@ -253,8 +253,7 @@ config_accesslevel_3 Moderator-2 config_accesslevel_4 Moderator-3 -config_accesslevel_5 Moderator-4 -config_accesslevel_6 Moderator-5 +config_accesslevel_6 Armatrator-2 config_accesslevel_9 Recruit config_accesslevel_10 Recruit-1 config_accesslevel_11 Recruit-2 Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-03-02 13:40:05 UTC (rev 9095) @@ -767,7 +767,7 @@ static tAccessLevelSetter se_hideAccessLevelOfConfLevel( se_hideAccessLevelOfConf, tAccessLevel_Owner ); // but they are only hidden to players with a lower access level than this -static tAccessLevel se_hideAccessLevelTo = tAccessLevel_Moderator; +static tAccessLevel se_hideAccessLevelTo = tAccessLevel_Armatrator; static tSettingItem< tAccessLevel > se_hideAccessLevelToConf( "ACCESS_LEVEL_HIDE_TO", se_hideAccessLevelTo ); static tAccessLevelSetter se_hideAccessLevelToConfLevel( se_hideAccessLevelToConf, tAccessLevel_Owner ); @@ -2695,7 +2695,7 @@ static tAccessLevelSetter se_spamAccessLevelConfLevel( se_spamAccessLevelConf, tAccessLevel_Owner ); // access level a user has to have to get IP addresses in /players output -static tAccessLevel se_ipAccessLevel = tAccessLevel_Moderator; +static tAccessLevel se_ipAccessLevel = tAccessLevel_Armatrator; static tSettingItem< tAccessLevel > se_ipAccessLevelConf( "ACCESS_LEVEL_IPS", se_ipAccessLevel ); static tAccessLevelSetter se_ipAccessLevelConfLevel( se_ipAccessLevelConf, tAccessLevel_Owner ); Modified: armagetronad/trunk/armagetronad/src/tools/tConfiguration.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tConfiguration.h 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/src/tools/tConfiguration.h 2009-03-02 13:40:05 UTC (rev 9095) @@ -49,7 +49,7 @@ tAccessLevel_Moderator = 2, // one of the moderators tAccessLevel_3 = 3, // reserved tAccessLevel_4 = 4, // reserved - tAccessLevel_5 = 5, // reserved + tAccessLevel_Armatrator = 5, // reserved tAccessLevel_6 = 6, // reserved tAccessLevel_TeamLeader = 7, // a team leader tAccessLevel_TeamMember = 8, // a team member Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-03-02 13:40:05 UTC (rev 9095) @@ -2819,7 +2819,7 @@ // check whether simulation has fallen too far behind the requested time #ifdef DEDICATED - if ( Alive() && currentTime > lastTime + 4 * Lag() + 10 ) + if ( Alive() && currentTime > lastTime + Lag() + 1 ) { sn_ConsoleOut( "0xff7777Admin : 0xffff77BUG had to kill a cycle because it lagged behind in the simulation. Probably the invulnerability bug. Investigate!\n" ); st_Breakpoint(); Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2009-03-02 12:06:57 UTC (rev 9094) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2009-03-02 13:40:05 UTC (rev 9095) @@ -2434,8 +2434,6 @@ { REAL lastTimeBack = lastTime; bool ret = TimestepCore( lastTime + tsTodo, false ); - if ( lastTime <= lastTimeBack ) - return ret; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-02 17:51:16
|
Revision: 9103 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9103&view=rev Author: z-man Date: 2009-03-02 17:51:12 +0000 (Mon, 02 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9094 to 9102: ------------------------------------------------------------------------ r9101 | bazaarmagetron | 2009-03-02 17:45:56 +0100 (Mon, 02 Mar 2009) | 5 lines author: Manuel Moos Added "quit to game selection menu" state to uMenu::quickexit. Using it to react on timeouts while a menu is getting displayed and to properly abort pending server induced fullscreen messages. ------------------------------------------------------------------------ r9100 | bazaarmagetron | 2009-03-02 17:44:28 +0100 (Mon, 02 Mar 2009) | 2 lines Manuel Moos: Fixed exit cleanup failure (leading to crash at least on trunk) on timeouts. ------------------------------------------------------------------------ r9099 | bazaarmagetron | 2009-03-02 15:29:59 +0100 (Mon, 02 Mar 2009) | 2 lines Manuel Moos: Removed unused variables. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9094&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/ui/uInputQueue.cpp armagetronad/trunk/armagetronad/src/ui/uMenu.cpp armagetronad/trunk/armagetronad/src/ui/uMenu.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9094 + /armagetronad/branches/0.2.8:8751-8852,8855-9102 Modified: armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp 2009-03-02 16:57:22 UTC (rev 9102) +++ armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp 2009-03-02 17:51:12 UTC (rev 9103) @@ -429,7 +429,7 @@ tRecorder::Record("END"); st_SaveConfig(); - uMenu::quickexit=true; + uMenu::quickexit=uMenu::QuickExit_Total; return false; } Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2009-03-02 16:57:22 UTC (rev 9102) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2009-03-02 17:51:12 UTC (rev 9103) @@ -2432,8 +2432,7 @@ // core simulation if ( tsTodo > EPS ) { - REAL lastTimeBack = lastTime; - bool ret = TimestepCore( lastTime + tsTodo, false ); + TimestepCore( lastTime + tsTodo, false ); } else { Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-03-02 16:57:22 UTC (rev 9102) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-03-02 17:51:12 UTC (rev 9103) @@ -1548,6 +1548,17 @@ } } +static void sg_StopQuickExit() +{ + st_DoToDo(); + + // stop quick exit to game level + if ( uMenu::quickexit == uMenu::QuickExit_Game ) + { + uMenu::quickexit = uMenu::QuickExit_Off; + } +} + // return code: false if there was an error or abort bool ConnectToServerCore(nServerInfoBase *server) { @@ -1644,7 +1655,16 @@ bool ret = true; - if (!sg_RequestedDisconnection && !uMenu::quickexit) + sn_SetNetState(nSTANDALONE); + + sg_currentGame = NULL; + nNetObject::ClearAll(); + ePlayerNetID::ClearAll(); + + if (!sg_RequestedDisconnection && uMenu::quickexit != uMenu::QuickExit_Total ) + { + sg_StopQuickExit(); + switch (sn_GetLastError()) { case nOK: @@ -1656,16 +1676,11 @@ "$network_message_lostconn_inter", 20); break; } + } sr_con.autoDisplayAtNewline=false; sr_con.fullscreen=false; - sn_SetNetState(nSTANDALONE); - - sg_currentGame = NULL; - nNetObject::ClearAll(); - ePlayerNetID::ClearAll(); - sr_textOut=to; return ret; @@ -1673,6 +1688,8 @@ void ConnectToServer(nServerInfoBase *server) { + bool to = sr_textOut; + bool okToRedirect = ConnectToServerCore( server ); // REAL redirections = 0; @@ -1711,6 +1728,19 @@ redirections *= 1/(1 + dt * maxRedirections * timeout ); */ } + + sr_con.autoDisplayAtNewline=false; + sr_con.fullscreen=false; + + sn_SetNetState(nSTANDALONE); + + sg_currentGame = NULL; + nNetObject::ClearAll(); + ePlayerNetID::ClearAll(); + + sr_textOut=to; + + sg_StopQuickExit(); } static tConfItem<int> mor("MAX_OUT_RATE",sn_maxRateOut); @@ -2458,7 +2488,7 @@ if ( tRecorder::Playback("END") ) { tRecorder::Record("END"); - uMenu::quickexit=true; + uMenu::quickexit=uMenu::QuickExit_Total; } #ifdef DEDICATED @@ -4299,6 +4329,9 @@ static void sg_fullscreenMessageHandler( Game::FullscreenMessage const & message, nSenderInfo const & sender ) { if (sn_GetNetState()!=nSERVER){ + // to test timeouts during fullscreen message display: + // m.Send( m.SenderID() ); + sg_fullscreenMessageTimeout = 60; sg_fullscreenMessageTitle = message.title(); @@ -4437,6 +4470,21 @@ sg_FullscreenMessage( sg_greetingTitle, sg_greeting, sg_greetingTimeout, nCallbackLoginLogout::User() ); } } + + // flag indicating wether we were in client bode + static bool wasClient = false; + + // lost connection to server/disconnected + if( wasClient && !nCallbackLoginLogout::Login() && sn_GetNetState() == nSTANDALONE ) + { + // drop all menu activity + if ( !uMenu::quickexit ) + { + uMenu::quickexit = uMenu::QuickExit_Game; + } + } + + wasClient = nCallbackLoginLogout::Login() && nCallbackLoginLogout::User() == 0; } static nCallbackLoginLogout lc(LoginCallback); Modified: armagetronad/trunk/armagetronad/src/ui/uInputQueue.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uInputQueue.cpp 2009-03-02 16:57:22 UTC (rev 9102) +++ armagetronad/trunk/armagetronad/src/ui/uInputQueue.cpp 2009-03-02 17:51:12 UTC (rev 9103) @@ -263,7 +263,7 @@ if ( tRecorder::Playback(su_end) ) { tRecorder::Record(su_end); - uMenu::quickexit=true; + uMenu::quickexit=uMenu::QuickExit_Total; } // try to fetch event from playback Modified: armagetronad/trunk/armagetronad/src/ui/uMenu.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uMenu.cpp 2009-03-02 16:57:22 UTC (rev 9102) +++ armagetronad/trunk/armagetronad/src/ui/uMenu.cpp 2009-03-02 17:51:12 UTC (rev 9103) @@ -67,7 +67,7 @@ FUNCPTR uMenu::idle(NULL); bool uMenu::wrap=true; -bool uMenu::quickexit=false; +uMenu::QuickExit uMenu::quickexit=uMenu::QuickExit_Off; bool uMenu::exitToMain=false; // ***************************************************** Modified: armagetronad/trunk/armagetronad/src/ui/uMenu.h =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uMenu.h 2009-03-02 16:57:22 UTC (rev 9102) +++ armagetronad/trunk/armagetronad/src/ui/uMenu.h 2009-03-02 17:51:12 UTC (rev 9103) @@ -67,7 +67,16 @@ REAL YPos(int num); public: static bool wrap; - static bool quickexit; + + // different quick exit types + enum QuickExit + { + QuickExit_Off = 0, // no quick exit, keep going + QuickExit_Game = 1, // quit to game selection menu + QuickExit_Total = 2 // quit the program + }; + + static QuickExit quickexit; static bool exitToMain; tOutput title; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-02 19:26:34
|
Revision: 9105 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9105&view=rev Author: z-man Date: 2009-03-02 19:26:24 +0000 (Mon, 02 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9102 to 9104: ------------------------------------------------------------------------ r9104 | z-man | 2009-03-02 20:10:58 +0100 (Mon, 02 Mar 2009) | 2 lines Adapted to uMenu::quickexit changes. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9102&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/macosx/SDLMain.mm Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9102 + /armagetronad/branches/0.2.8:8751-8852,8855-9104 Modified: armagetronad/trunk/armagetronad/src/macosx/SDLMain.mm =================================================================== --- armagetronad/trunk/armagetronad/src/macosx/SDLMain.mm 2009-03-02 19:10:58 UTC (rev 9104) +++ armagetronad/trunk/armagetronad/src/macosx/SDLMain.mm 2009-03-02 19:26:24 UTC (rev 9105) @@ -44,7 +44,7 @@ - (void)terminate:(id)sender { st_SaveConfig(); - uMenu::quickexit=true; + uMenu::quickexit=uMenu::QuickExit_Total; } @end @@ -82,7 +82,7 @@ - (void)quit:(id)sender { st_SaveConfig(); - uMenu::quickexit=true; + uMenu::quickexit=uMenu::QuickExit_Total; } /* Fix menu to contain the real app name instead of "SDL App" */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-03 14:47:03
|
Revision: 9109 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9109&view=rev Author: z-man Date: 2009-03-03 14:46:54 +0000 (Tue, 03 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9104 to 9108: ------------------------------------------------------------------------ r9108 | bazaarmagetron | 2009-03-03 15:35:34 +0100 (Tue, 03 Mar 2009) | 6 lines author: Manuel Moos In debug mode, no longer check for desktop dimensions unless desktop fullscreen mode is selected. This avoids the annoying flickering and makes the window find an actually useful place on the desktop instead of jumping to the top left corner. ------------------------------------------------------------------------ r9106 | bazaarmagetron | 2009-03-03 05:56:47 +0100 (Tue, 03 Mar 2009) | 1 line Daniel Lee Harple: more quick exit changes ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9104&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/render/rScreen.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9104 + /armagetronad/branches/0.2.8:8751-8852,8855-9108 Modified: armagetronad/trunk/armagetronad/src/render/rScreen.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2009-03-03 14:35:34 UTC (rev 9108) +++ armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2009-03-03 14:46:54 UTC (rev 9109) @@ -650,7 +650,11 @@ sr_desktopWidth = 640; sr_desktopHeight = 480; - if ( sr_DesktopScreensizeSupported() ) + if ( sr_DesktopScreensizeSupported() +#ifdef DEBUG + && currentScreensetting.fullscreen && sr_screenWidth + sr_screenHeight == 0 +#endif + ) { sr_screen=SDL_SetVideoMode( 0, 0, CD, attrib ); if ( sr_screen ) Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-03-03 14:35:34 UTC (rev 9108) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-03-03 14:46:54 UTC (rev 9109) @@ -1470,7 +1470,7 @@ { sg_Timestamp(); con << "Server exiting due to DEDICATED_IDLE after " << (tSysTimeFloat() - startTime)/3600 << " hours.\n"; - uMenu::quickexit = true; + uMenu::quickexit = uMenu::QuickExit_Total; } } cp(); @@ -1977,7 +1977,7 @@ // mark end of recording tRecorder::Playback("END"); tRecorder::Record("END"); - uMenu::quickexit = true; + uMenu::quickexit = uMenu::QuickExit_Total; } static tConfItemFunc quit_conf("QUIT",&Quit_conf); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-04 16:57:10
|
Revision: 9125 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9125&view=rev Author: z-man Date: 2009-03-04 16:57:04 +0000 (Wed, 04 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9108 to 9116: ------------------------------------------------------------------------ r9114 | bazaarmagetron | 2009-03-04 15:49:51 +0100 (Wed, 04 Mar 2009) | 2 lines Manuel Moos: Fixed comment typos. ------------------------------------------------------------------------ r9113 | bazaarmagetron | 2009-03-04 13:23:52 +0100 (Wed, 04 Mar 2009) | 2 lines Manuel Moos: Updated translation and clarified original. ------------------------------------------------------------------------ r9112 | bazaarmagetron | 2009-03-04 13:16:22 +0100 (Wed, 04 Mar 2009) | 2 lines Manuel Moos: Added LAG_FREQUENCY_THRESHOLD to better deal with lag clusterbombs. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9108&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/eLagCompensation.cpp armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9108 + /armagetronad/branches/0.2.8:8751-8852,8855-9116 Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2009-03-04 16:56:28 UTC (rev 9124) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2009-03-04 16:57:04 UTC (rev 9125) @@ -759,7 +759,7 @@ # These two variables control how fast the lag mearures go back to reporting "Situation # normalized, no measurable lag". The variables give the time for that in seconds. LAG_SLOW_TIME 30.0 -LAG_FAST_TIME 5.0 +LAG_FAST_TIME 2.0 # These two variables determine the impact of lag reports from the server on the two # measurers. The impact is full on the fast measurer and lower on the slow measurer, Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2009-03-04 16:56:28 UTC (rev 9124) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2009-03-04 16:57:04 UTC (rev 9125) @@ -450,6 +450,7 @@ lag_offset_legacy_help Auf dem Server w\xE4hlbar: Zusatzkompensation f\xFCr Lag f\xFCr Clients, die den Lag-Kredit-Automatismus noch nicht beherrschen. F\xFCr sehr schlechte Verbindungen. lag_threshold_help Lag in Sekunden, der bei jedem Event nicht korrigiert wird. +lag_frequency_threshold_help Minimale H\xE4ufigkeit an Lag-Events, unterhalb derer der Server den Client nicht informiert. Sollte zwischen 0 und 1 liegen. #******************************************** #******************************************** Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-04 16:56:28 UTC (rev 9124) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-04 16:57:04 UTC (rev 9125) @@ -454,6 +454,7 @@ lag_offset_server_help Extra amount of lag compensation, determined by the server. lag_threshold_help Amount of lag not compensated for on each lag event. +lag_frequency_threshold_help Minimal frequency of lag events (measured against the total number of input events) that needs to be exceeded before the server informs the client. Should be between 0 and 1. #******************************************** #******************************************** Modified: armagetronad/trunk/armagetronad/src/engine/eLagCompensation.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eLagCompensation.cpp 2009-03-04 16:56:28 UTC (rev 9124) +++ armagetronad/trunk/armagetronad/src/engine/eLagCompensation.cpp 2009-03-04 16:57:04 UTC (rev 9125) @@ -43,7 +43,7 @@ // client side settings static REAL se_maxLagSpeedup=.2; // maximal speed increase of timer while lag is compensated for static REAL se_lagSlowDecayTime=30.0; // timescale the slow lag measurement decays on -static REAL se_lagFastDecayTime=5.0; // timescale the fast lag measurement decays on +static REAL se_lagFastDecayTime=2.0; // timescale the fast lag measurement decays on static REAL se_lagSlowWeight=.2f; // extra weight lag reports from the server influence the slow lag compensation with static REAL se_lagFastWeight=1.0f; // extra weight lag reports from the server influence the fast lag compensation with @@ -159,11 +159,15 @@ // timescale lag credit is restored on static REAL se_lagCreditTime = 600.0f; +// lag frequency not reported back to the client +static REAL se_lagFrequency = .2f; + static tSettingItem< REAL > se_lagCreditConf( "LAG_CREDIT", se_lagCredit ); static tSettingItem< REAL > se_lagCreditSingleConf( "LAG_CREDIT_SINGLE", se_lagCreditSingle ); static tSettingItem< REAL > se_lagCreditVarianceConf( "LAG_CREDIT_VARIANCE", se_lagCreditVariance ); static tSettingItem< REAL > se_lagCreditSweetSpotConf( "LAG_SWEET_SPOT", se_lagCreditSweetSpot ); static tSettingItem< REAL > se_lagCreditTimeConf( "LAG_CREDIT_TIME", se_lagCreditTime ); +static tSettingItem< REAL > se_lagFrequencyConf( "LAG_FREQUENCY_THRESHOLD", se_lagFrequency ); // threshold static REAL se_lagThreshold = 0.0f; @@ -201,6 +205,8 @@ creditUsed_ = se_lagCreditSweetSpot * Credit(); lastTime_ = lastLag_ = tSysTimeFloat(); client_ = 0; + lagRatio_.Reset(); + lagRatio_.Add(0,5); } void SetClient( int client ) @@ -216,6 +222,34 @@ if ( ! se_clientLagCompensation.Supported( client_ ) ) return; + // measure lag ratio + lagRatio_.Timestep(.1); + if ( lag < 0 ) + { + lagRatio_.Add(0); + return; + } + lagRatio_.Add(1); + + // cull overly big values of lag frequency cutoff + if( se_lagFrequency >= 1 ) + { + se_lagFrequency = 0; + } + + // fetch lag ratio + REAL ratio = lagRatio_.GetAverage(); + REAL ratioFactor = ( ratio - se_lagFrequency )/(1-se_lagFrequency); + if ( ratioFactor < 0 ) + { + // nothing to report + return; + } + tASSERT( ratioFactor <= 1 ); + + // scale down lag + lag *= ratioFactor; + // clamp lag = lag > se_lagCreditSingle ? se_lagCreditSingle : lag; @@ -325,6 +359,7 @@ static void Balance(); private: + nAverager lagRatio_; // !< ratio of lagged client input vs. non-lagged client input REAL creditUsed_; //!< the used lag credit double lastTime_; //!< the last time lag credit was calculated double lastLag_; //!< the last time lag was reported to the client Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-03-04 16:56:28 UTC (rev 9124) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-03-04 16:57:04 UTC (rev 9125) @@ -1525,7 +1525,7 @@ REAL lag = simTime - dest->gameTime; // the real lag REAL lagOffset = simTime - lastTime; // difference between real lag and practical lag (what we need to compensate) - if ( lag > 0 && sn_GetNetState() == nSERVER ) + if ( sn_GetNetState() == nSERVER ) { eLag::Report( Owner(), lag ); if ( currentWall && currentWall->Wall() && rubberSpeedFactor >= 1-EPS ) Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-03-04 16:56:28 UTC (rev 9124) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-03-04 16:57:04 UTC (rev 9125) @@ -3312,7 +3312,7 @@ { static int lastTeams = 0; // the number of teams when this was last called. - // check for relevent status change, form 0 to 1 or 1 to 2 or 2 to 1 or 1 to 0 human teams. + // check for relevant status change, from 0 to 1 or 1 to 2 or 2 to 1 or 1 to 0 human teams. int humanTeamsClamp = human_teams; if ( humanTeamsClamp > 2 ) humanTeamsClamp = 2; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-11 07:40:42
|
Revision: 9144 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9144&view=rev Author: z-man Date: 2009-03-11 07:40:40 +0000 (Wed, 11 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9116 to 9143: ------------------------------------------------------------------------ r9143 | bazaarmagetron | 2009-03-11 08:34:31 +0100 (Wed, 11 Mar 2009) | 5 lines author: Manuel Moos Removed obsolete (and wrongly calculated) goneRatio variable. This fixes sensor collision reports; they would sometimes falsely report a temporary wall behind a gridded wall as the first collision. ------------------------------------------------------------------------ r9142 | bazaarmagetron | 2009-03-11 08:33:47 +0100 (Wed, 11 Mar 2009) | 2 lines Manuel Moos: Made it possible to switch viewports in four player mode. ------------------------------------------------------------------------ r9141 | bazaarmagetron | 2009-03-11 08:33:04 +0100 (Wed, 11 Mar 2009) | 2 lines Manuel Moos: Also renamed SilenceAll variable intenally. ------------------------------------------------------------------------ r9140 | bazaarmagetron | 2009-03-11 08:32:14 +0100 (Wed, 11 Mar 2009) | 2 lines Manuel Moos: renamed SILENCE_ALL -> SILENCE_DEFAULT. ------------------------------------------------------------------------ r9139 | bazaarmagetron | 2009-03-11 08:30:38 +0100 (Wed, 11 Mar 2009) | 2 lines Manuel Moos: Reverting last revision for redunancy. ------------------------------------------------------------------------ r9136 | bazaarmagetron | 2009-03-07 22:09:36 +0100 (Sat, 07 Mar 2009) | 2 lines Daniel Lee Harple: SILENCE_ALL can be used on the client to ignore chat from all players locally. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9116&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/french.txt armagetronad/trunk/armagetronad/language/spanish.txt armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/render/rViewport.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9116 + /armagetronad/branches/0.2.8:8751-8852,8855-9143 Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2009-03-11 07:40:40 UTC (rev 9144) @@ -475,7 +475,7 @@ FILTER_NAME_MIDDLE 1 # Filter excess whitespace and other junk from the middle of player names. FILTER_COLOR_SERVER_NAMES 0 # Filter color codes from server names in the server browser. -SILENCE_ALL 0 # silence new players by default? +SILENCE_DEFAULT 0 # silence new players by default? ENABLE_CHAT 1 # allow public messages? # ladder constants (outdated) Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2009-03-11 07:40:40 UTC (rev 9144) @@ -399,7 +399,7 @@ spam_maxlen_help Maximall\xE4nge f\xFCr die Chat-Nachrichten. spam_autokick_help Spamer-Wert, bei dem der Spieler automatisch vom Server geworfen wird. spam_autokick_count_help Zahl der Spam-Warnungen, bevor ein Spieler gekickt wird. -silence_all_help Wenn dieser Wert auf 1 gesetzt ist, dann wird aller Chat unterbunden. +silence_default_help Wenn dieser Wert auf 1 gesetzt ist, dann werden alle neuen Spieler stummgeschaltet. enable_chat_help Wenn dies auf 0 gesetzt wird, dann werden alle \xF6ffentlichen Chat-Nachrichten unterdr\xFCckt (Auf dem Server sind Nachrichten von Administratoren und /msg und /team-Nachrichten Ausnahmen). allow_team_change_help Nur wenn dieser Wert 1 ist d\xFCrfen Spieler irh Team beliebig w\xE4hlen. Wenn dieser Wert 0 ist, muss ein Administrator jeden Teamwechsel mit ALLOW_TEAM_CHANGE_PLAYER authorisieren. Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-11 07:40:40 UTC (rev 9144) @@ -404,7 +404,7 @@ spam_maxlen_help Maximal length of chat message. spam_autokick_help Spam score that causes you to get kicked instantly. spam_autokick_count_help Number of spam warnings before a player gets spamkicked. -silence_all_help If set to 1, new players will be silenced +silence_default_help If set to 1, new players will be silenced enable_chat_help If set to 0, all chat will be surpressed (if reset on the server, messages from logged in players and private/team messages are still shown) allow_team_change_help If set to 1, all players can change teams. If set to 0, players can only change teams if they've been specifically allowed to by ALLOW_TEAM_CHANGE_PLAYER Modified: armagetronad/trunk/armagetronad/language/french.txt =================================================================== --- armagetronad/trunk/armagetronad/language/french.txt 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/language/french.txt 2009-03-11 07:40:40 UTC (rev 9144) @@ -253,7 +253,6 @@ spam_penalty_help Nombre de secondes ou un spammeur ne peut plus poster spam_maxlen_help Taille maximale des messages dans le chat spam_autokick_help Les "points de spam", qui vous bannissent d'un serveur instantanement. -silence_all_help Si "1", le chat sera desactive # spam kick messages #******************************************** Modified: armagetronad/trunk/armagetronad/language/spanish.txt =================================================================== --- armagetronad/trunk/armagetronad/language/spanish.txt 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/language/spanish.txt 2009-03-11 07:40:40 UTC (rev 9144) @@ -296,7 +296,6 @@ spam_penalty_help N\xFAmero de segundos de silencio contra un spammer. spam_maxlen_help Longitud m\xE1xima de los mensajes en el chat. spam_autokick_help Los puntos de spam que provocan la expulsi\xF3n inmediata de un servidor. -silence_all_help Si vale 1, todos los mensajes de chat ser\xE1n omitidos. #******************************************** #******************************************** Modified: armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp 2009-03-11 07:40:40 UTC (rev 9144) @@ -242,11 +242,6 @@ // start iterator for collisions with temporary walls eTempEdgeMap::const_iterator currentTempCollision = tempCollisions.begin(); - // we modify our position while we go; we need to compensate - // all time calculations for that. This variable stores how much - // of the way to the target position we're already gone. - REAL goneRatio = 0; - int timeout = se_moveTimeout; REAL lastDistance = 1E+30; // the distance of pos and stop in the last step @@ -378,11 +373,8 @@ if (best) { - // update the fraction of the full way we've gone so far - goneRatio = goneRatio + ( 1 - goneRatio ) * bestERatio; - // handle stored temp collisions - while ( currentTempCollision != tempCollisions.end() && (*currentTempCollision).first < goneRatio ) + while ( currentTempCollision != tempCollisions.end() && (*currentTempCollision).first < bestERatio ) { eTempEdgePassing const & passing = (*currentTempCollision).second; PassEdge( passing.wall, TIME( (*currentTempCollision).first ), passing.ratio, 0 ); Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-03-11 07:40:40 UTC (rev 9144) @@ -2668,7 +2668,7 @@ static tAccessLevelSetter se_shuffleUpAccessLevelConfLevel( se_shuffleUpAccessLevelConf, tAccessLevel_Owner ); #endif -static bool se_silenceAll = false; // flag indicating whether everyone should be silenced +static bool se_silenceDefault = false; // flag indicating whether new players should be silenced // minimal access level for chat static tAccessLevel se_chatAccessLevel = tAccessLevel_Program; @@ -2703,8 +2703,8 @@ static tSettingItem< tAccessLevel > se_nVerAccessLevelConf( "ACCESS_LEVEL_NVER", se_nVerAccessLevel ); static tAccessLevelSetter se_nVerAccessLevelConfLevel( se_nVerAccessLevelConf, tAccessLevel_Owner ); -static tSettingItem<bool> se_silAll("SILENCE_ALL", - se_silenceAll); +static tSettingItem<bool> se_silAll("SILENCE_DEFAULT", + se_silenceDefault); // handles spam checking at the right time eChatSpamTester::eChatSpamTester( ePlayerNetID * p, tString const & say ) @@ -2813,7 +2813,7 @@ } else if ( p->IsSilenced() ) { - if(se_silenceAll) { + if(se_silenceDefault) { // player is silenced, but all players are silenced by default sn_ConsoleOut( tOutput( "$spam_protection_silenced_default" ), p->Owner() ); } else { @@ -4334,7 +4334,7 @@ { this->CreateVoter(); - this->silenced_ = se_silenceAll; + this->silenced_ = se_silenceDefault; this->renameAllowed_ = true; // register with machine and kick user if too many players are present Modified: armagetronad/trunk/armagetronad/src/render/rViewport.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rViewport.cpp 2009-03-11 07:34:31 UTC (rev 9143) +++ armagetronad/trunk/armagetronad/src/render/rViewport.cpp 2009-03-11 07:40:40 UTC (rev 9144) @@ -253,22 +253,48 @@ void rViewport::CorrectViewport(int i, int MAX_PLAYERS){ if (vpb_dir[i]!=1 && vpb_dir[i]!=-1) vpb_dir[i]=1; + + int starta=rViewportConfiguration::s_viewportConfigurations[rViewportConfiguration::next_conf_num]->num_viewports-1; + int startb=rViewportConfiguration::s_viewportConfigurations[ conf_num]->num_viewports-1; + if (starta>startb) + startb=starta; + s_newViewportBelongsToPlayer[i]+=MAX_PLAYERS-vpb_dir[i]; s_newViewportBelongsToPlayer[i]%=MAX_PLAYERS; + + int oldValue = s_newViewportBelongsToPlayer[i]; + bool again; + bool expectChange = false; do{ + // rotate player assignemnt s_newViewportBelongsToPlayer[i]+=MAX_PLAYERS+vpb_dir[i]; s_newViewportBelongsToPlayer[i]%=MAX_PLAYERS; + + // check for conflicts again=false; - int starta=rViewportConfiguration::s_viewportConfigurations[rViewportConfiguration::next_conf_num]->num_viewports-1; - int startb=rViewportConfiguration::s_viewportConfigurations[ conf_num]->num_viewports-1; - if (starta>startb) - startb=starta; for(int j=starta;j>=0;j--) if (i!=j && s_newViewportBelongsToPlayer[i] ==s_newViewportBelongsToPlayer[j]) + { again=true; + expectChange=true; + } } while(again); + + if ( oldValue == s_newViewportBelongsToPlayer[i] && expectChange ) + { + // no change? swap players. + s_newViewportBelongsToPlayer[i]+=MAX_PLAYERS+vpb_dir[i]; + s_newViewportBelongsToPlayer[i]%=MAX_PLAYERS; + + for(int j=starta;j>=0;j--) + if (i!=j && s_newViewportBelongsToPlayer[i] + ==s_newViewportBelongsToPlayer[j]) + { + s_newViewportBelongsToPlayer[j] = oldValue; + } + } } void rViewport::CorrectViewports(int MAX_PLAYERS){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-14 13:39:39
|
Revision: 9151 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9151&view=rev Author: z-man Date: 2009-03-14 13:31:30 +0000 (Sat, 14 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9143 to 9148: ------------------------------------------------------------------------ r9146 | bazaarmagetron | 2009-03-12 12:08:13 +0100 (Thu, 12 Mar 2009) | 2 lines Manuel Moos: Fixed sound muting when switching sound settings. ------------------------------------------------------------------------ r9145 | bazaarmagetron | 2009-03-12 12:07:06 +0100 (Thu, 12 Mar 2009) | 5 lines author: Manuel Moos Sound locks are now handled via locker objects instead of lock()/unlock() pairs for exception safety. Added a couple of locks that should fix random round end crashes. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9143&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/eSound.cpp armagetronad/trunk/armagetronad/src/engine/eSound.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9143 + /armagetronad/branches/0.2.8:8751-8852,8855-9148 Modified: armagetronad/trunk/armagetronad/src/engine/eSound.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eSound.cpp 2009-03-14 02:34:11 UTC (rev 9150) +++ armagetronad/trunk/armagetronad/src/engine/eSound.cpp 2009-03-14 13:31:30 UTC (rev 9151) @@ -243,6 +243,7 @@ o << "$sound_inited"; con << o; #endif + se_SoundPause(false); } } @@ -256,13 +257,11 @@ void se_SoundExit(){ #ifndef DEDICATED - se_SoundLock(); + eSoundLocker locker; eWavData::UnloadAll(); se_SoundPause(true); - se_SoundUnlock(); - if (sound_is_there){ #ifdef DEBUG con << tOutput("$sound_disabling"); @@ -330,7 +329,7 @@ eWavData* eWavData::s_anchor = NULL; eWavData::eWavData(const char * fileName,const char *alternative) - :tListItem<eWavData>(s_anchor),data(NULL),len(0),freeData(false){ + :tListItem<eWavData>(s_anchor),data(NULL),len(0),freeData(false), loadError(false){ //wavs.Add(this,id); filename = fileName; filename_alt = alternative; @@ -341,7 +340,10 @@ //wavs.Add(this,id); if (data) + { + loadError = false; return; + } #ifndef DEDICATED @@ -349,6 +351,8 @@ freeData = false; + loadError = true; + alt=false; const tPath& path = tDirectories::Data(); @@ -439,6 +443,8 @@ con << "at " << spec.freq << " Hz,\n"; con << samples << " samples in " << len << " bytes.\n"; + + loadError = false; #endif #endif #endif @@ -446,9 +452,11 @@ void eWavData::Unload(){ #ifndef DEDICATED + loadError = false; + //wavs.Add(this,id); if (data){ - se_SoundLock(); + eSoundLocker locker; if ( freeData ) { @@ -468,7 +476,6 @@ data=NULL; len=0; - se_SoundUnlock(); } #endif } @@ -495,7 +502,14 @@ #ifndef DEDICATED if ( !data ) { - return false; + if( !loadError ) + { + Load(); + } + if ( !data ) + { + return false; + } } playlen/=4; @@ -743,7 +757,11 @@ goon[i]=true; } -eSoundPlayer::~eSoundPlayer(){} +eSoundPlayer::~eSoundPlayer() +{ + eSoundLocker locker; + se_globalPlayers.Remove(this,id); +} bool eSoundPlayer::Mix(Uint8 *dest, Uint32 len, @@ -783,9 +801,8 @@ void eSoundPlayer::MakeGlobal(){ wav->Load(); - se_SoundLock(); + eSoundLocker locker; se_globalPlayers.Add(this,id); - se_SoundUnlock(); } @@ -867,3 +884,13 @@ // se_SoundPause(false); } +eSoundLocker::eSoundLocker() +{ + se_SoundLock(); +} + +eSoundLocker::~eSoundLocker() +{ + se_SoundUnlock(); +} + Modified: armagetronad/trunk/armagetronad/src/engine/eSound.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eSound.h 2009-03-14 02:34:11 UTC (rev 9150) +++ armagetronad/trunk/armagetronad/src/engine/eSound.h 2009-03-14 13:31:30 UTC (rev 9151) @@ -36,11 +36,20 @@ void se_SoundInit(); void se_SoundExit(); -void se_SoundLock(); -void se_SoundUnlock(); +//void se_SoundLock(); +//void se_SoundUnlock(); void se_SoundPause(bool p); void se_SoundMenu(); +//! locks sound while in existence. +class eSoundLocker +{ + eSoundLocker( eSoundLocker const & ); +public: + eSoundLocker(); + ~eSoundLocker(); +}; + class eAudioPos{ public: Uint32 pos; @@ -59,6 +68,7 @@ tString filename; // the filename tString filename_alt; // the filename bool freeData; // manually free data or use SDL_FreeWAV? + bool loadError; //!< was there an error during loading? static eWavData* s_anchor; // list anchor @@ -92,7 +102,7 @@ }; class eSoundPlayer{ - int id; + int id; // ID in the global players list eWavData *wav; // the sound we should put out eAudioPos pos[MAX_VIEWERS]; // the position of all viewers bool goon[MAX_VIEWERS]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-14 14:16:51
|
Revision: 9154 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9154&view=rev Author: z-man Date: 2009-03-14 14:16:41 +0000 (Sat, 14 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9148 to 9152: ------------------------------------------------------------------------ r9152 | bazaarmagetron | 2009-03-14 14:34:20 +0100 (Sat, 14 Mar 2009) | 2 lines Manuel Moos: Updated for beta3. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9148&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9148 + /armagetronad/branches/0.2.8:8751-8852,8855-9152 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2009-03-14 13:54:23 UTC (rev 9153) +++ armagetronad/trunk/armagetronad/NEWS 2009-03-14 14:16:41 UTC (rev 9154) @@ -87,6 +87,20 @@ - Added support for armagetronad URLs on Mac OS X and KDE -- armagetronad://<server>[:<port>]. port defaults to 4534. - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. +Changes since 0.2.8.3_beta2: +============================ +- Fixed 'invincibility' bug. It really was cycles freezing in time. +- Fixed sporadic sound related crash at round end. +- setting rename: SILENCE_ALL -> SILENCE_DEFAULT. +- Sound no longer gets muted after you switch the sound settings. +- Fixed object collision detection that would sometimes pick a wrong + wall to collide with, most likely the reason behind wrongly accredited + kills. +- Fixed inability to switch viewport assignment in four player mode. +- Better handling of lag clusterbombs. +- Server disconnects now also take immediate effect even when you're + in a menu or chatting. + Changes since 0.2.8.3_beta1: ============================ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <baz...@us...> - 2009-03-19 02:41:57
|
Revision: 9167 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9167&view=rev Author: bazaarmagetron Date: 2009-03-19 02:41:47 +0000 (Thu, 19 Mar 2009) Log Message: ----------- Daniel Lee Harple: Select first menu item. Fixes bug #345172 Modified Paths: -------------- armagetronad/trunk/armagetronad/src/ui/uMenu.cpp Added Paths: ----------- armagetronad/trunk/armagetronad/ Removed Paths: ------------- armagetronad/trunk/armagetronad/ Property changes on: armagetronad/trunk/armagetronad ___________________________________________________________________ Added: bzr:revision-info + timestamp: 2009-03-18 20:46:37.075999975 -0400 committer: Daniel Lee Harple <lee...@gm...> properties: branch-nick: armagetronad bugs: https://launchpad.net/bugs/345172 fixed Added: svn:external + https://svn.sourceforge.net/svnroot/armagetronad/armagetronad/trunk/armagetronad Added: bzr:ancestry:v3-list-QlpoOTFBWSZTWZvbKhsAAAdRgAAQABK6798QIABURMgAAaeoNT1TxT1DQbKaeobXKiyAmlWT7Y5MkdJOtXDtB7w7DOGFBHiOBxaUIu7HQyyQSvxdyRThQkJvbKhs + svn-v3-list-QlpoOTFBWSZTWZvbKhsAAAdRgAAQABK6798QIABURMgAAaeoNT1TxT1DQbKaeobXKiyAmlWT7Y5MkdJOtXDtB7w7DOGFBHiOBxaUIu7HQyyQSvxdyRThQkJvbKhs:7d95bf1e-0414-0410-9756-b78462a59f44:armagetronad%2Ftrunk%2Farmagetronad:8394 svn-v3-list-QlpoOTFBWSZTWZvbKhsAAAdRgAAQABK6798QIABURMgAAaeoNT1TxT1DQbKaeobXKiyAmlWT7Y5MkdJOtXDtB7w7DOGFBHiOBxaUIu7HQyyQSvxdyRThQkJvbKhs:7d95bf1e-0414-0410-9756-b78462a59f44:armagetronad%2Ftrunk%2Farmagetronad:8715 voodoo-20080418152302-ig27bh2y1fbkwp6b z-...@us...-20090105231059-64ezj2pllnvlf5s6 svn-v3-list-QlpoOTFBWSZTWZvbKhsAAAdRgAAQABK6798QIABURMgAAaeoNT1TxT1DQbKaeobXKiyAmlWT7Y5MkdJOtXDtB7w7DOGFBHiOBxaUIu7HQyyQSvxdyRThQkJvbKhs:7d95bf1e-0414-0410-9756-b78462a59f44:armagetronad%2Ftrunk%2Farmagetronad:8754 z-...@us...-20090106232555-c0rb04zb284g544v z-...@us...-20090106235948-tei6dwt5b5ac0s6j z-...@us...-20090107093029-m0zav0ckcpf5b8b7 lee...@gm...-20090107170845-jnex0i7u41wb3ovq da...@da...-20090108021335-ep7dny6f7hrl380e lee...@gm...-20090109021549-p0ce8in8453gexow z-...@us...-20090112094132-31xbu83j367i7qck z-...@us...-20090112102021-296xw0o0kas9uloi z-...@us...-20090112103632-yroyhl5crs8uad38 ma...@mo...-20090112112802-yk5fp7eetdy8ef48 ma...@mo...-20090112115717-sd79x6ml6zk0noom z-...@us...-20090113073533-hmwz45y2gj2ptcpk z-...@us...-20090124222719-p3fjoaua9erewjgf z-...@us...-20090126151939-p4hg3740ce23qlmx z-...@us...-20090118233742-2moj2gn6mqjtixbx lee...@gm...-20090119003538-68wuas2ov54qrsgp z-...@us...-20090127083429-v73fl8hifom6fv53 z-...@us...-20090202121501-gaa4p2bxdp2zrvr3 z-...@us...-20090217081716-0hw7dox1wi418jy0 luk...@da...-20090227094815-rqlqco4svxc53t60 luk...@da...-20090227183814-rcrifwbe2o8qzibo luk...@da...-20090227225619-5rmie8ogt02bzjcp z-...@us...-20090303134609-hn9m546dnz1jaz9v luk...@da...-20090308051357-blm1cmgj8t99bi5a luk...@da...-20090313034139-uk7bhuqme6tpybxb luk...@da...-20090308073040-02o67j6weykaxm48 Added: bzr:file-ids + Added: bzr:revision-id:v3-list-QlpoOTFBWSZTWZvbKhsAAAdRgAAQABK6798QIABURMgAAaeoNT1TxT1DQbKaeobXKiyAmlWT7Y5MkdJOtXDtB7w7DOGFBHiOBxaUIu7HQyyQSvxdyRThQkJvbKhs + 613 z-...@us...-20080211141509-cwbrb6hmtz9313jr 626 z-...@us...-20080214170110-rhfpd874zuogr3cm 627 z-...@us...-20080214170244-1gstsfe9yzyvrx9b 657 z-...@us...-20080301093905-0jwh1zg9srukp8fn 678 wrt...@us...-20080320130546-cr72y7d9q5a8nk7a 679 z-...@us...-20080324202056-eybvkm0gjomywbcq 680 z-...@us...-20080326104303-kpkkrwiw1fioi0rd 681 epsy-20080327213346-setzm7umdzzuk2dm 683 wrt...@us...-20080402122117-54nak33inuca02o9 684 wrt...@us...-20080402122804-2xhc8bgyrjsa09cd 685 wrt...@us...-20080418093840-cxtpql4xw2vsbmyn 686 ep...@fr...-20080418200503-q16s8az3yewn4x7a 687 ep...@fr...-20080419004917-bq4vguy9vpbkmlo3 688 wrt...@us...-20080419185850-ksm1feadrrhqigjb 689 wrt...@us...-20080423170738-zb8v72r0asm7cp52 691 ep...@fr...-20080427145818-212ave5ohdhth4ph 692 epsy46-20080428164518-07b9wsj90rf82c3y 693 epsy46-20080429194430-hq3fd6i1mnz1vrnz 694 ep...@fr...-20080518131839-uik8hj18c55boh3m 696 z-...@us...-20080618212520-e6ov1rb9b9edwt30 697 wrt...@us...-20080708142300-tu6f7ag7ak0yhdrf 698 wrt...@us...-20080727173310-pv1vq0wj01yfwgfl 699 da...@da...-20080824021014-8aacq5gfp7ktxlxz 700 da...@da...-20080824055426-l5dwhb216uteu7ca 701 da...@da...-20080824172432-lvagd99j28hq8uc1 702 da...@da...-20080824225545-ply97boo9jkqtysn 704 ep...@fr...-20081027173216-nh6d92edtwe35j2g 705 ep...@fr...-20081027203505-42bpegw0fyywzyou 706 ep...@fr...-20081027204727-jcx89jukht9ay72r 707 ep...@fr...-20081028180734-62o6e90rf020xzv8 708 ep...@fr...-20081028224044-f3myemuy87v52ilp 709 ep...@fr...-20081110193848-iksu9rmzzi7jb0qq 710 ep...@fr...-20081114212232-i1q12n375bdpl0sp 712 z-...@us...-20081211141049-wbjceadupsfss5ib 713 da...@da...-20081216223143-1hso83uxyagaubg8 716 lee...@gm...-20081220084635-zv6bpm9rar9yufy7 717 lee...@gm...-20081220085046-6rwe6cqmdlffs4rl 718 lee...@gm...-20081220085502-gpad43pu99t1e6po 719 lee...@gm...-20081220092821-q7uj4w92j6a3a7eb 720 lee...@gm...-20081220094339-k3zb139qp87r4b2w 721 lee...@gm...-20081220100858-uap7k5s22tbipzkt 722 lee...@gm...-20081220111203-rhp5p15agx73xi1k 723 lee...@gm...-20081220112757-mjp2yffddjy5s74e 724 lee...@gm...-20081220114653-k2dqt4wiizipbwas 725 lee...@gm...-20081221181637-6d0tfx7sx7syxfb6 726 lee...@gm...-20081221182603-9bkelm9x7aclb0bw 734 lee...@gm...-20081230173103-fmzio9fanap2rybf 735 lee...@gm...-20081230174204-cppkz4sumguhysa9 736 lee...@gm...-20081230174738-mecjttlpyp1i859c 737 lee...@gm...-20081230174816-qmtp2a3q8m52jsn3 738 lee...@gm...-20081230194247-q6oyx6cqfz03b2lr 739 lee...@gm...-20081231202038-odzabc3wmlqzvskt 740 lee...@gm...-20081231203835-nn2kezh1el82dn1q 741 lee...@gm...-20090101022727-myjxnrvqe5e4l1wz 743 da...@da...-20090103170253-cdtppjz8nzwhngst 744 da...@da...-20090103183413-r1852m22og3lh2uc 745 lee...@gm...-20090103212852-mvsergjd4ao1la77 746 da...@da...-20090103231550-6zn9qzo6gpj9kwu8 748 da...@da...-20090105115751-x3y9oui4xvt43crj 749 da...@da...-20090105131244-nljbq3qp4hp7lg07 750 da...@da...-20090105192648-inoxhljmqqe3dgw7 751 da...@da...-20090105192806-vhrs9hj8nr4lrdp0 752 da...@da...-20090106194428-nwwwyljr8wn3pwq1 753 da...@da...-20090106194753-82zu5xfqfzbnk9k9 754 da...@da...-20090106202104-5z9836ych2di2jlo 755 da...@da...-20090106234335-aolp3kr0gasjmbri 756 da...@da...-20090106234811-p3el5s40j0upvyql 757 da...@da...-20090107021107-5kbemotp1sco4ncp 758 da...@da...-20090107051447-8ncvyikf3aadgz3a 759 da...@da...-20090107071255-jhqi9p9212levb60 760 z-...@us...-20090107105902-l6x07af4hr2py066 761 z-...@us...-20090107111842-2o0fqp72oxz55jri 762 z-...@us...-20090107113141-mo1g3b0jgzhyj001 763 z-...@us...-20090107113517-dsyf4f6jroj6dr9e 764 z-...@us...-20090107114151-9n5m6mvsq9nh33p1 770 z-...@us...-20090111232523-lnab7ymhxk94pdh1 771 z-...@us...-20090111232619-ukmmx5gfarcoiipi 772 z-...@us...-20090111233014-dazt93cibmg56v3i 774 z-...@us...-20090112103858-psygqhxdmdaer8iz 775 z-...@us...-20090112104018-jik2mqnc14fg5bdk 776 z-...@us...-20090112104123-hvkx0sxhs9wz706b 777 z-...@us...-20090112114514-v1u04w5v83ai75lz 778 z-...@us...-20090112115926-ltqy35euxny3n7zc 779 lee...@gm...-20090112192634-vs5qzckrwxphs3k5 780 lee...@gm...-20090112194338-2zfak9nrxm961yh5 781 lee...@gm...-20090112194729-dlonazcnq20npwqk 782 lee...@gm...-20090112211701-prgmu1fh3p33tz1j 783 lee...@gm...-20090112212513-ojbb1zz98kk1mmzf 784 lee...@gm...-20090112214315-r8akrgn38um8llfc 785 z-...@us...-20090115005714-uscid6wcwnjqzcht 787 z-...@us...-20090116155610-s9rvqacdyl4uu2ym 788 z-...@us...-20090116160116-47he0b9dhkvzfo8e 789 z-...@us...-20090116160130-yu0foyldpp0w651o 794 z-...@us...-20090119152329-7zjbhlxicmzrs3st 795 z-...@us...-20090119152406-eh33pwel5c1ev3tn 796 z-...@us...-20090124222920-5j301djumy6o30js 797 lee...@gm...-20090125161331-yk5t26dos9w7vqh3 798 lee...@gm...-20090125161412-uqkzofyzrzbw5fku 799 z-...@us...-20090125215052-nlr7n742el563xdo 801 z-...@us...-20090126114408-qusodq3le7x4cxmu 802 z-...@us...-20090126114433-hel0im4ncfqun48y 805 z-...@us...-20090126205856-miq23b488w0ybg08 806 z-...@us...-20090126213956-zvazq7x917mgwgcx 807 z-...@us...-20090127091358-zyxrvmeiem90y980 808 z-...@us...-20090127091531-1nu13tf1ylwyfeu2 809 z-...@us...-20090127091641-9ejvsyc3pnqwcquk 811 z-...@us...-20090127214457-3xlqb0gqbff5fzrp 812 z-...@us...-20090127215738-ef3azdi8gyejpmod 814 z-...@us...-20090128112925-ae2c03271u9dfxhw 815 z-...@us...-20090128120342-mbnkieilhllj4p4i 816 z-...@us...-20090128120737-3ln3obsj4d6tqn2a 818 lee...@gm...-20090131032714-zj324yiwx4wni02q 819 ep...@fr...-20090125161823-9dd0qka61mwcz3c1 820 ep...@fr...-20090131143119-vb7l6bbps0mq4nz0 821 wrt...@us...-20090131191353-72oxaevmd0c43bcd 822 wrt...@us...-20090131192158-su1i1fq7a22l8m4t 823 wrt...@us...-20090131202016-24mecfpuyglq88bm 824 lee...@gm...-20090201001131-102ieca1w2tgx88j 825 lee...@gm...-20090201001411-lgn4q6qa50huba5h 826 lee...@gm...-20090201005238-sbzpnl8po5nz4p0p 827 lee...@gm...-20090201005537-esbp0iuxn2wq9ngh 830 z-...@us...-20090202133840-7iwg1phjzr3uzssl 831 lee...@gm...-20090202152533-iya7luyiiaimmann 832 ep...@fr...-20090202212943-20822j01vxylgi1c 833 lee...@gm...-20090207183547-3l0rhwd4b1cb6ksi 837 lee...@gm...-20090212204958-7qcxyvg6gg25zjaj 841 z-...@us...-20090217081732-6jpvxz8o92sti37z 842 z-...@us...-20090217100425-q62s7uu2j4h9keq4 843 z-...@us...-20090217223904-w2fk3zhgjs0s0t55 844 z-...@us...-20090217224702-zs3dd362cll5szp7 845 z-...@us...-20090219175237-ynhe2ijn23bj3824 846 z-...@us...-20090221110006-fgbl1dk4q41b7x1f 848 z-...@us...-20090223100007-f7epfrh7lfmpv5t9 849 z-...@us...-20090224115230-pgv2rxw6412ndwcx 850 z-...@us...-20090224121247-g8ycdgh9m2dn6yth 854 wrt...@us...-20090227072038-tpfjivi0uhpgrl1a 856 z-...@us...-20090227114018-torvxxmcdpf66wwu 857 z-...@us...-20090227114224-sp0ihfus7xw2fcfv 858 z-...@us...-20090227122808-o2h53nb648qvcwb3 859 z-...@us...-20090227122836-k2jjl684gaico2p1 860 z-...@us...-20090227123920-flur7p6h2g24a0hm 861 z-...@us...-20090227143152-4nay9c5k5zzmdrr3 862 lee...@gm...-20090227182603-mo7djpl31xkh38bv 863 z-...@us...-20090227201048-rin598t8m9fctjf7 864 z-...@us...-20090227201140-fnx5r434n3urmz3i 865 z-...@us...-20090227204211-qwwrnbjkx3knmbko 866 z-...@us...-20090227204603-w8nle3nyd4r5ldng 867 z-...@us...-20090227205040-xqmbjcv8nxwt9t9z 868 z-...@us...-20090227205731-2m1v554bbt2qhxes 869 z-...@us...-20090227210145-bij5hlj5x82u461d 870 z-...@us...-20090227212539-wmt09xs5wb72jal9 871 z-...@us...-20090228191447-a5kgcgxger1uktqn 872 z-...@us...-20090228210411-oxward6ey0qja0v9 873 z-...@us...-20090228214156-p1y2dx1er5f7vsgk 874 z-...@us...-20090228223607-e61qfk19bso8teht 875 lee...@gm...-20090301181643-gpq7awgxuqhvpd05 877 z-...@us...-20090302134854-ldfjzti4dhg01pe9 878 z-...@us...-20090302135448-k4x4va178wprf6bo 879 z-...@us...-20090302135554-oau4oi28bj7ww2og 880 z-...@us...-20090302150911-8o9cqnwhzy7qgkt9 883 z-...@us...-20090303113930-b80tdblbu6bqowto 885 z-...@us...-20090303145737-4u2dommtq7kmd7fa 886 z-...@us...-20090303140509-jixf06lgdd21n4xo 888 z-...@us...-20090304203702-dwk3y57pwd1fxo3m 889 z-...@us...-20090304203713-senx39tqk74p40oi 890 z-...@us...-20090304205351-xq3df8qwmydvlkq6 892 luk...@da...-20090312164834-kvceaospapwkh81n 893 luk...@da...-20090314022151-d7p9jjzt1sclslm3 894 luk...@da...-20090314022438-cz07xxgodmroz3sm 897 lee...@gm...-20090316002239-8dxi3wufl32snyf3 898 lee...@gm...-20090319004637-a2mzs3wwas2jxe2m Added: svn:ignore + compile config.sub install-sh Eclipse* configure version.h CVS doc_bak log leak.history config.cache config.log .gdbinit config.h Makefile leak.log diff scorelog.txt ladder.txt highscores.txt config.status won_matches.txt mainicon.ico .dont_update screenshot_1.bmp won_rounds.txt Makefile.global memprofile* frommaster.srv screenshot* ml astat master bindist master_list.srv big_brother master.srv *.dll *.ilk README.txt README-SDL.txt update.bat tagcvs .infiles autom4te.cache config.h.stamp Testme html.m4 var ded .beautytag* config.h.in aclocal.m4 ChangeLog INSTALL Makefile.in missing COPYING version depcomp ylwrap .version.new .cvsfiles stamp-h1 touch aa_config.h aa_config.h.in Added: svk:merge + 02982148-85d2-4202-9ec6-589ac3039d34:/local/armagetronad:107d95bf1e-0414-0410-9756-b78462a59f44:/armagetronad/trunk/armagetronad:8394 7d95bf1e-0414-0410-9756-b78462a59f44:/armagetronad/trunk/armagetronad:8715 7d95bf1e-0414-0410-9756-b78462a59f44:/armagetronad/trunk/armagetronad:8754 Modified: armagetronad/trunk/armagetronad/src/ui/uMenu.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uMenu.cpp 2009-03-16 01:29:34 UTC (rev 9157) +++ armagetronad/trunk/armagetronad/src/ui/uMenu.cpp 2009-03-19 02:41:47 UTC (rev 9167) @@ -185,8 +185,7 @@ lastkey=tSysTimeFloat(); static const REAL timeout=3; #endif - // inverted logic (0 = last item! prev(0) = top most item) - selected = GetPrevSelectable(0); + selected = items.Len(); while (!exitFlag && !quickexit && !exitToMain){ st_DoToDo(); tAdvanceFrame(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-24 23:24:22
|
Revision: 9180 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9180&view=rev Author: z-man Date: 2009-03-24 23:24:10 +0000 (Tue, 24 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9152 to 9179: ------------------------------------------------------------------------ r9179 | bazaarmagetron | 2009-03-22 11:48:31 +0100 (Sun, 22 Mar 2009) | 5 lines author: Manuel Moos Fixed last commit. Highscores now list everyone, not just everyone better than the first person who ever played. (not merging, does not apply) ------------------------------------------------------------------------ r9178 | bazaarmagetron | 2009-03-22 02:34:14 +0100 (Sun, 22 Mar 2009) | 1 line Manuel Moos: Really fixed #251447: names were filtered after reading from the highscore files. (not merging, does not apply) ------------------------------------------------------------------------ r9177 | bazaarmagetron | 2009-03-21 19:40:35 +0100 (Sat, 21 Mar 2009) | 1 line Luke Dashjr: restore missing specific DTDs from repository ------------------------------------------------------------------------ r9174 | bazaarmagetron | 2009-03-20 14:35:41 +0100 (Fri, 20 Mar 2009) | 1 line Manuel Moos: Checking whether var directory exists before attempting to remove it. Fixes #345184. ------------------------------------------------------------------------ r9171 | luke-jr | 2009-03-19 20:02:46 +0100 (Thu, 19 Mar 2009) | 1 line restore old DTD ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9152&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/batch/sysinstall.in armagetronad/trunk/armagetronad/resource/proto/Anonymous/original/original.map.xml armagetronad/trunk/armagetronad/resource/proto/Anonymous/shapes/diamond.aamap.xml armagetronad/trunk/armagetronad/resource/proto/Luke-Jr/n-gon/40-gon.map.xml armagetronad/trunk/armagetronad/resource/proto/Your_mom/inaktek/inaktek.map.xml armagetronad/trunk/armagetronad/resource/proto/Your_mom/repeat/repeat.map.xml armagetronad/trunk/armagetronad/resource/proto/Z-Man/fortress_for_old_clients.aamap.xml armagetronad/trunk/armagetronad/resource/proto/Z-Man/fourfold_fortress_for_old_clients.aamap.xml armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_4x4.aamap.xml armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_8x2.aamap.xml armagetronad/trunk/armagetronad/resource/proto/Z-Man/zonetest.aamap.xml Added Paths: ----------- armagetronad/trunk/armagetronad/resource/proto/AATeam/map-0.2.8.0.dtd Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9152 + /armagetronad/branches/0.2.8:8751-8852,8855-9179 Modified: armagetronad/trunk/armagetronad/batch/sysinstall.in =================================================================== --- armagetronad/trunk/armagetronad/batch/sysinstall.in 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/batch/sysinstall.in 2009-03-24 23:24:10 UTC (rev 9180) @@ -363,7 +363,7 @@ # remove var directory if test ${MODE} = uninstall; then - rmdir "${DESTDIR}${NEWVARDIR}" + test -d "${DESTDIR}${NEWVARDIR}" && rmdir --ignore-fail-on-non-empty "${DESTDIR}${NEWVARDIR}" fi # add user Copied: armagetronad/trunk/armagetronad/resource/proto/AATeam/map-0.2.8.0.dtd (from rev 9179, armagetronad/branches/0.2.8/armagetronad/resource/proto/AATeam/map-0.2.8.0.dtd) =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/AATeam/map-0.2.8.0.dtd (rev 0) +++ armagetronad/trunk/armagetronad/resource/proto/AATeam/map-0.2.8.0.dtd 2009-03-24 23:24:10 UTC (rev 9180) @@ -0,0 +1,64 @@ +<!-- version="0.2.8.0" --> +<!ELEMENT Resource (Map)> + +<!ATTLIST Resource + type (aamap) "aamap" + name CDATA #REQUIRED + version CDATA #REQUIRED + author CDATA "Anonymous" + category CDATA "unsorted" + comissioner CDATA #IMPLIED +> + +<!ELEMENT Map (Settings?, World)> + +<!ELEMENT Settings (Setting*)> +<!ELEMENT Setting EMPTY> +<!ATTLIST Setting name CDATA #REQUIRED> +<!ATTLIST Setting value CDATA #REQUIRED> + +<!-- ATM, a map contain only one Field --> +<!ELEMENT World (Field)> +<!-- a field + - may have an axes declared + - need at least one spawn + - need at least one wall --> +<!ELEMENT Field (Axes?, (Spawn | Wall | Zone)*)> + +<!ELEMENT Axes (Axis*)> +<!ELEMENT Spawn EMPTY> +<!ELEMENT Wall (Point+) > +<!ELEMENT Point EMPTY> +<!ELEMENT Axis EMPTY> +<!ELEMENT Zone (ShapeCircle) > + +<!ATTLIST Map version CDATA #REQUIRED> + +<!ATTLIST Field logicalBox (true | false) "true"> + +<!ATTLIST Axes number CDATA "4"> +<!ATTLIST Axes normalize (true | false) "true"> + +<!ATTLIST Spawn x CDATA #REQUIRED> +<!ATTLIST Spawn y CDATA #REQUIRED> +<!ATTLIST Spawn xdir CDATA #IMPLIED> +<!ATTLIST Spawn ydir CDATA #IMPLIED> +<!ATTLIST Spawn angle CDATA #IMPLIED> +<!ATTLIST Spawn length CDATA "1.0"> + +<!ATTLIST Wall height CDATA #IMPLIED> + +<!ATTLIST Point x CDATA #REQUIRED> +<!ATTLIST Point y CDATA #REQUIRED> + +<!ATTLIST Axis xdir CDATA #IMPLIED> +<!ATTLIST Axis ydir CDATA #IMPLIED> +<!ATTLIST Axis angle CDATA #IMPLIED> +<!ATTLIST Axis length CDATA "1.0"> + +<!ATTLIST Zone effect (win | death | fortress ) "death" > + +<!ELEMENT ShapeCircle (Point)> +<!ATTLIST ShapeCircle radius CDATA #REQUIRED> +<!ATTLIST ShapeCircle growth CDATA "0.0"> + Modified: armagetronad/trunk/armagetronad/resource/proto/Anonymous/original/original.map.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Anonymous/original/original.map.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Anonymous/original/original.map.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map-0.2.8_beta3.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <!-- Note: this map, by definition, never changes functionally. That's a requirement for compatibility with older clients. The version of this map included with a release always is the right map, it should never be downloaded even when connecting to a server that uses Modified: armagetronad/trunk/armagetronad/resource/proto/Anonymous/shapes/diamond.aamap.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Anonymous/shapes/diamond.aamap.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Anonymous/shapes/diamond.aamap.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="diamond" version="1.0.2" author="Anonymous" category="polygon/regular" > <Map version="2"> Modified: armagetronad/trunk/armagetronad/resource/proto/Luke-Jr/n-gon/40-gon.map.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Luke-Jr/n-gon/40-gon.map.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Luke-Jr/n-gon/40-gon.map.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="40-gon" version="0.2" author="Anonymous" category="polygon/regular"> <Map version="2"> <World> Modified: armagetronad/trunk/armagetronad/resource/proto/Your_mom/inaktek/inaktek.map.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Your_mom/inaktek/inaktek.map.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Your_mom/inaktek/inaktek.map.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="inaktek" version="0.7.2" author="Your_mom" category="clever"> <Map version="2"> <World> Modified: armagetronad/trunk/armagetronad/resource/proto/Your_mom/repeat/repeat.map.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Your_mom/repeat/repeat.map.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Your_mom/repeat/repeat.map.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="repeat" version="0.3.2" author="Your_mom" category="clever"> <Map version="2"> <World> Modified: armagetronad/trunk/armagetronad/resource/proto/Z-Man/fortress_for_old_clients.aamap.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Z-Man/fortress_for_old_clients.aamap.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Z-Man/fortress_for_old_clients.aamap.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="for_old_clients" version="0.1.0" author="Z-Man" category="fortress"> <Map version="2"> <!-- The original square map, technically created by z-man. Modified: armagetronad/trunk/armagetronad/resource/proto/Z-Man/fourfold_fortress_for_old_clients.aamap.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Z-Man/fourfold_fortress_for_old_clients.aamap.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Z-Man/fourfold_fortress_for_old_clients.aamap.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="fourfold_for_old_clients" version="0.1.0" author="Z-Man" category="fortress"> <Map version="2"> <!-- The original square map, technically created by z-man. Modified: armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_4x4.aamap.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_4x4.aamap.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_4x4.aamap.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="sumo_4x4" version="0.1.1" author="Z-Man" category="fortress"> <Map version="2"> <!-- The original square map, technically created by z-man. Modified: armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_8x2.aamap.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_8x2.aamap.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Z-Man/sumo_8x2.aamap.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="sumo_8x2" version="0.1.0" author="Z-Man" category="fortress"> <Map version="2"> <!-- The original square map, technically created by z-man. Modified: armagetronad/trunk/armagetronad/resource/proto/Z-Man/zonetest.aamap.xml =================================================================== --- armagetronad/trunk/armagetronad/resource/proto/Z-Man/zonetest.aamap.xml 2009-03-22 10:48:31 UTC (rev 9179) +++ armagetronad/trunk/armagetronad/resource/proto/Z-Man/zonetest.aamap.xml 2009-03-24 23:24:10 UTC (rev 9180) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!DOCTYPE Resource SYSTEM "map.dtd"> +<!DOCTYPE Resource SYSTEM "AATeam/map-0.2.8.0_rc4.dtd"> <Resource type="aamap" name="zonetest" version="0.1.0" author="Z-Man" category="fortress"> <Map version="2"> <!-- Test map for base zones. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-25 09:21:46
|
Revision: 9185 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9185&view=rev Author: z-man Date: 2009-03-25 09:21:32 +0000 (Wed, 25 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9179 to 9181: ------------------------------------------------------------------------ r9181 | bazaarmagetron | 2009-03-25 00:32:06 +0100 (Wed, 25 Mar 2009) | 2 lines Manuel Moos: Merging prefix spam branch. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9179&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/.bzrignore armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/configure.ac armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/Makefile.am armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/render/rScreen.cpp armagetronad/trunk/armagetronad/src/tron/gCycle.cpp Added Paths: ----------- armagetronad/trunk/armagetronad/src/engine/eChat.cpp armagetronad/trunk/armagetronad/src/engine/eChat.h armagetronad/trunk/armagetronad/src/test/ armagetronad/trunk/armagetronad/src/test/Makefile.am armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp Removed Paths: ------------- armagetronad/trunk/armagetronad/src/test/Makefile.am armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9179 + /armagetronad/branches/0.2.8:8751-8852,8855-9181 Modified: armagetronad/trunk/armagetronad/.bzrignore =================================================================== --- armagetronad/trunk/armagetronad/.bzrignore 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/.bzrignore 2009-03-25 09:21:32 UTC (rev 9185) @@ -71,3 +71,8 @@ ./armagetronad ./armagetronad-dedicated ./var +src/test/chat_prefix_test +leak.log +memprofile1.txt +memprofile2.txt +a.out.dSYM Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2009-03-25 09:21:32 UTC (rev 9185) @@ -170,14 +170,18 @@ SPAM_PROTECTION_REPEAT 5.0 # minimum time between identical chat messages. -SPAM_PROTECTION 4.0 # minimum average time between chat messages in seconds so they are not considered spamming. Increase for more spam protection. -SPAM_PROTECTION_VOTE 50.0 # Extra factor for SPAM_PROTECTION for votes. Increase for more spam protection. -SPAM_PROTECTION_CHAT .3 # Extra factor for SPAM_PROTECTION for chat messages. Increase for more spam protection. -SPAM_PENALTY 0.0 # spam penalty to add on spam detection. This makes repeated spams extra painful. -SPAM_AUTOKICK 14.0 # spam protection value that causes someone to get instantly kicked -SPAM_AUTOKICK_COUNT 3 # minimal number of spam warnings before someone is kicked for spam. -SPAM_MAXLEN 80 # maximal length of chat message +SPAM_PROTECTION 4.0 # minimum average time between chat messages in seconds so they are not considered spamming. Increase for more spam protection. +SPAM_PROTECTION_VOTE 50.0 # Extra factor for SPAM_PROTECTION for votes. Increase for more spam protection. +SPAM_PROTECTION_CHAT .3 # Extra factor for SPAM_PROTECTION for chat messages. Increase for more spam protection. +SPAM_PENALTY 0.0 # spam penalty to add on spam detection. This makes repeated spams extra painful. +SPAM_AUTOKICK 14.0 # spam protection value that causes someone to get instantly kicked +SPAM_AUTOKICK_COUNT 3 # minimal number of spam warnings before someone is kicked for spam. +SPAM_MAXLEN 80 # maximal length of chat message +# prefix spam + +PREFIX_SPAM_ENABLE 1 # Should spam prefix checking be enabled? Set to 1 to enable, 0 to disable. + # voting ALLOW_VOTING 1 # allow voting? Modified: armagetronad/trunk/armagetronad/configure.ac =================================================================== --- armagetronad/trunk/armagetronad/configure.ac 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/configure.ac 2009-03-25 09:21:32 UTC (rev 9185) @@ -1249,6 +1249,7 @@ config/rc.config config/aiplayers.cfg src/doc/Makefile src/doc/net/Makefile src/doc/Doxyfile src/doc/html.m4 +src/test/Makefile src/thirdparty/Makefile src/thirdparty/particles/Makefile src/thirdparty/mathexpr/Makefile Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2009-03-25 09:21:32 UTC (rev 9185) @@ -408,6 +408,9 @@ enable_chat_help If set to 0, all chat will be surpressed (if reset on the server, messages from logged in players and private/team messages are still shown) allow_team_change_help If set to 1, all players can change teams. If set to 0, players can only change teams if they've been specifically allowed to by ALLOW_TEAM_CHANGE_PLAYER +# spam prefix settings +prefix_spam_enable_help Should spam prefix checking be enabled? Set to 1 to enable, 0 to disable. + # spam kick messages spam_chat You chatted too much. spam_teamchage You switched teams too often. @@ -2353,6 +2356,8 @@ player_pingcharity_changed Ping charity changed from \1 to \2.\n spam_protection_repeat SPAM PROTECTION: you already said: \1\n spam_protection SPAM PROTECTION: you are silenced for the next \1 seconds.\n +spam_protection_prefix SPAM PROTECTION: your messages have a common prefix: \1\nSPAM PROTECTION: messages with this prefix will be allowed again in \2 seconds\n + spam_protection_silenceall SPAM PROTECTION: public chat is disabled.\n spam_protection_silenced SPAM PROTECTION: you have been silenced by the server administrator.\n spam_protection_silenced_default SPAM PROTECTION: you have to be given voice in order to chat publically.\n Modified: armagetronad/trunk/armagetronad/src/Makefile.am =================================================================== --- armagetronad/trunk/armagetronad/src/Makefile.am 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/src/Makefile.am 2009-03-25 09:21:32 UTC (rev 9185) @@ -1,5 +1,4 @@ include $(top_srcdir)/Makefile.paths - SUBDIRS = first protobuf thirdparty swig # target directory @@ -133,6 +132,7 @@ engine/eEventNotification.h engine/eEventNotification.cpp \ engine/eLagCompensation.cpp engine/eLagCompensation.h \ engine/eSoundMixer.h engine/eSoundMixer.cpp \ + engine/eChat.cpp engine/eChat.h \ engine/eEventNotification.h engine/eEventNotification.cpp librender_a_SOURCES=render/rConsole.cpp render/rConsoleGraph.cpp render/rConsole.h render/rFont.cpp\ Copied: armagetronad/trunk/armagetronad/src/engine/eChat.cpp (from rev 9181, armagetronad/branches/0.2.8/armagetronad/src/engine/eChat.cpp) =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.cpp (rev 0) +++ armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-03-25 09:21:32 UTC (rev 9185) @@ -0,0 +1,537 @@ +/* + +************************************************************************* + +ArmageTron -- Just another Tron Lightcycle Game in 3D. +Copyright (C) 2005 by +and the AA DevTeam (see the file AUTHORS(.txt) in the main source directory) + +************************************************************************** + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +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. + +*************************************************************************** + +*/ + +#include <algorithm> +#include <map> +#include <vector> + +#include "eChat.h" +#include "ePlayer.h" +#include "tSysTime.h" + +//!< Should spam prefix checking be enabled? +static bool se_prefixSpamShouldEnable = true; +static tConfItem< bool > se_prefixSpamShouldEnableConf( "PREFIX_SPAM_ENABLE", se_prefixSpamShouldEnable ); + +#ifdef DEBUG +//!< If a prefix begins with a color code it will have this multiplier applied to the score. +static REAL se_prefixSpamStartColorMultiplier = 2; +static tConfItem< REAL > se_prefixSpamStartColorMultiplierConf( "PREFIX_SPAM_START_COLOR_MULTIPLIER", se_prefixSpamStartColorMultiplier ); + +//!< Increase score by f( prefix_length * multiplier ) +static REAL se_prefixSpamLengthMultiplier = 1.2; +static tConfItem< REAL > se_prefixSpamLengthMultiplierConf( "PREFIX_SPAM_LENGTH_MULTIPLIER", se_prefixSpamLengthMultiplier ); + +//!< Increase score by f( num_color_codes * multiplier ) +static REAL se_prefixSpamNumberColorCodesMultiplier = 1.2; +static tConfItem< REAL > se_prefixSpamNumberColorCodesMultiplierConf( "PREFIX_SPAM_NUMBER_COLOR_CODES_MULTIPLIER", + se_prefixSpamNumberColorCodesMultiplier ); + +//!< Increase score by f( know_prefixes * multiplier ) +static REAL se_prefixNumberKnownPrefixesMultiplier = 1; +static tConfItem< REAL > se_prefixNumberKnownPrefixesMultiplierConf( "PREFIX_SPAM_NUMBER_KNOWN_PREFIXES_MULTIPLIER", + se_prefixNumberKnownPrefixesMultiplier ); + +//!< The score, from prefix checking, a message must have for it to be considered spam. +static REAL se_prefixSpamRequiredScore = 10.0; +static tConfItem< REAL > se_prefixSpamRequiredScoreConf( "PREFIX_SPAM_REQUIRED_SCORE", se_prefixSpamRequiredScore ); + +//!< Found prefixes will timeout after f( score ) * multiplier seconds. +static REAL se_prefixSpamTimeoutMultiplier = 15.0; +static tConfItem< REAL > se_prefixSpamTimeoutMultiplierConf( "PREFIX_SPAM_TIMEOUT_MULTIPLIER", se_prefixSpamTimeoutMultiplier ); +#endif + +/** + * Helper class for predicate stl-comparisons + */ +template< typename T > +class IsPrefixPredicate +{ +public: + IsPrefixPredicate( const T & s, bool isSuperString=true ) :s_( s ), isSuperString_( isSuperString ) { } + bool operator() ( const T & other ) + { + const T & a = isSuperString_ ? s_ : other; + const T & b = isSuperString_ ? other : s_; + + return a.StartsWith( b ); + } +private: + const T s_; + bool isSuperString_; +}; + +template< typename T > +class TimeOutPredicate +{ +public: + TimeOutPredicate( const T & then ) : then_( then ) { } + bool operator() ( const T & now ) { return then_.timeout_ - now.timeout_ >= 0; } +private: + T then_; +}; + + +/** + * Example: se_EscapeColors( "0xfff000" ) -> "#fff000" + * + * @param s The string to escape + * @return A string with color codes escaped. + */ +static tString se_EscapeColors( const tString & s ) +{ + tString ret; + + int size = s.Size(); + for ( int i = 0; i < size; i++ ) + { + if ( s[i] == '0' && size - i >= 2 && s[i + 1] == 'x' ) + { + ret << '#'; + i++; + } + else + { + ret << s[i]; + } + } + return ret; +} + +/** + * Example: se_CountColorCodes( "0xfff000" ) -> 1 + * + * @return The number of color codes in s. + */ +static int se_CountColorCodes( const tString & s ) +{ + int colorCodes = ( s.Len() - tColoredString::RemoveColors( s ).Len() ) / 8; + if ( colorCodes < 0 ) + colorCodes = 0; + + return colorCodes; +} + +/** + * Example: se_StartsWithColorCode( "0xfff000asdf" ) -> true + * + * @return Does the string start with a color code? + */ +static bool se_StartsWithColorCode( const tString & s ) +{ + return s.StartsWith( "0x" ); +} + +/** + * \o/ logarithms + * + * y = 1 for x=0 + */ +static double se_CalcScore( double a ) +{ + return log( 2 + a ) / log( 2 ); +} + +/** + * y = 0 for x=0 + */ +static double se_CalcScore2( double a ) +{ + return log( 1 + a ) / log( 2 ); +} + +static nTimeRolling se_CalcTimeout( double score ) +{ + return se_CalcScore2( score ) * se_prefixSpamTimeoutMultiplier; +} + +eChatSaidEntry::eChatSaidEntry(const tString & said, const nTimeRolling & t, eChatMessageType type) +: said_( said ), time_( t ), type_( type ) +{ +} + +eChatSaidEntry::~eChatSaidEntry() +{ +} + +const tString & eChatSaidEntry::Said() const +{ + return said_; +} + +const nTimeRolling & eChatSaidEntry::Time() const +{ + return time_; +} + +const eChatMessageType eChatSaidEntry::Type() const +{ + return type_; +} + +void eChatSaidEntry::SetType(eChatMessageType newType) +{ + type_ = newType; +} + +bool eChatSaidEntry::StartsWith( const eChatSaidEntry & other ) const +{ + return said_.StartsWith( other.Said() ); +} + + +eChatLastSaid::Prefix::Prefix( const tString & prefix, REAL score, nTimeRolling timeout ) +: prefix_( prefix ), score_( score ), timeout_( timeout ) +{ +} + +bool eChatLastSaid::Prefix::StartsWith( const eChatLastSaid::Prefix & other ) const +{ + return prefix_.StartsWith( other.prefix_ ); +} + + +eChatLastSaid::eChatLastSaid() +: lastSaid_(), knownPrefixes_() +{ +} + +eChatLastSaid::~eChatLastSaid() +{ +} + +const eChatLastSaid::SaidList & eChatLastSaid::LastSaid() const +{ + return lastSaid_; +} + +eChatLastSaid::SaidList & eChatLastSaid::LastSaid() +{ + return lastSaid_; +} + +const eChatLastSaid::PrefixList & eChatLastSaid::KnownPrefixes() const +{ + return knownPrefixes_; +} + +eChatLastSaid::PrefixList & eChatLastSaid::KnownPrefixes() +{ + return knownPrefixes_; +} + +void eChatLastSaid::AddSaid( const eChatSaidEntry & saidEntry ) +{ + if ( lastSaid_.size() >= static_cast< size_t >( se_lastSaidMaxEntries ) ) + lastSaid_.pop_back(); + + lastSaid_.push_front( saidEntry ); +} + +nTimeRolling eChatLastSaid::AddPrefix( const tString & s, REAL score, nTimeRolling now ) +{ + nTimeRolling timeoutAt = now + se_CalcTimeout( score ); + Prefix prefix( s, score, timeoutAt ); + knownPrefixes_.push_back( prefix ); + return timeoutAt; +} + +// handles spam checking at the right time +eChatSpamTester::eChatSpamTester( ePlayerNetID * p, tString const & say ) +: tested_( false ), shouldBlock_( false ), player_( p ), say_( say ), factor_( 1 ), lastSaidType_( eChatMessageType_Public ) +{ + say_.RemoveTrailingColor(); +} + +bool eChatSpamTester::Block() +{ + if ( !tested_ ) + { + shouldBlock_ = Check(); + tested_ = true; + } + + return shouldBlock_; +} + +bool eChatSpamTester::Check() +{ + nTimeRolling currentTime = tSysTimeFloat(); + + // check if the player already said the same thing not too long ago + eChatLastSaid::SaidList const & lastSaid = player_->lastSaid_.LastSaid(); + const size_t saidSize = lastSaid.size(); + for ( size_t i = 0; i < saidSize; i++ ) + { + eChatSaidEntry const & said = lastSaid[i]; + if( (say_.StripWhitespace() == said.Said().StripWhitespace()) && ( (currentTime - said.Time()) < se_alreadySaidTimeout * factor_ ) ) + { + sn_ConsoleOut( tOutput("$spam_protection_repeat", say_ ), player_->Owner() ); + return true; + } + } + + eChatSaidEntry saidEntry( say_, currentTime, lastSaidType_ ); + + // check for prefix spam + if ( se_prefixSpamShouldEnable ) + { + eChatPrefixSpamTester tester( player_, saidEntry ); + tString foundPrefix; + nTimeRolling timeOut; + if ( tester.Check( foundPrefix, timeOut ) ) + { + sn_ConsoleOut( tOutput("$spam_protection_prefix", foundPrefix, static_cast< float >( timeOut ) ), player_->Owner() ); + return true; + } + } + + REAL lengthMalus = say_.Len() / 20.0; + if ( lengthMalus > 4.0 ) + { + lengthMalus = 4.0; + } + + // extra spam severity factor + REAL factor = factor_; + factor *= 1 + lengthMalus; + + // Apply number of color codes to the spam severity factor. Burn in hell, color code abusers. + factor *= se_CalcScore( se_CountColorCodes( say_ ) ); + + if ( CheckSpam( factor, tOutput("$spam_chat") ) ) + return true; + +#ifdef KRAWALL_SERVER + if ( player_->GetAccessLevel() > se_chatAccessLevel ) + { + // every once in a while, remind the public that someone has something to say + static double nextRequest = 0; + double now = tSysTimeFloat(); + if ( now > nextRequest && se_chatRequestTimeout > 0 ) + { + sn_ConsoleOut( tOutput("$access_level_chat_request", player_->GetColoredName(), player_->GetLogName() ), player_->Owner() ); + nextRequest = now + se_chatRequestTimeout; + } + else + { + sn_ConsoleOut( tOutput("$access_level_chat_denied" ), player_->Owner() ); + } + + return true; + } +#endif + + player_->lastSaid_.AddSaid( saidEntry ); + + return false; +} + +bool eChatSpamTester::CheckSpam( REAL factor, tOutput const & message ) const +{ + if ( nSpamProtection::Level_Mild <= player_->chatSpam_.CheckSpam( factor, player_->Owner(), message ) ) + return true; + + return false; +} + +/** + * Brute force common prefix. Suitable for small inputs. + */ +size_t CommonPrefix(const tString & a, const tString & b) +{ + size_t n = std::min( a.Size(), b.Size() ); + for (size_t i = 0; i < n; i++) + if (a[i] != b[i]) + return i; + + return n; +} + +eChatPrefixSpamTester::eChatPrefixSpamTester( ePlayerNetID * player, const eChatSaidEntry & say ) +: player_( player ), say_( say ) +{ +} + +eChatPrefixSpamTester::~eChatPrefixSpamTester() +{ +} + +bool eChatPrefixSpamTester::Check( tString & out, nTimeRolling & timeOut ) +{ + eChatPrefixSpamType typeOutIgnore; + return Check( out, timeOut, typeOutIgnore ); +} +bool eChatPrefixSpamTester::Check( tString & out, nTimeRolling & timeOut, eChatPrefixSpamType & typeOut ) +{ + if ( !ShouldCheckMessage( say_ ) ) + return false; + + RemoveTimedOutPrefixes(); + + // check from known prefixes + if ( HasKnownPrefix( out, timeOut ) ) + { + typeOut = eChatPrefixSpamType_Known; + return true; + } + + + eChatLastSaid::SaidList & lastSaid = player_->lastSaid_.LastSaid(); + + // Map of Prefix => Data + std::map< tString, PrefixEntry > foundPrefixes; + + for ( eChatLastSaid::SaidList::iterator it = lastSaid.begin(); it != lastSaid.end(); ++it ) + { + eChatSaidEntry & said = *it; + + if ( !ShouldCheckMessage( said ) || say_.Said() == said.Said() ) + continue; + + int common = CommonPrefix( say_.Said(), said.Said() ); + + if ( common > 0 ) + { + const tString prefix = say_.Said().SubStr(0, common); + + // User is talking to a player. Not prefix spam + // Example: Player 1: grind center. [etc...] + if ( ChatDirectedTowardsPlayer( prefix ) ) + { + // mark message so we don't need to check it next time + said.SetType( eChatMessageType_Public_Direct ); + return false; + } + + if ( foundPrefixes.find(prefix) == foundPrefixes.end() ) + foundPrefixes[prefix] = PrefixEntry(); + + PrefixEntry & data = foundPrefixes[prefix]; + + data.occurrences += 1; + CalcScore( data, common, prefix ); + if ( data.score >= se_prefixSpamRequiredScore ) + { + +#ifdef DEBUG + con << "Spam prefix found: \"" << se_EscapeColors( prefix ) << "\" with score " << data.score << '\n'; +#endif + nTimeRolling t = player_->lastSaid_.AddPrefix( prefix, data.score, say_.Time() ); + timeOut = RemainingTime( t ); + + // We caught the prefix. Don't catch words that start with the prefix. + RemovePrefixEntries( prefix, said ); + + out = se_EscapeColors( prefix ); + typeOut = eChatPrefixSpamType_New; + + return true; + } + } + } + + return false; +} + +void eChatPrefixSpamTester::CalcScore( PrefixEntry & data, const int & len, const tString & prefix ) const +{ + // Apply based on length of found prefix. + data.score += se_CalcScore2( len * se_prefixSpamLengthMultiplier ); + + // Apply based on number of color codes in prefix. + data.score += se_CalcScore2( se_CountColorCodes( prefix ) * se_prefixSpamNumberColorCodesMultiplier ); + + // Apply based on number of known prefixes. + data.score += se_CalcScore2( player_->lastSaid_.KnownPrefixes().size() * se_prefixNumberKnownPrefixesMultiplier ); + + // Apply multiplier for annoying color messages + if ( se_StartsWithColorCode( prefix ) ) + data.score *= se_prefixSpamStartColorMultiplier; +} + +void eChatPrefixSpamTester::RemovePrefixEntries( const tString & prefix, const eChatSaidEntry & e ) const +{ + eChatSaidEntry entry( prefix, e.Time(), e.Type() ); + eChatLastSaid::SaidList & xs = player_->lastSaid_.LastSaid(); + xs.erase( std::remove_if( xs.begin(), xs.end(), IsPrefixPredicate< eChatSaidEntry >( entry, false ) ), xs.end() ); +} + +bool eChatPrefixSpamTester::HasKnownPrefix( tString & out, nTimeRolling & timeOut ) const +{ + eChatLastSaid::PrefixList & prefixes = player_->lastSaid_.KnownPrefixes(); + eChatLastSaid::Prefix testPrefix( say_.Said(), 0, 0 ); + + eChatLastSaid::PrefixList::iterator it = + std::find_if( prefixes.begin(), prefixes.end(), IsPrefixPredicate< eChatLastSaid::Prefix >( testPrefix ) ); + + if ( it != prefixes.end() ) + { + // Stop saying that! + it->timeout_ += se_CalcTimeout( it->score_ ) / 3; + + out = se_EscapeColors( it->prefix_ ); + timeOut = RemainingTime( it->timeout_ ); + + return true; + } + + return false; +} + +nTimeRolling eChatPrefixSpamTester::RemainingTime( nTimeRolling t ) const +{ + return t - say_.Time(); +} + +void eChatPrefixSpamTester::RemoveTimedOutPrefixes() const +{ + eChatLastSaid::PrefixList & xs = player_->lastSaid_.KnownPrefixes(); + eChatLastSaid::Prefix entry( tString(), 0, say_.Time() ); + xs.erase( std::remove_if( xs.begin(), xs.end(), TimeOutPredicate< eChatLastSaid::Prefix >( entry ) ), xs.end() ); +} + +bool eChatPrefixSpamTester::ChatDirectedTowardsPlayer( const tString & prefix ) const +{ + tString possiblePlayer( prefix ); + + // When using 0.3 name completion at the start of a message, + // ": " is appended to the end of the player name. + if ( possiblePlayer.EndsWith( ": " ) || possiblePlayer.EndsWith( ", " ) ) + possiblePlayer = possiblePlayer.SubStr( 0, possiblePlayer.Len() - 3 ); + + if ( ePlayerNetID::FindPlayerByName( possiblePlayer, 0, false ) ) + return true; + + return false; +} + +bool eChatPrefixSpamTester::ShouldCheckMessage( const eChatSaidEntry & said ) const +{ + return said.Type() >= eChatMessageType_Public; +} Copied: armagetronad/trunk/armagetronad/src/engine/eChat.h (from rev 9181, armagetronad/branches/0.2.8/armagetronad/src/engine/eChat.h) =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.h (rev 0) +++ armagetronad/trunk/armagetronad/src/engine/eChat.h 2009-03-25 09:21:32 UTC (rev 9185) @@ -0,0 +1,280 @@ +/* + +************************************************************************* + +ArmageTron -- Just another Tron Lightcycle Game in 3D. +Copyright (C) 2005 by +and the AA DevTeam (see the file AUTHORS(.txt) in the main source directory) + +************************************************************************** + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +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. + +*************************************************************************** + +*/ + +#ifndef ArmageTron_eChat_H +#define ArmageTron_eChat_H + +#include "tString.h" +#include "nNetwork.h" +#include <deque> +#include <vector> + +class ePlayerNetID; + +/** + * Chat message types. Useful for applying spam-checking against certain + * message types. + */ +enum eChatMessageType +{ + eChatMessageType_Command = 0, //!< A remotely issued command + eChatMessageType_Private = 1, //!< Private message chat + eChatMessageType_Team = 2, //!< Team message chat + eChatMessageType_Public_Direct = 3, //!< Public chat directed towards a player + eChatMessageType_Public = 4, //!< Public chat + eChatMessageType_Me = 5 //!< /me +}; + +/** + * Contains information about an individual chat message + */ +class eChatSaidEntry +{ +public: + eChatSaidEntry(const tString &, const nTimeRolling &, eChatMessageType); + ~eChatSaidEntry(); + + /** + * @return The string that was said. + */ + const tString & Said() const; + + /** + * @return The time the user sent the message. + */ + const nTimeRolling & Time() const; + + /** + * @return The type of this message. + */ + const eChatMessageType Type() const; + + /** + * Set the message type + * + * @param newType The new message type. + * @see Type() + */ + void SetType(eChatMessageType newType); + + /** + * Does this message start with the other message? + */ + bool StartsWith( const eChatSaidEntry & other ) const; + +private: + tString said_; + nTimeRolling time_; + eChatMessageType type_; +}; + +/** + * Holds chat messages for one player + */ +class eChatLastSaid +{ +public: + struct Prefix + { + Prefix( const tString & prefix, REAL score, nTimeRolling timeout ); + + /** + * Does this message start with the other message? + */ + bool StartsWith( const Prefix & other ) const; + + tString prefix_; + REAL score_; + nTimeRolling timeout_; + }; + + typedef std::deque< eChatSaidEntry > SaidList; + typedef std::vector< Prefix > PrefixList; + + + eChatLastSaid(); + ~eChatLastSaid(); + + /** + * @return The last said entry + */ + const SaidList & LastSaid() const; + SaidList & LastSaid(); + + /** + * Chat can be checked to guard against prefix-spam. When a prefix has + * been consistently used in messages, it will stored in this list. + * + * @return The known prefixes + */ + const PrefixList & KnownPrefixes() const; + PrefixList & KnownPrefixes(); + + /** + * Add a new said entry + * + * @param saidEntry the new entry + */ + void AddSaid( const eChatSaidEntry & saidEntry ); + + /** + * Add a new chat prefix + * + * @param prefix the new prefix + * @param score the score the prefixed received + * @param now the time the prefix was found to be spam + * @return the time this prefix will be ignored + */ + nTimeRolling AddPrefix( const tString & prefix, REAL score, nTimeRolling now ); + +private: + SaidList lastSaid_; + PrefixList knownPrefixes_; +}; + +/** + * Gaurd to stop chat spam. + */ +class eChatSpamTester +{ +public: + eChatSpamTester( ePlayerNetID * p, tString const & say ); + /** + * Checks the message, if needed, for spam. + * + * @return Is this message spam? + */ + bool Block(); + + /** + * Test the message to see if it spam. + * + * @return Is this message spam? + * @see Block() + */ + bool Check(); + + bool tested_; //!< flag indicating whether the chat line has already been checked fro spam + bool shouldBlock_; //!< true if the message should be blocked for spam + ePlayerNetID * player_; //!< the chatting player + tColoredString say_; //!< the chat line + REAL factor_; //!< extra spam weight factor + eChatMessageType lastSaidType_; //!< The last said message type to be contained in an eChatSaidEntry record +private: + bool CheckSpam( REAL factor, tOutput const & message ) const; +}; + +enum eChatPrefixSpamType +{ + eChatPrefixSpamType_New, + eChatPrefixSpamType_Known +}; + +/** + * Checks for prefix spam from a player + */ +class eChatPrefixSpamTester +{ +public: + /** + * @param player The player to check for prefix spam + * @param say the chat message to check, not yet sent to peers + */ + eChatPrefixSpamTester( ePlayerNetID * player, const eChatSaidEntry & say ); + virtual ~eChatPrefixSpamTester(); + + /** + * Check for prefix spam. + * + * @param out Will contain the prefix, if one is found + * @param timeOut + * @return Did the message have a common prefix? + */ + bool Check( tString & out, nTimeRolling & timeOut ); + bool Check( tString & out, nTimeRolling & timeOut, eChatPrefixSpamType & typeOut ); +private: + class PrefixEntry + { + public: + PrefixEntry() : occurrences( 0 ), score( 0 ) { } + ~PrefixEntry() { } + + int occurrences; + REAL score; + }; + + /** + * Tests the message against known prefixes. + * + * @param out See Check() + * @param timeOut See Check() + * @return Did the message start with a known prefix? + */ + bool HasKnownPrefix( tString & out, nTimeRolling & timeOut ) const; + + /** + * Tests if this message is directed towards another player. + * + * Example chat message directed to Player 1: + * + * Player 1: change your name + * + * @param prefix The possible player name + * @return Was the prefix a player name? + */ + bool ChatDirectedTowardsPlayer( const tString & prefix ) const; + + /** + * We should only check certain message types. For example, commands + * such as /admin should never be checked for prefix-spam. + * + * @param said The message that we might want to check + * @return Should we check this message for prefix-spam? + */ + bool ShouldCheckMessage( const eChatSaidEntry & said ) const; + + /** + * Calculate the score for a prefix + */ + void CalcScore( PrefixEntry & data, const int & len, const tString & prefix ) const; + + /** + * After a prefix has been found, remove all chat entries with it. We don't want + * to penalize users after a prefix is found, and the user starts a message with + * a word that begins with the found prefix. + */ + void RemovePrefixEntries( const tString & prefix, const eChatSaidEntry & e ) const; + + void RemoveTimedOutPrefixes() const; + nTimeRolling RemainingTime( nTimeRolling t ) const; + + ePlayerNetID * player_; + const eChatSaidEntry & say_; +}; + +#endif Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-03-25 09:21:32 UTC (rev 9185) @@ -63,6 +63,8 @@ #include "ePlayer.pb.h" +int se_lastSaidMaxEntries = 8; + // call on commands that only work on the server; quit if it returns true bool se_NeedsServer(char const * command, std::istream & s, bool strict ) { @@ -1668,7 +1670,7 @@ } -ePlayerNetID * ePlayerNetID::FindPlayerByName( tString const & name, ePlayerNetID * requester ) +ePlayerNetID * ePlayerNetID::FindPlayerByName( tString const & name, ePlayerNetID * requester, bool print ) { int num_matches = 0; @@ -1716,27 +1718,25 @@ // More than than one match for the current buffer. Complain about that. else if (num_matches > 1) { tOutput toSender( "$msg_toomanymatches", name ); - if ( requester ) + if (print) { - sn_ConsoleOut(toSender,requester->Owner() ); + if ( requester ) + sn_ConsoleOut(toSender,requester->Owner() ); + else + con << toSender; } - else - { - con << toSender; - } return NULL; } // 0 matches. The user can't spell. Complain about that, too. else { tOutput toSender( "$msg_nomatch", name ); - if ( requester ) + if (print) { - sn_ConsoleOut(toSender,requester->Owner() ); + if ( requester ) + sn_ConsoleOut(toSender,requester->Owner() ); + else + con << toSender; } - else - { - con << toSender; - } return NULL; } @@ -2652,8 +2652,7 @@ } #endif // DEDICATED -// time during which no repeaded chat messages are printed -static REAL se_alreadySaidTimeout=5.0; +REAL se_alreadySaidTimeout=5.0; static tSettingItem<REAL> se_alreadySaidTimeoutConf("SPAM_PROTECTION_REPEAT", se_alreadySaidTimeout); @@ -2671,7 +2670,7 @@ static bool se_silenceDefault = false; // flag indicating whether new players should be silenced // minimal access level for chat -static tAccessLevel se_chatAccessLevel = tAccessLevel_Program; +tAccessLevel se_chatAccessLevel = tAccessLevel_Program; static tSettingItem< tAccessLevel > se_chatAccessLevelConf( "ACCESS_LEVEL_CHAT", se_chatAccessLevel ); static tAccessLevelSetter se_chatAccessLevelConfLevel( se_chatAccessLevelConf, tAccessLevel_Owner ); @@ -2706,99 +2705,6 @@ static tSettingItem<bool> se_silAll("SILENCE_DEFAULT", se_silenceDefault); -// handles spam checking at the right time -eChatSpamTester::eChatSpamTester( ePlayerNetID * p, tString const & say ) -: tested_( false ), shouldBlock_( false ), player_( p ), say_( say ), factor_( 1 ) -{ - say_.RemoveTrailingColor(); -} - -bool eChatSpamTester::Block() -{ - if ( !tested_ ) - { - shouldBlock_ = Check(); - tested_ = true; - } - - return shouldBlock_; -} - -bool eChatSpamTester::Check() -{ - return false; - - nTimeRolling currentTime = tSysTimeFloat(); - - // check if the player already said the same thing not too long ago - for (short c = 0; c < player_->lastSaid.Len(); c++) - { - if( (say_.StripWhitespace() == player_->lastSaid[c].StripWhitespace()) && ( (currentTime - player_->lastSaidTimes[c]) < se_alreadySaidTimeout * factor_ ) ) - { - sn_ConsoleOut( tOutput("$spam_protection_repeat", say_ ), player_->Owner() ); - return true; - } - } - - REAL lengthMalus = say_.Len() / 20.0; - if ( lengthMalus > 4.0 ) - { - lengthMalus = 4.0; - } - - // extra spam severity factor - REAL factor = factor_; - - - // count color codes. We hate them. We really do. (Yeah, this calculation is inefficient.) - int colorCodes = (say_.Len() - tColoredString::RemoveColors( say_ ).Len())/8; - if ( colorCodes < 0 ) colorCodes = 0; - - - // apply them to the spam severity factor. Burn in hell, color code abusers. - static const double log2 = log(2); - factor *= log( 2 + colorCodes )/log2; - - if ( nSpamProtection::Level_Mild <= player_->chatSpam_.CheckSpam( (1+lengthMalus)*factor, player_->Owner(), tOutput("$spam_chat") ) ) - { - return true; - } - -#ifdef KRAWALL_SERVER - if ( player_->GetAccessLevel() > se_chatAccessLevel ) - { - // every once in a while, remind the public that someone has something to say - static double nextRequest = 0; - double now = tSysTimeFloat(); - if ( now > nextRequest && se_chatRequestTimeout > 0 ) - { - sn_ConsoleOut( tOutput("$access_level_chat_request", player_->GetColoredName(), player_->GetLogName() ), player_->Owner() ); - nextRequest = now + se_chatRequestTimeout; - } - else - { - sn_ConsoleOut( tOutput("$access_level_chat_denied" ), player_->Owner() ); - } - - return true; - } -#endif - - // update last said record - { - for( short zz = 12; zz>=1; zz-- ) - { - player_->lastSaid[zz] = player_->lastSaid[zz-1]; - player_->lastSaidTimes[zz] = player_->lastSaidTimes[zz-1]; - } - - player_->lastSaid[0] = say_; - player_->lastSaidTimes[0] = currentTime; - } - - return false; - } - // checks whether a player is silenced, giving him appropriate warnings if he is bool IsSilencedWithWarning( ePlayerNetID const * p ) { @@ -3573,6 +3479,8 @@ else #endif if (command == "/me") { + spam.lastSaidType_ = eChatMessageType_Me; + spam.say_ = spam.say_.SubStr(4); // cut /me prefix se_ChatMe( p, s, spam ); return; } @@ -3583,6 +3491,7 @@ return; } else if (command == "/teamleave") { + spam.lastSaidType_ = eChatMessageType_Command; se_ChatTeamLeave( p ); return; } @@ -3591,37 +3500,45 @@ return; } else if (command == "/teamshuffle" || command == "/shuffle") { + spam.lastSaidType_ = eChatMessageType_Command; se_ChatShuffle( p, s ); return; } else if (command == "/team") { + spam.lastSaidType_ = eChatMessageType_Team; se_ChatTeam( p, s, spam ); return; } else if (command == "/msg" ) { + spam.lastSaidType_ = eChatMessageType_Private; se_ChatMsg( p, s, spam ); return; } else if (command == "/players" || command == "/listplayers") { + spam.lastSaidType_= eChatMessageType_Command; se_ChatPlayers( p, s, command ); return; } #if defined(DEDICATED) && defined(KRAWALL_SERVER) else if (command == "/admins" || command == "/listadmins") { + spam.lastSaidType_ = eChatMessageType_Command; se_ListAdmins( p, s, command ); return; } #endif else if (command == "/vote" || command == "/callvote") { + spam.lastSaidType_ = eChatMessageType_Command; eVoter::HandleChat( p, s ); return; } else if (command == "/teams") { + spam.lastSaidType_ = eChatMessageType_Command; se_ChatTeams( p ); return; } else if (command == "/myteam") { + spam.lastSaidType_ = eChatMessageType_Command; eTeam *currentTeam = se_GetManagedTeam( p ); if( currentTeam ) { @@ -3630,16 +3547,19 @@ return; } else if (command == "/help") { + spam.lastSaidType_ = eChatMessageType_Command; se_Help( p, p, s ); return; } #ifdef DEDICATED else if ( command == "/rtfm" || command == "/teach" ) { + spam.lastSaidType_ = eChatMessageType_Command; se_Rtfm( command, p, s, spam ); return; } else { + spam.lastSaidType_ = eChatMessageType_Command; handle_chat_admin_commands( p, command, say, s, spam ); return; } @@ -4248,15 +4168,6 @@ loginWanted = P->autoLogin; } } - /* - else - { - SetName( "AI" ); - teamname = ""; - } - */ - lastSaid.SetLen(12); - lastSaidTimes.SetLen(12); se_PlayerNetIDs.Add(this,listID); object=NULL; @@ -4412,10 +4323,6 @@ { currentTeam->RemovePlayer( this ); } - -#ifdef DEBUG - con << *this << " destroyed.\n"; -#endif } static void se_PlayerRemovedHandler( Engine::PlayerRemoved const & removed, nSenderInfo const & sender ) @@ -5704,9 +5611,6 @@ nameTeamAfterMe = false; teamname = ""; - lastSaid.SetLen(12); - lastSaidTimes.SetLen(12); - pID=-1; se_PlayerNetIDs.Add(this,listID); object=NULL; Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2009-03-25 09:21:32 UTC (rev 9185) @@ -47,11 +47,29 @@ #include <set> #include <list> +#include <utility> +#include "eChat.h" namespace Engine{ class PlayerNetIDSync; } #define PLAYER_CONFITEMS (30+MAX_INSTANT_CHAT) +// maximal length of chat message +extern int se_SpamMaxLen; + +// Maximum number of chat entries to save for spam analysis +extern int se_lastSaidMaxEntries; + +// time during which no repeaded chat messages are printed +extern REAL se_alreadySaidTimeout; + +// minimal access level for chat +extern tAccessLevel se_chatAccessLevel; + +// time between public chat requests, set to 0 to disable +extern REAL se_chatRequestTimeout; + + // call on commands that only work on the server; quit if it returns true bool se_NeedsServer(char const * command, std::istream & s, bool strict = true ); @@ -207,9 +225,7 @@ int pID; tString teamname; // REAL rubberstatus; - tArray<tString> lastSaid; - tArray<nTimeRolling> lastSaidTimes; - // void SetLastSaid(tString ls); + tShortColor color; // our color unsigned short pingCharity; // max ping you are willing to take over @@ -224,6 +240,8 @@ bool renameAllowed_; //!< specifies if the player is allowed to rename or not, does not know about votes. nSpamProtection chatSpam_; + + eChatLastSaid lastSaid_; //!< last said information ePlayerNetID(int p=-1); virtual ~ePlayerNetID(); @@ -380,7 +398,7 @@ void BeNotLoggedIn() { SetAccessLevel( tAccessLevel_Program ); } tAccessLevel GetLastAccessLevel() const { return lastAccessLevel; } - static ePlayerNetID * FindPlayerByName( tString const & name, ePlayerNetID * requester = 0 ); //!< finds a player by name using lax name matching. Reports errors to the console or to the requesting player. + static ePlayerNetID * FindPlayerByName( tString const & name, ePlayerNetID * requester = 0, bool print=true ); //!< finds a player by name using lax name matching. Reports errors to the console or to the requesting player. void UpdateName(); //!< update the player name from either the client's wishes, either the admin's wishes. static void FilterName( tString const & in, tString & out ); //!< filters a name (removes unprintables, color codes and spaces) @@ -511,23 +529,6 @@ eCallbackGreeting(STRINGRETFUNC* f); }; -extern int se_SpamMaxLen; // maximal length of chat message - -class eChatSpamTester -{ -public: - eChatSpamTester( ePlayerNetID * p, tString const & say ); - bool Block(); - bool Check(); - - bool tested_; //!< flag indicating whether the chat line has already been checked fro spam - bool shouldBlock_; //!< true if the message should be blocked for spam - ePlayerNetID * player_; //!< the chatting player - tColoredString say_; //!< the chat line - REAL factor_; //!< extra spam weight factor - -}; - void ForceName ( std::istream & s ); // ****************************************************************************************** Modified: armagetronad/trunk/armagetronad/src/render/rScreen.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2009-03-25 09:21:32 UTC (rev 9185) @@ -839,7 +839,7 @@ return true; } -extern bool cycleprograminited; +bool cycleprograminited = false; bool sr_InitDisplay(){ cycleprograminited = false; Deleted: armagetronad/trunk/armagetronad/src/test/Makefile.am =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/test/Makefile.am 2009-03-24 23:32:06 UTC (rev 9181) +++ armagetronad/trunk/armagetronad/src/test/Makefile.am 2009-03-25 09:21:32 UTC (rev 9185) @@ -1,17 +0,0 @@ -# FIXME: don't duplicate this - -libtools_a_CXXFLAGS =$(AM_CXXFLAGS) -I${top_srcdir}/src/tools -libnetwork_a_CXXFLAGS=$(libtools_a_CXXFLAGS) -I${top_srcdir}/src/network -librender_a_CXXFLAGS =$(libtools_a_CXXFLAGS) -I${top_srcdir}/src/render -libui_a_CXXFLAGS =$(librender_a_CXXFLAGS) -I${top_srcdir}/src/ui -libengine_a_CXXFLAGS =$(libui_a_CXXFLAGS) -I${top_srcdir}/src/network -I${top_srcdir}/src/engine -libtron_a_CXXFLAGS =$(libengine_a_CXXFLAGS) -I${top_srcdir}/src/thirdparty/particles -I${top_srcdir}/src/tron - -noinst_PROGRAMS = chat_prefix_test - -chat_prefix_test_SOURCES = chat_prefix_test.cpp -chat_prefix_test_CXXFLAGS = $(libengine_a_CXXFLAGS) -chat_prefix_test_LDADD = ${top_builddir}/src/libenginecore.a ${top_builddir}/src/libengine.a \ - ${top_builddir}/src/libnetwork.a ${top_builddir}/src/libui.a \ - ${top_builddir}/src/librender.a ${top_builddir}/src/libtools.a - Copied: armagetronad/trunk/armagetronad/src/test/Makefile.am (from rev 9181, armagetronad/branches/0.2.8/armagetronad/src/test/Makefile.am) =================================================================== --- armagetronad/trunk/armagetronad/src/test/Makefile.am (rev 0) +++ armagetronad/trunk/armagetronad/src/test/Makefile.am 2009-03-25 09:21:32 UTC (rev 9185) @@ -0,0 +1,17 @@ +# FIXME: don't duplicate this + +libtools_a_CXXFLAGS =$(AM_CXXFLAGS) -I${top_srcdir}/src/tools +libnetwork_a_CXXFLAGS=$(libtools_a_CXXFLAGS) -I${top_srcdir}/src/network +librender_a_CXXFLAGS =$(libtools_a_CXXFLAGS) -I${top_srcdir}/src/render +libui_a_CXXFLAGS =$(librender_a_CXXFLAGS) -I${top_srcdir}/src/ui +libengine_a_CXXFLAGS =$(libui_a_CXXFLAGS) -I${top_srcdir}/src/network -I${top_srcdir}/src/engine +libtron_a_CXXFLAGS =$(libengine_a_CXXFLAGS) -I${top_srcdir}/src/thirdparty/particles -I${top_srcdir}/src/tron + +noinst_PROGRAMS = chat_prefix_test + +chat_prefix_test_SOURCES = chat_prefix_test.cpp +chat_prefix_test_CXXFLAGS = $(libengine_a_CXXFLAGS) +chat_prefix_test_LDADD = ${top_builddir}/src/libenginecore.a ${top_builddir}/src/libengine.a \ + ${top_builddir}/src/libnetwork.a ${top_builddir}/src/libui.a \ + ${top_builddir}/src/librender.a ${top_builddir}/src/libtools.a + Deleted: armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/test/chat_prefix_test.cpp 2009-03-24 23:32:06 UTC (rev 9181) +++ armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp 2009-03-25 09:21:32 UTC (rev 9185) @@ -1,162 +0,0 @@ -#include <libxml/xmlreader.h> -#include <iostream> - -#include "eChat.h" -#include "tString.h" -#include "ePlayer.h" - -struct Stats -{ - Stats() : sessions( 0 ), chats( 0 ), chatsThrough( 0 ), foundPrefixes( 0 ) { } - int sessions; - int chats; - int chatsThrough; - int foundPrefixes; - - static Stats stats; -}; - -Stats Stats::stats = Stats(); - - -tString ConvertXMLString( const xmlChar *x ) -{ - return tString( (const char *)x ); -} - -struct Session -{ - Session( int lineNumber ) :lineNumber_( lineNumber ), player_(), chatlog_() { } - - void AddSaid( const tString & say , nTimeRolling time ) - { - eChatSaidEntry entry( say, time, eChatMessageType_Public ); - chatlog_.push_back( entry ); - } - - int lineNumber_; - tString player_; - std::vector< eChatSaidEntry > chatlog_; -}; - -void TestSession( const Session & session ) -{ - Stats::stats.sessions += 1; - - ePlayerNetID player; - player.SetName( session.player_ ); - - for ( size_t i = 0; i < session.chatlog_.size(); i++) - { - Stats::stats.chats += 1; - - const eChatSaidEntry & entry = session.chatlog_[i]; - - eChatPrefixSpamTester tester( &player, entry ); - - tString out; - nTimeRolling timeOut; - eChatPrefixSpamType typeOut; - - if ( tester.Check( out, timeOut, typeOut ) ) - { - if ( typeOut != eChatPrefixSpamType_Known ) - { - std::cout << "Found from session starting at line number " << session.lineNumber_ << "\n\n"; - Stats::stats.foundPrefixes += 1; - } - } - else - { - Stats::stats.chatsThrough += 1; - player.lastSaid_.AddSaid( entry ); - } - } -} - -void ProcessNode( xmlTextReaderPtr reader ) -{ - static Session currentSession( 0 ); - - int type = xmlTextReaderNodeType( reader ); - - if ( type == XML_READER_TYPE_END_ELEMENT && xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Session" ) ) - { - TestSession( currentSession ); - } - - if ( type != XML_READER_TYPE_ELEMENT ) - return; - - if ( xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Session" ) ) - { - currentSession = Session( xmlTextReaderGetParserLineNumber( reader ) ); - } - else if ( xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Player" ) ) - { - xmlChar *xmlPlayer = xmlTextReaderReadString( reader ); - currentSession.player_ = ConvertXMLString( xmlPlayer ); - xmlFree( xmlPlayer ); - } - else if ( xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Said" ) ) - { - xmlChar *xmlTime = xmlTextReaderGetAttribute( reader, BAD_CAST "time" ); - xmlChar *xmlSaid = xmlTextReaderReadString( reader ); - - long time = atol( (const char *)xmlTime ); - tString say = ConvertXMLString( xmlSaid ); - - currentSession.AddSaid( say, time ); - - xmlFree( xmlTime ); - xmlFree( xmlSaid ); - } -} - -bool Parse( const char *filename ) -{ - int status; - xmlTextReaderPtr reader = xmlNewTextReaderFilename( filename ); - if ( reader != NULL ) - { - status = xmlTextReaderRead( reader ); - while ( status == 1 ) - { - ProcessNode( reader ); - status = xmlTextReaderRead(reader); - } - xmlFreeTextReader( reader ); - - if ( status != 0 ) - { - std::cerr << "Parsing error\n"; - return false; - } - } - else - { - std::cerr << "Unable to open '" << filename << "'\n"; - return false; - } - - return true; -} - -int main( int argc, const char *argv[] ) -{ - if ( argc != 2 ) - { - std::cerr << "Usage: chat_prefix_test <chat.xml>\n"; - return 1; - } - - int success = Parse( argv[1] ) ? 0 : 1; - - std::cout << "chat_prefix_test done!\n"; - std::cout << "Statistics:\n\tNumber of sessions tested: " << Stats::stats.sessions - << "\n\tNumber of chats: " << Stats::stats.chats - << "\n\tNumber of chats let through: " << Stats::stats.chatsThrough - << "\n\tNumber of chats blocked: " << Stats::stats.chats - Stats::stats.chatsThrough - << "\n\tNumber of chat prefixes found: " << Stats::stats.foundPrefixes << "\n"; - return success; -} Copied: armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp (from rev 9181, armagetronad/branches/0.2.8/armagetronad/src/test/chat_prefix_test.cpp) =================================================================== --- armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp (rev 0) +++ armagetronad/trunk/armagetronad/src/test/chat_prefix_test.cpp 2009-03-25 09:21:32 UTC (rev 9185) @@ -0,0 +1,162 @@ +#include <libxml/xmlreader.h> +#include <iostream> + +#include "eChat.h" +#include "tString.h" +#include "ePlayer.h" + +struct Stats +{ + Stats() : sessions( 0 ), chats( 0 ), chatsThrough( 0 ), foundPrefixes( 0 ) { } + int sessions; + int chats; + int chatsThrough; + int foundPrefixes; + + static Stats stats; +}; + +Stats Stats::stats = Stats(); + + +tString ConvertXMLString( const xmlChar *x ) +{ + return tString( (const char *)x ); +} + +struct Session +{ + Session( int lineNumber ) :lineNumber_( lineNumber ), player_(), chatlog_() { } + + void AddSaid( const tString & say , nTimeRolling time ) + { + eChatSaidEntry entry( say, time, eChatMessageType_Public ); + chatlog_.push_back( entry ); + } + + int lineNumber_; + tString player_; + std::vector< eChatSaidEntry > chatlog_; +}; + +void TestSession( const Session & session ) +{ + Stats::stats.sessions += 1; + + ePlayerNetID player; + player.SetName( session.player_ ); + + for ( size_t i = 0; i < session.chatlog_.size(); i++) + { + Stats::stats.chats += 1; + + const eChatSaidEntry & entry = session.chatlog_[i]; + + eChatPrefixSpamTester tester( &player, entry ); + + tString out; + nTimeRolling timeOut; + eChatPrefixSpamType typeOut; + + if ( tester.Check( out, timeOut, typeOut ) ) + { + if ( typeOut != eChatPrefixSpamType_Known ) + { + std::cout << "Found from session starting at line number " << session.lineNumber_ << "\n\n"; + Stats::stats.foundPrefixes += 1; + } + } + else + { + Stats::stats.chatsThrough += 1; + player.lastSaid_.AddSaid( entry ); + } + } +} + +void ProcessNode( xmlTextReaderPtr reader ) +{ + static Session currentSession( 0 ); + + int type = xmlTextReaderNodeType( reader ); + + if ( type == XML_READER_TYPE_END_ELEMENT && xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Session" ) ) + { + TestSession( currentSession ); + } + + if ( type != XML_READER_TYPE_ELEMENT ) + return; + + if ( xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Session" ) ) + { + currentSession = Session( xmlTextReaderGetParserLineNumber( reader ) ); + } + else if ( xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Player" ) ) + { + xmlChar *xmlPlayer = xmlTextReaderReadString( reader ); + currentSession.player_ = ConvertXMLString( xmlPlayer ); + xmlFree( xmlPlayer ); + } + else if ( xmlStrEqual( xmlTextReaderConstName( reader ), BAD_CAST "Said" ) ) + { + xmlChar *xmlTime = xmlTextReaderGetAttribute( reader, BAD_CAST "time" ); + xmlChar *xmlSaid = xmlTextReaderReadString( reader ); + + long time = atol( (const char *)xmlTime ); + tString say = ConvertXMLString( xmlSaid ); + + currentSession.AddSaid( say, time ); + + xmlFree( xmlTime ); + xmlFree( xmlSaid ); + } +} + +bool Parse( const char *filename ) +{ + int status; + xmlTextReaderPtr reader = xmlNewTextReaderFilename( filename ); + if ( reader != NULL ) + { + status = xmlTextReaderRead( reader ); + while ( status == 1 ) + { + ProcessNode( reader ); + status = xmlTextReaderRead(reader); + } + xmlFreeTextReader( reader ); + + if ( status != 0 ) + { + std::cerr << "Parsing error\n"; + return false; + } + } + else + { + std::cerr << "Unable to open '" << filename << "'\n"; + return false; + } + + return true; +} + +int main( int argc, const char *argv[] ) +{ + if ( argc != 2 ) + { + std::cerr << "Usage: chat_prefix_test <chat.xml>\n"; + return 1; + } + + int success = Parse( argv[1] ) ? 0 : 1; + + std::cout << "chat_prefix_test done!\n"; + std::cout << "Statistics:\n\tNumber of sessions tested: " << Stats::stats.sessions + << "\n\tNumber of chats: " << Stats::stats.chats + << "\n\tNumber of chats let through: " << Stats::stats.chatsThrough + << "\n\tNumber of chats blocked: " << Stats::stats.chats - Stats::stats.chatsThrough + << "\n\tNumber of chat prefixes found: " << Stats::stats.foundPrefixes << "\n"; + return success; +} Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-03-25 09:15:24 UTC (rev 9184) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-03-25 09:21:32 UTC (rev 9185) @@ -100,7 +100,7 @@ //tCONTROLLED_PTR(ePlayerNetID) lastEnemyInfluence; // the last enemy wall we encountered //REAL lastTime; // the time it was drawn at bool headlights=0; -bool cycleprograminited=0; +extern bool cycleprograminited; static float sg_cycleSyncSmoothTime = .1f; static tSettingItem<float> conf_smoothTime ("CYCLE_SMOOTH_TIME", sg_cycleSyncSmoothTime); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-03-25 09:34:11
|
Revision: 9186 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9186&view=rev Author: z-man Date: 2009-03-25 09:33:58 +0000 (Wed, 25 Mar 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9181 to 9185: ------------------------------------------------------------------------ r9184 | bazaarmagetron | 2009-03-25 10:15:24 +0100 (Wed, 25 Mar 2009) | 4 lines author: Manuel Moos Removed test for now. They don't seem to compile, at least not for out-of-source builds. ------------------------------------------------------------------------ r9183 | bazaarmagetron | 2009-03-25 03:13:45 +0100 (Wed, 25 Mar 2009) | 2 lines Daniel Lee Harple: If a message is directed towards a player, cut the player name off the message so we can check for prefix spam. ------------------------------------------------------------------------ r9182 | bazaarmagetron | 2009-03-25 00:48:58 +0100 (Wed, 25 Mar 2009) | 1 line Daniel Lee Harple: Added prefix spam entry ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9181&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/src/engine/eChat.cpp armagetronad/trunk/armagetronad/src/engine/eChat.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9181 + /armagetronad/branches/0.2.8:8751-8852,8855-9185 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2009-03-25 09:21:32 UTC (rev 9185) +++ armagetronad/trunk/armagetronad/NEWS 2009-03-25 09:33:58 UTC (rev 9186) @@ -87,6 +87,12 @@ - Added support for armagetronad URLs on Mac OS X and KDE -- armagetronad://<server>[:<port>]. port defaults to 4534. - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. +Changes since 0.2.8.3_beta3: +============================ +- Chat prefix spam protection. Guards against prefix spam, such as when a + user always changes their chat message color, or prefixes all messages + with a clan tag. Enable/disable with the PREFIX_SPAM_ENABLE setting. + Changes since 0.2.8.3_beta2: ============================ - Fixed 'invincibility' bug. It really was cycles freezing in time. Modified: armagetronad/trunk/armagetronad/src/engine/eChat.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-03-25 09:21:32 UTC (rev 9185) +++ armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-03-25 09:33:58 UTC (rev 9186) @@ -230,21 +230,11 @@ return lastSaid_; } -eChatLastSaid::SaidList & eChatLastSaid::LastSaid() -{ - return lastSaid_; -} - const eChatLastSaid::PrefixList & eChatLastSaid::KnownPrefixes() const { return knownPrefixes_; } -eChatLastSaid::PrefixList & eChatLastSaid::KnownPrefixes() -{ - return knownPrefixes_; -} - void eChatLastSaid::AddSaid( const eChatSaidEntry & saidEntry ) { if ( lastSaid_.size() >= static_cast< size_t >( se_lastSaidMaxEntries ) ) @@ -402,7 +392,7 @@ } - eChatLastSaid::SaidList & lastSaid = player_->lastSaid_.LastSaid(); + eChatLastSaid::SaidList & lastSaid = player_->lastSaid_.lastSaid_; // Map of Prefix => Data std::map< tString, PrefixEntry > foundPrefixes; @@ -420,13 +410,17 @@ { const tString prefix = say_.Said().SubStr(0, common); - // User is talking to a player. Not prefix spam + // User is talking to a player. Not prefix spam, but we still check the + // message text excluding the player name. // Example: Player 1: grind center. [etc...] - if ( ChatDirectedTowardsPlayer( prefix ) ) + int nameLen; + if ( ChatDirectedTowardsPlayer( prefix, nameLen ) ) { - // mark message so we don't need to check it next time said.SetType( eChatMessageType_Public_Direct ); + said.said_ = said.said_.SubStr( nameLen + 1 ); + return false; + } if ( foundPrefixes.find(prefix) == foundPrefixes.end() ) @@ -478,13 +472,13 @@ void eChatPrefixSpamTester::RemovePrefixEntries( const tString & prefix, const eChatSaidEntry & e ) const { eChatSaidEntry entry( prefix, e.Time(), e.Type() ); - eChatLastSaid::SaidList & xs = player_->lastSaid_.LastSaid(); + eChatLastSaid::SaidList & xs = player_->lastSaid_.lastSaid_; xs.erase( std::remove_if( xs.begin(), xs.end(), IsPrefixPredicate< eChatSaidEntry >( entry, false ) ), xs.end() ); } bool eChatPrefixSpamTester::HasKnownPrefix( tString & out, nTimeRolling & timeOut ) const { - eChatLastSaid::PrefixList & prefixes = player_->lastSaid_.KnownPrefixes(); + eChatLastSaid::PrefixList & prefixes = player_->lastSaid_.knownPrefixes_; eChatLastSaid::Prefix testPrefix( say_.Said(), 0, 0 ); eChatLastSaid::PrefixList::iterator it = @@ -511,12 +505,12 @@ void eChatPrefixSpamTester::RemoveTimedOutPrefixes() const { - eChatLastSaid::PrefixList & xs = player_->lastSaid_.KnownPrefixes(); + eChatLastSaid::PrefixList & xs = player_->lastSaid_.knownPrefixes_; eChatLastSaid::Prefix entry( tString(), 0, say_.Time() ); xs.erase( std::remove_if( xs.begin(), xs.end(), TimeOutPredicate< eChatLastSaid::Prefix >( entry ) ), xs.end() ); } -bool eChatPrefixSpamTester::ChatDirectedTowardsPlayer( const tString & prefix ) const +bool eChatPrefixSpamTester::ChatDirectedTowardsPlayer( const tString & prefix, int & nameLen ) const { tString possiblePlayer( prefix ); @@ -526,12 +520,15 @@ possiblePlayer = possiblePlayer.SubStr( 0, possiblePlayer.Len() - 3 ); if ( ePlayerNetID::FindPlayerByName( possiblePlayer, 0, false ) ) + { + nameLen = possiblePlayer.Len(); return true; + } return false; } bool eChatPrefixSpamTester::ShouldCheckMessage( const eChatSaidEntry & said ) const { - return said.Type() >= eChatMessageType_Public; + return said.Type() >= eChatMessageType_Public_Direct; } Modified: armagetronad/trunk/armagetronad/src/engine/eChat.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.h 2009-03-25 09:21:32 UTC (rev 9185) +++ armagetronad/trunk/armagetronad/src/engine/eChat.h 2009-03-25 09:33:58 UTC (rev 9186) @@ -50,6 +50,8 @@ eChatMessageType_Me = 5 //!< /me }; +class eChatPrefixSpamTester; + /** * Contains information about an individual chat message */ @@ -80,7 +82,7 @@ * @param newType The new message type. * @see Type() */ - void SetType(eChatMessageType newType); + void SetType( eChatMessageType newType ); /** * Does this message start with the other message? @@ -88,6 +90,9 @@ bool StartsWith( const eChatSaidEntry & other ) const; private: + + friend class eChatPrefixSpamTester; + tString said_; nTimeRolling time_; eChatMessageType type_; @@ -124,7 +129,6 @@ * @return The last said entry */ const SaidList & LastSaid() const; - SaidList & LastSaid(); /** * Chat can be checked to guard against prefix-spam. When a prefix has @@ -133,7 +137,6 @@ * @return The known prefixes */ const PrefixList & KnownPrefixes() const; - PrefixList & KnownPrefixes(); /** * Add a new said entry @@ -153,6 +156,8 @@ nTimeRolling AddPrefix( const tString & prefix, REAL score, nTimeRolling now ); private: + friend class eChatPrefixSpamTester; + SaidList lastSaid_; PrefixList knownPrefixes_; }; @@ -217,7 +222,9 @@ */ bool Check( tString & out, nTimeRolling & timeOut ); bool Check( tString & out, nTimeRolling & timeOut, eChatPrefixSpamType & typeOut ); + private: + class PrefixEntry { public: @@ -245,9 +252,10 @@ * Player 1: change your name * * @param prefix The possible player name + * @param nameLen The length of the name searched for * @return Was the prefix a player name? */ - bool ChatDirectedTowardsPlayer( const tString & prefix ) const; + bool ChatDirectedTowardsPlayer( const tString & prefix, int & nameLen ) const; /** * We should only check certain message types. For example, commands This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-04-03 22:40:54
|
Revision: 9204 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9204&view=rev Author: z-man Date: 2009-04-03 22:40:46 +0000 (Fri, 03 Apr 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9191 to 9201: ------------------------------------------------------------------------ r9201 | bazaarmagetron | 2009-04-03 22:10:15 +0200 (Fri, 03 Apr 2009) | 2 lines Manuel Moos: Translated prefix spam messages. ------------------------------------------------------------------------ r9200 | bazaarmagetron | 2009-04-03 22:09:31 +0200 (Fri, 03 Apr 2009) | 2 lines Manuel Moos: Updated. ------------------------------------------------------------------------ r9199 | z-man | 2009-04-03 21:48:10 +0200 (Fri, 03 Apr 2009) | 1 line Added eChat files. ------------------------------------------------------------------------ r9195 | bazaarmagetron | 2009-03-31 15:34:38 +0200 (Tue, 31 Mar 2009) | 2 lines Daniel Lee Harple: Updated other ePlayerNetID constructor initializer list. ------------------------------------------------------------------------ r9194 | bazaarmagetron | 2009-03-30 11:41:00 +0200 (Mon, 30 Mar 2009) | 4 lines author: Manuel Moos Worked around gcc 3.3's refusal to accept a freshly constructed string as const & parameter. ------------------------------------------------------------------------ r9193 | bazaarmagetron | 2009-03-28 20:53:11 +0100 (Sat, 28 Mar 2009) | 2 lines Daniel Lee Harple: Fixed VOTING_MATURITY. Fixes bug #350469 ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9191&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/src/engine/eChat.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/engine/eVoter.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2009-04-03 21:45:09 UTC (rev 9203) +++ armagetronad/trunk/armagetronad/NEWS 2009-04-03 22:40:46 UTC (rev 9204) @@ -93,7 +93,12 @@ ============================ - Chat prefix spam protection. Guards against prefix spam, such as when a user always changes their chat message color, or prefixes all messages - with a clan tag. Enable/disable with the PREFIX_SPAM_ENABLE setting. + with a clan tag. Toggle with the PREFIX_SPAM_ENABLE setting. +- Fixed VOTING_MATURITY to use the time when the player entered as its + reference time. +- Fixed single player highscore list not containing everyone. +- Fixed generation of duplicate names in highscore lists. +- Fixed camera crash when the grid is empty. Changes since 0.2.8.3_beta2: ============================ Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2009-04-03 21:45:09 UTC (rev 9203) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2009-04-03 22:40:46 UTC (rev 9204) @@ -403,6 +403,16 @@ enable_chat_help Wenn dies auf 0 gesetzt wird, dann werden alle \xF6ffentlichen Chat-Nachrichten unterdr\xFCckt (Auf dem Server sind Nachrichten von Administratoren und /msg und /team-Nachrichten Ausnahmen). allow_team_change_help Nur wenn dieser Wert 1 ist d\xFCrfen Spieler irh Team beliebig w\xE4hlen. Wenn dieser Wert 0 ist, muss ein Administrator jeden Teamwechsel mit ALLOW_TEAM_CHANGE_PLAYER authorisieren. +# spam prefix settings +prefix_spam_enable_help Soll chat auf nervige gemeinsame Prefixe getestet werden? 1 um die Tests to aktivieren, 0 um sie zu deaktivieren. +prefix_spam_start_color_multiplier_help Prefixe, die Farbcodes enthalten, bekommen ihre Spam-Bewertung mit diesem Wert multipliziert. +prefix_spam_length_multiplier_help Die L\xE4nge des Prefixes geht mit diesem Faktor in die Spam-Bewertung ein. +prefix_spam_number_color_codes_multiplier_help Die Zahl der Farbcodes in einem Prefix geht mit diesem Faktor in die Spam-Bewertung ein. +prefix_spam_number_known_prefixes_multiplier_help Die Anzahl der bisher bekannten Spam-Prefixe geht mit diesem Faktor in die Spam-Bewertung eines neuen Prefixes ein. +prefix_spam_required_score_help Die Spam-Bewertung, ab der ein Prefix als Spam gewertet und blockiert wird. +prefix_spam_timeout_multiplier_help Das Produkt aus diesem Wert und der Spam-Bewertung bestimmt, wie lange ein Prefix blockiert bleibt. + + # spam kick messages spam_chat Du warst zu laut. spam_teamchage Du hast zu oft das Team gewechselt. @@ -2288,6 +2298,8 @@ player_pingcharity_changed Ping-Spende ist nun \2 (vorher: \1).\n spam_protection_repeat SPAM PROTECTION: du sagsest bereits: \1\n spam_protection LABER-SCHUTZ: du bist f\xFCr die n\xE4chsten \1 Sekunden geknebelt.\n +spam_protection_prefix LABER_SCHUTZ: deine Nachrichten fangen alle mit \1 an.\nLABER-SCHUTZ: Nachrichten mit diesem Prefix werden erst wieder in \2 Sekunden erlaubt sein\n + spam_protection_silenceall LABER-SCHUTZ: \xF6ffentliches Reden ist verboten.\n spam_protection_silenced LABER-SCHUTZ: du wurdest vom Administrator geknebelt.\n spam_protection_silenced_default LABER-SCHUTZ: der Administrator hat dir dein Rederecht zur\xFCckgegeben. Modified: armagetronad/trunk/armagetronad/src/engine/eChat.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-04-03 21:45:09 UTC (rev 9203) +++ armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-04-03 22:40:46 UTC (rev 9204) @@ -504,7 +504,8 @@ void eChatPrefixSpamTester::RemoveTimedOutPrefixes() const { eChatLastSaid::PrefixList & xs = player_->lastSaid_.knownPrefixes_; - eChatLastSaid::Prefix entry( tString(), 0, say_.Time() ); + tString empty; + eChatLastSaid::Prefix entry( empty, 0, say_.Time() ); xs.erase( std::remove_if( xs.begin(), xs.end(), TimeOutPredicate< eChatLastSaid::Prefix >( entry ) ), xs.end() ); } Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-04-03 21:45:09 UTC (rev 9203) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-04-03 22:40:46 UTC (rev 9204) @@ -4131,7 +4131,7 @@ static nSpamProtectionSettings se_chatSpamSettings( 1.0f, "SPAM_PROTECTION_CHAT", tOutput("$spam_protection") ); -ePlayerNetID::ePlayerNetID(int p):nNetObject(),listID(-1), teamListID(-1), allowTeamChange_(false), registeredMachine_(0), pID(p),chatSpam_( se_chatSpamSettings ) +ePlayerNetID::ePlayerNetID(int p):nNetObject(),listID(-1), teamListID(-1), timeCreated_( tSysTimeFloat() ), allowTeamChange_(false), registeredMachine_(0), pID(p), chatSpam_( se_chatSpamSettings ) { // default access level lastAccessLevel = tAccessLevel_Default; @@ -4192,7 +4192,6 @@ RequestSync(); } - void ePlayerNetID::Activity() { // the player was active; therefore, he cannot possibly be chatting_ or disconnected. @@ -5592,7 +5591,7 @@ //! creates a netobject form sync data ePlayerNetID::ePlayerNetID( Engine::PlayerNetIDSync const & sync, nSenderInfo const & sender ) -: nNetObject( sync.base(), sender ),listID(-1), teamListID(-1) +: nNetObject( sync.base(), sender ),listID(-1), teamListID(-1), timeCreated_( tSysTimeFloat() ) , allowTeamChange_(false), registeredMachine_(0), chatSpam_( se_chatSpamSettings ) { // default access level Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2009-04-03 21:45:09 UTC (rev 9203) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2009-04-03 22:40:46 UTC (rev 9204) @@ -180,6 +180,7 @@ bool silenced_; // flag indicating whether the player has been silenced int suspended_; //! number of rounds the player is currently suspended from playing + nTimeAbsolute timeCreated_; // the time the player was created nTimeAbsolute timeJoinedTeam; // the time the player joined the team he is in now tCONTROLLED_PTR(eTeam) nextTeam; // the team we're in ( logically ) tCONTROLLED_PTR(eTeam) currentTeam; // the team we currently are spawned for @@ -388,6 +389,8 @@ void GetScoreFromDisconnectedCopy(); // get the player's data from the previous login void Chat(const tString &s); + + nTimeAbsolute GetTimeCreated() const { return timeCreated_; } virtual void Color( REAL&r, REAL&g, REAL&b ) const; virtual void TrailColor( REAL&r, REAL&g, REAL&b ) const; Modified: armagetronad/trunk/armagetronad/src/engine/eVoter.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eVoter.cpp 2009-04-03 21:45:09 UTC (rev 9203) +++ armagetronad/trunk/armagetronad/src/engine/eVoter.cpp 2009-04-03 22:40:46 UTC (rev 9204) @@ -1133,10 +1133,10 @@ double time = tSysTimeFloat(); // check whether the issuer is allowed to start a vote - if ( sender && sender->lastChange_ + se_votingMaturity > tSysTimeFloat() && sender->lastChange_ * 2 > tSysTimeFloat() ) + if ( sender && player_ && player_->GetTimeCreated() + se_votingMaturity > time ) { - REAL time = sender->lastChange_ + se_votingMaturity - tSysTimeFloat(); - tOutput message( "$vote_maturity", time ); + REAL timeLeft = player_->GetTimeCreated() + se_votingMaturity - time; + tOutput message( "$vote_maturity", timeLeft ); sn_ConsoleOut( message, senderID ); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2009-09-11 11:35:45
|
Revision: 9259 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9259&view=rev Author: z-man Date: 2009-09-11 11:35:31 +0000 (Fri, 11 Sep 2009) Log Message: ----------- Merging branch 0.2.8 from revision 9219 to 9258: ------------------------------------------------------------------------ r9257 | bazaarmagetron | 2009-09-11 12:39:48 +0200 (Fri, 11 Sep 2009) | 163 lines author: Bazaarmagetron Automatic merging of commits that would change history order: ------------------------------------------------------------ revno: 1136.5.3 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Fri 2009-09-11 10:46:10 +0200 message: Clarified purpose of directory generation loop. ------------------------------------------------------------ revno: 1136.5.2 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Fri 2009-09-11 10:45:50 +0200 message: Fixed crash in server polling, mostly hitting master servers. ------------------------------------------------------------ revno: 1136.5.1 committer: Bazaarmagetron <z-...@us...> branch nick: 0.2.8-armagetronad-sync timestamp: Fri 2009-09-11 00:20:29 +0200 message: Automatic merging of commits that would change history order: ------------------------------------------------------------ Use --include-merges or -n0 to see merged revisions. ------------------------------------------------------------ revno: 1136.4.1 committer: Bazaarmagetron <z-...@us...> branch nick: 0.2.8-armagetronad-sync timestamp: Thu 2009-09-10 23:16:09 +0200 message: Automatic merging of commits that would change history order: ------------------------------------------------------------ Use --include-merges or -n0 to see merged revisions. ------------------------------------------------------------ revno: 1136.1.12 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Wed 2009-09-09 11:37:28 +0200 message: No longer updating player names on login/logout event to prevent name change abuse. ------------------------------------------------------------ revno: 1136.1.11 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Wed 2009-09-09 09:34:05 +0200 message: Implemented model cache to avoid long round start times where model loading is slow. ------------------------------------------------------------ revno: 1136.1.10 committer: epsy <ep...@fr...> branch nick: 0.2.8 timestamp: Sat 2009-09-05 11:47:43 +0200 message: Finally set GAME_TYPE in the example fortress config. ------------------------------------------------------------ revno: 1136.1.9 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Tue 2009-07-28 01:33:02 -0400 message: Write the players on the team for ROUND_WINNER and MATCH_WINNER. Perhaps a better solution would be to have PLAYER_JOIN_TEAM, PLAYER_LEAVE_TEAM, and TEAM_RENAMED ladderlog entries. ------------------------------------------------------------ revno: 1136.1.8 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Mon 2009-07-27 12:17:19 -0400 message: Added a custom language file. Create language/custom.txt in your user data directory, with contents: language Custom # custom language strings... Set LANGUAGE_FIRST Custom and LANGUAGE_Second <your-primary-language> No need to modify game-provided config files anymore. ------------------------------------------------------------ revno: 1136.1.7 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Sun 2009-07-26 10:54:01 -0400 message: Use tSettingItem for these. ------------------------------------------------------------ revno: 1136.1.6 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Sun 2009-07-19 06:38:10 -0400 message: After dying in in-cam mode, switch to the players initial camera preference. ------------------------------------------------------------ revno: 1136.1.5 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Sun 2009-07-05 21:47:38 +0200 message: fixed typo. ------------------------------------------------------------ revno: 1136.1.4 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Sun 2009-07-05 13:06:16 +0200 message: Avoiding client drops due to stalling authentication queue between rounds. ------------------------------------------------------------ revno: 1136.1.3 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Sat 2009-06-20 05:29:52 +0200 message: Merge from 0.2.8-armagetronad-shufflespam ------------------------------------------------------------ revno: 1136.3.4 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-shufflespam timestamp: Fri 2009-06-19 17:41:24 +0200 message: Language tweak ------------------------------------------------------------ revno: 1136.3.3 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-shufflespam timestamp: Fri 2009-06-19 11:43:44 +0200 message: Documented negative/zero value for SHUFFLE_SPAM_MESSAGES_PER_ROUND. ------------------------------------------------------------ revno: 1136.3.2 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-shufflespam timestamp: Fri 2009-06-19 00:00:05 +0200 message: Removed double semicolon typo ------------------------------------------------------------ revno: 1136.3.1 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-shufflespam timestamp: Thu 2009-06-18 23:53:26 +0200 message: Players can no longer spam chat with /shuffle messages. Added new setting SHUFFLE_SPAM_MESSAGES_PER_ROUND, a per round, per player limit on the number of shuffle messages displayed. ------------------------------------------------------------ revno: 1136.1.2 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Sat 2009-06-20 05:29:06 +0200 message: Merged from 0.2.8-armagetronad-suspend_fix ------------------------------------------------------------ revno: 1136.2.1 committer: Daniel Lee Harple <lee...@gm...> branch nick: 0.2.8-armagetronad-work timestamp: Thu 2009-06-18 14:30:43 +0200 message: A player is now removed from the game immediately when suspended. ------------------------------------------------------------ revno: 1136.1.1 committer: Manuel Moos <z-...@us...> branch nick: armagetronad timestamp: Mon 2009-05-04 20:23:53 +0200 message: Fixed crash when getting disconnected from a server with higher MAXCLIENTS than the client has. ------------------------------------------------------------------------ r9256 | bazaarmagetron | 2009-09-11 00:23:35 +0200 (Fri, 11 Sep 2009) | 4 lines Automatic merging of commits that would change history order: ------------------------------------------------------------ Use --include-merges or -n0 to see merged revisions. ------------------------------------------------------------------------ r9227 | bazaarmagetron | 2009-04-25 09:31:13 +0200 (Sat, 25 Apr 2009) | 2 lines Manuel Moos: Updated with changes. ------------------------------------------------------------------------ r9226 | bazaarmagetron | 2009-04-25 09:30:35 +0200 (Sat, 25 Apr 2009) | 2 lines Manuel Moos: Translated user ban/unban messages. ------------------------------------------------------------------------ r9225 | bazaarmagetron | 2009-04-25 09:18:59 +0200 (Sat, 25 Apr 2009) | 2 lines Manuel Moos: Added DDMJ's change requests: no CPUs, conquest timeout in team sumo. ------------------------------------------------------------------------ r9224 | bazaarmagetron | 2009-04-25 09:18:11 +0200 (Sat, 25 Apr 2009) | 2 lines Manuel Moos: Got rid of extra space in new round message. ------------------------------------------------------------------------ r9223 | bazaarmagetron | 2009-04-23 01:17:41 +0200 (Thu, 23 Apr 2009) | 2 lines Manuel Moos: Pausing sound between rounds to avoid stuttering. (Not merged, does not apply) ------------------------------------------------------------------------ r9221 | bazaarmagetron | 2009-04-20 12:30:00 +0200 (Mon, 20 Apr 2009) | 2 lines Manuel Moos: Removed hardcoded 10000 vertex limit for .ase files that wasn't checked and caused crashes on violation. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9219&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/batch/make/uninstall armagetronad/trunk/armagetronad/config/examples/cvs_test/fortress_scoring.cfg armagetronad/trunk/armagetronad/config/examples/cvs_test/sumo_complete.cfg armagetronad/trunk/armagetronad/config/examples/teamsumo.cfg armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/french.txt armagetronad/trunk/armagetronad/language/languages.txt.in armagetronad/trunk/armagetronad/language/polish.txt armagetronad/trunk/armagetronad/language/polish_transliterated.txt armagetronad/trunk/armagetronad/src/engine/eCamera.cpp armagetronad/trunk/armagetronad/src/engine/eChat.cpp armagetronad/trunk/armagetronad/src/engine/eChat.h armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/engine/eTeam.cpp armagetronad/trunk/armagetronad/src/engine/eTeam.h armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp armagetronad/trunk/armagetronad/src/render/rModel.cpp armagetronad/trunk/armagetronad/src/render/rModel.h armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9258 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/NEWS 2009-09-11 11:35:31 UTC (rev 9259) @@ -94,11 +94,18 @@ - Added support for armagetronad URLs on Mac OS X and KDE -- armagetronad://<server>[:<port>]. port defaults to 4534. - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. +========================== +Changes since 0.2.8.3_rc2: +- Players can no longer spam chat with /shuffle messages. Added new setting + SHUFFLE_SPAM_MESSAGES_PER_ROUND, a per round, per player limit on the number + of shuffle messages displayed. Changes since 0.2.8.3_rc1: ========================== - Fixed dark color filters, such as FILTER_DARK_COLOR_STRINGS, to not filter the reset color. +- ASE moviepack models no longer have a vertex count limit +- Fixed endless recursion crash between rounds Changes since 0.2.8.3_beta3: ============================ Modified: armagetronad/trunk/armagetronad/batch/make/uninstall =================================================================== --- armagetronad/trunk/armagetronad/batch/make/uninstall 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/batch/make/uninstall 2009-09-11 11:35:31 UTC (rev 9259) @@ -67,6 +67,7 @@ echo "" > ${UNINSTALL}.dir +# add all parent directories of those that are still game-specific while test -s ${UNINSTALL}.dir0; do sed -e "s,/[^/]*\$,," < ${UNINSTALL}.dir0 | grep ${PROGNAME} > ${UNINSTALL}.dir1 cat ${UNINSTALL}.dir1 >> ${UNINSTALL}.dir Modified: armagetronad/trunk/armagetronad/config/examples/cvs_test/fortress_scoring.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/examples/cvs_test/fortress_scoring.cfg 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/config/examples/cvs_test/fortress_scoring.cfg 2009-09-11 11:35:31 UTC (rev 9259) @@ -6,6 +6,8 @@ #SCORE_WIN 7 #SP_SCORE_WIN 7 FORTRESS_CONQUERED_SCORE 0 +GAME_TYPE 1 +SP_GAME_TYPE 1 SCORE_WIN 10 SP_SCORE_WIN 10 SCORE_SUICIDE 0 Modified: armagetronad/trunk/armagetronad/config/examples/cvs_test/sumo_complete.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/examples/cvs_test/sumo_complete.cfg 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/config/examples/cvs_test/sumo_complete.cfg 2009-09-11 11:35:31 UTC (rev 9259) @@ -11,6 +11,9 @@ # politics: no teams team_max_players 1 +# no CPUs +SP_MIN_PLAYERS 0 + # zone settings (also for compatibility with old clients, they need to stay exactly like this) WIN_ZONE_INITIAL_SIZE 56.56 WIN_ZONE_EXPANSION -.5656 Modified: armagetronad/trunk/armagetronad/config/examples/teamsumo.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/examples/teamsumo.cfg 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/config/examples/teamsumo.cfg 2009-09-11 11:35:31 UTC (rev 9259) @@ -24,6 +24,7 @@ FORTRESS_CONQUERED_WIN 0 FORTRESS_CONQUEST_DECAY_RATE -0.3 FORTRESS_CONQUEST_RATE 0 +FORTRESS_CONQUEST_TIMEOUT 5 FORTRESS_DEFEND_RATE 0.6 FORTRESS_MAX_PER_TEAM 1 FORTRESS_SURVIVE_WIN 1 @@ -59,7 +60,7 @@ ### Cycle Settings ### ###################### -BUG_COLOR_OVERFLOW 1 +BUG_COLOR_OVERFLOW 0 CYCLE_ACCEL 20 CYCLE_RUBBER 5 CYCLE_RUBBER_LEGACY 0 @@ -90,10 +91,11 @@ SP_TEAM_MIN_PLAYERS 1 SP_TEAMS_MAX 4 SP_TEAMS_MIN 2 -SP_WALLS_LENGTH 400 +SP_WALLS_LENGTH 40 +SP_MIN_PLAYERS 0 ###################### ### Sumo Game Type ### ###################### -GAME_TYPE 0 \ No newline at end of file +GAME_TYPE 0 Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2009-09-11 11:35:31 UTC (rev 9259) @@ -168,6 +168,9 @@ # ############################################################################################ +# Per round, per player limit on the number of shuffle messages displayed. A negative or zero value disables this check. +SHUFFLE_SPAM_MESSAGES_PER_ROUND 3 + SPAM_PROTECTION_REPEAT 5.0 # minimum time between identical chat messages. SPAM_PROTECTION 4.0 # minimum average time between chat messages in seconds so they are not considered spamming. Increase for more spam protection. Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2009-09-11 11:35:31 UTC (rev 9259) @@ -2233,7 +2233,7 @@ gamestate_resetnow_center Neues Match gamestate_resetnow_console Setzte Punktzahlen zur\xFCck...\n gamestate_resetnow_log Neues Match\n -gamestate_newround_console Los (Runde \1 von \2 )!\n +gamestate_newround_console Los (Runde \1 von \2)!\n gamestate_newround_goldengoal Los (Verl\xE4ngerung; Wer als erster die F\xFChrung \xFCbernimmt, gewinnt)!\n gamestate_newround_log Neue Runde\n gamestate_chat_wait Warte bis zu \2 Sekunden auf \1.\n @@ -2352,7 +2352,7 @@ no_real_teams Keine Teams mit mehr als einem Spieler.\n player_topologypolice Die Topologiepolizei befiehlt: \1 -team_shuffle \1 wird von Position \2 auf \3 verschoben.\n +team_shuffle \1 wird von Position \2 auf \3 verschoben. player_noshuffleup Du darfst dich hier nicht selbst bef\xF6rdern.\n player_noshuffle Dein Positions\xE4nderungswunsch hat keinen Effekt.\n player_shuffle_error /shuffle erwartet eine Zahl als Argument; mit explizitem Vorzeichen (+/-) wird die Position um die angegebene Zahl an Pl\xE4tzen ver\xE4ndert, ohne Vorzeichen geht es and die angegebene absolute Position.\n @@ -2923,7 +2923,7 @@ md5_password_remove_notfound Benutzer/Team \1 nicht gefunden.\n reserve_screen_name_help Reserviert einen Spitznamen f\xFCr einen registrierten Benutzer -reserve_screen_name_usage Verwendung: RESERVE_SCREEN_NAME <Spitzname (in Anf\xFCrungszeichen)> <Benutzername>\n +reserve_screen_name_usage Verwendung: RESERVE_SCREEN_NAME <Spitzname (in Anf\xFCrungszeichen)> <Benutzername>\n reserve_screen_name_change Der Spitzname "\1" ist f\xFCr \2 reserviert.\n user_alias_help Erlaubt es, Authentifizierungs-IDs umzubiegen: ein Spieler, der eigentlich als X authentifiziert ist, kann als Y erscheinen. @@ -2932,8 +2932,10 @@ ban_user_help Verbannt Spieler mit bestimmter Authentifizierungs-ID ban_user_message Benutzer \1 wurde verbannt.\n +ban_user_usage Verwendung: BAN_USER <global ID>\n unban_user_help Macht BAN_USER r\xFCckg\xE4ngig. unban_user_message Benutzer \1 ist nicht mehr verbannt.\n +unban_user_usage Verwendung: UNBAN_USER <global ID>\n ban_user_list_help Gibt die Liste der verbannten Authentifizierungs-IDs aus. md5_prefix_help Prefix, der bei lokalen Accounts zum Versch\xFCsseln des Passworts verwendet wird Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2009-09-11 11:35:31 UTC (rev 9259) @@ -396,6 +396,7 @@ ping_flood_time_100_help Minimum time for 100 ping packets from one machine to arrive. ping_flood_global_help The times PING_FLOOD_TIME_X, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. +shuffle_spam_messages_per_round_help Per round, per player limit on the number of shuffle messages displayed. A negative or zero value disables this check. spam_protection_repeat_help Minimum time between identical chat messages. spam_protection_help Harshness of spam protection; determines min delay between chat messages accepted. spam_protection_vote_help Extra factor for SPAM_PROTECTION for votes. @@ -2302,7 +2303,7 @@ gamestate_resetnow_center New Match gamestate_resetnow_console Resetting scores...\n gamestate_resetnow_log New Match\n -gamestate_newround_console Go (round \1 of \2 )!\n +gamestate_newround_console Go (round \1 of \2)!\n gamestate_newround_goldengoal Go (extra round; whoever gains the lead wins)!\n gamestate_newround_log New Round\n gamestate_chat_wait Waiting up to \2 seconds for \1 to finish chatting.\n @@ -2429,7 +2430,8 @@ no_real_teams No teams with more than one player.\n player_topologypolice Order from Topology Police: \1 -team_shuffle \1 gets shuffled from rank \2 to \3.\n +team_shuffle \1 gets shuffled from rank \2 to \3. +team_shuffle_suppress Future shuffle messages from this player will be suppressed.\n player_noshuffleup You are not allowed to shuffle up.\n player_noshuffle Your shuffling wish has no effect.\n player_shuffle_error /shuffle expects a number as argument; an explicit sign (+/-) will change your position by the indicated number of steps, no sign will shuffle you to the given position.\n @@ -2937,7 +2939,7 @@ access_level_chat_request \10xRESETT would like to chat, but is not authorized yet. Would someone be so kind and say "/op \2"?\n access_level_chat_denied 0xff7f7fChat denied,0xffffff insufficient access level.\n access_level_op_denied 0xff7f7f\1 denied,0xffffff insufficient access level.\n -access_level_op_overpowered 0xff7f7f\1 denied,0xffffff your need higher access righrs than your victim.\n +access_level_op_overpowered 0xff7f7f\1 denied,0xffffff your need higher access rights than your victim.\n access_level_op_self 0xff7f7f\1 denied,0xffffff can't do that to yourself :).\n access_level_op_denied_max 0xff7f7f\1 denied,0xffffff your victim already has maximal rights.\n access_level_op_denied_ai 0xff7f7f\1 denied,0xffffff your victim is an AI.\n Modified: armagetronad/trunk/armagetronad/language/french.txt =================================================================== --- armagetronad/trunk/armagetronad/language/french.txt 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/language/french.txt 2009-09-11 11:35:31 UTC (rev 9259) @@ -1616,7 +1616,7 @@ gamestate_resetnow_center Nouveau match! gamestate_resetnow_console Remise a zero des scores...\n gamestate_resetnow_log Nouveau match\n -gamestate_newround_console C'est parti (round \1 sur \2 )!\n +gamestate_newround_console C'est parti (round \1 sur \2)!\n gamestate_newround_goldengoal C'est parti! (Round special; le gagnant gagne le match)!\n gamestate_newround_log Nouveau round\n gamestate_wait_players En attente de joueurs reels...\n Modified: armagetronad/trunk/armagetronad/language/languages.txt.in =================================================================== --- armagetronad/trunk/armagetronad/language/languages.txt.in 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/language/languages.txt.in 2009-09-11 11:35:31 UTC (rev 9259) @@ -11,4 +11,4 @@ include deutsch.txt include british.txt include american.txt - +include custom.txt Modified: armagetronad/trunk/armagetronad/language/polish.txt =================================================================== --- armagetronad/trunk/armagetronad/language/polish.txt 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/language/polish.txt 2009-09-11 11:35:31 UTC (rev 9259) @@ -2335,7 +2335,7 @@ player_topologypolice Rozkaz z Kontroli Mapy: \1 -team_shuffle \1, kt\xF3ry dotad startowal na pozycji \2, przetasowal sie i teraz wyruszy z pozycji \3.\n +team_shuffle \1, kt\xF3ry dotad startowal na pozycji \2, przetasowal sie i teraz wyruszy z pozycji \3. player_noshuffleup Nie wolno Ci tasowac.\n player_noshuffle Twoje tasowanie nie przynioslo zadnego efektu.\n player_shuffle_error /shuffle expects a number as argument; an explicit sign (+/-) will change your position by the indicated number of steps, no sign will shuffle you to the given position.\n Modified: armagetronad/trunk/armagetronad/language/polish_transliterated.txt =================================================================== --- armagetronad/trunk/armagetronad/language/polish_transliterated.txt 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/language/polish_transliterated.txt 2009-09-11 11:35:31 UTC (rev 9259) @@ -2335,7 +2335,7 @@ player_topologypolice Rozkaz z Kontroli Mapy: \1 -team_shuffle \1, ktory dotad startowal na pozycji \2, przetasowal sie i teraz wyruszy z pozycji \3.\n +team_shuffle \1, ktory dotad startowal na pozycji \2, przetasowal sie i teraz wyruszy z pozycji \3. player_noshuffleup Nie wolno Ci tasowac.\n player_noshuffle Twoje tasowanie nie przynioslo zadnego efektu.\n player_shuffle_error /shuffle expects a number as argument; an explicit sign (+/-) will change your position by the indicated number of steps, no sign will shuffle you to the given position.\n Modified: armagetronad/trunk/armagetronad/src/engine/eCamera.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eCamera.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/eCamera.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -1767,7 +1767,7 @@ if (!CenterAlive() && (newmode==CAMERA_IN || newmode==CAMERA_SMART_IN)){// || newmode==CAMERA_CUSTOM || newmode==CAMERA_SERVER_CUSTOM)){ pos=pos-dir.Turn(eCoord(5,1)); z+=2; - newmode=CAMERA_SMART; + mode = localPlayer ? localPlayer->startCamera : CAMERA_SMART; } const REAL dirSmooth = se_cameraSmartCenterDirSmooth; Modified: armagetronad/trunk/armagetronad/src/engine/eChat.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -36,33 +36,33 @@ //!< Should spam prefix checking be enabled? static bool se_prefixSpamShouldEnable = true; -static tConfItem< bool > se_prefixSpamShouldEnableConf( "PREFIX_SPAM_ENABLE", se_prefixSpamShouldEnable ); +static tSettingItem< bool > se_prefixSpamShouldEnableConf( "PREFIX_SPAM_ENABLE", se_prefixSpamShouldEnable ); //!< If a prefix begins with a color code it will have this multiplier applied to the score. static REAL se_prefixSpamStartColorMultiplier = 1.5; -static tConfItem< REAL > se_prefixSpamStartColorMultiplierConf( "PREFIX_SPAM_START_COLOR_MULTIPLIER", se_prefixSpamStartColorMultiplier ); +static tSettingItem< REAL > se_prefixSpamStartColorMultiplierConf( "PREFIX_SPAM_START_COLOR_MULTIPLIER", se_prefixSpamStartColorMultiplier ); //!< Increase score by f( prefix_length * multiplier ) static REAL se_prefixSpamLengthMultiplier = 1.2; -static tConfItem< REAL > se_prefixSpamLengthMultiplierConf( "PREFIX_SPAM_LENGTH_MULTIPLIER", se_prefixSpamLengthMultiplier ); +static tSettingItem< REAL > se_prefixSpamLengthMultiplierConf( "PREFIX_SPAM_LENGTH_MULTIPLIER", se_prefixSpamLengthMultiplier ); //!< Increase score by f( num_color_codes * multiplier ) static REAL se_prefixSpamNumberColorCodesMultiplier = 1.2; -static tConfItem< REAL > se_prefixSpamNumberColorCodesMultiplierConf( "PREFIX_SPAM_NUMBER_COLOR_CODES_MULTIPLIER", +static tSettingItem< REAL > se_prefixSpamNumberColorCodesMultiplierConf( "PREFIX_SPAM_NUMBER_COLOR_CODES_MULTIPLIER", se_prefixSpamNumberColorCodesMultiplier ); //!< Increase score by f( know_prefixes * multiplier ) static REAL se_prefixNumberKnownPrefixesMultiplier = 1; -static tConfItem< REAL > se_prefixNumberKnownPrefixesMultiplierConf( "PREFIX_SPAM_NUMBER_KNOWN_PREFIXES_MULTIPLIER", +static tSettingItem< REAL > se_prefixNumberKnownPrefixesMultiplierConf( "PREFIX_SPAM_NUMBER_KNOWN_PREFIXES_MULTIPLIER", se_prefixNumberKnownPrefixesMultiplier ); //!< The score, from prefix checking, a message must have for it to be considered spam. static REAL se_prefixSpamRequiredScore = 10.0; -static tConfItem< REAL > se_prefixSpamRequiredScoreConf( "PREFIX_SPAM_REQUIRED_SCORE", se_prefixSpamRequiredScore ); +static tSettingItem< REAL > se_prefixSpamRequiredScoreConf( "PREFIX_SPAM_REQUIRED_SCORE", se_prefixSpamRequiredScore ); //!< Found prefixes will timeout after f( score ) * multiplier seconds. static REAL se_prefixSpamTimeoutMultiplier = 15.0; -static tConfItem< REAL > se_prefixSpamTimeoutMultiplierConf( "PREFIX_SPAM_TIMEOUT_MULTIPLIER", se_prefixSpamTimeoutMultiplier ); +static tSettingItem< REAL > se_prefixSpamTimeoutMultiplierConf( "PREFIX_SPAM_TIMEOUT_MULTIPLIER", se_prefixSpamTimeoutMultiplier ); /** * Helper class for predicate stl-comparisons @@ -531,3 +531,48 @@ { return said.Type() >= eChatMessageType_Public_Direct; } + +// +// Shuffle message spam checks +// + +static int se_shuffleSpamMessagesPerRound = 3; +static tSettingItem< int > se_shuffleSpamMessagesPerRoundConf( "SHUFFLE_SPAM_MESSAGES_PER_ROUND", se_shuffleSpamMessagesPerRound ); + +eShuffleSpamTester::eShuffleSpamTester() + :numberShuffles_( 0 ) +{ +} + +void eShuffleSpamTester::Shuffle() +{ + numberShuffles_++; +} + +void eShuffleSpamTester::Reset() +{ + numberShuffles_ = 0; +} + +tString eShuffleSpamTester::ShuffleMessage( ePlayerNetID *player, int fromPosition, int toPosition ) const +{ + tString message; + message << tOutput( "$team_shuffle", player->GetName(), fromPosition, toPosition ); + + if ( ShouldDisplaySuppressMessage() ) + message << " " << tOutput( "$team_shuffle_suppress" ); + else + message << '\n'; + + return message; +} + +bool eShuffleSpamTester::ShouldAnnounce() const +{ + return se_shuffleSpamMessagesPerRound <= 0 || numberShuffles_ < se_shuffleSpamMessagesPerRound; +} + +bool eShuffleSpamTester::ShouldDisplaySuppressMessage() const +{ + return se_shuffleSpamMessagesPerRound > 0 && numberShuffles_ + 1 >= se_shuffleSpamMessagesPerRound; +} Modified: armagetronad/trunk/armagetronad/src/engine/eChat.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.h 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/eChat.h 2009-09-11 11:35:31 UTC (rev 9259) @@ -285,4 +285,20 @@ const eChatSaidEntry & say_; }; +/** + * Checks for annoying /shuffle message spam + */ +class eShuffleSpamTester +{ +public: + eShuffleSpamTester(); + bool ShouldAnnounce() const; + void Reset(); + void Shuffle(); + tString ShuffleMessage( ePlayerNetID *player, int fromPosition, int toPosition ) const; +protected: + bool ShouldDisplaySuppressMessage() const; + int numberShuffles_; +}; + #endif Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -5365,8 +5365,8 @@ GetScoreFromDisconnectedCopy(); - // force name update - UpdateName(); + // force update (removed again to fix name change possibility during a round) + // UpdateName(); } void ePlayerNetID::DeAuthenticate( ePlayerNetID const * admin, bool messages ){ @@ -5387,8 +5387,8 @@ rawAuthenticatedName_ = ""; - // force update - UpdateName(); + // force update (removed again to fix name change possibility during a round) + // UpdateName(); } bool ePlayerNetID::IsAuthenticated() const @@ -8811,6 +8811,8 @@ { sn_ConsoleOut( tOutput( "$player_suspended", GetColoredName(), suspended ) ); SetTeam( NULL ); + if ( Object() && Object()->Alive() ) + Object()->Kill(); } } @@ -8856,6 +8858,15 @@ } } +void ePlayerNetID::UpdateShuffleSpamTesters() +{ + for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i ) + { + ePlayerNetID *p = se_PlayerNetIDs( i ); + p->shuffleSpam.Reset(); + } +} + // ******************************************************************************* // * // * LogScoreDifference Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2009-09-11 11:35:31 UTC (rev 9259) @@ -243,6 +243,7 @@ nSpamProtection chatSpam_; eChatLastSaid lastSaid_; //!< last said information + eShuffleSpamTester shuffleSpam; ePlayerNetID(int p=-1); virtual ~ePlayerNetID(); @@ -354,6 +355,7 @@ static void ResetScoreDifferences(); //<! Resets the last stored score so ScoreDifferences takes this as a reference time static void LogScoreDifferences(); //<! Logs accumulated scores of all players since the last call to ResetScoreDifferences() to ladderlog.txt static void UpdateSuspensions(); //<! Decrements the number of rounds players are suspended for + static void UpdateShuffleSpamTesters(); //<! Reset shuffle spam checks void LogScoreDifference(); //<! Logs accumulated scores since the last call to ResetScoreDifferences() to ladderlog.txt static void SortByScore(); // brings the players into the right order Modified: armagetronad/trunk/armagetronad/src/engine/eTeam.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTeam.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/eTeam.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -968,6 +968,14 @@ } } +void eTeam::WritePlayers( eLadderLogWriter & writer, const eTeam *team ) +{ + for ( int i = team->players.Len() - 1; i >= 0; --i ) + { + writer << team->players( i )->GetLogName(); + } +} + // inquire or set the ability to use a color as a team name bool eTeam::NameTeamAfterColor ( bool wish ) { @@ -1673,10 +1681,15 @@ if ( startID == stopID ) return; + + ePlayerNetID *player = players[startID]; + eShuffleSpamTester & spam = player->shuffleSpam; + + if ( spam.ShouldAnnounce() ) + { + sn_ConsoleOut( player->shuffleSpam.ShuffleMessage( player, startID + 1, stopID + 1 ) ); + } - tOutput message( "$team_shuffle", players[startID]->GetName(), startID+1, stopID+1 ); - sn_ConsoleOut( message ); - // simply swap the one player over all the players in between. while ( startID < stopID ) { @@ -1688,6 +1701,8 @@ SwapPlayers( players[startID], players[startID-1] ); startID--; } + + spam.Shuffle(); } tColoredString eTeam::GetColoredName(void) const Modified: armagetronad/trunk/armagetronad/src/engine/eTeam.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTeam.h 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/engine/eTeam.h 2009-09-11 11:35:31 UTC (rev 9259) @@ -95,6 +95,8 @@ static bool Enemies( eTeam const * team1, eTeam const * team2 ); //!< determines whether two teams are enemies static void Enforce( int minTeams, int maxTeams, int maxImbalance ); + + static void WritePlayers( eLadderLogWriter & writer, const eTeam *team ); public: // public methods static void EnforceConstraints(); // make sure the limits on team number and such are met Modified: armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -293,6 +293,12 @@ // finish all pending tasks while( pendingForBreak_.size() > 0 ) { + // sync the network so built up auth requests don't cause connection drops so quickly + sn_Receive(); + nNetObject::SyncAll(); + tAdvanceFrame(); + sn_SendPlanned(); + nMemberFunctionRunnerTemplate & next = pendingForBreak_.front(); next.run(); pendingForBreak_.pop_front(); Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -2009,6 +2009,13 @@ if (!ack) messageIDBig_ = 0; #endif + + // don't send messages to unsupported peers + if( peer > MAXCLIENTS+1 ) + { + tJUST_CONTROLLED_PTR< nMessageBase > bounce(this); + return; + } // messages to yourself are a bit strange... if ( sn_GetNetState() == nSERVER && peer == 0 && ack ) Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -200,7 +200,10 @@ sn_Requesting = sn_Requesting->Next(); if (sn_QuerySoon == this) + { sn_Requesting = NULL; + sn_QuerySoon = NULL; + } } Modified: armagetronad/trunk/armagetronad/src/render/rModel.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rModel.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/render/rModel.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -117,10 +117,8 @@ int offset=0; // int current_vertex=0; // -#define MAXVERT 10000 + tArray< int > translate(10000); - int translate[MAXVERT]; - enum {VERTICES,FACES} status=VERTICES; int my_vert=1; @@ -242,7 +240,7 @@ #endif } -rModel::rModel(const char *fileName,const char *fileName_alt) +rModel::rModel(const char *fileName) { #ifndef DEDICATED // tString s; @@ -253,24 +251,13 @@ if ( !tDirectories::Data().Open( in, fileName ) ) { - if (fileName_alt){ - std::ifstream in2; - tDirectories::Data().Open( in2, fileName_alt ); - - if (!in2.good()){ - tERR_ERROR("\n\nModel file " << fileName_alt << " could not be found.\n" << - "are you sure you are running " << tOutput("$program_name") << " in it's own directory?\n\n"); - } - else - Load(in2,fileName_alt); - } - else - tERR_ERROR("\n\nModel file " << fileName << " could not be found.\n" << - "are you sure you are running " << tOutput("$program_name") << " in it's own directory?\n\n"); - + tERR_ERROR("\n\nModel file " << fileName << " could not be found.\n" << + "are you sure you are running " << tOutput("$program_name") << " in it's own directory?\n\n"); } else + { Load(in,fileName); + } #endif } @@ -362,7 +349,38 @@ tCHECK_DEST; } +static std::map<std::string, rModel *> sr_modelCache; +//! returns a model from the cache +rModel * rModel::GetModel(const char * filename) +{ + std::string key(filename); + if(sr_modelCache.find(key) == sr_modelCache.end()) + { + std::ifstream in; + rModel * model = 0; + if ( tDirectories::Data().Open( in, filename ) ) + { + model = tNEW(rModel( filename )); + } + sr_modelCache[key] = model; + } + return sr_modelCache[key]; +} +//! clears the model cache +void rModel::ClearCache() +{ + for(std::map<std::string, rModel *>::iterator iter = sr_modelCache.begin(); iter != sr_modelCache.end(); ++iter) + { + delete (*iter).second; + } + sr_modelCache.clear(); +} + + + + + Modified: armagetronad/trunk/armagetronad/src/render/rModel.h =================================================================== --- armagetronad/trunk/armagetronad/src/render/rModel.h 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/render/rModel.h 2009-09-11 11:35:31 UTC (rev 9259) @@ -68,10 +68,16 @@ tArray<rModelFace> modelTexFaces; bool modelTexFacesCoherent; // if modelFaces and modelTexFaces are identical void Load(std::istream &s,const char *fileName); + explicit rModel(const char *fileName); + rModel(rModel const &); + ~rModel(); public: - rModel(const char *fileName,const char *fileName_alt=""); - ~rModel(); + //! returns a model from the cache + static rModel * GetModel(const char * filename); + //! clears the model cache + static void ClearCache(); + void Render(); }; Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -2050,10 +2050,6 @@ ~gCycleVisuals() { - delete customModel; - delete bodyModel; - delete frontModel; - delete rearModel; delete customTexture; delete bodyTexture; delete wheelTexture; @@ -2120,12 +2116,7 @@ // loads a model, checking before if the file exists static rModel * LoadModelSafe( char const * filename ) { - std::ifstream in; - if ( tDirectories::Data().Open( in, filename ) ) - { - return tNEW(rModel( filename )); - } - return 0; + return rModel::GetModel(filename); } // load a model of specified type from a specified directory @@ -2448,13 +2439,9 @@ this->RemoveFromGame(); if (mp){ - delete customModel; delete customTexture; } else{ - delete body; - delete front; - delete rear; delete wheelTex; delete bodyTex; } Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-09-11 10:48:50 UTC (rev 9258) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2009-09-11 11:35:31 UTC (rev 9259) @@ -45,6 +45,7 @@ #include "nConfig.h" #include "rScreen.h" #include "rViewport.h" +#include "rModel.h" #include "uInput.h" #include "ePlayer.h" #include "gSpawn.h" @@ -1385,6 +1386,7 @@ // write scores one last time ePlayerNetID::LogScoreDifferences(); ePlayerNetID::UpdateSuspensions(); + ePlayerNetID::UpdateShuffleSpamTesters(); sg_gameEndWriter.write(); se_sendEventNotification(tString("Game end"), tString("The Game has ended")); @@ -2670,6 +2672,7 @@ // log scores before players get renamed ePlayerNetID::LogScoreDifferences(); ePlayerNetID::UpdateSuspensions(); + ePlayerNetID::UpdateShuffleSpamTesters(); sg_newRoundWriter.write(); se_sendEventNotification(tString("New Round"), tString("Starting a new round")); @@ -3500,6 +3503,7 @@ se_SaveToScoreFile(message); sg_roundWinnerWriter << ePlayerNetID::FilterName( eTeam::teams[winner-1]->Name() ); + eTeam::WritePlayers( sg_roundWinnerWriter, eTeam::teams[winner-1] ); sg_roundWinnerWriter.write(); tString notificationMessage( ePlayerNetID::FilterName( eTeam::teams[winner-1]->Name() ) ); notificationMessage << " has won the round"; @@ -3584,6 +3588,7 @@ name << tColoredString::ColorString(1,1,1); sg_matchWinnerWriter << ePlayerNetID::FilterName( eTeam::teams[0]->Name() ); + eTeam::WritePlayers( sg_matchWinnerWriter, eTeam::teams[0] ); sg_matchWinnerWriter.write(); tString notificationMessage( ePlayerNetID::FilterName( eTeam::teams[0]->Name() ) ); notificationMessage << " has won the match"; @@ -4256,6 +4261,8 @@ ePlayerNetID::ClearAll(); sg_currentGame = NULL; uMenu::exitToMain = false; + + rModel::ClearCache(); } void sg_EnterGame( nNetState enter_state ) @@ -4324,7 +4331,7 @@ sr_Activate( act ); - if (!tRecorder::IsRunning() ) + if ( !tRecorder::IsRunning() ) { if (sn_GetNetState()==nSTANDALONE) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-01-23 12:11:27
|
Revision: 9323 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9323&view=rev Author: z-man Date: 2010-01-23 12:11:16 +0000 (Sat, 23 Jan 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9258 to 9322: ------------------------------------------------------------------------ r9322 | z-man | 2010-01-23 10:04:28 +0100 (Sat, 23 Jan 2010) | 3 lines Added subcultures to dedicated installer, too. They're not used, but admins may want to see the list. ------------------------------------------------------------------------ r9321 | z-man | 2010-01-23 10:03:15 +0100 (Sat, 23 Jan 2010) | 2 lines Adding subculture file to installer. ------------------------------------------------------------------------ r9320 | bazaarmagetron | 2010-01-23 02:17:52 +0100 (Sat, 23 Jan 2010) | 2 lines Manuel Moos: Fixing missing distribution of subcultures.srv. ------------------------------------------------------------------------ r9317 | bazaarmagetron | 2010-01-20 23:31:22 +0100 (Wed, 20 Jan 2010) | 2 lines Manuel Moos: Quicker help texts and organically accelerating key repeat for friendlier menus. ------------------------------------------------------------------------ r9316 | bazaarmagetron | 2010-01-20 23:13:21 +0100 (Wed, 20 Jan 2010) | 1 line Manuel Moos: Fixed typos. ------------------------------------------------------------------------ r9315 | bazaarmagetron | 2010-01-20 22:16:30 +0100 (Wed, 20 Jan 2010) | 2 lines Manuel Moos: Added shuffle suppression texts. ------------------------------------------------------------------------ r9314 | bazaarmagetron | 2010-01-19 02:28:41 +0100 (Tue, 19 Jan 2010) | 2 lines Manuel Moos: Sound no loger stops for entire rounds if you alt-tab away. ------------------------------------------------------------------------ r9312 | bazaarmagetron | 2010-01-16 21:22:59 +0100 (Sat, 16 Jan 2010) | 8 lines author: Manuel Moos Improved server behaviour during fullscreen message display. Before, it would wait for the clients to finish directly; that caused trouble, because the message usually is triggered by a network message from a remote admin, which means the server is in packet receiving state and it should quit from that state ASAP to avoid side effects. Now, the waiting is done in a background task stated via the st_Todo mechanism. ------------------------------------------------------------------------ r9311 | bazaarmagetron | 2010-01-16 21:20:53 +0100 (Sat, 16 Jan 2010) | 2 lines Manuel Moos: Moving server comparison change to the server info comparison function where it belongs. ------------------------------------------------------------------------ r9310 | bazaarmagetron | 2010-01-16 19:02:21 +0100 (Sat, 16 Jan 2010) | 1 line Manuel Moos: All INETADDR_ANY IPs now compare as unequal to avoid server deletion rampages during a DNS server outage. ------------------------------------------------------------------------ r9309 | bazaarmagetron | 2010-01-16 19:01:46 +0100 (Sat, 16 Jan 2010) | 2 lines Manuel Moos: Made GCC happy, again. ------------------------------------------------------------------------ r9308 | bazaarmagetron | 2010-01-16 03:07:53 +0100 (Sat, 16 Jan 2010) | 2 lines Manuel Moos: Updated news. ------------------------------------------------------------------------ r9307 | bazaarmagetron | 2010-01-16 00:32:44 +0100 (Sat, 16 Jan 2010) | 2 lines Manuel Moos: Disabling pathfinding if it takes too long. Doesn't do too much good, anyway, a typical player will chase the AIs down actively. ------------------------------------------------------------------------ r9306 | bazaarmagetron | 2010-01-15 22:39:05 +0100 (Fri, 15 Jan 2010) | 2 lines Manuel Moos: Speeding up default server pinging by a factor of two. Should still not totally break down on ISDN or fast dialup, definitely no problem for crappy WLAN or even the slowest form of DSL. ------------------------------------------------------------------------ r9305 | bazaarmagetron | 2010-01-14 23:41:42 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Avoiding DNS lookups while still connected to the master server, if possible. ------------------------------------------------------------------------ r9304 | bazaarmagetron | 2010-01-14 23:41:08 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: On conflicting information, prefer to keep the IP version of server infos to avoid needless DNS loopups. ------------------------------------------------------------------------ r9303 | bazaarmagetron | 2010-01-14 23:40:35 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Removing duplicate servers where one copy uses SERVER_DNS, the other not, right as they come in from the network. ------------------------------------------------------------------------ r9302 | bazaarmagetron | 2010-01-14 23:40:00 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Adapted German translation a bit to new terminology. ------------------------------------------------------------------------ r9301 | bazaarmagetron | 2010-01-14 23:39:25 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Speeding up fast finish some more. ------------------------------------------------------------------------ r9300 | bazaarmagetron | 2010-01-14 23:38:48 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Reorganized main game menu items to make internet multiplayer easier to access. ------------------------------------------------------------------------ r9299 | bazaarmagetron | 2010-01-14 23:38:04 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Eating input the player made while the server list was fetched to avoid him going to host a game or quitting immediately. ------------------------------------------------------------------------ r9298 | bazaarmagetron | 2010-01-14 10:30:19 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Speeding up fast finish. ------------------------------------------------------------------------ r9297 | bazaarmagetron | 2010-01-14 10:29:05 +0100 (Thu, 14 Jan 2010) | 2 lines Manuel Moos: Fixed bug where a round would go on forever if the last survivors where AIs outliving their humans by quite a bit, then getting killed sufficiently simultaneously. ------------------------------------------------------------------------ r9296 | bazaarmagetron | 2010-01-12 02:14:39 +0100 (Tue, 12 Jan 2010) | 1 line Daniel Lee Harple: Use colored name for shuffle messages. ------------------------------------------------------------------------ r9295 | bazaarmagetron | 2010-01-11 23:27:10 +0100 (Mon, 11 Jan 2010) | 7 lines author: Manuel Moos Without armathentication built in, now all console commands stay at ADMIN access level so remote admins can actually use them. One exception: the now activated ACCESS_LEVEL can only be invoked from the console or config files by default and thus allows disabling commands for remote admins. ------------------------------------------------------------------------ r9288 | bazaarmagetron | 2009-12-25 04:17:21 +0100 (Fri, 25 Dec 2009) | 2 lines Daniel Lee Harple: Do not extract whitespace from authentication params using std::ws()?\226?\128?\148it will not stop at a newline character. tString::ReadLine() will extract whitespace in the behavior we expect. Fixes bug #492844. ------------------------------------------------------------------------ r9286 | bazaarmagetron | 2009-11-06 18:42:34 +0100 (Fri, 06 Nov 2009) | 1 line Daniel Lee Harple: Intercepted chat commands are now written to ladderlog.txt. ------------------------------------------------------------------------ r9285 | bazaarmagetron | 2009-11-04 21:34:32 +0100 (Wed, 04 Nov 2009) | 2 lines Daniel Lee Harple: Use log name for intercepted chat commands ------------------------------------------------------------------------ r9280 | bazaarmagetron | 2009-10-11 21:50:14 +0200 (Sun, 11 Oct 2009) | 2 lines Manuel Moos: Improved master server random polling, the second polled master now also is random, and all masters are polled if need be ------------------------------------------------------------------------ r9279 | bazaarmagetron | 2009-10-11 21:47:01 +0200 (Sun, 11 Oct 2009) | 2 lines Manuel Moos: Storing server score between visits to the master list and polling higher scored servers first. ------------------------------------------------------------------------ r9276 | bazaarmagetron | 2009-09-27 02:57:42 +0200 (Sun, 27 Sep 2009) | 2 lines Manuel Moos: Fixed typo. ------------------------------------------------------------------------ r9272 | bazaarmagetron | 2009-09-18 22:51:44 +0200 (Fri, 18 Sep 2009) | 1 line Daniel Lee Harple: USER_LEVEL now escapes the given authenticated name ------------------------------------------------------------------------ r9271 | bazaarmagetron | 2009-09-17 10:48:57 +0200 (Thu, 17 Sep 2009) | 2 lines Manuel Moos: Making GCC 4.3 happy. ------------------------------------------------------------------------ r9270 | bazaarmagetron | 2009-09-16 21:09:28 +0200 (Wed, 16 Sep 2009) | 2 lines Manuel Moos: Zero turn speed custom camera now aligns with cycle when it is first set. ------------------------------------------------------------------------ r9269 | bazaarmagetron | 2009-09-16 21:08:07 +0200 (Wed, 16 Sep 2009) | 2 lines Manuel Moos: Removing warning about failed setting the network TOS to realtime. ------------------------------------------------------------------------ r9268 | bazaarmagetron | 2009-09-16 21:06:32 +0200 (Wed, 16 Sep 2009) | 2 lines Manuel Moos: Fixing missing output parameter in $player_joins_team_noex. ------------------------------------------------------------------------ r9267 | bazaarmagetron | 2009-09-11 23:28:24 +0200 (Fri, 11 Sep 2009) | 4 lines author: Manuel Moos RESERVE_SCREEN_NAME now works regardless of the ALLOW_IMPOSTOR setting. Corrected and clarified RESERVE_SCREEN_NAME documentation. ------------------------------------------------------------------------ r9266 | z-man | 2009-09-11 19:07:33 +0200 (Fri, 11 Sep 2009) | 2 lines Release notes are now uploaded with DOS encoding. ------------------------------------------------------------------------ r9265 | z-man | 2009-09-11 18:59:19 +0200 (Fri, 11 Sep 2009) | 2 lines Adapted to new SF upload system, added release notes. ------------------------------------------------------------------------ r9263 | bazaarmagetron | 2009-09-11 16:06:10 +0200 (Fri, 11 Sep 2009) | 2 lines Manuel Moos: Ignoring custom.txt; it doesn't exist by default and is unlikely to be complete. ------------------------------------------------------------------------ r9260 | bazaarmagetron | 2009-09-11 15:17:05 +0200 (Fri, 11 Sep 2009) | 1 line Manuel Moos: Updated with news. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9258&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/config/Makefile.am armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/config/settings_authentication.cfg armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/update.py armagetronad/trunk/armagetronad/src/engine/eCamera.cpp armagetronad/trunk/armagetronad/src/engine/eChat.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/network/nKrawall.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp armagetronad/trunk/armagetronad/src/network/nSocket.cpp armagetronad/trunk/armagetronad/src/tools/tConfiguration.cpp armagetronad/trunk/armagetronad/src/tron/gAIBase.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp armagetronad/trunk/armagetronad/src/ui/uMenu.cpp armagetronad/trunk/build/WorkMakefile armagetronad/trunk/build_visualc/armagetronad.nsi armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi Added Paths: ----------- armagetronad/trunk/build/doc/releasenotes.txt Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9258 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9322 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/NEWS 2010-01-23 12:11:16 UTC (rev 9323) @@ -94,8 +94,33 @@ - Added support for armagetronad URLs on Mac OS X and KDE -- armagetronad://<server>[:<port>]. port defaults to 4534. - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. +Changes since 0.2.8.3_rc4: ========================== +- Intercepted chat commands are now written to ladderlog.txt. Format: + COMMAND /command-intercepted player [command arguments] +- Increased default speed of server pinging +- Reordered game menus a bit +- fast finish works again + +Changes since 0.2.8.3_rc3: +========================== +- Pinging previously popular servers earlier for quicker server + browsing +- Improved master server random polling, the second polled master now + also is random, and all masters are polled if need be +- Custom camera snaps to cycle direction once when activated if the turn speed + is zero. +- RESERVE_SCREEN_NAME now works regardless of the ALLOW_IMPOSTOR setting. +- USER_LEVEL now escapes the given authenticated name so you don't have to + guess the escaping rules. Ex: USER_LEVEL "name with spaces@forums" 2 + changes user level for name\_with\_spaces@forums + Changes since 0.2.8.3_rc2: +========================== +- Fixed crash with server polling +- ROUND_WINNER and MATCH_WINNER logged to ladderlog +- Camera switches to user preferred camera when you die in incam mode +- Better support for custom language files - Players can no longer spam chat with /shuffle messages. Added new setting SHUFFLE_SPAM_MESSAGES_PER_ROUND, a per round, per player limit on the number of shuffle messages displayed. Modified: armagetronad/trunk/armagetronad/config/Makefile.am =================================================================== --- armagetronad/trunk/armagetronad/config/Makefile.am 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/config/Makefile.am 2010-01-23 12:11:16 UTC (rev 9323) @@ -5,6 +5,7 @@ nobase_config_DATA=default.cfg master.srv settings.cfg\ settings_dedicated.cfg aiplayers.cfg rc.config\ + subcultures.srv\ settings_visual.cfg\ settings_authentication.cfg\ examples/breakfast_in_hell.cfg examples/single_use_turbo.cfg\ Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2010-01-23 12:11:16 UTC (rev 9323) @@ -678,9 +678,9 @@ # server browser query settings BROWSER_QUERY_FILTER 1 # query filter. Set to 0 to poll all servers, 1 to query servers with nonnegative score bias, 2 to query only those with positive bias and 3 to not query at all. Non-queried servers will appear to have ping 999; the player info comes indirectly from the master server. -BROWSER_QUERIES_SIMULTANEOUS 10 # max. number of simultaneous query messages that are sent -BROWSER_QUERY_DELAY_SINGLE 1.5 # time delay between queries of the same server -BROWSER_QUERY_DELAY_GLOBAL 0.05 # time delay between all queries +BROWSER_QUERIES_SIMULTANEOUS 20 # max. number of simultaneous query messages that are sent +BROWSER_QUERY_DELAY_SINGLE 0.5 # time delay between queries of the same server +BROWSER_QUERY_DELAY_GLOBAL 0.025 # time delay between all queries BROWSER_NUM_QUERIES 3 # number of queries per try BROWSER_CONTACTLOSS 4 # number of failed contact attemps before a server can be considered lost TIMER_SYNC_START_FUDGE 0.1 # fudge factor: the game timer tends to be late at the start of the round. This fudge factor compensates for it by hacking it a bit into the future. Modified: armagetronad/trunk/armagetronad/config/settings_authentication.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2010-01-23 12:11:16 UTC (rev 9323) @@ -433,11 +433,12 @@ # You can reserve a screen name to a certain user: -# RESERVE_SCREEN_NAME <user> <screen name> +# RESERVE_SCREEN_NAME <screen name> <user> # All other players, authenticated or not, will not be able to change their -# screen name to the picked name, then.The command is of course only -# of use if you have set ALLOW_IMPOSTORS to 0. +# screen name to the picked name, then. Use quotes around the screen name +# if it contains spaces, or replace the spaces with _. @s in the screen name +# need to be escaped ( @ -> \@ ). # You can bend authenticated user names around with Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2010-01-23 12:11:16 UTC (rev 9323) @@ -391,6 +391,7 @@ ping_flood_time_100_help K\xFCrzeste tolerierte Zeit, w\xE4hrend der 10 Pings von einer Maschine kommen d\xFCrfen. ping_flood_global_help Die Zeiten, die bei PING_FLOOD_TIME_X angegeben sind, z\xE4hlen, mit diesem Faktor multipliziert, auch f\xFCr Pings von allen Maschinen zusammengenommen. Ein negativer Wert schaltet dieses Feature ab. +shuffle_spam_messages_per_round_help Maximale Zahl an Positions\xE4nderungsnachrichten, die pro Spieler und pro Runde gezeigt werden. Null bedeutet keine Grenze. spam_protection_repeat_help Mindestzeit, die zwischen gleichlautenden Chat-Nachrichten liegen muss. spam_protection_help Sch\xE4rfe des Spamschutzes; der Kehrwert bestimmt die minimale Zeit zwischen zwei Nachrichten. spam_protection_vote_help Extrafaktor auf SPAM_PROTECTION f\xFCr das er\xF6ffnen von Abstimmungen. @@ -1260,7 +1261,7 @@ game_menu_start_text Solospiel game_menu_start_help Transportiert alle lokal eingerichteten Spieler auf das Spieleraster. -network_menu_text Netzwerkspiel +network_menu_text Mehrspieler network_menu_help Verbindet dich mit einem Netzwerkspiel oder f\xE4ngt eines an. game_settings_menu_text Spiel konfigurieren @@ -2353,6 +2354,7 @@ player_topologypolice Die Topologiepolizei befiehlt: \1 team_shuffle \1 wird von Position \2 auf \3 verschoben. +team_shuffle_suppress Diese Runde werden keine weiteren Verschiebenachrichten f\xFCr diesen Spieler mehr gezeigt.\n player_noshuffleup Du darfst dich hier nicht selbst bef\xF6rdern.\n player_noshuffle Dein Positions\xE4nderungswunsch hat keinen Effekt.\n player_shuffle_error /shuffle erwartet eine Zahl als Argument; mit explizitem Vorzeichen (+/-) wird die Position um die angegebene Zahl an Pl\xE4tzen ver\xE4ndert, ohne Vorzeichen geht es and die angegebene absolute Position.\n Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2010-01-23 12:11:16 UTC (rev 9323) @@ -565,8 +565,8 @@ camera_forbid_mer_help Forbids the use of Meriton's camera camera_forbid_custom_glance_help Forbids use of special glance camera settings -camera_override_custom_glance_help Overrides custom glance settings with vanues from the server -camera_override_custom_glance_server_custom_help Overrides custom glance settings with vanues from the server only for the server custom camera +camera_override_custom_glance_help Overrides custom glance settings with values from the server +camera_override_custom_glance_server_custom_help Overrides custom glance settings with values from the server only for the server custom camera camera_follow_start_x_help Start position of the fixed external camera camera_follow_start_y_help Start position of the fixed external camera @@ -1228,7 +1228,7 @@ main_menu_text \g v\1 -game_menu_text Game +game_menu_text Play Game game_menu_main_help Game configuration and launch. player_mainmenu_text Player Setup @@ -1292,7 +1292,7 @@ game_menu_start_text Local Game game_menu_start_help Enter the game grid! Only players configured on this computer will play. -network_menu_text Network Game +network_menu_text Multiplayer network_menu_help This joins or creates a network multiplayer game. game_settings_menu_text Game Setup @@ -1343,7 +1343,7 @@ game_menu_iq_help Lets you select the average intelligence of the computer controlled players("Artificial Intelligence") in the game. game_menu_minplayers_text Min Players: -game_menu_minplayers_help Selects the minimum nuber of players that will be on the game grid. If not enough humans are present, the empty positions will be filled by AIs. +game_menu_minplayers_help Selects the minimum number of players that will be on the game grid. If not enough humans are present, the empty positions will be filled by AIs. game_menu_speed_text Speed: game_menu_speed_help Speed modifier. Negative values slow the game down, positive values speed it up. An increase of two in this value will double the speed. Reasonable values lie between -2 and +4. @@ -1487,10 +1487,10 @@ #******************************************** #network game menu -network_menu_lan_text LAN Game +network_menu_lan_text LAN Multiplayer network_menu_lan_help Connect to a server on your local network or start a server. -network_menu_internet_text Internet Game +network_menu_internet_text Internet Multiplayer network_menu_internet_help Connect to an internet server or start one. network_opts_text Network Setup @@ -1629,7 +1629,7 @@ language_menu_item_first_help \g will display most text messages in this language. Use Cursor Left/Right to choose. language_menu_item_second Second Language: -language_menu_item_second_help If the fist language is not available for one text item, it will be displayed in the second language (or in english as final fallback). Use Cursor Left/Right to choose. +language_menu_item_second_help If the first language is not available for one text item, it will be displayed in the second language (or in english as final fallback). Use Cursor Left/Right to choose. #************************************* #************************************* Modified: armagetronad/trunk/armagetronad/language/update.py =================================================================== --- armagetronad/trunk/armagetronad/language/update.py 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/language/update.py 2010-01-23 12:11:16 UTC (rev 9323) @@ -200,13 +200,13 @@ if __name__ == "__main__": # determine languages to update: everything included from - # languages.txt.in except am/eng. + # languages.txt.in except am/eng and custom. files = [] listfile = open("languages.txt.in") for line in listfile.readlines(): if line.startswith("include"): file =line.split()[1] - if file != "american.txt" and file != "english.txt" and file != "british.txt": + if file != "american.txt" and file != "english.txt" and file != "british.txt" and file != "custom.txt": files += [file] lu = LanguageUpdater() Modified: armagetronad/trunk/armagetronad/src/engine/eCamera.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eCamera.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/engine/eCamera.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -605,6 +605,12 @@ if ( mode == CAMERA_IN || mode == CAMERA_CUSTOM || mode == CAMERA_SERVER_CUSTOM ) rise=0; + // custom camera with turn speed 0: align it with the cycle once + if( ( mode == CAMERA_CUSTOM && s_customTurnSpeed <= 0 ) || ( mode == CAMERA_SERVER_CUSTOM && s_serverCustomTurnSpeed <= 0 ) ) + { + dir = CenterDir(); + } + if(mode==CAMERA_SMART){ smartcamIncamSmooth=1; z=z+1; Modified: armagetronad/trunk/armagetronad/src/engine/eChat.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -557,7 +557,7 @@ tString eShuffleSpamTester::ShuffleMessage( ePlayerNetID *player, int fromPosition, int toPosition ) const { tString message; - message << tOutput( "$team_shuffle", player->GetName(), fromPosition, toPosition ); + message << tOutput( "$team_shuffle", player->GetColoredName() + "0xRESETT", fromPosition, toPosition ); if ( ShouldDisplaySuppressMessage() ) message << " " << tOutput( "$team_shuffle_suppress" ); Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -2130,8 +2130,16 @@ static tSettingItem< tAccessLevel > se_adminAccessLevelConf( "ACCESS_LEVEL_ADMIN", se_adminAccessLevel ); static tAccessLevelSetter se_adminAccessLevelConfLevel( se_adminAccessLevelConf, tAccessLevel_Owner ); -void handle_command_intercept(ePlayerNetID *p, tString say) { - con << "[cmd] " << *p << ": " << say << '\n'; +void handle_command_intercept( ePlayerNetID *p, tString const & command, std::istream & s, tString const & say ) { + static eLadderLogWriter se_commandWriter( "COMMAND", true ); + + tString commandArguments; + commandArguments.ReadLine( s ); + + se_commandWriter << command << p->GetLogName() << commandArguments; + se_commandWriter.write(); + + con << "[cmd] " << p->GetLogName() << ": " << say << '\n'; } #ifdef KRAWALL_SERVER @@ -2826,7 +2834,7 @@ else if (se_interceptUnknownCommands) { - handle_command_intercept(p, say); + handle_command_intercept(p, command, s, say); } else { @@ -3662,7 +3670,7 @@ #ifdef DEDICATED if (se_InterceptCommands.StrPos(command) != -1) { - handle_command_intercept(p, say); + handle_command_intercept(p, command, s, say); return; } else @@ -4766,6 +4774,11 @@ return level; } + + virtual void TransformName( tString & name ) const + { + name = se_EscapeName( name ).c_str(); + } }; static eUserLevel se_userLevel; @@ -5527,20 +5540,27 @@ se_StripMatchingEnds( name, se_IsBlank, se_IsInvalidNameEnd ); } +static bool se_allowImposters = false; +static tSettingItem< bool > se_allowImposters1( "ALLOW_IMPOSTERS", se_allowImposters ); +static tSettingItem< bool > se_allowImposters2( "ALLOW_IMPOSTORS", se_allowImposters ); + // test if a user name is used by anyone else than the passed player static bool se_IsNameTaken( tString const & name, ePlayerNetID const * exception ) { if ( name.Len() <= 1 ) return false; - // check for other players with the same name - for (int i = se_PlayerNetIDs.Len()-1; i >= 0; --i ) + if ( !se_allowImposters ) { - ePlayerNetID * player = se_PlayerNetIDs(i); - if ( player != exception ) + // check for other players with the same name + for (int i = se_PlayerNetIDs.Len()-1; i >= 0; --i ) { - if ( name == player->GetUserName() || name == ePlayerNetID::FilterName( player->GetName() ) ) - return true; + ePlayerNetID * player = se_PlayerNetIDs(i); + if ( player != exception ) + { + if ( name == player->GetUserName() || name == ePlayerNetID::FilterName( player->GetName() ) ) + return true; + } } } @@ -5560,10 +5580,6 @@ return false; } -static bool se_allowImposters = false; -static tSettingItem< bool > se_allowImposters1( "ALLOW_IMPOSTERS", se_allowImposters ); -static tSettingItem< bool > se_allowImposters2( "ALLOW_IMPOSTORS", se_allowImposters ); - static bool se_filterColorNames=false; tSettingItem< bool > se_coloredNamesConf( "FILTER_COLOR_NAMES", se_filterColorNames ); static bool se_filterDarkColorNames=false; @@ -7547,7 +7563,7 @@ if ( !newTeam ) { if ( currentTeam ) - sn_ConsoleOut( tOutput( "$player_joins_team_noex" ), Owner() ); + sn_ConsoleOut( tOutput( "$player_joins_team_noex", tColoredString::RemoveColors(GetName()) ), Owner() ); break; } @@ -8208,7 +8224,7 @@ tString newUserName = se_UnauthenticatedUserName( newName ); // test if it is already taken, find an alternative name if so. - if ( sn_GetNetState() != nCLIENT && !se_allowImposters && se_IsNameTaken( newUserName, this ) ) + if ( sn_GetNetState() != nCLIENT && se_IsNameTaken( newUserName, this ) ) { // Remove possilble trailing digit. if ( newName.Len() > 2 && isdigit(newName(newName.Len()-2)) ) Modified: armagetronad/trunk/armagetronad/src/network/nKrawall.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nKrawall.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/network/nKrawall.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -255,7 +255,6 @@ properties >> property; tToLower( property ); - std::ws( properties ); if ( property == "prefix" ) { prefix.ReadLine( properties ); Modified: armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -73,8 +73,8 @@ static nServerInfo* sn_QuerySoon =NULL; static nTimeRolling sn_QueryTimeout = 0; -static REAL sn_queryDelay = 1.5f; // time delay between queries of the same server -static REAL sn_queryDelayGlobal = 0.1f; // time delay between all queries +static REAL sn_queryDelay = 0.5f; // time delay between queries of the same server +static REAL sn_queryDelayGlobal = 0.025f; // time delay between all queries static int sn_numQueries = 3; // number of queries per try static int sn_TNALostContact = 4; // minimum TNA value to be considered contact loss @@ -212,15 +212,15 @@ { static int userScore[8] = { -100, 0, 100, 250, 300, 300, 250, 100 }; - // do nothing if we are requerying - if ( !this->advancedInfoSet && this->advancedInfoSetEver ) + // do nothing if we are querying + if ( !this->advancedInfoSet ) { // score = scoreBias_; return; } - score = 100; + score = 100; if (ping > .1) score -= (ping - .1) * 300; @@ -285,6 +285,7 @@ static const tString VERSION_TAG ("version"); static const tString RELEASE ("release"); static const tString SCOREBIAS ("scorebias"); +static const tString SCORE ("score"); static const tString URL ("url"); static const tString END ("ServerEnd"); static const tString START ("ServerBegin"); @@ -307,6 +308,7 @@ s << URL << "\t" << url_ << "\n"; s << SCOREBIAS << "\t" << scoreBias_ << "\n"; + s << SCORE << "\t" << score << "\n"; s << NAME << "\t" << name << "\n"; s << FILTEREDNAME << "\t" << nameForSorting << "\n"; s << TNA << "\t" << timesNotAnswered << "\n"; @@ -336,7 +338,14 @@ else if ( id == VERSION_TAG ) s >> version_; else if ( id == SCOREBIAS ) + { s >> scoreBias_; + score = scoreBias_; + } + else if ( id == SCORE ) + { + s >> score; + } else if ( id == RELEASE ) release_.ReadLine( s ); else if ( id == URL ) @@ -385,8 +394,6 @@ queried = 0; advancedInfoSet = false; advancedInfoSetEver =false; - - score = scoreBias_; } nServerInfo *nServerInfo::GetFirstServer() @@ -586,7 +593,7 @@ nServerInfo *run = nServerInfo::GetFirstServer(); while(!IsDouble && run) { - if (run != server && *run == *server ) + if (run != server && *run == *server) IsDouble = true; run = run->Next(); @@ -594,7 +601,7 @@ if (IsDouble) { -#ifdef DEBUG_X +#ifdef DEBUG con << "Deleting duplicate server " << server->GetName() << "\n"; #endif delete server; @@ -1048,9 +1055,9 @@ // check if we already have that server lised nServerInfo *run = GetFirstServer(); int countSameAdr = 0; - while(run) + while(run && !n) { - if (run->GetConnectionName() == baseInfo.GetConnectionName() ) + if ( run->GetConnectionName() == baseInfo.GetConnectionName() ) { if (countSameAdr++ > 32) n = run; @@ -1061,6 +1068,18 @@ run = run->Next(); } + // second pass, look harder if no match was found. Use DNS lookup if you have to. + if(!n) + { + run = GetFirstServer(); + while(run && !n) + { + if( run->GetAddress() == baseInfo.GetAddress() ) + n = run; + run = run->Next(); + } + } + if (!n) { // so far no objections have been found; create the new server info. @@ -1076,6 +1095,12 @@ { n->Alive(); + // on update, prefer to keep the IP version to avoid needless DNS loopups. + if ( n->GetConnectionName() != baseInfo.GetConnectionName() && n->GetAddress().ToString() != ToString(*n) ) + { + n->SetConnectionName( baseInfo.GetConnectionName() ); + } + if ( sn_IsMaster ) { con << "Updated server: " << ToString( baseInfo ) << "\n"; @@ -1549,7 +1574,7 @@ if ( masterInfo ) { con << tOutput( "$network_master_timeout_retry" ); - GetFromMaster( masterInfo ); + GetFromMaster(); } else { @@ -2331,7 +2356,7 @@ { // reload master list at least once per minute double time = tSysTimeFloat(); - static double deleteTime = time; + static double deleteTime = time + 60.0; if ( time > deleteTime ) { deleteTime = time + 60.0; @@ -2484,7 +2509,7 @@ bool nServerInfoBase::operator ==( const nServerInfoBase & other ) const { - return GetAddress() == other.GetAddress() && port_ == other.port_; + return GetAddress().IsSet() && GetAddress() == other.GetAddress() && port_ == other.port_; } // ******************************************************************************************* Modified: armagetronad/trunk/armagetronad/src/network/nSocket.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nSocket.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/network/nSocket.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -1432,7 +1432,7 @@ //! //! @param a1 first address to compare //! @param a2 second address to compare -//! @return +//! @return -1 if the addresses don't match, +1 if the ports don't match, 0 if everything matches. //! // ******************************************************************************************* @@ -1533,16 +1533,7 @@ #ifndef WIN32 char tos = IPTOS_LOWDELAY; - int ret = setsockopt( socket_, IPPROTO_IP, IP_TOS, &tos, sizeof(char) ); - - // remove this error reporting some time later, the success is not critical - if ( ret != 0 ) - { - static bool warn=true; - if ( warn ) - con << "Setting TOS to LOWDELAY failed.\n"; - warn=false; - } + setsockopt( socket_, IPPROTO_IP, IP_TOS, &tos, sizeof(char) ); #endif // unblock it Modified: armagetronad/trunk/armagetronad/src/tools/tConfiguration.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tConfiguration.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/tools/tConfiguration.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -136,7 +136,9 @@ tAccessLevelSetter::tAccessLevelSetter( tConfItemBase & item, tAccessLevel level ) { +#ifdef KRAWALL_SERVER item.requiredLevel = level; +#endif } static std::map< tString, tConfItemBase * > * st_confMap = 0; @@ -160,8 +162,6 @@ st_preventCasacl = previous_; } -#ifdef KRAWALL_SERVER - // changes the access level of a configuration item class tConfItemLevel: public tConfItemBase { @@ -232,6 +232,8 @@ static tConfItemLevel st_confLevel; +#ifdef KRAWALL_SERVER + static char const *st_casacl = "CASACL"; //! casacl (Check And Set ACcess Level) command: elevates the access level for the context of the current configuration file Modified: armagetronad/trunk/armagetronad/src/tron/gAIBase.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gAIBase.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/tron/gAIBase.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -1372,6 +1372,10 @@ lazySideChange = -10; } +// flag set if pathfinding is enabled. It's an expensive opeeration, so we just turn it +// off if the PC can't handle it. Doesn't doo much good, anyway. +static bool sg_pathEnabled = true; + // state change: void gAIPlayer::SwitchToState(gAI_STATE nextState, REAL minTime) { @@ -1402,6 +1406,10 @@ break; case AI_PATH: nextAbility = character->properties[AI_STATE_PATH]; + if (!sg_pathEnabled ) + { + nextAbility = 0; + } break; case AI_SURVIVE: break; @@ -1601,7 +1609,6 @@ return; } - void gAIPlayer::ThinkPath( ThinkData & data ) { int lr = 0; @@ -1626,6 +1633,14 @@ if ( nextStateChange < se_GameTime() ) { + if( !sg_pathEnabled ) + { + SwitchToState(AI_SURVIVE, 5); + EmergencySurvive( data ); + + return; + } + gSensor p(Object(),Object()->Position(), tDir); p.detect(REAL(.9999999)); if (p.hit >= .9999999) // free line of sight to victim. Switch to close combat. @@ -1643,11 +1658,38 @@ if (lastPath < se_GameTime() - 10) if (target->CurrentFace()) { + if( !sg_pathEnabled ) + { + // yeah, apparently, we can't go on with this. Bail out. + SwitchToState(AI_SURVIVE, 5); + EmergencySurvive( data ); + return; + } + Object()->FindCurrentFace(); + REAL before = tRealSysTimeFloat(); eHalfEdge::FindPath(Object()->Position(), Object()->CurrentFace(), target->Position(), target->CurrentFace(), Object(), path); + + // calculate (and archive) time used for pathfinding + REAL used = tRealSysTimeFloat() - before; + static char const * section = "PATH_TIME"; + tRecorder::PlaybackStrict( section, used ); + tRecorder::Record( section, used ); + static REAL usedAverage = 0; + const REAL decay = .1; + usedAverage = (usedAverage+used*decay)/(1+decay); + + // disable pathfinding if it just takes too long. + if ( used > .06 || usedAverage > .03 ) + { +#ifdef DEBUG + con << "Path finding is too expensive for this PC. Disabling it.\n"; +#endif + sg_pathEnabled = false; + } lastPath = se_GameTime(); } @@ -1759,7 +1801,7 @@ p.detect(REAL(1)); if (p.hit <= .999999) // no free line of sight to victim. Switch to path mode. { - SwitchToState(AI_PATH, 5); + SwitchToState(sg_pathEnabled ? AI_PATH : AI_SURVIVE, 5); EmergencySurvive( data ); return; } Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -1939,14 +1939,14 @@ "$network_host_help",&sg_HostGameMenu); */ + uMenuItemFunction lan + (&net_menu,"$network_menu_lan_text", + "$network_menu_lan_help",&gServerBrowser::BrowseLAN); + uMenuItemFunction inter (&net_menu,"$network_menu_internet_text", "$network_menu_internet_help",&gServerBrowser::BrowseMaster); - uMenuItemFunction lan - (&net_menu,"$network_menu_lan_text", - "$network_menu_lan_help",&gServerBrowser::BrowseLAN); - gNetIdler idler; // rSysDep::StartNetSyncThread( &idler ); net_menu.Enter(); @@ -2054,14 +2054,14 @@ uMenuItemFunction *connect=NULL,*start=NULL,*sound=NULL; if (!ingame){ + start= new uMenuItemFunction(&game_menu,"$game_menu_start_text", + "$game_menu_start_help",&singlePlayer_game); connect=new uMenuItemFunction (&game_menu, "$network_menu_text", "$network_menu_help", &net_game); - start= new uMenuItemFunction(&game_menu,"$game_menu_start_text", - "$game_menu_start_help",&singlePlayer_game); } tOutput title; @@ -3341,7 +3341,7 @@ } // keep the game running when there are only login processes running - if (notyetloggedin && humans > 0) + if (notyetloggedin && humans > 0 && ais == 0) alive++; @@ -3703,7 +3703,7 @@ if ( !winner && !absolute_winner && sg_currentSettings->finishType==gFINISH_SPEEDUP && se_mainGameTimer) { - se_mainGameTimer->speed*=1.01; + se_mainGameTimer->speed*=1.41; if (se_mainGameTimer->speed>16) se_mainGameTimer->speed=16; } @@ -4367,6 +4367,13 @@ // keep syncing the network rPerFrameTask idle( sg_FullscreenIdle ); + // stop the game + bool paused = se_mainGameTimer && se_mainGameTimer->speed < .0001; + if( sn_GetNetState() != nCLIENT ) + { + se_PauseGameTimer(true); + } + // put players into idle mode ePlayerNetID::SpectateAll(); se_ChatState( ePlayerNetID::ChatFlags_Menu, true ); @@ -4379,6 +4386,13 @@ con << title << "\n" << message << "\n"; #endif + + // continue the game + if( sn_GetNetState() != nCLIENT ) + { + se_PauseGameTimer(paused); + } + // get players out of idle mode again ePlayerNetID::SpectateAll(false); se_ChatState( ePlayerNetID::ChatFlags_Menu, false ); @@ -4386,7 +4400,7 @@ static tString sg_fullscreenMessageTitle; static tString sg_fullscreenMessageMessage; -static REAL sg_fullscreenMessageTimeout; +static REAL sg_fullscreenMessageTimeout = 0.0; static void sg_TodoClientFullscreenMessage() { sg_ClientFullscreenMessage( sg_fullscreenMessageTitle, sg_fullscreenMessageMessage, sg_fullscreenMessageTimeout ); @@ -4410,6 +4424,46 @@ static nProtoBufDescriptor< Game::FullscreenMessage > sg_fullscreenMessageDescriptor( 312, sg_fullscreenMessageHandler ); +void sg_FullscreenMessageWait() +{ + // wait for the clients to have seen the message + { + // stop the game + bool paused = se_mainGameTimer && se_mainGameTimer->speed < .0001; + se_PauseGameTimer(true); + gGame::NetSyncIdle(); + + REAL waitTo = tSysTimeFloat() + sg_fullscreenMessageTimeout; + REAL waitToMin = tSysTimeFloat() + 1.0; + + // wait for players to see it + bool goon = true; + while( goon && waitTo > tSysTimeFloat() ) + { + sg_FullscreenIdle(); + gameloop_idle(); + if ( se_GameTime() > sg_lastChatBreakTime ) + se_PauseGameTimer(true); + + // give the clients a second to enter chat state + if ( tSysTimeFloat() > waitToMin ) + { + goon = false; + for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i ) + { + ePlayerNetID* player = se_PlayerNetIDs(i); + if ( player->IsChatting() ) + goon = true; + } + } + } + + // continue the game + se_PauseGameTimer(paused); + gGame::NetSyncIdle(); + } +} + // causes the connected clients to break and print a fullscreen message void sg_FullscreenMessage(tOutput const & title, tOutput const & message, REAL timeout, int client){ tJUST_CONTROLLED_PTR< nProtoBufMessage< Game::FullscreenMessage > > m = @@ -4432,50 +4486,24 @@ if ( sn_Connections[c].socket ) { if ( sg_fullscreenMessages.Supported(c) ) + { m->Send(c); + } else + { sn_ConsoleOut(complete, c); + } } } } - // display the message locally, waiting for the clients to have seen it - { - // stop the game - bool paused = se_mainGameTimer && se_mainGameTimer->speed < .0001; - se_PauseGameTimer(true); - gGame::NetSyncIdle(); + double before = tSysTimeFloat(); + sg_ClientFullscreenMessage( title, message, timeout ); + double after = tSysTimeFloat(); - REAL waitTo = tSysTimeFloat() + timeout; - REAL waitToMin = tSysTimeFloat() + 1.0; - sg_ClientFullscreenMessage( title, message, timeout ); - - // wait for players to see it - bool goon = true; - while ( goon && waitTo > tSysTimeFloat() ) - { - sg_FullscreenIdle(); - gameloop_idle(); - if ( se_GameTime() > sg_lastChatBreakTime ) - se_PauseGameTimer(true); - - // give the clients a second to enter chat state - if ( tSysTimeFloat() > waitToMin ) - { - goon = false; - for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i ) - { - ePlayerNetID* player = se_PlayerNetIDs(i); - if ( player->IsChatting() ) - goon = true; - } - } - } - - // continue the game - se_PauseGameTimer(paused); - gGame::NetSyncIdle(); - } + // store rest of timeout and wait for the clients. + sg_fullscreenMessageTimeout = timeout - (after-before); + st_ToDo( sg_FullscreenMessageWait ); } else { Modified: armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/tron/gServerBrowser.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -40,6 +40,7 @@ #include "rRender.h" #include "uMenu.h" +#include "uInputQueue.h" #include "tMemManager.h" #include "tSysTime.h" @@ -52,7 +53,7 @@ int gServerBrowser::highPort = 4540; static bool continuePoll = false; -static int sg_simultaneous = 5; +static int sg_simultaneous = 20; static tSettingItem< int > sg_simultaneousConf( "BROWSER_QUERIES_SIMULTANEOUS", sg_simultaneous ); static tOutput *sg_StartHelpText = NULL; @@ -292,6 +293,12 @@ ConnectToServer(nServerInfo::GetFirstServer()); */ browser.Update(); + + // eat excess input the user made while the list was fetched + SDL_Event ignore; + REAL time; + while(su_GetSDLInput(ignore, time)) ; + browser.Enter(); nServerInfo::GetFromLANContinuouslyStop(); Modified: armagetronad/trunk/armagetronad/src/ui/uMenu.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uMenu.cpp 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/armagetronad/src/ui/uMenu.cpp 2010-01-23 12:11:16 UTC (rev 9323) @@ -160,8 +160,10 @@ void uMenu::OnEnter(){ #ifndef DEDICATED float nextrepeat = 0.0f; - static const float repeatdelay = 0.3f; - static const float repeatrate = 0.05f; + static const float repeatdelay = 0.2f; + static const float repeatrateStart = 0.2f; + static const float repeatrateMin = 0.05f; + static float repeatrate = repeatrateStart; SDL_Event tEventRepeat; #else return; @@ -183,7 +185,7 @@ #ifndef DEDICATED lastkey=tSysTimeFloat(); - static const REAL timeout=3; + static const REAL timeout=.5; #endif selected = items.Len() - 1; while (!exitFlag && !quickexit && !exitToMain){ @@ -225,6 +227,7 @@ break; case SDL_KEYUP: repeat = false; + repeatrate = repeatrateStart; break; } @@ -244,6 +247,9 @@ { this->HandleEvent( tEventRepeat ); nextrepeat = tSysTimeFloat() + repeatrate; + repeatrate *= .71; + if ( repeatrate < repeatrateMin ) + repeatrate = repeatrateMin; } } Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/build/WorkMakefile 2010-01-23 12:11:16 UTC (rev 9323) @@ -360,14 +360,16 @@ rm -rf ap-$* touch $@ -upload: +upload: $(UPLOAD)/.tag # # ***************************************** # * uploading compiled files to sf * # ***************************************** # - cd ${UPLOAD}; rsync -avP -e ssh * z-...@fr...:uploads/ + cp doc/releasenotes.txt $(UPLOAD)/ + unix2dos $(UPLOAD)/releasenotes.txt + cd ${UPLOAD}; mkdir -p new/$(VERSION); rsync -avP -e ssh new z-man,arm...@fr...:/home/frs/project/a/ar/armagetronad/; rmdir new/$(VERSION); rmdir new; rsync -avP -e ssh * z-man,arm...@fr...:/home/frs/project/a/ar/armagetronad/new/$(VERSION)/ TOEMPTYLINE=sed -e "s,^$$,," -e "t q" -e "p" -e "d" -e ": q" -e "q" Copied: armagetronad/trunk/build/doc/releasenotes.txt (from rev 9322, armagetronad/branches/0.2.8/build/doc/releasenotes.txt) =================================================================== --- armagetronad/trunk/build/doc/releasenotes.txt (rev 0) +++ armagetronad/trunk/build/doc/releasenotes.txt 2010-01-23 12:11:16 UTC (rev 9323) @@ -0,0 +1,6 @@ +This is a release candidate for Armagetron Advanced 0.2.8.3, which +is planned to be our final release in the 0.2.8 and 0.2 series, apart +from bugfixes and security updates, of course. 0.2.8.3 rounds the +features of the 0.2 development series off with additions like the +new authentication system for players, rendering performance improvements +and better team management in the game. \ No newline at end of file Modified: armagetronad/trunk/build_visualc/armagetronad.nsi =================================================================== --- armagetronad/trunk/build_visualc/armagetronad.nsi 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/build_visualc/armagetronad.nsi 2010-01-23 12:11:16 UTC (rev 9323) @@ -94,7 +94,7 @@ CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced System Data.lnk" "$INSTDIR" SetOutPath "$INSTDIR\config" File ".\config\*.cfg" - File ".\config\master.srv" + File ".\config\*.srv" SetOutPath "$INSTDIR\config\examples" File ".\config\examples\*.cfg" SetOutPath "$INSTDIR\config\examples\cvs_test" Modified: armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi =================================================================== --- armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi 2010-01-23 09:04:28 UTC (rev 9322) +++ armagetronad/trunk/build_visualc/armagetronad_dedicated.nsi 2010-01-23 12:11:16 UTC (rev 9323) @@ -81,7 +81,7 @@ CreateShortCut "$SMPROGRAMS\Armagetron Advanced\Armagetron Advanced Server.lnk" "$INSTDIR\armagetronad_dedicated.exe" SetOutPath "$INSTDIR\config" File ".\config\*.cfg" - File ".\config\master.srv" + File ".\config\*.srv" SetOutPath "$INSTDIR\config\examples" File ".\config\examples\*.cfg" SetOutPath "$INSTDIR\config\examples\cvs_test" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-02-01 00:48:33
|
Revision: 9357 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9357&view=rev Author: z-man Date: 2010-02-01 00:48:11 +0000 (Mon, 01 Feb 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9322 to 9356: ------------------------------------------------------------------------ r9356 | bazaarmagetron | 2010-01-31 17:10:37 +0100 (Sun, 31 Jan 2010) | 4 lines author: Manuel Moos Fixed debug recorder playback when first packet that is sent out causes an error. Never actually happens on 0.2.8, but all the time on Trunk. ------------------------------------------------------------------------ r9353 | bazaarmagetron | 2010-01-30 19:37:31 +0100 (Sat, 30 Jan 2010) | 2 lines Manuel Moos: Blacklisting SiS cards for display lists. ------------------------------------------------------------------------ r9352 | z-man | 2010-01-30 17:02:34 +0100 (Sat, 30 Jan 2010) | 2 lines Removing old dsp for conflicts. ------------------------------------------------------------------------ r9351 | z-man | 2010-01-30 15:35:30 +0100 (Sat, 30 Jan 2010) | 2 lines Still better 'make sourcechange'. ------------------------------------------------------------------------ r9350 | z-man | 2010-01-30 15:33:57 +0100 (Sat, 30 Jan 2010) | 2 lines Removing debug output again. ------------------------------------------------------------------------ r9349 | z-man | 2010-01-30 12:22:04 +0100 (Sat, 30 Jan 2010) | 2 lines Rebranding icons and desktop file even if no KDE installation is done. ------------------------------------------------------------------------ r9348 | bazaarmagetron | 2010-01-30 12:09:47 +0100 (Sat, 30 Jan 2010) | 2 lines Manuel Moos: Added block about the man in the middle attack prevention settings. ------------------------------------------------------------------------ r9347 | bazaarmagetron | 2010-01-30 12:08:51 +0100 (Sat, 30 Jan 2010) | 2 lines Manuel Moos: Fixed comment typo. ------------------------------------------------------------------------ r9346 | z-man | 2010-01-30 12:04:07 +0100 (Sat, 30 Jan 2010) | 2 lines "make sourcechange" now really works. ------------------------------------------------------------------------ r9341 | z-man | 2010-01-29 23:07:41 +0100 (Fri, 29 Jan 2010) | 1 line fixing distribution in generated debian changelog. ------------------------------------------------------------------------ r9340 | z-man | 2010-01-29 00:58:34 +0100 (Fri, 29 Jan 2010) | 1 line Allowing to build ubuntu version specific .deb files ------------------------------------------------------------------------ r9339 | z-man | 2010-01-28 09:41:00 +0100 (Thu, 28 Jan 2010) | 1 line Completed rebranding for debian packages. ------------------------------------------------------------------------ r9338 | bazaarmagetron | 2010-01-27 15:36:41 +0100 (Wed, 27 Jan 2010) | 2 lines Manuel Moos: Renamed protocol to 0.2.8.3.X to avoid even more confusion down the line :) ------------------------------------------------------------------------ r9337 | z-man | 2010-01-27 10:34:20 +0100 (Wed, 27 Jan 2010) | 2 lines Proper quoting for rebranding. ------------------------------------------------------------------------ r9336 | z-man | 2010-01-27 10:05:50 +0100 (Wed, 27 Jan 2010) | 2 lines Supporting rebranding on packaging. ------------------------------------------------------------------------ r9335 | z-man | 2010-01-27 08:11:00 +0100 (Wed, 27 Jan 2010) | 2 lines Working ppa upload, yay. ------------------------------------------------------------------------ r9334 | z-man | 2010-01-27 01:46:04 +0100 (Wed, 27 Jan 2010) | 2 lines Added upload of source to launchpad's PPA service. ------------------------------------------------------------------------ r9333 | z-man | 2010-01-27 00:09:20 +0100 (Wed, 27 Jan 2010) | 3 lines Building sort of proper ubuntu .deb files from the latest ubuntu build files just injected into our source. ------------------------------------------------------------------------ r9332 | bazaarmagetron | 2010-01-26 00:11:01 +0100 (Tue, 26 Jan 2010) | 2 lines Manuel Moos: Renamed 0.2.8.3_beta2 protocol to 0.2.8.3 to avoid confusion. ------------------------------------------------------------------------ r9330 | z-man | 2010-01-25 00:47:31 +0100 (Mon, 25 Jan 2010) | 2 lines Debian builds now actually work. ------------------------------------------------------------------------ r9329 | bazaarmagetron | 2010-01-24 22:34:18 +0100 (Sun, 24 Jan 2010) | 2 lines r9328 | bazaarmagetron | 2010-01-24 21:53:21 +0100 (Sun, 24 Jan 2010) | 2 lines Manuel Moos: Updated to SDL 1.2.14. (not merged, trunk is on 1.2.10, which is enough for now. We can use svn cp later.) ------------------------------------------------------------------------ r9327 | bazaarmagetron | 2010-01-24 21:42:05 +0100 (Sun, 24 Jan 2010) | 4 lines author: Manuel Moos On those systems where it is possible, set a window name even in fullscreen mode. ------------------------------------------------------------------------ r9326 | bazaarmagetron | 2010-01-24 21:40:01 +0100 (Sun, 24 Jan 2010) | 5 lines author: Manuel Moos Don't check whether the selected display mode is valid if desktop resolution was selected. It will always fail and have the color depth be reduced to 16 bit. ------------------------------------------------------------------------ r9325 | bazaarmagetron | 2010-01-23 22:50:06 +0100 (Sat, 23 Jan 2010) | 2 lines Manuel Moos: Added function to go to the (almost) end of the console messages. ------------------------------------------------------------------------ r9324 | bazaarmagetron | 2010-01-23 20:11:44 +0100 (Sat, 23 Jan 2010) | 2 lines Manuel Moos: Upping the default network speed and adapting the docs. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9322&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/Makefile.am armagetronad/trunk/armagetronad/Makefile.manual armagetronad/trunk/armagetronad/batch/sysinstall.in armagetronad/trunk/armagetronad/config/settings_authentication.cfg armagetronad/trunk/armagetronad/configure.ac armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp armagetronad/trunk/armagetronad/src/network/nConfig.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nSocket.cpp armagetronad/trunk/armagetronad/src/render/rConsole.cpp armagetronad/trunk/armagetronad/src/render/rConsole.h armagetronad/trunk/armagetronad/src/render/rScreen.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/ui/uInput.cpp armagetronad/trunk/build/Makefile armagetronad/trunk/build/README.txt armagetronad/trunk/build/WorkMakefile armagetronad/trunk/build/scripts/copysrc Added Paths: ----------- armagetronad/trunk/build/doc/ubuntu-changelog.txt Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9322 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9356 Modified: armagetronad/trunk/armagetronad/Makefile.am =================================================================== --- armagetronad/trunk/armagetronad/Makefile.am 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/Makefile.am 2010-02-01 00:48:11 UTC (rev 9357) @@ -66,8 +66,14 @@ # generate configure.ac with version hardcoded and ChangeLog dist-hook-scm: -# replace dynamic version in configure.ac with the version this build is configured with - sed -e "s/m4_include(version)//" -e "s/AUTOMATIC_VERSION/$(VERSION)/" < @srcdir@/configure.ac > $(distdir)/configure.ac +# replace dynamic version in configure.ac with the version this build is configured with, +# as well as default package and program name + sed \ + -e "s/m4_include(version)//" \ + -e "s/AC_INIT(armagetronad,AUTOMATIC_VERSION)/AC_INIT(@prognamebase@,$(VERSION))/" \ + -e "s/ progname=.*/ progname='@prognamebase@'/" \ + -e "s/ progtitle=.*/ progtitle='@progtitle@'/" \ + < @srcdir@/configure.ac > $(distdir)/configure.ac # regenerate dependant files so they no longer reference to the file "version" which will be removed cp @srcdir@/bootstrap.sh $(distdir) Modified: armagetronad/trunk/armagetronad/Makefile.manual =================================================================== --- armagetronad/trunk/armagetronad/Makefile.manual 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/Makefile.manual 2010-02-01 00:48:11 UTC (rev 9357) @@ -158,7 +158,7 @@ $(srcdir)/ChangeLog: .changetag rm -f $@ @echo -e "\nGenerating ChangeLog from SVN/BZR, please be patient...\n" - cd ${srcdir}; svn log 2>&1 > ChangeLog || bzr log 2>&1 > ChangeLog || echo "No official releasse: no changelog" > ChangeLog + cd ${srcdir}; svn log 2>&1 > ChangeLog || bzr log --gnu-changelog 2>&1 > ChangeLog || echo "No official releasse: no changelog" > ChangeLog test -r $@ || touch $@ # extra target to make before a real distribution is built Modified: armagetronad/trunk/armagetronad/batch/sysinstall.in =================================================================== --- armagetronad/trunk/armagetronad/batch/sysinstall.in 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/batch/sysinstall.in 2010-02-01 00:48:11 UTC (rev 9357) @@ -296,23 +296,37 @@ install_link ${BINDIR}/@progname@-@version@ ${BINDIR}/@progname@ install_link ${BINDIR}/@prognamebase@-master-@version@ ${BINDIR}/@prognamebase@-master -# add KDE icons and desktop link -if test @enable_desktop@ = yes && kde-config --install icon > /dev/null 2>&1; then +# install desktop files +if test @enable_desktop@ = yes; then DESKTOPSOURCE=@aa_datadir@/desktop - ICONSDEST=`kde_get_write_path icon ${DESTDIR}` - if test -z "${ICONSDEST}"; then - echo "No permission to write to KDE icons directory." - else - echo "${INSTALLING} KDE icon in ${ICONSDEST}..." - install_link ${DESKTOPSOURCE}/icons/large/armagetronad.png ${ICONSDEST}/@progname@.png + + # rebrand icons and desktop file + if test "$MODE" = "install"; then + if test @prognamebase@ = armagetronad; then + true # echo no rebranding + else + for f in large small medium; do mv ${DESTDIR}${DESKTOPSOURCE}/icons/$f/armagetronad.png ${DESTDIR}${DESKTOPSOURCE}/icons/$f/@prognamebase@.png; done + mv ${DESTDIR}${DESKTOPSOURCE}/armagetronad.desktop ${DESTDIR}${DESKTOPSOURCE}/@prognamebase@.desktop + fi fi - DESKTOPDEST=`kde_get_write_path apps ${DESTDIR}` - if test -z "${DESKTOPDEST}"; then - echo "No permission to write to KDE application menu directory." - else - echo "${INSTALLING} KDE start menu entry in ${DESKTOPDEST}..." - install_link ${DESKTOPSOURCE}/armagetronad.desktop ${DESKTOPDEST}/@progname@.desktop + # add KDE icons and desktop link + if kde-config --install icon > /dev/null 2>&1; then + ICONSDEST=`kde_get_write_path icon ${DESTDIR}` + if test -z "${ICONSDEST}"; then + echo "No permission to write to KDE icons directory." + else + echo "${INSTALLING} KDE icon in ${ICONSDEST}..." + install_link ${DESKTOPSOURCE}/icons/large/@prognamebase@.png ${ICONSDEST}/@progname@.png + fi + + DESKTOPDEST=`kde_get_write_path apps ${DESTDIR}` + if test -z "${DESKTOPDEST}"; then + echo "No permission to write to KDE application menu directory." + else + echo "${INSTALLING} KDE start menu entry in ${DESKTOPDEST}..." + install_link ${DESKTOPSOURCE}/@prognamebase@.desktop ${DESKTOPDEST}/@progname@.desktop + fi fi fi Modified: armagetronad/trunk/armagetronad/config/settings_authentication.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2010-02-01 00:48:11 UTC (rev 9357) @@ -397,7 +397,30 @@ # makes your team available for everyone to join again. +######################################################################### +# +# Man in the middle prevention +# +######################################################################### +# when a client authenticates, it sends the IP address and port of the +# server it thinks it is connected to along with the password hash. +# If that IP doesn't match the IP the server thinks it runs under, +# login is denied. Two cases need special attention: + +# If your public server is on a LAN and you expect players to connect over +# that LAN in addition to players coming from the Internet, those clients +# will send the LAN IP of the server, which won't match the public IP, so +# the authentication gets rejected. To allow clients from the LAN to bypass +# the check, set this to 1: + +TRUST_LAN 0 + +# If your server does not talk to the master servers, it never gets told +# what its public IP is. You can set it manually with the following command: + +#SERVER_DNS <your public ip or a DNS name resolving to it> + ######################################################################### # # Various Modified: armagetronad/trunk/armagetronad/configure.ac =================================================================== --- armagetronad/trunk/armagetronad/configure.ac 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/configure.ac 2010-02-01 00:48:11 UTC (rev 9357) @@ -8,7 +8,7 @@ m4_include(accustomdir.m4) dnl Process this file with autoconf to produce a configure script. -AC_INIT(Armagetronad,AUTOMATIC_VERSION) +AC_INIT(armagetronad,AUTOMATIC_VERSION) dnl FIXME: remove this in the future, when automake decides to actually set datarootdir by default dnl http://www.gnu.org/software/hello/manual/autoconf/Changed-Directory-Variables.html Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2010-02-01 00:48:11 UTC (rev 9357) @@ -1478,10 +1478,10 @@ network_opts_predict_help Sagt die Bewegung der Vehikel im Spiel, basierend auf der Netzwerkverz\xF6gerung, voraus. Allerdings wirken die Bewegungen dadurch sehr eckig. Ich pers\xF6nlich verlasse mich lieber auf das Lag-O-Meter. network_opts_inrate_text Bandbreite, eingehend: -network_opts_inrate_help Die maximale Anzahl von Kilobytes, die der Server diesem Rechner schickt. Maximale Werte: 1 f\xFCr 9.6k-Modems, 3 f\xFCr 28.8k-Modems, 7 f\xFCr 56k-Modems, 8 f\xFCr ISDN, mehr f\xFCr Kabelmodems, (A)DSL and LAN. 4 ist \xFCblicherweise ausreichend. +network_opts_inrate_help Die maximale Anzahl von Kilobytes, die der Server diesem Rechner schickt. Maximale Werte: 3 f\xFCr 28.8k-Modems, 7 f\xFCr 56k-Modems, 8 f\xFCr ISDN, 16 und mehr f\xFCr Kabelmodems, (A)DSL and LAN. network_opts_outrate_text Bandbreite, ausgehend: -network_opts_outrate_help Die maximale Anzahl von Kilobytes, die das Netzwerk nach aussen schickt. Drei ist normalerweise f\xFCr Clients v\xF6llig ausreichend. +network_opts_outrate_help Die maximale Anzahl von Kilobytes, die das Netzwerk nach aussen schickt. Drei ist normalerweise f\xFCr Clients v\xF6llig ausreichend, zuviel einzutragen schadet aber auch fast nie. network_opts_deletepw_text Passw\xF6rter l\xF6schen Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2010-02-01 00:48:11 UTC (rev 9357) @@ -1054,6 +1054,9 @@ input_mess_down_text Scroll down input_mess_down_help Scrolls the messages down a page. +input_mess_end_text Scroll to end +input_mess_end_help Scrolls to the end of the messages to show the most recent ones. + #******************************************** #******************************************** # @@ -1509,10 +1512,10 @@ network_opts_predict_help In a network game, this extrapolates the cycles' movement. Leaving it disabled makes the graphics smoother, enabling it gives yo a better image of the actual situation. I leave it disabled; the Lag-O-Meter is a good substitute for prediction. This is always disabled in server mode. network_opts_inrate_text Input Rate: -network_opts_inrate_help The maximum number of kilobytes your network can receive per second. 1 for 9.6k modems (only limited play possible), 3 for 28.8k modems (usualy no problems)...7 for 56k modems, 8 for ISDN, more for cable modems, (A)DSL and LAN. +network_opts_inrate_help The maximum number of kilobytes your network can receive per second. 3 for 28.8k modems, 7 for 56k modems, 8 for ISDN, more for cable modems, (A)DSL and LAN. network_opts_outrate_text Output Rate: -network_opts_outrate_help The maximum number of kilobytes your network can send per second. Set it to two or three if you do not wish to act as a server; more bandwidth is never used. Of course, it does not hurt to set it higher if you have a bigger pipe. +network_opts_outrate_help The maximum number of kilobytes your network can send per second. Eight is a good number for this for almost everyone. network_opts_deletepw_text Delete Passwords Modified: armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -928,7 +928,7 @@ // sanity check the server address bool nLoginProcess::CheckServerAddress() { - // if no check is requested (only canm happen for old bmd5 protocol), don't check. + // if no check is requested (only can happen for old bmd5 protocol), don't check. if ( !checkAddress ) { return true; Modified: armagetronad/trunk/armagetronad/src/network/nConfig.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nConfig.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/network/nConfig.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -566,7 +566,7 @@ "0.2.8.2", // 13 "0.2.8.3_alpha", // 14 "0.2.8.3_alpha_auth", // 15 - "0.2.8.3_beta2", // 16 + "0.2.8.3.X", // 16, was: 0.2.8.3_beta2 "0.2.8.4", // 17 "0.2.8.5_alpha", // 18 "0.2.8.5", // 19 Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -124,8 +124,8 @@ tAdvanceFrame(); } -int sn_maxRateIn=8; // maximum data rate in kb/s -int sn_maxRateOut=8; // maximum output data rate in kb/s +int sn_maxRateIn=32; // maximum data rate in kb/s +int sn_maxRateOut=16; // maximum output data rate in kb/s static nConnectError sn_Error = nOK; Modified: armagetronad/trunk/armagetronad/src/network/nSocket.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nSocket.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/network/nSocket.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -2079,9 +2079,9 @@ // check if return value was archived static char const * section = "SEND"; + static tReproducibleRandomizer randomizer; if ( !tRecorder::Playback( section, ret ) ) { - static tReproducibleRandomizer randomizer; #ifdef DEBUG // pretend send was successful in packet loss simulation if ( sn_simulateSendPacketLoss > randomizer.Get() ) Modified: armagetronad/trunk/armagetronad/src/render/rConsole.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rConsole.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/render/rConsole.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -148,6 +148,16 @@ return *this; } +// moves to the end, showing the last lines +void rConsole::End(int last) +{ + currentTop = currentIn - last; + if ( currentTop < 0 ) + { + currentTop = 0; + } +} + void rConsole::Scroll(int dir){ rCenterDisplayCallback::CenterDisplay(); Modified: armagetronad/trunk/armagetronad/src/render/rConsole.h =================================================================== --- armagetronad/trunk/armagetronad/src/render/rConsole.h 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/render/rConsole.h 2010-02-01 00:48:11 UTC (rev 9357) @@ -73,8 +73,12 @@ // rConsole & operator<<(const tString &s); virtual tConsole & DoPrint( const tString& s ); + //! scrolls up or down void Scroll(int dir); + //! moves to the end, showing the last lines + void End(int last); + virtual void DoCenterDisplay(const tString &s,REAL timeout=2,REAL r=1,REAL g=1,REAL b=1); virtual tString ColorString(REAL r, REAL g, REAL b) const; Modified: armagetronad/trunk/armagetronad/src/render/rScreen.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -607,7 +607,9 @@ #endif int CD = fullCD; - if (currentScreensetting.checkErrors) + // only check for errors if requested and if we're not about to set the + // desktop resolution, where SDL_VideoModeOK apparently doesn't work. + if (currentScreensetting.checkErrors && sr_screenWidth + sr_screenHeight > 0) { // check if the video mode should be OK: CD = SDL_VideoModeOK @@ -671,8 +673,15 @@ sr_screenWidth = sr_desktopWidth; sr_screenHeight = sr_desktopHeight; } + else + { + // have the screen reinited + sr_screen = NULL; + } - if ( (sr_screen=SDL_SetVideoMode + // only reinit the screen if the desktop res detection hasn't left us + // with a perfectly good one. + if ( !sr_screen && (sr_screen=SDL_SetVideoMode (sr_screenWidth, sr_screenHeight, CD, attrib)) == NULL) @@ -735,7 +744,15 @@ sr_blacklistDisplayLists=true; } - #ifndef WIN32 + if(strstr(gl_vendor,"SiS")) + { + // almost nobody has those cards/chips, and we have + // at least one bluescreen problem reported. + sr_blacklistDisplayLists=true; + } + + +#ifndef WIN32 if(!strstr(gl_renderer,"Voodoo3")) #endif { Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -1825,13 +1825,13 @@ uMenuItemInt out_rate (&net_menu,"$network_opts_outrate_text", "$network_opts_outrate_help", - sn_maxRateOut,1,20); + sn_maxRateOut,2,32); uMenuItemInt in_rate (&net_menu,"$network_opts_inrate_text", "$network_opts_inrate_help", - sn_maxRateIn,1,20); + sn_maxRateIn,3,64); uMenuItemToggle po2 Modified: armagetronad/trunk/armagetronad/src/ui/uInput.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/ui/uInput.cpp 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/armagetronad/src/ui/uInput.cpp 2010-02-01 00:48:11 UTC (rev 9357) @@ -1480,10 +1480,12 @@ return false; } -static uActionGlobal mess_up("MESS_UP"); +static uActionGlobal mess_up("MESS_UP",1); -static uActionGlobal mess_down("MESS_DOWN"); +static uActionGlobal mess_down("MESS_DOWN",2); +static uActionGlobal mess_end("MESS_END",3); + static bool messup_func(REAL x){ if (x>0){ sr_con.Scroll(-1); @@ -1498,5 +1500,13 @@ return true; } +static bool messend_func(REAL x){ + if (x>0){ + sr_con.End(2); + } + return true; +} + static uActionGlobalFunc mu(&mess_up,&messup_func); static uActionGlobalFunc md(&mess_down,&messdown_func); +static uActionGlobalFunc me(&mess_end,&messend_func); Modified: armagetronad/trunk/build/Makefile =================================================================== --- armagetronad/trunk/build/Makefile 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/build/Makefile 2010-02-01 00:48:11 UTC (rev 9357) @@ -43,6 +43,8 @@ # rm -f make.conf +sinclude make.conf + sourcechange: # # ***************************************** @@ -50,4 +52,6 @@ # ***************************************** # rm -f tarballs/.sourcetag tarballs/*.tar* + cd $(AA_SOURCE) && rm -f src/doc/commands.txt + cd tarballs/distmaker && rm armagetronad-* -rf && rm $(PACKAGE)-* -rf Modified: armagetronad/trunk/build/README.txt =================================================================== --- armagetronad/trunk/build/README.txt 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/build/README.txt 2010-02-01 00:48:11 UTC (rev 9357) @@ -33,6 +33,16 @@ debian builds debian packages ( not yet complete ) +ubuntu + builds ubuntu archive with your current distribution, supposedly compatible with + other versions. +ubuntu-<release codename> + builds ubuntu package specialized for the given distribution. +upload-ubuntu + uploads generic ubuntu source package to default PPA specified in ~/.dput.cf +upload-ubuntu-<release codename> + uploads distribution-specific ubuntu source package to default PPA specified in ~/.dput.cf + autopackage.client and autopackage.server builds autopackage client resp. server. Note: libxml2 is linked statically. You should therefore have a version of libxml2 compiled with apgcc. Use Modified: armagetronad/trunk/build/WorkMakefile =================================================================== --- armagetronad/trunk/build/WorkMakefile 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/build/WorkMakefile 2010-02-01 00:48:11 UTC (rev 9357) @@ -3,7 +3,7 @@ # Last change by $Author$ on $Date$ all: tarsource -full: all rpm debian +full: all rpm deb pack: tarsource webdoc windoc zipsource rpm-mdk: mandriva rpm-mdkded: mandriva-dedicated @@ -13,7 +13,7 @@ include IncludesMakefile3 # everything z-man can build at home and work -z-man-home: tarsource zipsource webdoc windoc autopackage +z-man-home: tarsource zipsource webdoc windoc autopackage ubuntu-hardy z-man-work: autopackage-legacyserver autopackage-client # other builders are invited to add their build sets. @@ -71,7 +71,7 @@ # build tarball INPUTTARBALLBASE=tarballs/$(PACKAGE)-$(VERSION).src.tar -INPUTTARBALLBASE2=tarballs/$(PACKAGE)-$(VERSION).tar.gz +#INPUTTARBALLBASE2=tarballs/armagetronad-$(VERSION).tar.gz TARBALLBASE=$(UPLOAD)/$(RCNAME).src.tar TARBALLGZ=$(TARBALLBASE).gz TARBALLBZ=$(TARBALLBASE).bz2 @@ -85,7 +85,7 @@ # ***************************************** # ${TESTVERSION} - mv $(INPUTTARBALLBASE2) $(INPUTTARBALLBASE).gz || true +# mv $(INPUTTARBALLBASE2) $(INPUTTARBALLBASE).gz || true if test -r $(INPUTTARBALLBASE).gz && gzip -f -d $(INPUTTARBALLBASE).gz; then echo done; else rm -f $(INPUTTARBALLBASE).gz; fi if test -r $(INPUTTARBALLBASE).bz2 && bzip2 -f -d $(INPUTTARBALLBASE).bz2; then echo done; else rm -f $(INPUTTARBALLBASE).bz2; fi test -r $@ || { echo "Source tarball not found. Please rerun make." ; rm -rf ${SOURCETAG} ${VERSIONTAG}; false; } @@ -323,7 +323,10 @@ # * prepare debian build * # ***************************************** # - cp -ax $(SOURCEDIR) $@ + mkdir -p $(RCDIR)/tmp + cd $(RCDIR)/tmp; tar -xf ../../../../$(INPUTTARBALLBASE) + mv $(RCDIR)/tmp/$(PACKAGE)-$(VERSION) $@ + rmdir $(RCDIR)/tmp cp -ax debian $@ chmod 755 $@/debian/rules @@ -335,7 +338,7 @@ # cd $<; debian/rules binary -debian: debianbuild +deb: debianbuild $(UPLOAD)/.tag # # ***************************************** # * harvesting debian package * @@ -343,6 +346,74 @@ # find $(RCDIR) -name "$(PACKAGE)*.deb" -exec mv \{\} $(UPLOAD) \; + +DEBVERSION=$(subst _,~,${VERSION})~ppa +UBUNTUSOURCEDIR=$(RCDIR)/$(PACKAGE)-$(DEBVERSION) +$(UBUNTUSOURCEDIR)%.tag: $(INPUTTARBALLBASE) $(UPLOAD)/.tag + # + # ***************************************** + # * prepare ubuntu build * + # ***************************************** + # + rm -rf $(UBUNTUSOURCEDIR)$* + mkdir -p $(RCDIR)/tmp2 + cd $(RCDIR)/tmp2; tar -xf ../../../../$(INPUTTARBALLBASE) + mv $(RCDIR)/tmp2/$(PACKAGE)-$(VERSION) $(UBUNTUSOURCEDIR)$* + rmdir $(RCDIR)/tmp2 +# adapt the following line as ubuntu releases get updated + bzr pull -d ../ubuntu || bzr branch lp:ubuntu/armagetronad ../ubuntu + cp -ax ../ubuntu/debian $(UBUNTUSOURCEDIR)$*/debian +# rebrand package +# for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\./armagetronad./g" > $(UBUNTUSOURCEDIR)/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done + for f in ../ubuntu/debian/*; do sed -e "s/armagetronad/${PACKAGE}/g" < $$f | sed -e "s/${PACKAGE}\.net/armagetronad.net/g" > $(UBUNTUSOURCEDIR)$*/debian/$$(echo $$f | sed -e s,../ubuntu/debian/,, -e "s/armagetronad/${PACKAGE}/"); done + chmod 755 $(UBUNTUSOURCEDIR)$*/debian/rules +# build changelog + DIST="`echo $* | sed -e s/^[0-9]*// -e s/.*~//`"; test -z $$DIST && DIST=hardy; sed -e "s/@distribution@/$$DIST/g" -e "s/@package@/$(PACKAGE)/g" -e "s/@version@/${DEBVERSION}$*/g" -e "s;@date@;$$(date -R);g" < doc/ubuntu-changelog.txt > $(UBUNTUSOURCEDIR)$*/debian/changelog + cat < ../ubuntu/debian/changelog >> $(UBUNTUSOURCEDIR)$*/debian/changelog + echo "x" > $@ + +$(RCDIR)/ubuntu%.tag: $(UBUNTUSOURCEDIR)%.tag + # + # ***************************************** + # * ubuntu build * + # ***************************************** + # + cd $(UBUNTUSOURCEDIR)$*; fakeroot debian/rules binary +# harvesting debian package(s) + find $(RCDIR) -name "$(PACKAGE)*.deb" -exec mv \{\} $(UPLOAD) \; + echo "x" > $@ + +xubuntu-build-%: $(RCDIR)/ubuntu%.tag + echo $@ + +#real targets for the user +ubuntu: xubuntu-build-$(RC) + echo $@ +ubuntu-%: xubuntu-build-$(RC)~% + echo $@ + +$(RCDIR)/${PACKAGE}_${DEBVERSION}%_source.changes: $(UBUNTUSOURCEDIR)%.tag + # + # ************************************ + # * preparing ubuntu source for ppa * + # ************************************ + # + cd $(UBUNTUSOURCEDIR)$* && debuild -S -sa + +xupload-ubuntu-%: $(RCDIR)/${PACKAGE}_${DEBVERSION}%_source.changes + # + # *********************************** + # * uploading ubuntu source to ppa * + # *********************************** + # + cd $(RCDIR) && dput ${PACKAGE}_${DEBVERSION}$*_source.changes + +#real targets for the user +upload-ubuntu: xupload-ubuntu-$(RC) + echo $@ +upload-ubuntu-%: xupload-ubuntu-$(RC)~% + echo $@ + APFILE=$(RCDIR)/.package autopackage-client: $(APFILE).client autopackage-server: $(APFILE).server Copied: armagetronad/trunk/build/doc/ubuntu-changelog.txt (from rev 9356, armagetronad/branches/0.2.8/build/doc/ubuntu-changelog.txt) =================================================================== --- armagetronad/trunk/build/doc/ubuntu-changelog.txt (rev 0) +++ armagetronad/trunk/build/doc/ubuntu-changelog.txt 2010-02-01 00:48:11 UTC (rev 9357) @@ -0,0 +1,7 @@ +@package@ (@version@) @distribution@; urgency=low + + * just slapping the new upstream code around the ubuntu distribution files. + + -- Manuel Moos <z-...@us...> @date@ + + Modified: armagetronad/trunk/build/scripts/copysrc =================================================================== --- armagetronad/trunk/build/scripts/copysrc 2010-01-31 16:10:37 UTC (rev 9356) +++ armagetronad/trunk/build/scripts/copysrc 2010-02-01 00:48:11 UTC (rev 9357) @@ -2,7 +2,7 @@ # copies sources from CVS folder into given target folder -# set -x +set -x # read configuration . ./make.conf @@ -13,15 +13,11 @@ # generate automatic files CWD=`pwd` if test -z "$VERSION"; then - if test -r $AA_SOURCE/version && test -r $AA_SOURCE/configure && test -r $AA_SOURCE/ChangeLog ; then - echo "No bootstrap required." - else - # bootstrap - lwd=`pwd` - cd $AA_SOURCE - sh ./bootstrap.sh || exit -1 - cd ${lwd} - fi + # bootstrap + lwd=`pwd` + cd $AA_SOURCE + sh ./bootstrap.sh || exit -1 + cd ${lwd} # adapt version to source VERSION=`sed -e 's,.*\[,,' -e 's,\].*,,' < $AA_SOURCE/version` @@ -41,7 +37,10 @@ mkdir -p $TARGET/distmaker lwd=`pwd` cd $TARGET/distmaker -test -r config.h || docstyle=web $CWD/$AA_SOURCE/configure --prefix=/usr/local --disable-glout --enable-automakedefaults --disable-useradd --disable-etc --disable-initscripts || exit -1 +rm -rf armagetronad-* +rm -rf ${PACKAGE}-* +rm -f *.tar.* +test -r config.h || progname="${PACKAGE}" progtitle="${PROGNAME}" docstyle=web $CWD/$AA_SOURCE/configure --prefix=/usr/local --disable-glout --enable-automakedefaults --disable-useradd --disable-etc --disable-initscripts || exit -1 ${MAKE} distprep || exit -1 # call some idle makes to update includes and do stuff @@ -49,7 +48,10 @@ ${MAKE} nothingeither ${MAKE} dist || exit -1 -mv *.tar.* ../ +tar -xzf *.tar.* +mv armagetronad-${VERSION} ${PACKAGE}-${VERSION} +tar -cf ../${PACKAGE}-${VERSION}.src.tar ${PACKAGE}-${VERSION} +#mv *.tar.* ../ cd ${lwd} # copy raw sources for later tagging This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-08-06 07:05:57
|
Revision: 9426 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9426&view=rev Author: z-man Date: 2010-08-06 07:05:46 +0000 (Fri, 06 Aug 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9356 to 9425: ------------------------------------------------------------------------ r9424 | bazaarmagetron | 2010-06-28 17:45:41 +0200 (Mon, 28 Jun 2010) | 2 lines Manuel Moos: Improving readability of console and in-game menu by fading the background to black with an alpha quad. ------------------------------------------------------------------------ r9423 | bazaarmagetron | 2010-06-25 16:03:21 +0200 (Fri, 25 Jun 2010) | 2 lines Manuel Moos: Finishing passing of configuration directory from last merge. ------------------------------------------------------------------------ r9422 | bazaarmagetron | 2010-06-25 16:02:48 +0200 (Fri, 25 Jun 2010) | 5 lines author: Manuel Moos Merging own changes from earlier: - Added passing down of $CONFIG directory in serverstarter scripts. - Hovering over color menu items no longer breaks debug recording playback fast forward. ------------------------------------------------------------------------ r9421 | bazaarmagetron | 2010-06-24 01:04:25 +0200 (Thu, 24 Jun 2010) | 2 lines Manuel Moos: Merging own forgotten changes. ------------------------------------------------------------------------ r9420 | bazaarmagetron | 2010-06-07 15:19:04 +0200 (Mon, 07 Jun 2010) | 2 lines Manuel Moos: Avoiding player list read overflow. How did this go unnoticed for so long? ------------------------------------------------------------------------ r9419 | bazaarmagetron | 2010-05-27 13:36:19 +0200 (Thu, 27 May 2010) | 2 lines Manuel Moos: Fixing aspect ratio calculations. In all practical cases, ensuring vertical fov did not happen; in those where something happened (really, really high screens), it overcompensated and distorted the image. ------------------------------------------------------------------------ r9418 | bazaarmagetron | 2010-05-26 15:04:31 +0200 (Wed, 26 May 2010) | 2 lines Manuel Moos: Taking ownership of ALL network objects formerly belonging to a deleted user. ------------------------------------------------------------------------ r9417 | bazaarmagetron | 2010-05-26 15:03:55 +0200 (Wed, 26 May 2010) | 2 lines Manuel Moos: Clearing send queue on new user login. Fixes one instance of odd authentication dialogs popping up. ------------------------------------------------------------------------ r9416 | bazaarmagetron | 2010-05-26 15:03:19 +0200 (Wed, 26 May 2010) | 2 lines Manuel Moos: Simplified default login procedure for @forums accounts. ------------------------------------------------------------------------ r9415 | bazaarmagetron | 2010-04-25 23:27:21 +0200 (Sun, 25 Apr 2010) | 2 lines Manuel Moos: Updated to current version from gnu.org. Address change, formatting, and LGPL is now the lesser GNU License. ------------------------------------------------------------------------ r9414 | bazaarmagetron | 2010-04-25 23:26:49 +0200 (Sun, 25 Apr 2010) | 2 lines Manuel Moos: Using OUR version of COPYING. ------------------------------------------------------------------------ r9413 | bazaarmagetron | 2010-04-22 12:33:03 +0200 (Thu, 22 Apr 2010) | 2 lines Manuel Moos: Avoiding reloading of title screen when textures are reloaded and it isn't actually getting displayed. ------------------------------------------------------------------------ r9412 | bazaarmagetron | 2010-04-19 20:02:56 +0200 (Mon, 19 Apr 2010) | 1 line Luke Dashjr: replace references to guru3.sytes.net with working URIs at forums.armagetronad.net ------------------------------------------------------------------------ r9408 | bazaarmagetron | 2010-04-17 19:02:43 +0200 (Sat, 17 Apr 2010) | 1 line Luke Dashjr: main is not a valid hack for AC_CHECK_LIB... use valid values ------------------------------------------------------------------------ r9400 | bazaarmagetron | 2010-03-19 23:41:45 +0100 (Fri, 19 Mar 2010) | 1 line Luke Dashjr: png_sig_cmp is in both libpng12 and libpng14, where as png_check_sig is only libpng12 --ssuominen ------------------------------------------------------------------------ r9377 | bazaarmagetron | 2010-02-22 20:39:56 +0100 (Mon, 22 Feb 2010) | 1 line Manuel Moos: partial portugese translation ------------------------------------------------------------------------ r9375 | bazaarmagetron | 2010-02-21 01:16:35 +0100 (Sun, 21 Feb 2010) | 2 lines Manuel Moos: More typo fixes. ------------------------------------------------------------------------ r9368 | bazaarmagetron | 2010-02-20 18:08:58 +0100 (Sat, 20 Feb 2010) | 2 lines Manuel Moos: Rebranding support for configure error messages. ------------------------------------------------------------------------ r9367 | bazaarmagetron | 2010-02-20 18:08:00 +0100 (Sat, 20 Feb 2010) | 2 lines Manuel Moos: Merging start menu branch. ------------------------------------------------------------------------ r9366 | bazaarmagetron | 2010-02-20 18:06:37 +0100 (Sat, 20 Feb 2010) | 2 lines Manuel Moos: Merging tooltip branch. ------------------------------------------------------------------------ r9365 | bazaarmagetron | 2010-02-20 18:04:54 +0100 (Sat, 20 Feb 2010) | 2 lines Manuel Moos: Merging luke's spelling fix branch. ------------------------------------------------------------------------ r9364 | bazaarmagetron | 2010-02-19 19:25:59 +0100 (Fri, 19 Feb 2010) | 2 lines Manuel Moos: "Winner..." message only shown if there is a non-zero win score. Yeah, we don't care if it's negative. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9356&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/COPYING.txt armagetronad/trunk/armagetronad/batch/rcd_startstop.in armagetronad/trunk/armagetronad/batch/serverstarter.in armagetronad/trunk/armagetronad/bootstrap.sh armagetronad/trunk/armagetronad/config/Makefile.am armagetronad/trunk/armagetronad/config/default.cfg armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/configure.ac armagetronad/trunk/armagetronad/language/american.txt armagetronad/trunk/armagetronad/language/british.txt armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/language/english_base_notranslate.txt armagetronad/trunk/armagetronad/src/doc/bugs.html.m4 armagetronad/trunk/armagetronad/src/doc/changelog.html.m4 armagetronad/trunk/armagetronad/src/engine/eCamera.cpp armagetronad/trunk/armagetronad/src/engine/eCamera.h armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/network/nNetObject.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/render/rConsole.h armagetronad/trunk/armagetronad/src/render/rConsoleGraph.cpp armagetronad/trunk/armagetronad/src/render/rFont.h armagetronad/trunk/armagetronad/src/render/rViewport.cpp armagetronad/trunk/armagetronad/src/tools/tColor.h armagetronad/trunk/armagetronad/src/tools/tRecorder.cpp armagetronad/trunk/armagetronad/src/tools/tSysTime.cpp armagetronad/trunk/armagetronad/src/tron/gArmagetron.cpp armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/tron/gGame.h armagetronad/trunk/armagetronad/src/tron/gLanguageMenu.cpp armagetronad/trunk/armagetronad/src/tron/gLanguageMenu.h armagetronad/trunk/armagetronad/src/tron/gLogo.cpp armagetronad/trunk/armagetronad/src/tron/gMenus.cpp armagetronad/trunk/armagetronad/src/tron/gTeam.cpp armagetronad/trunk/armagetronad/src/ui/uInput.cpp armagetronad/trunk/armagetronad/src/ui/uInput.h armagetronad/trunk/armagetronad/src/ui/uMenu.cpp armagetronad/trunk/armagetronad/src/ui/uMenu.h Added Paths: ----------- armagetronad/trunk/armagetronad/config/keys_cursor.cfg armagetronad/trunk/armagetronad/config/keys_cursor_single.cfg armagetronad/trunk/armagetronad/config/keys_twohand.cfg armagetronad/trunk/armagetronad/config/keys_wasd.cfg armagetronad/trunk/armagetronad/config/keys_x.cfg armagetronad/trunk/armagetronad/config/keys_zqsd.cfg armagetronad/trunk/armagetronad/language/portugese.txt Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9356 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9425 Modified: armagetronad/trunk/armagetronad/COPYING.txt =================================================================== --- armagetronad/trunk/armagetronad/COPYING.txt 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/COPYING.txt 2010-08-06 07:05:46 UTC (rev 9426) @@ -1,12 +1,12 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -15,7 +15,7 @@ General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not @@ -55,8 +55,8 @@ The precise terms and conditions for copying, distribution and modification follow. - - GNU GENERAL PUBLIC LICENSE + + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains @@ -110,7 +110,7 @@ License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -168,7 +168,7 @@ access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is @@ -225,7 +225,7 @@ This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License @@ -255,7 +255,7 @@ of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN @@ -277,10 +277,10 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs + END OF TERMS AND CONDITIONS + How to Apply These Terms to Your New Programs + If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. @@ -303,11 +303,10 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - 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 + 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., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this @@ -336,5 +335,5 @@ This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General +library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. Modified: armagetronad/trunk/armagetronad/batch/rcd_startstop.in =================================================================== --- armagetronad/trunk/armagetronad/batch/rcd_startstop.in 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/batch/rcd_startstop.in 2010-08-06 07:05:46 UTC (rev 9426) @@ -12,6 +12,7 @@ # export PIDDIR and VARDIR for service starter script export PIDDIR export VARDIR +export CONFIG # ps command listing all PIDs PS="ps -a" Modified: armagetronad/trunk/armagetronad/batch/serverstarter.in =================================================================== --- armagetronad/trunk/armagetronad/batch/serverstarter.in 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/batch/serverstarter.in 2010-08-06 07:05:46 UTC (rev 9426) @@ -4,6 +4,7 @@ [ X"${PIDDIR}" = X"" ] && PIDDIR=${HOME}/.@prognamebase@ [ X"${VARDIR}" = X"" ] && VARDIR=${HOME}/.@prognamebase@/var +[ X"${CONFIG}" = X"" ] && CONFIG=@aa_sysconfdir_reloc@ [ X"${BINDIR}" = X"" ] && BINDIR=@prefix_reloc@/bin echo $$ > ${PIDDIR}/@progname@-starter.pid @@ -11,7 +12,7 @@ cd ${VARDIR} run() { - ${BINDIR}/@progname@@executable_suffix@ --userdatadir ${VARDIR} --daemon $* & + ${BINDIR}/armagetronad-dedicated --configdir ${CONFIG} --userdatadir ${VARDIR} --daemon $* & jobs -p > ${PIDDIR}/@progname@.pid [ -s ${PIDDIR}/@progname@.pid ] || { echo "Warning: main program PID unavailable, server can't be stopped reliably."; echo $$ > ${PIDDIR}/@progname@.pid ; } wait Modified: armagetronad/trunk/armagetronad/bootstrap.sh =================================================================== --- armagetronad/trunk/armagetronad/bootstrap.sh 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/bootstrap.sh 2010-08-06 07:05:46 UTC (rev 9426) @@ -14,6 +14,8 @@ echo "Generating version..." echo "m4_define(AUTOMATIC_VERSION,["`sh batch/make/version $MYDIR`"])" > version || exit 1 fi +echo "Copying license..." +cp COPYING.txt COPYING echo "Running aclocal..." $ACLOCAL || { rm aclocal.m4; exit 1; } Modified: armagetronad/trunk/armagetronad/config/Makefile.am =================================================================== --- armagetronad/trunk/armagetronad/config/Makefile.am 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/config/Makefile.am 2010-08-06 07:05:46 UTC (rev 9426) @@ -8,6 +8,8 @@ subcultures.srv\ settings_visual.cfg\ settings_authentication.cfg\ + keys_cursor.cfg keys_wasd.cfg keys_zqsd.cfg\ + keys_twohand.cfg keys_x.cfg keys_cursor_single.cfg\ examples/breakfast_in_hell.cfg examples/single_use_turbo.cfg\ examples/fortress_soccer.cfg examples/death_zone.cfg\ examples/cvs_test/fortress_physics.cfg examples/cvs_test/fortress_scoring.cfg\ Modified: armagetronad/trunk/armagetronad/config/default.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/default.cfg 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/config/default.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -6,42 +6,52 @@ SERVER_NAME Unnamed Server CM_LOCY -0.5 +# active tooltips + CHAT_TOOLTIP 1 1 1 1 1 + CYCLE_BRAKE_TOOLTIP 1 1 1 1 1 + CYCLE_TURN_LEFT_TOOLTIP 10 10 5 5 5 + CYCLE_TURN_RIGHT_TOOLTIP 11 11 6 6 6 + GLANCE_BACK_TOOLTIP 1 1 1 1 1 + GLANCE_LEFT_TOOLTIP 3 3 3 3 3 + GLANCE_RIGHT_TOOLTIP 3 3 3 3 3 + SWITCH_VIEW_TOOLTIP 2 2 2 2 2 + TOGGLE_SPECTATOR_TOOLTIP 2 2 2 2 2 + INGAME_MENU_TOOLTIP 1 1 1 1 1 + +KEYBOARD 27 PLAYER_BIND INGAME_MENU 0 + # no play time PLAY_TIME_TOTAL 0 PLAY_TIME_ONLINE 0 PLAY_TIME_TEAM 0 -# default keyboard layout -KEYBOARD 333 PLAYER_BIND ZOOM_OUT 1 +# default keyboard layout, valid for all setups + +# camera on numpad and mouse KEYBOARD 332 PLAYER_BIND ZOOM_IN 1 KEYBOARD 327 PLAYER_BIND BANK_DOWN 1 KEYBOARD 326 PLAYER_BIND BANK_UP 1 KEYBOARD 325 PLAYER_BIND LOOK_LEFT 1 KEYBOARD 324 PLAYER_BIND LOOK_RIGHT 1 -KEYBOARD 276 PLAYER_BIND CYCLE_TURN_LEFT 2 -KEYBOARD 275 PLAYER_BIND CYCLE_TURN_RIGHT 2 -KEYBOARD 274 PLAYER_BIND SWITCH_VIEW 2 -KEYBOARD 271 PLAYER_BIND MOVE_DOWN 1 -KEYBOARD 270 PLAYER_BIND MOVE_UP 1 +KEYBOARD 270 PLAYER_BIND MOVE_DOWN 1 +KEYBOARD 269 PLAYER_BIND MOVE_UP 1 KEYBOARD 262 PLAYER_BIND LOOK_RIGHT 1 KEYBOARD 261 PLAYER_BIND MOVE_FORWARD 1 KEYBOARD 260 PLAYER_BIND LOOK_LEFT 1 KEYBOARD 259 PLAYER_BIND MOVE_RIGHT 1 KEYBOARD 258 PLAYER_BIND MOVE_BACK 1 KEYBOARD 257 PLAYER_BIND MOVE_LEFT 1 -KEYBOARD 273 PLAYER_BIND GLANCE_FORWARD 1 -KEYBOARD 276 PLAYER_BIND GLANCE_LEFT 1 -KEYBOARD 275 PLAYER_BIND GLANCE_RIGHT 1 -KEYBOARD 274 PLAYER_BIND GLANCE_BACK 1 -KEYBOARD 122 PLAYER_BIND CYCLE_TURN_LEFT 1 -KEYBOARD 121 PLAYER_BIND CYCLE_TURN_LEFT 1 -KEYBOARD 119 PLAYER_BIND CYCLE_TURN_LEFT 1 -KEYBOARD 118 PLAYER_BIND CYCLE_BRAKE 1 -KEYBOARD 120 PLAYER_BIND CYCLE_TURN_RIGHT 1 -KEYBOARD 115 PLAYER_BIND CHAT 1 -KEYBOARD 113 PLAYER_BIND BANK_UP 1 -KEYBOARD 99 PLAYER_BIND SWITCH_VIEW 1 -KEYBOARD 97 PLAYER_BIND BANK_DOWN 1 + +KEYBOARD 266 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 256 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 278 PLAYER_BIND TOGGLE_SPECTATOR 1 +KEYBOARD 98 PLAYER_BIND TOGGLE_SPECTATOR 1 + +#regular chat: enter and return +KEYBOARD 13 PLAYER_BIND CHAT 1 +KEYBOARD 271 PLAYER_BIND CHAT 1 + +#instachats: function and number keys KEYBOARD 293 PLAYER_BIND INSTANT_CHAT_12 1 KEYBOARD 292 PLAYER_BIND INSTANT_CHAT_11 1 KEYBOARD 291 PLAYER_BIND INSTANT_CHAT_10 1 @@ -68,12 +78,16 @@ KEYBOARD 48 PLAYER_BIND INSTANT_CHAT_22 1 KEYBOARD 45 PLAYER_BIND INSTANT_CHAT_23 1 KEYBOARD 8 PLAYER_BIND INSTANT_CHAT_25 1 -KEYBOARD 13 PLAYER_BIND INSTANT_CHAT_26 1 + +# global stuff, console, pause, screenshots KEYBOARD 281 PLAYER_BIND MESS_DOWN 0 KEYBOARD 280 PLAYER_BIND MESS_UP 0 +KEYBOARD 279 PLAYER_BIND MESS_END 0 KEYBOARD 9 PLAYER_BIND SCORE 0 KEYBOARD 316 PLAYER_BIND SCREENSHOT 0 KEYBOARD 294 PLAYER_BIND SCREENSHOT 0 +KEYBOARD 319 PLAYER_BIND TOGGLE_FULLSCREEN 0 +KEYBOARD 110 PLAYER_BIND TOGGLE_FULLSCREEN 0 KEYBOARD 102 PLAYER_BIND TOGGLE_FULLSCREEN 0 KEYBOARD 96 PLAYER_BIND CONSOLE_INPUT 0 KEYBOARD 94 PLAYER_BIND CONSOLE_INPUT 0 Copied: armagetronad/trunk/armagetronad/config/keys_cursor.cfg (from rev 9425, armagetronad/branches/0.2.8/armagetronad/config/keys_cursor.cfg) =================================================================== --- armagetronad/trunk/armagetronad/config/keys_cursor.cfg (rev 0) +++ armagetronad/trunk/armagetronad/config/keys_cursor.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -0,0 +1,24 @@ +# Control over cursor keys +KEYBOARD 276 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 275 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 274 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 118 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 117 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 111 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 108 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 107 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 106 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 105 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 99 PLAYER_BIND SWITCH_VIEW 1 + +KEYBOARD 122 PLAYER_BIND GLANCE_LEFT 2 +KEYBOARD 120 PLAYER_BIND CYCLE_TURN_LEFT 2 +KEYBOARD 119 PLAYER_BIND GLANCE_LEFT 2 +KEYBOARD 115 PLAYER_BIND CYCLE_TURN_LEFT 2 +KEYBOARD 114 PLAYER_BIND GLANCE_RIGHT 2 +KEYBOARD 113 PLAYER_BIND SWITCH_VIEW 2 +KEYBOARD 102 PLAYER_BIND CYCLE_TURN_RIGHT 2 +KEYBOARD 101 PLAYER_BIND GLANCE_BACK 2 +KEYBOARD 100 PLAYER_BIND CYCLE_BRAKE 2 +KEYBOARD 32 PLAYER_BIND CYCLE_BRAKE 2 + Copied: armagetronad/trunk/armagetronad/config/keys_cursor_single.cfg (from rev 9425, armagetronad/branches/0.2.8/armagetronad/config/keys_cursor_single.cfg) =================================================================== --- armagetronad/trunk/armagetronad/config/keys_cursor_single.cfg (rev 0) +++ armagetronad/trunk/armagetronad/config/keys_cursor_single.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -0,0 +1,17 @@ +# Control over cursor keys, no second player +KEYBOARD 276 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 275 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 274 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 266 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 256 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 122 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 120 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 119 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 118 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 115 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 114 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 102 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 101 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 100 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 99 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 32 PLAYER_BIND CYCLE_BRAKE 1 Copied: armagetronad/trunk/armagetronad/config/keys_twohand.cfg (from rev 9425, armagetronad/branches/0.2.8/armagetronad/config/keys_twohand.cfg) =================================================================== --- armagetronad/trunk/armagetronad/config/keys_twohand.cfg (rev 0) +++ armagetronad/trunk/armagetronad/config/keys_twohand.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -0,0 +1 @@ +# two handed configuration Copied: armagetronad/trunk/armagetronad/config/keys_wasd.cfg (from rev 9425, armagetronad/branches/0.2.8/armagetronad/config/keys_wasd.cfg) =================================================================== --- armagetronad/trunk/armagetronad/config/keys_wasd.cfg (rev 0) +++ armagetronad/trunk/armagetronad/config/keys_wasd.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -0,0 +1,26 @@ +# controls around wasd +KEYBOARD 276 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 275 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 274 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 122 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 121 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 120 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 119 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 118 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 115 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 113 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 101 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 100 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 99 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 97 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 32 PLAYER_BIND CYCLE_BRAKE 1 + +KEYBOARD 117 PLAYER_BIND GLANCE_LEFT 2 +KEYBOARD 111 PLAYER_BIND GLANCE_RIGHT 2 +KEYBOARD 109 PLAYER_BIND CYCLE_TURN_LEFT 2 +KEYBOARD 108 PLAYER_BIND CYCLE_TURN_RIGHT 2 +KEYBOARD 107 PLAYER_BIND CYCLE_BRAKE 2 +KEYBOARD 106 PLAYER_BIND CYCLE_TURN_LEFT 2 +KEYBOARD 105 PLAYER_BIND GLANCE_BACK 2 +KEYBOARD 46 PLAYER_BIND SWITCH_VIEW 2 +KEYBOARD 44 PLAYER_BIND CYCLE_TURN_RIGHT 2 Copied: armagetronad/trunk/armagetronad/config/keys_x.cfg (from rev 9425, armagetronad/branches/0.2.8/armagetronad/config/keys_x.cfg) =================================================================== --- armagetronad/trunk/armagetronad/config/keys_x.cfg (rev 0) +++ armagetronad/trunk/armagetronad/config/keys_x.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -0,0 +1,14 @@ +# old default keyboard layout +KEYBOARD 276 PLAYER_BIND CYCLE_TURN_LEFT 2 +KEYBOARD 275 PLAYER_BIND CYCLE_TURN_RIGHT 2 +KEYBOARD 274 PLAYER_BIND SWITCH_VIEW 2 +KEYBOARD 276 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 275 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 274 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 122 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 121 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 119 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 118 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 120 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 99 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 115 PLAYER_BIND CHAT 1 Copied: armagetronad/trunk/armagetronad/config/keys_zqsd.cfg (from rev 9425, armagetronad/branches/0.2.8/armagetronad/config/keys_zqsd.cfg) =================================================================== --- armagetronad/trunk/armagetronad/config/keys_zqsd.cfg (rev 0) +++ armagetronad/trunk/armagetronad/config/keys_zqsd.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -0,0 +1,25 @@ +# controls around zqsd for french keyboards +KEYBOARD 276 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 275 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 274 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 122 PLAYER_BIND GLANCE_BACK 1 +KEYBOARD 120 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 119 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 118 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 115 PLAYER_BIND CYCLE_BRAKE 1 +KEYBOARD 113 PLAYER_BIND CYCLE_TURN_LEFT 1 +KEYBOARD 101 PLAYER_BIND GLANCE_RIGHT 1 +KEYBOARD 100 PLAYER_BIND CYCLE_TURN_RIGHT 1 +KEYBOARD 99 PLAYER_BIND SWITCH_VIEW 1 +KEYBOARD 97 PLAYER_BIND GLANCE_LEFT 1 +KEYBOARD 32 PLAYER_BIND CYCLE_BRAKE 1 + +KEYBOARD 117 PLAYER_BIND GLANCE_LEFT 2 +KEYBOARD 111 PLAYER_BIND GLANCE_RIGHT 2 +KEYBOARD 108 PLAYER_BIND CYCLE_TURN_RIGHT 2 +KEYBOARD 107 PLAYER_BIND CYCLE_BRAKE 2 +KEYBOARD 106 PLAYER_BIND CYCLE_TURN_LEFT 2 +KEYBOARD 105 PLAYER_BIND GLANCE_BACK 2 +KEYBOARD 59 PLAYER_BIND CYCLE_TURN_RIGHT 2 +KEYBOARD 58 PLAYER_BIND SWITCH_VIEW 2 +KEYBOARD 44 PLAYER_BIND CYCLE_TURN_LEFT 2 Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2010-08-06 07:05:46 UTC (rev 9426) @@ -786,7 +786,7 @@ # with the following value. For example, if your system timer is about 10% too fast, you # can use the value 0.909 to compensate. Deviations of less than 1% are usually compensated # by the network code. NOTE: Do not change this while the program is running, this will cause -# huge hickups or freezes. +# huge hiccups or freezes. TIME_FACTOR 1.0 # deprecated settings, they'll go away unless there are protests Modified: armagetronad/trunk/armagetronad/configure.ac =================================================================== --- armagetronad/trunk/armagetronad/configure.ac 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/configure.ac 2010-08-06 07:05:46 UTC (rev 9426) @@ -650,7 +650,7 @@ CPPFLAGS="$CPPFLAGS `$XML2_CONFIG --cflags`" LIBS="`$XML2_CONFIG --libs` $LIBS" AC_DEFINE(HAVE_LIBXML2, 1, [Define if you have the xml2 library (-lxml2).]), -AC_MSG_ERROR([You need the library xml2 to compile Armagetron. Read the file doc/install_linux.html.]) +AC_MSG_ERROR([You need the library xml2 to compile ${progtitle}. Read the file doc/install_linux.html.]) ,`$XML2_CONFIG --libs`) AC_CHECK_FUNC(xmlParserInputBufferCreateFilenameDefault, @@ -780,7 +780,7 @@ AC_CHECK_FUNC(SDL_Init, AC_DEFINE(HAVE_LIBSDL,,[Define if you have the library SDL]), -AC_MSG_ERROR([You need the library SDL to compile Armagetron. Read the file doc/install_linux.html.]) +AC_MSG_ERROR([You need the library SDL to compile ${progtitle}. Read the file doc/install_linux.html.]) ,) dnl ***************** OPTIONAL STUFF AFTER THIS POINT ********************** @@ -814,6 +814,14 @@ fi dnl ************************************************* +dnl Winsock linking for cross-compilation. Not really supported. +dnl ************************************************* + +if test "`${SDL_CONFIG} --libs | grep windows`" ; then + AC_CHECK_LIB(wsock32, connect) +fi + +dnl ************************************************* dnl GL dnl ************************************************* @@ -823,19 +831,19 @@ AC_CHECK_LIB($SYS_GL_LIB, glVertex3f,, AC_MSG_RESULT([OpenGL not found. Maybe it needs X11 to compile? Checking that...]) - AC_CHECK_LIB(X11,main, + AC_CHECK_LIB(X11,XOpenDisplay, LIBS="-lX11 -L/usr/X11R6/lib $LIBS" AC_DEFINE(HAVE_LIBX11, 1, [Define if you have the X11 library (-lX11).]) , AC_MSG_WARN([ Standard X11 library needed by OpenGL not found. ]),-L/usr/X11R6/lib) - AC_CHECK_LIB(Xext,main,-L/usr/X11R6/lib) - AC_CHECK_LIB(Xt,main,-L/usr/X11R6/lib) - AC_CHECK_LIB(Xi,main,-L/usr/X11R6/lib) - AC_CHECK_LIB(Xmu,main,-L/usr/X11R6/lib) + AC_CHECK_LIB(Xext,XextFindDisplay,-L/usr/X11R6/lib) + AC_CHECK_LIB(Xt,XtFree,-L/usr/X11R6/lib) + AC_CHECK_LIB(Xi,XOpenDevice,-L/usr/X11R6/lib) + AC_CHECK_LIB(Xmu,XmuDrawLogo,-L/usr/X11R6/lib) AC_CHECK_LIB($SYS_GL_LIB, glBegin,,AC_MSG_ERROR([ - You need Mesa or an OpenGL-System to compile Armagetron. + You need Mesa or an OpenGL-System to compile ${progtitle}. Maybe your libGL needs the X libraries and your system does not find them? Read the file doc/install_linux.html.]),-L/usr/X11R6/lib) ) @@ -855,7 +863,7 @@ dnl AC_CHECK_LIB($SYS_GLU_LIB, gluBuild2DMipmaps,, AC_CHECK_LIB($SYS_GLU_LIB, gluBuild3DMipmaps,, AC_MSG_ERROR([ -You need GLU to compile Armagetron; it SHOULD have come with OpenGL. +You need GLU to compile ${progtitle}; it SHOULD have come with OpenGL. Read the file doc/install_linux.html.])) dnl ************************************************* @@ -965,13 +973,13 @@ dnl Other Stuff dnl ************************************************* -dnl AC_CHECK_LIB(g++, main,, +dnl AC_CHECK_LIB(g++, cin,, dnl AC_MSG_WARN([C++ standard library not found. You can ignore this warning on non-GNU-systems.])) AC_LANG([C]) -AC_CHECK_LIB(z, main,, -AC_MSG_ERROR([You need libz to compile Armagetron.])) +AC_CHECK_LIB(z, gzread,, +AC_MSG_ERROR([You need libz to compile ${progtitle}.])) AC_MSG_CHECKING(whether libpng is installed) if PNGLIBS=`libpng-config --libs`; then @@ -981,11 +989,11 @@ CPPFLAGS="$CPPFLAGS `libpng-config --cflags`" LIBS="$LIBS $PNGLIBS" -AC_CHECK_FUNC(png_check_sig, +AC_CHECK_FUNC(png_sig_cmp, , -AC_MSG_ERROR([You need libpng to compile Armagetron.])) +AC_MSG_ERROR([You need libpng to compile ${progtitle}.])) -AC_CHECK_LIB(jpeg, main,, +AC_CHECK_LIB(jpeg, jpeg_read_header,, AC_MSG_WARN([ libjpeg not found. Expect small graphical errors ( missing moviepack title screen ).] ) @@ -993,7 +1001,7 @@ AC_CHECK_LIB(SDL_image, IMG_Load,, dnl AC_CHECK_LIB(IMG, main,, -AC_MSG_ERROR([You need the library SDL_image to compile Armagetron.] +AC_MSG_ERROR([You need the library SDL_image to compile ${progtitle}.] dnl ) )) @@ -1033,8 +1041,6 @@ -dnl Replace `main' with a function in -lpthread: - dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h) Modified: armagetronad/trunk/armagetronad/language/american.txt =================================================================== --- armagetronad/trunk/armagetronad/language/american.txt 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/language/american.txt 2010-08-06 07:05:46 UTC (rev 9426) @@ -2,6 +2,7 @@ encoding latin1 include english_base.txt +first_setup_color Color: fav_num_per_team_player_help The favorite number of players per team for this player color_b_help Cycle and wall color, blue component. color_g_help Cycle and wall color, green component. @@ -17,12 +18,12 @@ colordepth_help Color depth to use (0: 16 1: desktop 2: 24) last_colordepth_help Color depth, last successful init zdepth_help z buffer depth to use (0: 16 1: from color depth 2: 32) -failed_attempts_help Number of failed attemts to initialize graphics mode +failed_attempts_help Number of failed attempts to initialize graphics mode player_blue_help Lets you choose the blue component of your color. player_green_help Lets you choose the green component of your color. player_red_help Lets you choose the red component of your color. -player_name_team_help You can set your prefered method for naming your team here: On indicates you want the team to be named after its most senior player, Off means you want a simple color label. -player_num_per_team_help Set your favorite number of players per team here. When you join a game and the smallest team has less players than specified here, you'll join that team. Otherwise, you will create a new team. Only the default behaviour is governed by this setting; you can switch teams later. +player_name_team_help You can set your preferred method for naming your team here: On indicates you want the team to be named after its most senior player, Off means you want a simple color label. +player_num_per_team_help Set your favorite number of players per team here. When you join a game and the smallest team has less players than specified here, you'll join that team. Otherwise, you will create a new team. Only the default behavior is governed by this setting; you can switch teams later. player_camera_initial_help Choose your favorite camera perspective here. player_camera_fov_help Choose your favorite FOV (Field of vision). screen_colordepth_text Color Depth: Modified: armagetronad/trunk/armagetronad/language/british.txt =================================================================== --- armagetronad/trunk/armagetronad/language/british.txt 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/language/british.txt 2010-08-06 07:05:46 UTC (rev 9426) @@ -17,11 +17,11 @@ colordepth_help colour depth to use (0: 16 1: desktop 2: 24) last_colordepth_help colour depth, last successful init zdepth_help z buffer depth to use (0: 16 1: from colour depth 2: 32) -failed_attempts_help Number of failed attemts to initialise graphics mode +failed_attempts_help Number of failed attempts to initialise graphics mode player_blue_help Lets you choose the blue component of your colour. player_green_help Lets you choose the green component of your colour. player_red_help Lets you choose the red component of your colour. -player_name_team_help You can set your prefered method for naming your team here: On indicates you want the team to be named after its most senior player, Off means you want a simple colour label. +player_name_team_help You can set your preferred method for naming your team here: On indicates you want the team to be named after its most senior player, Off means you want a simple colour label. player_num_per_team_help Set your favourite number of players per team here. When you join a game and the smallest team has less players than specified here, you'll join that team. Otherwise, you will create a new team. Only the default behaviour is governed by this setting; you can switch teams later. player_camera_initial_help Choose your favourite camera perspective here. player_camera_fov_help Choose your favourite FOV (Field of vision). Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2010-08-06 07:05:46 UTC (rev 9426) @@ -1594,6 +1594,8 @@ language_menu_title Spracheinstellungen language_menu_help w\xE4hlt die Sprache f\xFCr alle Bildschirmtexte aus +language_firstchoice_help Dr\xFCcke Enter, Return oder Leertaste, um deutsche Bildschirmtexte auszuw\xE4hlen. + language_menu_item_fist Erste Sprache: language_menu_item_first_help \g wird die meisten Textmeldungen in dieser Sprache anzeigen Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2010-08-05 22:38:50 UTC (rev 9425) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2010-08-06 07:05:46 UTC (rev 9426) @@ -62,7 +62,7 @@ cycle_accel_help Wall acceleration factor cycle_accel_self_help Multiplicator to CYCLE_ACCEL for your own wall -cycle_accel_team_help Multiplicator to CYCLE_ACCEL for your temmates' walls +cycle_accel_team_help Multiplicator to CYCLE_ACCEL for your teammates' walls cycle_accel_enemy_help Multiplicator to CYCLE_ACCEL for your enemies' walls cycle_accel_rim_help Multiplicator to CYCLE_ACCEL for the rim walls cycle_accel_slingshot_help Multiplicator to the total effect of CYCLE_ACCEL, if the cycle is between its own wall and another wall @@ -104,7 +104,7 @@ cycle_rubber_mindistance_gap_help If > 0, CYCLE_RUBBER_MINDISTANCE effectively is never taken to be bigger than this value times the size of any detected gaps the cylce can squeeze through. For "Open" gameplay. cycle_rubber_mindistance_gap_side_help Gap detection only sees gaps that the cycle may reach in no less than this many seconds. cycle_rubber_mindistance_ratio_help Additional distance to CYCLE_RUBBER_MINDISTANCE for every length unit of the wall you have in front of you -cycle_rubber_mindistance_reservoir_help Addidional distance if you have an empty rubber meter (gets faded out gradually as you use up all your rubber) +cycle_rubber_mindistance_reservoir_help Additional distance if you have an empty rubber meter (gets faded out gradually as you use up all your rubber) cycle_rubber_mindistance_unprepared_help Additional distance for unprepared grinds; it gets applied when the cycle's last turn was just a fraction of a second ago and faded out preparation times larger than CYCLE_RUBBER_MINDISTANCE_PREPARATION. cycle_rubber_mindistance_preparation_help Timescale in seconds a cycle's last turn time is compared with to determine the effect of CYCLE_RUBBER_MINDISTANCE_UNPREPARED. cycle_rubber_mindistance_legacy_help Extra factor for minimal distance to walls enforced by the rubber code, active when peers with the rip bug are connected @@ -302,7 +302,7 @@ sp_size_factor_help Arena size modifier # single player settings (used by dedicated server only) -sp_ais_help nummer of AI Players in Single-Player-mode +sp_ais_help number of AI Players in Single-Player-mode start_new_match_help Initiates a new match @@ -327,9 +327,9 @@ win_zone_deaths_help A value of 1 turns it into a death zone. win_zone_randomness_help Randomness factor of the initial win zone position. 0 fixes it at the arena center, 1 spreads the zone all over it. -game_timeout_help Base timeout for game state synchronisation; gives appoximately the maximum time between rounds. +game_timeout_help Base timeout for game state synchronisation; gives approximately the maximum time between rounds. last_chat_break_time_help Last round time a player in chat mode is able to pause the timer -extra_round_time_help Lenght of an extra pause at the beginning of the round +extra_round_time_help Length of an extra pause at the beginning of the round player_chat_wait_max_help Maximum time in seconds to wait for a single player to stop chatting. player_chat_wait_fraction_help Maximum fraction of time to wait for a single player to stop chatting. player_chat_wait_single_help Set to 1 if only one player should get his chat wait time reduced at any given time. @@ -501,7 +501,7 @@ votes_cancel_help Cancels all running polls. max_votes_per_voter_help The maximum number of votes suggested by each voter that can be active at any given moment. voting_start_decay_help Number of seconds after that the non-voters start to get ignored. -voting_decay_help One non-voter is ignored everytime this many secons pass. +voting_decay_help One non-voter is ignored everytime this many seconds pass. voting_bias_help Add virtual voters that oppose every change. voting_bias_kick_help Add virtual voters that oppose every kick vote. voting_bias_suspend_help Add virtual voters that oppose every suspend vote. @@ -543,7 +543,7 @@ #******************************************** #******************************************** -recording_debuglevel_help Level of additonal information in recording file. +recording_debuglevel_help Level of additional information in recording file. fast_forward_maxstep_help Maximum recording time between rendered frames in fast forward mode fast_forward_maxstep_real_help Maximum real time between rendered frames in fast forward mode fast_forward_maxstep_rel_help Maximum fraction of the time left until the end of FF mode between rendered frames @@ -614,10 +614,10 @@ camera_visibility_recovery_speed_help The speed the external visibility targets recovers from wall hits camera_visibility_wall_distance_help The distance the visibility targets keep from walls -camera_visibility_clip_speed_help Speed with wich the visibility targets is brought into view +camera_visibility_clip_speed_help Speed with which the visibility targets is brought into view camera_visibility_extension_help Distance (measured in seconds, gets multiplied by speed) of the visibility targets from the watched object camera_visibility_sideskew_help Extra forward component of the sideways visibility targets -camera_visibility_lower_wall_help If set to 1, walls are lowerd when they block the view and the camera is not moved +camera_visibility_lower_wall_help If set to 1, walls are lowered when they block the view and the camera is not moved camera_visibility_lower_wall_smart_help Like CAMERA_VISIBILITY_LOWER_WALL, but special setting for the smart camera bug_transparency_help Unsupported: make all rim walls semi-transparent by rendering them without occlusion tests bug_transparency_demand_help Unsupported: use transparency instead of lowering walls @@ -661,7 +661,7 @@ max_clients_same_ip_soft_help Maximum number of network clients to accept from the same IP; more logins will get kicked when the server is full max_clients_same_ip_hard_help Maximum number of network clients to accept from the same IP; more logins will be ignored max_players_same_ip_help maximum number of players from the same IP (note that each client can legally host up to four players) -url_help HTTP URI assiciated with a server +url_help HTTP URI associated with a server # settings compatibility @@ -836,8 +836,8 @@ last_zdepth_help z buffer depth, last successful init use_sdl_help Use SDL to init OpenGL? last_use_sdl_help Use SDL to init OpenGL, last successful init -failed_attempts_help Number of failed attemts to initialise graphics mode -software_renderer_help Is the OpenGL renderer not hadware accelerated? +failed_attempts_help Number of failed attempts to initialise graphics mode +software_renderer_help Is the OpenGL renderer not hardware accelerated? #model use_displaylists_help Use display lists for rendering the cycles? @@ -933,7 +933,7 @@ vote_kick_reason_help Default reason given to players when they're vote-kicked. ban_help Bans the specified player from the server (kicks him first) for a variable time in minutes. -ban_ip_help Bans the spedified IP address from the server for a variable time. +ban_ip_help Bans the specified IP address from the server for a variable time. ban_list_help Prints a list of currently banned IPs. unban_ip_help Revokes the ban of the specified IP address. @@ -961,7 +961,7 @@ console_message_help Prints a message on the console of all connected clients. center_message_help Prints a big message on the screen of all connected clients. fullscreen_message_help Prints a big message all over the screen, interrupting gameplay for a configurable timeout. Use with care. -say_help Dedicated server only: let the server administator say something. +say_help Dedicated server only: let the server administrator say something. rename_help Renames the given player. allow_rename_player_help Gives the given player the ability to rename. disallow_rename_player_help Prevents the given player from renameing. @@ -1001,6 +1001,8 @@ input_items_unbound Unbound input_items_global Global Controls +# used for listing key bindings +input_or or #******************************************** #******************************************** @@ -1016,9 +1018,11 @@ input_screenshot_text Screenshot input_screenshot_help Makes a screenshot and saves it as screenshot_X.bmp in the var directory +input_chat_tooltip Press \1 to chat. input_chat_text Chat input_chat_help Lets you talk to other players over the network. +input_toggle_spectator_tooltip Press \1 to toggle spectator mode. input_toggle_spectator_text Toggle Spectator input_toggle_spectator_help Toggles spectator mode, conveniently taking you out of the game so you can take a call (of nature, possibly) and back into the game when you're done. @@ -1029,11 +1033,12 @@ input_toggle_fullscreen_help Toggles windowed and fullscreen mode input_toggle_mousegrab_text Toggle mousegrab -input_toggle_mousegrab_help Frees the mouse pointer or contstrains it to the program window +input_toggle_mousegrab_help Frees the mouse pointer or constrains it to the program window input_reload_textures_text Reload textures input_reload_textures_help Reloads all textures. Useful for content creators. +input_ingame_menu_tooltip Press \1 to access the ingame menu. input_ingame_menu_text Ingame menu input_ingame_menu_help Triggers the ingame menu. ESC is hardcoded to this function so you don't get trapped in the game :) @@ -1085,15 +1090,18 @@ #******************************************** #******************************************** +input_cycle_brake_tooltip Press \1 to brake (or activate other special functions). input_cycle_brake_text Brake input_cycle_brake_help decreases your speed in critical situations input_cycle_brake_toggle_text Toggle Brake input_cycle_brake_toggle_help turns your brake on and off permanently without you needing to hold down a key +input_cycle_turn_right_tooltip Press \1 to turn right. input_cycle_turn_right_text Turn right input_cycle_turn_right_help Makes a 90 degrees turn to the right +input_cycle_turn_left_tooltip Press \1 to turn left. input_cycle_turn_left_text Turn left input_cycle_turn_left_help Makes a 90 degrees turn to the left @@ -1143,12 +1151,15 @@ input_zoom_in_text Zoom in input_zoom_in_help Reduces the field of vision and reveals more details on faraway objects. +input_glance_back_tooltip Press \1 to glance back. input_glance_back_text Glance back input_glance_back_help Turns the camera temporarily backwards. +input_glance_right_tooltip Press \1 to glance right. input_glance_right_text Glance right input_glance_right_help Turns the camera temporarily to the right. +input_glance_left_tooltip Press \1 to glance left. input_glance_left_text Glance left input_glance_left_help Turns the camera temporarily to the left. @@ -1167,6 +1178,7 @@ input_look_left_text Look left input_look_left_help Turns the camera to the left or moves it right if the camera direction is fixed. +input_switch_view_tooltip Press \1 to switch camera modes. input_switch_view_text Switch view input_switch_view_help Switches the camera perspective. Available views: Smart external camera (default) and dumb external camera (both fixed to look at your cycle), free floating and internal camera (position fixed at your cycle ). @@ -1238,7 +1250,7 @@ player_mainmenu_help Select player names and control methods. system_settings_menu_text System Setup -system_settings_menu_help Configure sound, graphics and overall appearence of \g +system_settings_menu_help Configure sound, graphics and overall appearance of \g main_menu_about_text About main_menu_about_help Displays information about the version of \g, the location of its config files, sites to visit and the project admins. @@ -1284,6 +1296,12 @@ path_info_screenshot Screenshot directories: path_info_var Var directories: +version_info_gl_intro \n\n0xff8888System OpenGL information:0xRESETT +version_info_gl_vendor \n GL Vendor : +version_info_gl_renderer \n GL Renderer : +version_info_gl_version \n GL Version : + + #******************************************** #******************************************** # @@ -1316,10 +1334,10 @@ game_menu_finish_stop_help Abort the game after some seconds. game_menu_finish_fast_text Fast Finish -game_menu_finish_fast_help Let the game continue regularily until there is a winner, but in fast forward mode. +game_menu_finish_fast_help Let the game continue regularly until there is a winner, but in fast forward mode. game_menu_finish_normal_text Normal Finish -game_menu_finish_normal_help Let the game continue regularily until there is a winner. Boooring. +game_menu_finish_normal_help Let the game continue regularly until there is a winner. Boooring. game_menu_mode_text Game Mode: game_menu_mode_help Select the rules you want to play by: @@ -1361,7 +1379,7 @@ game_menu_balance_ais_help Make teams equally strong by adding AIs to the weaker team? game_menu_imb_perm_text Max. permanent imbalance: -game_menu_imb_perm_help Maximum difference in team strengths that is tolerated permanetly; may be violated for short periods of time +game_menu_imb_perm_help Maximum difference in team strengths that is tolerated permanently; may be violated for short periods of time game_menu_imb_text Max. temporary imbalance: game_menu_imb_help Maximum difference in team strengths that is tolerated @@ -1385,28 +1403,28 @@ game_menu_wallstayup_infinite_help Walls stay up forever game_menu_wallstayup_immediate_text immediate -game_menu_wallstayup_immediate_help Walls disapear immediately +game_menu_wallstayup_immediate_help Walls disappear immediately game_menu_wallstayup_halfsecond_text 1/2s -game_menu_wallstayup_halfsecond_help Walls dissapear after half a second +game_menu_wallstayup_halfsecond_help Walls disappear after half a second game_menu_wallstayup_second_text 1s -game_menu_wallstayup_second_help Walls dissapear after one second +game_menu_wallstayup_second_help Walls disappear after one second game_menu_wallstayup_2second_text 2s -game_menu_wallstayup_2second_help Walls dissapear after two seconds +game_menu_wallstayup_2second_help Walls disappear after two seconds game_menu_wallstayup_4second_text 4s -game_menu_wallstayup_4second_help Walls dissapear after 4 seconds +game_menu_wallstayup_4second_help Walls disappear after 4 seconds game_menu_wallstayup_8second_text 8s -game_menu_wallstayup_8second_help Walls dissapear after 8 seconds +game_menu_wallstayup_8second_help Walls disappear after 8 seconds game_menu_wallstayup_16second_text 16s -game_menu_wallstayup_16second_help Walls dissapear after 16 seconds +game_menu_wallstayup_16second_help Walls disappear after 16 seconds game_menu_wallstayup_32second_text 32s -game_menu_wallstayup_32second_help Walls dissapear after 32 seconds +game_menu_wallstayup_32second_help Walls disappear after 32 seconds game_menu_wallslength_text Wall Length: game_menu_wallslength_help Length of the cycle walls in meters @@ -1493,7 +1511,7 @@ network_menu_lan_text LAN Multiplayer network_menu_lan_help Connect to a server on your local network or start a server. -network_menu_internet_text Internet Multiplayer +network_menu_internet_text Online Multiplayer network_menu_internet_help Connect to an internet server or start one. network_opts_text Network Setup @@ -1540,7 +1558,7 @@ network_custjoin_port_help The network port the server listens on; must match the corresponding option set on the server you wish to join. network_custjoin_name_text Server Name: -network_custjoin_name_help The name or IP adress of the server you wish to join +network_custjoin_name_help The name or IP address of the server you wish to join #network host menu network_host_text Host Network Game @@ -1599,7 +1617,7 @@ #******************************************** misc_menu_text Misc Stuff -misc_menu_help Diverse items that had no place elsewere, i.e. global keys. +misc_menu_help Diverse items that had no place elsewhere, i.e. global keys. misc_global_key_text Global Keyboard Configuration misc_global_key_help Some keyboard settings independent of the current player. @@ -1613,6 +1631,8 @@ misc_moviepack_text Moviepack: misc_moviepack_help If this is enabled and the moviepack is installed, \g will display more movie-like graphics. +misc_initial_menu_title Redo First Setup +misc_initial_menu_help Restarts the first setup menu where you can select color and keyboard layout templates. #************************************* #************************************* @@ -1628,6 +1648,8 @@ language_menu_title Language Settings language_menu_help Choose the language used for all onscreen texts +language_firstchoice_help Press Enter, Return or Space to select this language. + language_menu_item_fist First Language: language_menu_item_first_help \g will display most text messages in this language. Use Cursor Left/Right to choose. @@ -1779,7 +1801,7 @@ player_spectator_help In spectator mode, you do not control a cycle; you just watch the game as if you were already dead. The other players will see you on the score table and you can chat with them, but you won't be spawned at the beginng of a round. player_name_team_text Name Team after Player: -player_name_team_help You can set your prefered method for naming your team here: On indicates you want the team to be named after its most senior player, Off means you want a simple colour label. +player_name_team_help You can set your preferred method for naming your team here: On indicates you want the team to be named after its most senior player, Off means you want a simple colour label. player_num_per_team_text Players per Team: player_num_per_team_help Set your favourite number of players per team here. When you join a game and the smallest team has less players than specified here, you'll join that team. Otherwise, you will create a new team. Only the default behaviour is governed by this setting; you can switch teams later. @@ -1850,7 +1872,7 @@ team_menu_help Let the players change their teams or created new teams team_menu_player_title Choose team for \1 -team_menu_player_help Lets this player make team related decicions +team_menu_player_help Let this player make team related decisions team_menu_join \3join \1 (\2) team_menu_join_help Select if you wan to join team \1 if possible otherwise you join as soon as possible. @@ -1915,13 +1937,13 @@ sound_menu_buffer_help Selects the size of the sound buffer. sound_menu_buffer_vsmall_text Very Small -sound_menu_buffer_vsmall_help Latency of about 0.02s, but very high probability of artefacts. +sound_menu_buffer_vsmall_help Latency of about 0.02s, but very high probability of artifacts. sound_menu_buffer_small_text Small -sound_menu_buffer_small_help Latency below 0.04s, but high probability of artefacts. +sound_menu_buffer_small_help Latency below 0.04s, but high probability of artifacts. sound_menu_buffer_med_text Normal -sound_menu_buffer_med_help Latency of about 0.1s, and may still produce artefacts. +sound_menu_buffer_med_help Latency of about 0.1s, and may still produce artifacts. sound_menu_buffer_high_text High sound_menu_buffer_high_help Latency of about 0.2s, probably no artifacts. @@ -1955,7 +1977,7 @@ detail_settings_menu_help Allows you to adjust the graphical detail to your system's performance. performance_tweaks_menu Performance Tweaks -performance_tweaks_menu_help Settings that may improve game performace, but do not work on all systems. +performance_tweaks_menu_help Settings that may improve game performance, but do not work on all systems. graphics_load_defaults_text Load Defaults graphics_load_defaults_help This will reset all this options to the ones that suit your system best. (In the opinion of this stupid program...) @@ -1972,7 +1994,7 @@ feature_enabled_help Feature is currently activated. #texture menuitem -texture_menuitem_help Selects the texture mapping mode; note how it affects the menu background. The curent state is: +texture_menuitem_help Selects the texture mapping mode; note how it affects the menu background. The current state is: texture_off_text Off texture_off_help No textures at all @@ -2034,7 +2056,7 @@ screen_check_errors_help Should we listen to the warnings about non-existent video modes during initialisation? Usually, you should leave this option alone. screen_use_sdl_text Use SDL OpenGL: -screen_use_sdl_help Toggles use of the clean OpenGL initialisation routines; if disabled, \g will use the dirty method that was neccesary with SDL 1.0. +screen_use_sdl_help Toggles use of the clean OpenGL initialisation routines; if disabled, \g will use the dirty method that was necessary with SDL 1.0. screen_vsync_text VSync: screen_vsync_help What to do with the monitor's vertical sync signal. @@ -2091,7 +2113,7 @@ detail_floor_grid_help Only a grid of lines is drawn. This option is your choice if you use software rendering. detail_floor_tex_text Textured Plane -detail_floor_tex_help An infinite plane is drawn, with the texture of the grid painted on it. Recomended for all 3D-card owners. Problem: looking at the horizon, the grid will lose its sharpness too fast. +detail_floor_tex_help An infinite plane is drawn, with the texture of the grid painted on it. Recommended for all 3D-card owners. Problem: looking at the horizon, the grid will lose its sharpness too fast. detail_floor_2tex_text Dual Texture Plane detail_floor_2tex_help J... [truncated message content] |
From: <z-...@us...> - 2010-08-06 16:28:12
|
Revision: 9433 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9433&view=rev Author: z-man Date: 2010-08-06 16:28:06 +0000 (Fri, 06 Aug 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9425 to 9432: ------------------------------------------------------------------------ r9432 | bazaarmagetron | 2010-08-06 18:14:26 +0200 (Fri, 06 Aug 2010) | 2 lines Manuel Moos: Scores rendered behind console and menu now. No need to turn them off any more, ever. Well, when entering a game, maybe. ------------------------------------------------------------------------ r9431 | bazaarmagetron | 2010-08-06 18:13:48 +0200 (Fri, 06 Aug 2010) | 2 lines Manuel Moos: Scores rendered behind console and menu now. No need to turn them off any more, ever. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9425&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9425 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9432 Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-08-06 16:14:26 UTC (rev 9432) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-08-06 16:28:06 UTC (rev 9433) @@ -6196,7 +6196,19 @@ ResetScoreDifferences(); } -void ePlayerNetID::DisplayScores(){ +// flag memorizing whether the scores already have been rendered this frame +static bool se_alreadyDisplayedScores = false; + +static bool show_scores=false; + +void ePlayerNetID::DisplayScores() +{ + if( !show_scores || !se_mainGameTimer || se_alreadyDisplayedScores ) + { + return; + } + se_alreadyDisplayedScores = true; + sr_ResetRenderState(true); REAL W=sr_screenWidth; @@ -7121,7 +7133,6 @@ } -static bool show_scores=false; static bool ass=true; void se_AutoShowScores(){ @@ -7138,14 +7149,9 @@ ass=a; } - static void scores(){ - if (show_scores){ - if ( se_mainGameTimer ) - ePlayerNetID::DisplayScores(); - else - show_scores = false; - } + ePlayerNetID::DisplayScores(); + se_alreadyDisplayedScores = false; } @@ -7157,12 +7163,11 @@ static rSmallConsoleCallback sc(&force_small_cons); -static void cd(){ - show_scores = false; -} +//static void cd(){ +// show_scores = false; +//} +//static rCenterDisplayCallback c_d(&cd); - - static uActionGlobal score("SCORE"); @@ -7174,8 +7179,6 @@ static uActionGlobalFunc saf(&score,&sf); -static rCenterDisplayCallback c_d(&cd); - tOutput& operator << (tOutput& o, const ePlayerNetID& p) { tColoredString x; Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-08-06 16:14:26 UTC (rev 9432) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-08-06 16:28:06 UTC (rev 9433) @@ -1305,7 +1305,8 @@ // glDisable( GL_FOG ); } - // render the console so it appears behind the global HUD + // render the console and scores so it appears behind the global HUD + ePlayerNetID::DisplayScores(); if( sr_con.autoDisplayAtSwap ) { sr_con.Render(); @@ -2951,7 +2952,7 @@ // pings should not count as much in the between-round phase nPingAverager::SetWeight(1E-20); - se_UserShowScores(false); + // se_UserShowScores(false); //con.autoDisplayAtNewline=true; sr_con.fullscreen=true; @@ -4189,7 +4190,7 @@ void gameloop_idle() { - se_UserShowScores( false ); + // se_UserShowScores( false ); sg_Receive(); nNetObject::SyncAll(); sn_SendPlanned(); @@ -4200,6 +4201,7 @@ void sg_EnterGameCore( nNetState enter_state ){ gLogo::SetBig(false); + se_UserShowScores( false ); sg_RequestedDisconnection = false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-08-08 13:55:30
|
Revision: 9441 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9441&view=rev Author: z-man Date: 2010-08-08 13:55:24 +0000 (Sun, 08 Aug 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9432 to 9440: ------------------------------------------------------------------------ r9440 | bazaarmagetron | 2010-08-08 15:40:25 +0200 (Sun, 08 Aug 2010) | 2 lines Manuel Moos: Made faraway walls count less for enemy influence. ------------------------------------------------------------------------ r9439 | bazaarmagetron | 2010-08-08 15:39:32 +0200 (Sun, 08 Aug 2010) | 2 lines Manuel Moos: Fixed calculation of wall build time for enemy influence detection. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9432&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/eSensor.h armagetronad/trunk/armagetronad/src/tron/gCycle.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9432 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9440 Modified: armagetronad/trunk/armagetronad/src/engine/eSensor.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eSensor.h 2010-08-08 13:40:25 UTC (rev 9440) +++ armagetronad/trunk/armagetronad/src/engine/eSensor.h 2010-08-08 13:55:24 UTC (rev 9441) @@ -54,6 +54,7 @@ inline eSensor & SetInverseSpeed( REAL inverseSpeed ); //!< Sets the inverse speed of the sensor inline REAL GetInverseSpeed( void ) const; //!< Gets the inverse speed of the sensor inline eSensor const & GetInverseSpeed( REAL & inverseSpeed ) const; //!< Gets the inverse speed of the sensor + eGameObject const * GetOwner() const { return owned; } //!< Returns the gameobject owning this sensor protected: tCHECKED_PTR(eGameObject) owned; private: Modified: armagetronad/trunk/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2010-08-08 13:40:25 UTC (rev 9440) +++ armagetronad/trunk/armagetronad/src/tron/gCycle.cpp 2010-08-08 13:55:24 UTC (rev 9441) @@ -3618,7 +3618,7 @@ { // err, trouble. Can't push the other guy back far enough. Better kill him. if ( currentWall ) - otherPlayer->enemyInfluence.AddWall( currentWall->Wall(), lastTime, otherPlayer ); + otherPlayer->enemyInfluence.AddWall( currentWall->Wall(), lastTime, 0, otherPlayer ); otherPlayer->distance = wallDist; otherPlayer->DropWall(); otherPlayer->KillAt( collPos ); Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2010-08-08 13:40:25 UTC (rev 9440) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2010-08-08 13:55:24 UTC (rev 9441) @@ -545,6 +545,17 @@ if ( !wall ) return; + // faraway walls count less. + if( sensor.GetOwner() ) + { + REAL speed = sensor.GetOwner()->Speed(); + if( speed > 0 ) + { + REAL distance = sensor.Direction().Norm() * sensor.hit; + timePenalty += distance/speed; + } + } + AddWall( wall, sensor.before_hit, timePenalty, thisCycle ); } @@ -568,13 +579,13 @@ // get the position of the collision point alpha = playerWall->Edge()->Ratio( pos ); } - REAL timeBuilt = playerWall->Time( 0.5f ); + REAL timeBuilt = playerWall->Time( alpha ); - AddWall( playerWall, timeBuilt - timePenalty, thisCycle ); + AddWall( playerWall, timeBuilt, timePenalty, thisCycle ); } // add the interaction with a wall to our data -void gEnemyInfluence::AddWall( const gPlayerWall * wall, REAL timeBuilt, gCycleMovement * thisCycle ) +void gEnemyInfluence::AddWall( const gPlayerWall * wall, REAL timeBuilt, REAL timePenalty, gCycleMovement * thisCycle ) { // the client has no need for this, it does not execute AI code if ( sn_GetNetState() == nCLIENT ) @@ -598,6 +609,7 @@ REAL currentTime = thisCycle->LastTime(); time += ( currentTime - time ) * sg_enemyCurrentTimeInfluence; } + time -= timePenalty; // get the player ePlayerNetID* player = cycle->Player(); Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2010-08-08 13:40:25 UTC (rev 9440) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2010-08-08 13:55:24 UTC (rev 9441) @@ -66,7 +66,7 @@ REAL GetTime() const; // the time of the influence void AddSensor( const gSensor& sensor, REAL timePenalty, gCycleMovement * thisCycle ); // add the result of the sensor scan to our data void AddWall( const eWall * wall, eCoord const & point, REAL timePenalty, gCycleMovement * thisCycle ); // add the interaction with a wall to our data - void AddWall( const gPlayerWall * wall, REAL timeBuilt, gCycleMovement * thisCycle ); // add the interaction with a wall to our data + void AddWall( const gPlayerWall * wall, REAL timeBuilt, REAL timePenalty, gCycleMovement * thisCycle ); // add the interaction with a wall to our data }; typedef rColor gRealColor; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-08-25 20:26:06
|
Revision: 9456 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9456&view=rev Author: z-man Date: 2010-08-25 20:25:59 +0000 (Wed, 25 Aug 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9440 to 9455: ------------------------------------------------------------------------ r9453 | bazaarmagetron | 2010-08-24 13:11:13 +0200 (Tue, 24 Aug 2010) | 2 lines Manuel Moos: Decreasing minimum timestep to take for individual game objects in quiet situations to avoid floating point rounding trouble; every object should get simulated on each regular step. ------------------------------------------------------------------------ r9452 | bazaarmagetron | 2010-08-24 01:50:55 +0200 (Tue, 24 Aug 2010) | 2 lines Manuel Moos: Changing default max_simulate_ahead value from marginal 0.01 to 0.1. ------------------------------------------------------------------------ r9451 | bazaarmagetron | 2010-08-24 01:50:10 +0200 (Tue, 24 Aug 2010) | 2 lines Manuel Moos: Updated to some past changes. ------------------------------------------------------------------------ r9450 | bazaarmagetron | 2010-08-23 18:43:41 +0200 (Mon, 23 Aug 2010) | 2 lines Manuel Moos: Fixing cycles not getting simulated immediately after receiving turn commands from clients in some situations. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9440&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp armagetronad/trunk/armagetronad/src/engine/eGameObject.h armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h armagetronad/trunk/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9440 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9455 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/NEWS 2010-08-25 20:25:59 UTC (rev 9456) @@ -94,6 +94,14 @@ - Added support for armagetronad URLs on Mac OS X and KDE -- armagetronad://<server>[:<port>]. port defaults to 4534. - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. +Changes since 0.2.8.3.x: +- Tweaks to enemy influence system. +- Ingame menu and console now are drawn on top of a semi-transparent, + darkened area for increased readability. +- New first start menu with clearer language selection and initial setup. +- Tutorial match against one AI at slower speed. +- Tutorial tooltips for the most important keybindings. + Changes since 0.2.8.3_rc4: ========================== - Intercepted chat commands are now written to ladderlog.txt. Format: Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2010-08-25 20:25:59 UTC (rev 9456) @@ -434,7 +434,7 @@ # if something interesting is going to happen to a game object not more # than MAX_SIMULATE_AHEAD seconds from the time it should be simulated to, # simulate it up to the interesting bit, not only the scheduled time. -MAX_SIMULATE_AHEAD .01 +MAX_SIMULATE_AHEAD .1 # should cycle walls be predicted? This prevents the dreaded rubberless death if # active, but may cause other odd artefacts. Experimental, use with care. Modified: armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp 2010-08-25 20:25:59 UTC (rev 9456) @@ -119,6 +119,7 @@ eGameObject::eGameObject(eGrid *g,const eCoord &p,const eCoord &d,eFace *currentface,bool autodel) :autodelete(autodel),pos(p),dir(d),z(0),grid(g){ tASSERT(g); + urgentSimulationRequested_=false; currentFace=currentface; lastTime=se_GameTime(); id=-1; @@ -740,6 +741,7 @@ c->InteractWith(c->grid->gameObjectsInteresting(j),currentTime,0); REAL timeThisStep = lastTime+i*(currentTime-lastTime)/number_of_steps; + ret = ret || c->Timestep(timeThisStep); c->FindCurrentFace(); @@ -747,6 +749,14 @@ if ( 2 * c->lastTime < timeThisStep + lastTime ) break; } + for(int timeout = 10; timeout >= 0 && c->urgentSimulationRequested_; --timeout ) + { + // simulate on while events are pending + c->urgentSimulationRequested_ = false; + ret = ret || c->Timestep(currentTime); + c->FindCurrentFace(); + } + #ifdef DEBUG c->grid->Check(); #endif @@ -755,7 +765,7 @@ } #ifdef DEDICATED -static REAL se_maxSimulateAhead = .01f; +static REAL se_maxSimulateAhead = .1f; static tSettingItem<REAL> se_maxSimulateAheadConf( "MAX_SIMULATE_AHEAD", se_maxSimulateAhead ); #endif @@ -791,22 +801,10 @@ simTime -= c->Lag(); #ifdef DEDICATED - REAL nextTime = c->NextInterestingTime(); - - // store the time left to simulate - se_maxSimulateAheadLeft = simTime + se_maxSimulateAhead - nextTime; - if ( se_maxSimulateAheadLeft < 0 ) - se_maxSimulateAheadLeft = 0; - REAL lagThreshold = c->LagThreshold(); - if ( simTime - lagThreshold < nextTime && nextTime < simTime + se_maxSimulateAhead ) + if( !c->urgentSimulationRequested_ ) { - // something interesting is going to happen, see what it is - simTime = nextTime; - } - else - { - // add an extra portion of lag compensation + // nothing interesting happening. add an extra portion of lag compensation simTime -= lagThreshold; if ( simTime < c->LastTime() + minTimestep ) @@ -815,6 +813,8 @@ return; } } + + se_maxSimulateAheadLeft = se_maxSimulateAhead; #endif // check for teleports out of arena bounds Modified: armagetronad/trunk/armagetronad/src/engine/eGameObject.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eGameObject.h 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/src/engine/eGameObject.h 2010-08-25 20:25:59 UTC (rev 9456) @@ -60,6 +60,8 @@ //! called immediately after the object is created, either right after round beginning or mid-game creation virtual void OnBirth(); + bool urgentSimulationRequested_; //!< Flag set when a pending event needs simulation + protected: // does a timestep and all interactions for this gameobject, // divided in many small steps @@ -68,6 +70,9 @@ // tells game objects how far they are allowed to exeed the given simulation time static REAL MaxSimulateAhead(); + //! call if you need to be simulated right now + void RequestSimulation(){ urgentSimulationRequested_ = true; } + // a list of all eGameObjects that are interesting to watch int interestingID; int inactiveID; @@ -125,7 +130,6 @@ int GOID() const {return id;} int InterestingID() const {return interestingID;} REAL LastTime() const {return lastTime;} - virtual REAL NextInterestingTime() const {return lastTime;} //!< the next time something interesting is going to happen with this object eGameObject(eGrid *grid, const eCoord &p,const eCoord &d, eFace *currentface, bool autodelete=1); virtual ~eGameObject(); Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2010-08-25 20:25:59 UTC (rev 9456) @@ -1186,6 +1186,8 @@ return; } + this->RequestSimulation(); + this->NotifyNewDestination( dest ); // repeat insertion: position may have changed @@ -2515,6 +2517,15 @@ if ( currentTime > lastTime ) ret = TimestepCore( currentTime ); + // if we get here and turns are left pending within our reach, + // request the function gets called again right away. + if( currentDestination || + ( !pendingTurns.empty() && GetNextTurn( pendingTurns.front() < currentTime + MaxSimulateAhead() ) ) + ) + { + RequestSimulation(); + } + return ret; } @@ -4214,34 +4225,6 @@ return sg_cycleTurnSpeedFactor; } -// ******************************************************************************* -// * -// * NextInterestingTime -// * -// ******************************************************************************* -//! -//! @return -//! -// ******************************************************************************* - -REAL gCycleMovement::NextInterestingTime( void ) const -{ - // default to the last time - REAL ret = LastTime(); - - // look for a later destination - gDestination * run = currentDestination; - while ( run ) - { - REAL time = run->GetGameTime(); - if ( time > ret ) - ret = time; - run = run->next; - } - - return ret; -} - void gCycleMovement::AddZoneAcceleration( REAL zoneAcceleration ) { totalZoneAcceleration += zoneAcceleration; Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.h 2010-08-25 20:25:59 UTC (rev 9456) @@ -129,8 +129,6 @@ virtual bool Timestep ( REAL currentTime ) ; //!< advance to the given time - virtual REAL NextInterestingTime () const ; //!< the next time something interesting is going to happen with this object - // existence management virtual void AddRef () ; //!< increase reference count Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-08-25 20:10:09 UTC (rev 9455) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-08-25 20:25:59 UTC (rev 9456) @@ -1257,7 +1257,7 @@ gNetPlayerWall::s_CopyIntoGrid(); REAL minstep = 0; #ifdef DEDICATED - minstep = 1.0/sg_dedicatedFPS; + minstep = 0.9/sg_dedicatedFPS; // the low possible simulation frequency, together with lazy timesteps, produces // this much possible extra time difference between gameobjects This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-08-26 20:56:25
|
Revision: 9459 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9459&view=rev Author: z-man Date: 2010-08-26 20:56:18 +0000 (Thu, 26 Aug 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9455 to 9458: ------------------------------------------------------------------------ r9458 | bazaarmagetron | 2010-08-26 10:19:36 +0200 (Thu, 26 Aug 2010) | 2 lines Manuel Moos: Whoops, now you can actually CHAT again. ------------------------------------------------------------------------ r9457 | bazaarmagetron | 2010-08-25 22:58:22 +0200 (Wed, 25 Aug 2010) | 2 lines Manuel Moos: Chat can now be aborted again with ESC. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9455&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9455 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9458 Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-08-26 08:19:36 UTC (rev 9458) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-08-26 20:56:18 UTC (rev 9459) @@ -4073,7 +4073,16 @@ } else if (e.type==SDL_KEYDOWN && uActionGlobal::IsBreakingGlobalBind(e.key.keysym.sym)) + { return su_HandleEvent(e, true); + } + else if (e.type==SDL_KEYDOWN && + e.key.keysym.sym == SDLK_ESCAPE) + { + // escape needs to be handled by the surrounding menu, otherwise it + // probably brings up the ingame menu via global bind. + return false; + } else { if ( uMenuItemStringWithHistory::Event(e) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-09-03 06:44:01
|
Revision: 9464 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9464&view=rev Author: z-man Date: 2010-09-03 06:43:54 +0000 (Fri, 03 Sep 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9458 to 9463: ------------------------------------------------------------------------ r9462 | bazaarmagetron | 2010-09-01 22:14:25 +0200 (Wed, 01 Sep 2010) | 2 lines Manuel Moos: Merging /shout command and default team chat branch. ------------------------------------------------------------------------ r9461 | bazaarmagetron | 2010-08-30 01:35:33 +0200 (Mon, 30 Aug 2010) | 2 lines Manuel Moos: QUIT now works while the server is waiting for real players. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9458&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/config/settings_authentication.cfg armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/tron/gGame.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9458 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9463 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2010-09-02 20:43:16 UTC (rev 9463) +++ armagetronad/trunk/armagetronad/NEWS 2010-09-03 06:43:54 UTC (rev 9464) @@ -96,6 +96,7 @@ - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. Changes since 0.2.8.3.x: +- Implemented /shout command and associated settings - Tweaks to enemy influence system. - Ingame menu and console now are drawn on top of a semi-transparent, darkened area for increased readability. Modified: armagetronad/trunk/armagetronad/config/settings_authentication.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2010-09-02 20:43:16 UTC (rev 9463) +++ armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2010-09-03 06:43:54 UTC (rev 9464) @@ -229,6 +229,10 @@ ACCESS_LEVEL_CHAT 20 +# To be able to shout (chat so everyone sees it), you need at least this level: + +ACCESS_LEVEL_SHOUT 20 + # If you don't have that, everyone on the server will be reminded # that you want to chat at most every Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2010-09-02 20:43:16 UTC (rev 9463) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2010-09-03 06:43:54 UTC (rev 9464) @@ -191,6 +191,10 @@ PREFIX_SPAM_REQUIRED_SCORE 10.0 # The required prefix spam score a prefix must have for it to be considered spam. PREFIX_SPAM_TIMEOUT_MULTIPLIER 15.0 # Multiplier applied to time calculation to determine how long a known prefix is remembered. +# shouting + +DEFAULT_SHOUT_SPECTATOR 1 # set to 0 to make the default chat action for spectators chat only visible to spectators. +DEFAULT_SHOUT_PLAYER 1 # set to 0 to make the default chat action for players team chat. # voting ALLOW_VOTING 1 # allow voting? Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2010-09-02 20:43:16 UTC (rev 9463) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2010-09-03 06:43:54 UTC (rev 9464) @@ -425,6 +425,10 @@ spam_vote_kick_issue You issued too many kick votes. spam_vote_rejected Too many of your votes got rejected. +# default shouting +default_shout_spectator_help 1 if the default chat action for spectators should be shouting, 0 if it should be spectator chat. +default_shout_player_help 1 if the default chat action for players should be shouting, 0 if it should be team chat. + #******************************************** #******************************************** # @@ -3017,6 +3021,7 @@ access_level_admin_help Minimal access level for /admin command. access_level_rtfm_help Minimal access level for /teach or /rtfm command. access_level_chat_help Minimal access level for chatting. +access_level_shout_help Minimal access level for shouting. access_level_ips_help Minimal access level you need for seeing IPs of other players in the /players command. access_level_nver_help Minimal access level you need for seeing Network versions/strings from other players in /players. access_level_spy_console_help Minimal access level you need for seeing console input from other (in-game) admins. @@ -3038,6 +3043,7 @@ access_level_chat_timeout_help Time in seconds between public announcements that someone wants to chat, but can't. Set to 0 to disable the public warnings. access_level_chat_request \10xRESETT would like to chat, but is not authorized yet. Would someone be so kind and say "/op \2"?\n access_level_chat_denied 0xff7f7fChat denied,0xffffff insufficient access level.\n +access_level_shout_denied 0xff7f7fShout denied,0xffffff insufficient access level.\n access_level_op_denied 0xff7f7f\1 denied,0xffffff insufficient access level.\n access_level_op_overpowered 0xff7f7f\1 denied,0xffffff your need higher access rights than your victim.\n access_level_op_self 0xff7f7f\1 denied,0xffffff can't do that to yourself :).\n Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-09-02 20:43:16 UTC (rev 9463) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-09-03 06:43:54 UTC (rev 9464) @@ -680,7 +680,18 @@ #endif #endif +// flags indicating whether shouting should be the default chat action; if not, it's /team. +static bool se_shoutSpectator=true; +tSettingItem< bool > se_shoutSpectatorConf( "DEFAULT_SHOUT_SPECTATOR", se_shoutSpectator ); +static bool se_shoutPlayer=true; +tSettingItem< bool > se_shoutPlayerConf( "DEFAULT_SHOUT_PLAYER", se_shoutPlayer ); + #ifdef KRAWALL_SERVER +// minimal access level to shout +static tAccessLevel se_shoutAccessLevel = tAccessLevel_Program; +static tSettingItem< tAccessLevel > se_shoutAccessLevelConf( "ACCESS_LEVEL_SHOUT", se_shoutAccessLevel ); +static tAccessLevelSetter se_shoutAccessLevelConfLevel( se_shoutAccessLevelConf, tAccessLevel_Owner ); + // minimal access level to play static tAccessLevel se_playAccessLevel = tAccessLevel_Program; static tSettingItem< tAccessLevel > se_playAccessLevelConf( "ACCESS_LEVEL_PLAY", se_playAccessLevel ); @@ -2946,9 +2957,40 @@ return false; } +// returns true if the player is allowed to shout +static bool se_CheckAccessLevelShoutNoWarn( ePlayerNetID * p ) +{ +#ifdef KRAWALL_SERVER + // check if the player has the right to shout + return p->GetAccessLevel() <= se_shoutAccessLevel; +#else + return true; +#endif +} + +// returns true if the player is allowed to shout +static bool se_CheckAccessLevelShout( ePlayerNetID * p ) +{ + if( !se_CheckAccessLevelShoutNoWarn( p ) ) + { + sn_ConsoleOut( tOutput("$access_level_shout_denied" ), p->Owner() ); + return false; + } + else + { + return true; + } +} + // /me chat commant static void se_ChatMe( ePlayerNetID * p, std::istream & s, eChatSpamTester & spam ) { + // check for global chat access right + if ( !se_CheckAccessLevelShout( p ) ) + { + return; + } + if ( IsSilencedWithWarning(p) || spam.Block() ) { return; @@ -3013,8 +3055,43 @@ static bool se_filterDarkColorTeam=false; tSettingItem< bool > se_coloredDarkTeamConf( "FILTER_DARK_COLOR_TEAM", se_filterDarkColorTeam ); +// regular chat; reaches all players +static void se_ChatShout( ePlayerNetID * p, tString const & say, eChatSpamTester & spam ) +{ + if ( !se_CheckAccessLevelShout( p ) ) + { + return; + } + + // check for spam + if ( spam.Block() ) + { + return; + } + + if ( ( say.Len() <= se_SpamMaxLen+2 || p->GetAccessLevel() <= se_spamAccessLevel ) && !IsSilencedWithWarning(p) ) + { + se_BroadcastChat( p, say ); + se_DisplayChatLocally( p, say); + + tString s; + s << p->GetUserName() << ' ' << say; + se_SaveToChatLog(s); + } +} + +static void se_ChatShout( ePlayerNetID * p, std::istream & s, eChatSpamTester & spam ) +{ + // parse string + tString say; + say.ReadLine( s ); + + // delegate + se_ChatShout( p, say, spam ); +} + // /team chat commant: talk to your team -static void se_ChatTeam( ePlayerNetID * p, std::istream & s, eChatSpamTester & spam ) +static void se_ChatTeam( ePlayerNetID * p, tString msg, eChatSpamTester & spam ) { eTeam *currentTeam = se_GetManagedTeam( p ); @@ -3028,9 +3105,6 @@ return; } - tString msg; - msg.ReadLine( s ); - // Apply filters if we don't already if ( se_filterColorTeam ) msg = tColoredString::RemoveColors ( msg, false ); @@ -3093,6 +3167,15 @@ } } +// /team chat commant: talk to your team +static void se_ChatTeam( ePlayerNetID * p, std::istream & s, eChatSpamTester & spam ) +{ + tString msg; + msg.ReadLine( s ); + + se_ChatTeam( p, msg, spam ); +} + // /msg chat commant: talk to anyone team static void se_ChatMsg( ePlayerNetID * p, std::istream & s, eChatSpamTester & spam ) { @@ -3724,6 +3807,13 @@ se_ChatTeam( p, s, spam ); return; } + else if (command == "/shout") + { + spam.lastSaidType_ = eChatMessageType_Public; + spam.say_ = spam.say_.SubStr(7); // cut /shout prefix + se_ChatShout( p, s, spam ); + return; + } else if (command == "/msg" ) { spam.lastSaidType_ = eChatMessageType_Private; se_ChatMsg( p, s, spam ); @@ -3780,21 +3870,16 @@ #endif } - // check for spam - if ( spam.Block() ) + // well, that leaves only regular, boring chat. + if( ( se_GetManagedTeam( p ) ? se_shoutPlayer : se_shoutSpectator ) && se_CheckAccessLevelShoutNoWarn( p ) ) { - return; + // if it's the default and the player is allowed to, shout it out + se_ChatShout( p, say, spam ); } - - // well, that leaves only regular, boring chat. - if ( ( say.Len() <= se_SpamMaxLen+2 || p->GetAccessLevel() <= se_spamAccessLevel ) && !IsSilencedWithWarning(p) ) + else { - se_BroadcastChat( p, say ); - se_DisplayChatLocally( p, say); - - tString s; - s << p->GetUserName() << ' ' << say; - se_SaveToChatLog(s); + // otherwise, fall back to team chat. + se_ChatTeam( p, say, spam ); } } } Modified: armagetronad/trunk/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-09-02 20:43:16 UTC (rev 9463) +++ armagetronad/trunk/armagetronad/src/tron/gGame.cpp 2010-09-03 06:43:54 UTC (rev 9464) @@ -908,7 +908,7 @@ bool restarted = false; REAL timeout = tSysTimeFloat() + 3.0f; - while ( sg_NumHumans() <= 0 && sg_NumUsers() > 0 && ( !goon || *goon ) ) + while ( sg_NumHumans() <= 0 && sg_NumUsers() > 0 && ( !goon || *goon ) && uMenu::quickexit == uMenu::QuickExit_Off ) { if ( !restarted && bool(sg_currentGame) ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2010-09-16 21:06:53
|
Revision: 9476 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9476&view=rev Author: z-man Date: 2010-09-16 21:06:45 +0000 (Thu, 16 Sep 2010) Log Message: ----------- Merging branch 0.2.8 from revision 9463 to 9475: ------------------------------------------------------------------------ r9475 | bazaarmagetron | 2010-09-16 21:19:58 +0200 (Thu, 16 Sep 2010) | 1 line Manuel Moos: Sanity checking texture modes so nobody gets stuck without textures after partial destruction of user.cfg. ------------------------------------------------------------------------ r9474 | bazaarmagetron | 2010-09-16 21:19:18 +0200 (Thu, 16 Sep 2010) | 1 line Manuel Moos: Saving configuration after successful screen initialization now so not all abnormal program terminations trigger emergency screen mode resets the next time arma is run. ------------------------------------------------------------------------ r9473 | bazaarmagetron | 2010-09-16 18:43:03 +0200 (Thu, 16 Sep 2010) | 1 line Manuel Moos: Better desktop resolution query, no need to actually init the screen if you can just call SDL_GetVideoInfo. Fixes startup screen flickering. ------------------------------------------------------------------------ r9472 | bazaarmagetron | 2010-09-16 18:42:25 +0200 (Thu, 16 Sep 2010) | 1 line Manuel Moos: Don't accept indexed or <15bpp color depth pixel formats when taking over the desktop pixel format. ------------------------------------------------------------------------ r9471 | bazaarmagetron | 2010-09-13 18:32:19 +0200 (Mon, 13 Sep 2010) | 2 lines Manuel Moos: Merging followup from /shout branch: third option for DEFAULT_SHOUT_* settings. ------------------------------------------------------------------------ r9470 | bazaarmagetron | 2010-09-10 00:50:15 +0200 (Fri, 10 Sep 2010) | 2 lines Manuel Moos: Killing some more instances of delayed turn processing and thus lag. ------------------------------------------------------------------------ r9469 | bazaarmagetron | 2010-09-09 02:08:53 +0200 (Thu, 09 Sep 2010) | 2 lines Manuel Moos: Merging bugfix against negative timesteps. ------------------------------------------------------------------------ r9468 | bazaarmagetron | 2010-09-08 19:17:45 +0200 (Wed, 08 Sep 2010) | 2 lines Manuel Moos: Avoiding costy work on login processes where the user in question is long gone. ------------------------------------------------------------------------ r9467 | bazaarmagetron | 2010-09-08 19:17:10 +0200 (Wed, 08 Sep 2010) | 2 lines Manuel Moos: New member function determining whether a list item is in a list. ------------------------------------------------------------------------ r9466 | bazaarmagetron | 2010-09-08 19:13:25 +0200 (Wed, 08 Sep 2010) | 2 lines Manuel Moos: Saving and restoring callback login data for safer recursive calls to login/logout functions. ------------------------------------------------------------------------ r9465 | bazaarmagetron | 2010-09-08 09:53:18 +0200 (Wed, 08 Sep 2010) | 2 lines Manuel Moos: Deleting player team change wishes if the team in question has zero members left. Fixes the odd occurence of "Team Red" in two team setups and crashes. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9463&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/render/rScreen.cpp armagetronad/trunk/armagetronad/src/render/rTexture.cpp armagetronad/trunk/armagetronad/src/tools/tLinkedList.h armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9463 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9475 Modified: armagetronad/trunk/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/config/settings_dedicated.cfg 2010-09-16 21:06:45 UTC (rev 9476) @@ -191,10 +191,13 @@ PREFIX_SPAM_REQUIRED_SCORE 10.0 # The required prefix spam score a prefix must have for it to be considered spam. PREFIX_SPAM_TIMEOUT_MULTIPLIER 15.0 # Multiplier applied to time calculation to determine how long a known prefix is remembered. -# shouting +# shouting. 0 means the default chat is /team chat, 1 makes the default chat +# /shout chat, but only for those with the right to shout, while 2 makes +# the default chat /shout and overrides the access level restrictions. -DEFAULT_SHOUT_SPECTATOR 1 # set to 0 to make the default chat action for spectators chat only visible to spectators. -DEFAULT_SHOUT_PLAYER 1 # set to 0 to make the default chat action for players team chat. +DEFAULT_SHOUT_SPECTATOR 1 # default chat mode for spectators. +DEFAULT_SHOUT_PLAYER 1 # default chat mode for players + # voting ALLOW_VOTING 1 # allow voting? Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2010-09-16 21:06:45 UTC (rev 9476) @@ -426,8 +426,8 @@ spam_vote_rejected Too many of your votes got rejected. # default shouting -default_shout_spectator_help 1 if the default chat action for spectators should be shouting, 0 if it should be spectator chat. -default_shout_player_help 1 if the default chat action for players should be shouting, 0 if it should be team chat. +default_shout_spectator_help 1 if the default chat action for spectators should be shouting, 0 if it should be spectator chat. 2 if the default action should be shouting and the access level requirement should be overridden. +default_shout_player_help 1 if the default chat action for players should be shouting, 0 if it should be team chat. 2 if the default action should be shouting and the access level requirement should be overridden. #******************************************** #******************************************** Modified: armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/engine/eGameObject.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -711,10 +711,6 @@ REAL maxstep=.2; - // don't do a thing if the timestep is too small - if (fabs(currentTime - c->lastTime) < .001) - return false; - // be more careful when going back if (currentTime<c->lastTime) maxstep=.1; @@ -742,6 +738,7 @@ REAL timeThisStep = lastTime+i*(currentTime-lastTime)/number_of_steps; + c->urgentSimulationRequested_ = false; ret = ret || c->Timestep(timeThisStep); c->FindCurrentFace(); @@ -800,7 +797,10 @@ #endif simTime -= c->Lag(); + REAL maxSimTime = simTime; #ifdef DEDICATED + se_maxSimulateAheadLeft = se_maxSimulateAhead+se_lazyLag; + REAL lagThreshold = c->LagThreshold(); if( !c->urgentSimulationRequested_ ) { @@ -813,8 +813,11 @@ return; } } + else + { + maxSimTime += se_maxSimulateAheadLeft; + } - se_maxSimulateAheadLeft = se_maxSimulateAhead; #endif // check for teleports out of arena bounds @@ -827,7 +830,7 @@ } // only simulate forward here - if ( simTime > c->lastTime ) + if ( maxSimTime > c->lastTime ) { if (TimestepThis(simTime,c)) { Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -681,11 +681,19 @@ #endif // flags indicating whether shouting should be the default chat action; if not, it's /team. -static bool se_shoutSpectator=true; -tSettingItem< bool > se_shoutSpectatorConf( "DEFAULT_SHOUT_SPECTATOR", se_shoutSpectator ); -static bool se_shoutPlayer=true; -tSettingItem< bool > se_shoutPlayerConf( "DEFAULT_SHOUT_PLAYER", se_shoutPlayer ); +enum eShoutDefault +{ + eShoutDefault_Team = 0, // default to /team chat + eShoutDefault_Shout = 1, // default to /shout chat + eShoutDefault_ShoutAndOverride = 2 // default to /shout chat and override access level restrictions +}; +tCONFIG_ENUM( eShoutDefault ); +static eShoutDefault se_shoutSpectator=eShoutDefault_Shout; +tSettingItem< eShoutDefault > se_shoutSpectatorConf( "DEFAULT_SHOUT_SPECTATOR", se_shoutSpectator ); +static eShoutDefault se_shoutPlayer=eShoutDefault_Shout; +tSettingItem< eShoutDefault > se_shoutPlayerConf( "DEFAULT_SHOUT_PLAYER", se_shoutPlayer ); + #ifdef KRAWALL_SERVER // minimal access level to shout static tAccessLevel se_shoutAccessLevel = tAccessLevel_Program; @@ -2961,6 +2969,12 @@ static bool se_CheckAccessLevelShoutNoWarn( ePlayerNetID * p ) { #ifdef KRAWALL_SERVER + eShoutDefault shout = se_GetManagedTeam( p ) ? se_shoutPlayer : se_shoutSpectator; + if( shout == eShoutDefault_ShoutAndOverride ) + { + return true; + } + // check if the player has the right to shout return p->GetAccessLevel() <= se_shoutAccessLevel; #else @@ -3871,7 +3885,8 @@ } // well, that leaves only regular, boring chat. - if( ( se_GetManagedTeam( p ) ? se_shoutPlayer : se_shoutSpectator ) && se_CheckAccessLevelShoutNoWarn( p ) ) + eShoutDefault shout = se_GetManagedTeam( p ) ? se_shoutPlayer : se_shoutSpectator; + if( shout != eShoutDefault_Team && se_CheckAccessLevelShoutNoWarn( p ) ) { // if it's the default and the player is allowed to, shout it out se_ChatShout( p, say, spam ); @@ -6930,7 +6945,7 @@ // if the player is not currently on a team, but wants to join a specific team, let it join any, but keep the wish stored if ( player->NextTeam() && !player->CurrentTeam() && player->TeamChangeAllowed() ) { - eTeam * wish = player->NextTeam(); + tJUST_CONTROLLED_PTR< eTeam > wish = player->NextTeam(); bool assignBack = se_assignTeamAutomatically; se_assignTeamAutomatically = true; player->SetDefaultTeam(); @@ -6956,8 +6971,9 @@ // announce unfullfilled wishes if ( player->NextTeam() != player->CurrentTeam() && player->NextTeam() ) { - //if the player can't change teams delete the team wish - if(!player->TeamChangeAllowed()) { + // if the player can't change teams or their wish team emptied, delete the team wish + if(!player->TeamChangeAllowed() || player->NextTeam()->NumPlayers() == 0) + { player->SetTeam( player->CurrentTeam() ); continue; } Modified: armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -415,6 +415,12 @@ { } + // returns true if this process is still to be considered active + bool IsActive() const + { + return IsInList() && sn_UserID( user ) > 0; + } + static nLoginProcess * Find( int userID ) { nMachine & machine = nMachine::GetMachine( userID ); @@ -518,6 +524,12 @@ method.prefix = ""; method.suffix = ""; + if( !IsActive() ) + { + Abort(); + return; + } + bool ret = false; if ( !tRecorder::IsPlayingBack() ) { @@ -851,7 +863,7 @@ // check whether the user disappeared by now (this is run in the main thread, // so no risk of the user disconnecting while the function runs) int userID = sn_UserID( user ); - if ( userID <= 0 ) + if ( !IsActive() ) return; // create a random salt value @@ -1004,6 +1016,11 @@ // and determines whether the client is authorized or not. void nLoginProcess::Authorize() { + if( !IsActive() ) + { + Abort(); + } + if ( aborted ) { success = false; @@ -1054,7 +1071,7 @@ { // again, userID is safe in this function int userID = sn_UserID( user ); - if ( userID <= 0 ) + if ( !IsActive() ) return; // decorate console with correct sender ID Modified: armagetronad/trunk/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/network/nNetwork.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -3300,15 +3300,27 @@ :tCallback(s_loginoutAnchor,f){} void nCallbackLoginLogout::UserLoggedIn(int u){ + bool loginBack = login; + int userBack = user; + login = true; user = u; Exec(s_loginoutAnchor); + + login = loginBack; + user = userBack; } void nCallbackLoginLogout::UserLoggedOut(int u){ + bool loginBack = login; + int userBack = user; + login = false; user = u; Exec(s_loginoutAnchor); + + login = loginBack; + user = userBack; } unsigned short nCallbackAcceptPackedWithoutConnection::descriptor=0; // the descriptor of the incoming packet Modified: armagetronad/trunk/armagetronad/src/render/rScreen.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/render/rScreen.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -98,7 +98,6 @@ } */ - #ifndef DEBUG static rScreenSettings em5(ArmageTron_320_240, false, ArmageTron_ColorDepth_16, false); static rScreenSettings em4(ArmageTron_320_240, false, ArmageTron_ColorDepth_Desktop, false); static rScreenSettings em3(ArmageTron_640_480, false,ArmageTron_ColorDepth_16); @@ -106,7 +105,6 @@ static rScreenSettings em1(ArmageTron_640_480); static rScreenSettings *emergency[MAXEMERGENCY+2]={ &lastSuccess, &lastSuccess, &em1, &em2 , &em3, &em4, &em5}; - #endif #ifdef DEBUG rScreenSettings currentScreensetting(ArmageTron_640_480); @@ -508,6 +506,49 @@ sr_screenWidth = res.width; sr_screenHeight= res.height; + // desktop color depth + static int desktopCD_R = 5; + static int desktopCD_G = 5; + static int desktopCD_B = 5; + static int desktopCD = 16; + // desktop resolution + static int sr_desktopWidth = 0, sr_desktopHeight = 0; + + // determine those values + if ( sr_desktopWidth == 0 && !sr_screen ) + { + // select sane defaults in case the following operation fails + sr_desktopWidth = 800; + sr_desktopHeight = 600; + + const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo( ); + if( videoInfo ) + { + const SDL_PixelFormat* pixelFormat = videoInfo->vfmt; + + // don't accept anything less than 15 bpp, OpenGL doesn't like indexed colors. + if( pixelFormat && 15 <= pixelFormat->BitsPerPixel && NULL == pixelFormat->palette ) + { + desktopCD = pixelFormat->BitsPerPixel; + desktopCD_R = countBits(pixelFormat->Rmask); + desktopCD_G = countBits(pixelFormat->Gmask); + desktopCD_B = countBits(pixelFormat->Bmask); + } + + // the struct components we read here only exist since + // SDL 1.2.10. The version check here is to safeguard against + // code compiled against SDL 1.2.10, but linked with an earlier + // version, accessing data out of bounds. +#if SDL_VERSION_ATLEAST(1, 2, 10) + if( sr_DesktopScreensizeSupported() ) + { + sr_desktopWidth = videoInfo->current_w; + sr_desktopHeight = videoInfo->current_h; + } +#endif + } + } + if (!sr_screen) { int singleCD_R = 5; @@ -523,12 +564,10 @@ break; case ArmageTron_ColorDepth_Desktop: { - const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo( ); - const SDL_PixelFormat* pixelFormat = videoInfo->vfmt; - fullCD = pixelFormat->BitsPerPixel; - singleCD_R = countBits(pixelFormat->Rmask); - singleCD_G = countBits(pixelFormat->Gmask); - singleCD_B = countBits(pixelFormat->Bmask); + fullCD = desktopCD; + singleCD_R = desktopCD_R; + singleCD_G = desktopCD_G; + singleCD_B = desktopCD_B; } break; case ArmageTron_ColorDepth_32: @@ -590,13 +629,13 @@ attrib); // if not quite right - if (CD < fullCD){ + if (CD < 15){ // check if the other fs/windowed mode is better int CD_fsinv = SDL_VideoModeOK (sr_screenWidth, sr_screenHeight, fullCD, attrib^SDL_FULLSCREEN); - if (CD_fsinv > fullCD){ + if (CD_fsinv > 15){ // yes! change the mode currentScreensetting.fullscreen=!currentScreensetting.fullscreen; attrib ^= SDL_FULLSCREEN; @@ -612,29 +651,6 @@ } } - // determine desktop resolution - static int sr_desktopWidth = 0, sr_desktopHeight = 0; - if ( sr_desktopWidth == 0 && !sr_screen ) - { - // select sane defaults in case the following operation fails - sr_desktopWidth = 640; - sr_desktopHeight = 480; - - if ( sr_DesktopScreensizeSupported() -#ifdef DEBUG - && currentScreensetting.fullscreen && sr_screenWidth + sr_screenHeight == 0 -#endif - ) - { - sr_screen=SDL_SetVideoMode( 0, 0, CD, attrib ); - if ( sr_screen ) - { - sr_desktopWidth = sr_screen->w; - sr_desktopHeight = sr_screen->h; - } - } - } - // if desktop resolution was selected, pick it if ( sr_screenWidth + sr_screenHeight == 0 ) { @@ -693,6 +709,30 @@ gl_extensions.Clear(); renderer_identification.Clear(); + // sanity check texture modes + for(int i=rTextureGroups::TEX_GROUPS-1; i>=0; --i) + { + int & texmode = rTextureGroups::TextureMode[i]; + + // don't do anything for deliberately disabled textures + if( i == rTextureGroups::TEX_FONT || texmode >= 0 ) + { + // to default if the modes have been reset for some reason + if( texmode == 0 ) + { + texmode = default_texturemode; + } + if( texmode < GL_NEAREST ) + { + texmode = GL_NEAREST; + } + if( texmode > GL_LINEAR_MIPMAP_LINEAR ) + { + texmode = GL_LINEAR_MIPMAP_LINEAR; + } + } + } + gl_vendor << reinterpret_cast<const char *>(glGetString(GL_VENDOR)); gl_renderer << reinterpret_cast<const char *>(glGetString(GL_RENDERER)); gl_version << reinterpret_cast<const char *>(glGetString(GL_VERSION)); @@ -809,7 +849,11 @@ sr_ResetRenderState(true); rCallbackAfterScreenModeChange::Exec(); - #endif + + lastSuccess=currentScreensetting; + failed_attempts = 0; + st_SaveConfig(); +#endif return true; } @@ -819,17 +863,19 @@ cycleprograminited = false; while (failed_attempts <= MAXEMERGENCY+1) { - #ifndef DEBUG if (failed_attempts) + { +#ifdef DEBUG + std::cout << "failed attempts:" << failed_attempts << "\n"; + std::cout.flush(); +#endif currentScreensetting = *emergency[failed_attempts]; + } + // prepare for crash, note failure and save config failed_attempts++; st_SaveConfig(); - // std::cout << failed_attempts << "\n"; - // std::cout.flush(); - #endif - #ifdef MACOSX // init the screen once in windowed mode static bool first = true; @@ -852,7 +898,6 @@ sr_LockSDL(); if (lowlevel_sr_InitDisplay()) { - lastSuccess=currentScreensetting; sr_UnlockSDL(); failed_attempts = 0; st_SaveConfig(); @@ -863,7 +908,6 @@ if (lowlevel_sr_InitDisplay()) { - lastSuccess=currentScreensetting; sr_UnlockSDL(); failed_attempts = 0; st_SaveConfig(); @@ -894,9 +938,6 @@ rCallbackBeforeScreenModeChange::Exec(); if (sr_screen){ - failed_attempts = 0; - st_SaveConfig(); - sr_LockSDL(); // z-man: according to man SDL_SetVideoSurface, screen should not bee freed. // SDL_FreeSurface(sr_screen); Modified: armagetronad/trunk/armagetronad/src/render/rTexture.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/render/rTexture.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/render/rTexture.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -773,7 +773,11 @@ bool rISurfaceTexture::s_reportErrors_=false; tList<rITexture> rITexture::s_textures_; -int rTextureGroups::TextureMode[rTextureGroups::TEX_GROUPS]; +int rTextureGroups::TextureMode[rTextureGroups::TEX_GROUPS] +#ifndef DEDICATED +={GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR } +#endif +; char const * rTextureGroups::TextureGroupDescription[rTextureGroups::TEX_GROUPS]= { Modified: armagetronad/trunk/armagetronad/src/tools/tLinkedList.h =================================================================== --- armagetronad/trunk/armagetronad/src/tools/tLinkedList.h 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/tools/tLinkedList.h 2010-09-16 21:06:45 UTC (rev 9476) @@ -47,8 +47,12 @@ tListItemBase(tListItemBase *&a):next(NULL),anchor(NULL){Insert(a);} virtual ~tListItemBase() {Remove();} + //! returns the next list element tListItemBase *Next() {return next;} + //! returns true if this object is in a list + bool IsInList() const {return anchor;} + int Len(); void Sort( Comparator* comparator ); }; Modified: armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2010-09-16 19:19:58 UTC (rev 9475) +++ armagetronad/trunk/armagetronad/src/tron/gCycleMovement.cpp 2010-09-16 21:06:45 UTC (rev 9476) @@ -2040,8 +2040,10 @@ tJUST_CONTROLLED_PTR< gCycleMovement > keep( this->GetRefcount()>0 ? this : 0 ); // don't make a fuss about negative timesteps - if ( currentTime < lastTime ) - return TimestepCore( currentTime ); + // if ( currentTime < lastTime ) + // { + // return TimestepCore( currentTime ); + // } // remove old destinations //REAL lag = 1; @@ -2057,6 +2059,8 @@ sg_ArchiveReal( dt, 9 ); + bool vetoSimulationRequest = false; // set if the simulation was aborted even though events are still there to be taken care of + // if (currentTime > lastTime) { int timeout=10; @@ -2163,10 +2167,16 @@ REAL simulateAhead = MaxSimulateAhead(); if ( dist_to_dest > ( ts + simulateAhead ) * avgspeed && currentTime < latestTurnTime ) + { + vetoSimulationRequest = true; break; // no need to worry; we won't reach the next destination + } - if ( currentTime < earliestTurnTime && sg_CommandTime.Supported( Owner() ) ) + if ( currentTime + simulateAhead < earliestTurnTime && sg_CommandTime.Supported( Owner() ) ) + { + vetoSimulationRequest = true; break; // the turn is too far in the future + } // if ( currentTime < turnTime + EPS ) // simulateAhead = 0; @@ -2424,20 +2434,17 @@ if ( latestTurnTime < nextTurn ) latestTurnTime = nextTurn; - if ( currentTime - lastTime > turnStep ) + if ( ts + + simulateAhead > turnStep ) { - tsTodo = turnStep; - // if we can simulate to the turn in the next step, do so, overriding // the turn delay then. - if ( tsTodo < ts + simulateAhead && tsTodo > 0 ) - { - overrideTurnDelay = true; - } + tsTodo = turnStep; + overrideTurnDelay = true; } else { // not enough time to simulate to turn possibility; skip out of loop + vetoSimulationRequest = true; break; } } @@ -2473,6 +2480,7 @@ { tsTodo = ts + simulateAhead ; forceTurn = false; + overrideTurnDelay = false; // quit from here if there is nothing to do if ( tsTodo <= EPS ) @@ -2519,8 +2527,10 @@ // if we get here and turns are left pending within our reach, // request the function gets called again right away. - if( currentDestination || - ( !pendingTurns.empty() && GetNextTurn( pendingTurns.front() < currentTime + MaxSimulateAhead() ) ) + if( !vetoSimulationRequest && + ( currentDestination || + ( !pendingTurns.empty() && GetNextTurn( pendingTurns.front() < currentTime + MaxSimulateAhead() ) ) + ) ) { RequestSimulation(); @@ -3776,6 +3786,16 @@ sg_ArchiveReal( step, 9 ); + // don't go back further than the last turn + if( step < 0 ) + { + REAL min = -GetDistanceSinceLastTurn(); + if( step < min ) + { + step = min; + } + } + // move forward eCoord nextpos; if ( verletSpeed_ >0 ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2011-01-01 18:14:20
|
Revision: 9496 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9496&view=rev Author: z-man Date: 2011-01-01 18:14:12 +0000 (Sat, 01 Jan 2011) Log Message: ----------- Merging branch 0.2.8 from revision 9475 to 9495: ------------------------------------------------------------------------ r9495 | bazaarmagetron | 2011-01-01 16:36:57 +0100 (Sat, 01 Jan 2011) | 4 lines author: Manuel Moos Logging the first few answered ping polls to make troubleshooting easier. ------------------------------------------------------------------------ r9494 | bazaarmagetron | 2011-01-01 16:35:54 +0100 (Sat, 01 Jan 2011) | 2 lines Manuel Moos: Fixing invalid data access on (impossible under normal circumstances) master server log message. ------------------------------------------------------------------------ r9493 | bazaarmagetron | 2011-01-01 16:35:04 +0100 (Sat, 01 Jan 2011) | 2 lines Manuel Moos: Removing UPGRADE! warning on unknown network messages, they don't help. ------------------------------------------------------------------------ r9492 | bazaarmagetron | 2010-12-27 13:18:25 +0100 (Mon, 27 Dec 2010) | 2 lines Manuel Moos: Avoid queuing up console input menu functions on multiple activations. ------------------------------------------------------------------------ r9491 | bazaarmagetron | 2010-12-14 11:45:38 +0100 (Tue, 14 Dec 2010) | 2 lines Manuel Moos: Moving more purely visual settings into settings_visual.cfg. ------------------------------------------------------------------------ r9490 | bazaarmagetron | 2010-12-08 22:42:44 +0100 (Wed, 08 Dec 2010) | 4 lines author: Manuel Moos Doing post-command simulation with the correct time now. No more idle tasks for the authentication system in the GS_PLAY state. ------------------------------------------------------------------------ r9489 | bazaarmagetron | 2010-12-07 23:23:16 +0100 (Tue, 07 Dec 2010) | 2 lines Manuel Moos: Fixing comparison, new players now actually get their immunity round. ------------------------------------------------------------------------ r9487 | bazaarmagetron | 2010-11-09 01:44:42 +0100 (Tue, 09 Nov 2010) | 2 lines Manuel Moos: Not kicking unworthy spectators during their first round while they're trying to authenticate. ------------------------------------------------------------------------ r9486 | bazaarmagetron | 2010-10-24 07:29:47 +0200 (Sun, 24 Oct 2010) | 1 line Daniel Lee Harple: POSITIONS ladderlog event to log launch positions, and minor doc fixes. ------------------------------------------------------------------------ r9485 | bazaarmagetron | 2010-10-23 22:28:54 +0200 (Sat, 23 Oct 2010) | 2 lines Manuel Moos: Mering pre-join shuffle branch. /shuffle now works before you actually join a team. ------------------------------------------------------------------------ r9484 | bazaarmagetron | 2010-10-23 22:27:45 +0200 (Sat, 23 Oct 2010) | 2 lines Manuel Moos: Merging kickunworthy branch: implements KEEP_PLAYER_SLOT. ------------------------------------------------------------------------ r9480 | bazaarmagetron | 2010-10-11 19:07:43 +0200 (Mon, 11 Oct 2010) | 1 line Manuel Moos: Fixed login_error_pharm to give actually helpful hints. ------------------------------------------------------------------------ r9479 | bazaarmagetron | 2010-09-20 00:23:49 +0200 (Mon, 20 Sep 2010) | 1 line Daniel Lee Harple: Merge from 0.2.8-armagetronad-subculture_command ------------------------------------------------------------------------ r9477 | bazaarmagetron | 2010-09-17 12:56:59 +0200 (Fri, 17 Sep 2010) | 2 lines Manuel Moos: Fixed comparison. ------------------------------------------------------------------------ Revision Links: -------------- http://armagetronad.svn.sourceforge.net/armagetronad/?rev=9475&view=rev Modified Paths: -------------- armagetronad/trunk/armagetronad/NEWS armagetronad/trunk/armagetronad/config/settings.cfg armagetronad/trunk/armagetronad/config/settings_authentication.cfg armagetronad/trunk/armagetronad/config/settings_visual.cfg armagetronad/trunk/armagetronad/config/subcultures.srv armagetronad/trunk/armagetronad/language/deutsch.txt armagetronad/trunk/armagetronad/language/english_base.txt armagetronad/trunk/armagetronad/src/engine/eChat.cpp armagetronad/trunk/armagetronad/src/engine/eChat.h armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp armagetronad/trunk/armagetronad/src/engine/ePlayer.h armagetronad/trunk/armagetronad/src/engine/eTeam.cpp armagetronad/trunk/armagetronad/src/engine/eTeam.h armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp armagetronad/trunk/armagetronad/src/network/nAuthentication.h armagetronad/trunk/armagetronad/src/network/nNetwork.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.cpp armagetronad/trunk/armagetronad/src/network/nServerInfo.h armagetronad/trunk/armagetronad/src/render/rScreen.cpp armagetronad/trunk/armagetronad/src/tools/tToDo.cpp armagetronad/trunk/armagetronad/src/tools/tToDo.h armagetronad/trunk/armagetronad/src/tron/gGame.cpp armagetronad/trunk/armagetronad/src/tron/gMenus.cpp Property Changed: ---------------- armagetronad/trunk/ Property changes on: armagetronad/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9475 + /armagetronad/branches/0.2.8:8751-8852,8855-9185,9192-9201,9220-9495 Modified: armagetronad/trunk/armagetronad/NEWS =================================================================== --- armagetronad/trunk/armagetronad/NEWS 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/NEWS 2011-01-01 18:14:12 UTC (rev 9496) @@ -97,6 +97,8 @@ - New command-line flag: --connect <server>[:<port>]. Startup the game and connect directly to <server>. Changes since 0.2.8.3.x: +========================== +- /shuffle now works before you actually join a team - Implemented /shout command and associated settings - Tweaks to enemy influence system. - Ingame menu and console now are drawn on top of a semi-transparent, @@ -104,9 +106,16 @@ - New first start menu with clearer language selection and initial setup. - Tutorial match against one AI at slower speed. - Tutorial tooltips for the most important keybindings. +- ADD_MASTER_SERVER command to announce a server to a new master server. + Simplifies the process to list your server on a subculture. +- Player positions logged to ladderlog with POSITIONS event. Changes since 0.2.8.3_rc4: ========================== +- New setting: KEEP_PLAYER_SLOT allows the server to kick (preferably) spectators + if it gets full so there is always one slot open for players +- New setting: ACCESS_LEVEL_AUTOKICK_IMMUNITY sets the access level required + to be immune from such kicks (and idle autokicks, too) - Intercepted chat commands are now written to ladderlog.txt. Format: COMMAND /command-intercepted player [command arguments] - Increased default speed of server pinging @@ -129,7 +138,8 @@ Changes since 0.2.8.3_rc2: ========================== - Fixed crash with server polling -- ROUND_WINNER and MATCH_WINNER logged to ladderlog +- ROUND_WINNER and MATCH_WINNER ladderlog events now include the players of + the team. - Camera switches to user preferred camera when you die in incam mode - Better support for custom language files - Players can no longer spam chat with /shuffle messages. Added new setting Modified: armagetronad/trunk/armagetronad/config/settings.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings.cfg 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/config/settings.cfg 2011-01-01 18:14:12 UTC (rev 9496) @@ -195,7 +195,6 @@ CYCLE_DIST_WALL_SHRINK_OFFSET 0.0 # Distance offset in wall length calculation. # respawn relevant settings (no server supports respawning yet, but the client is prepared) -CYCLE_BLINK_FREQUENCY 10 # Frequency in Hz an invulnerable cycle blinks with. CYCLE_INVULNERABLE_TIME 0.0 # Time in seconds a cycle is invulnerable after a respawn. CYCLE_WALL_TIME 0.0 # Time in seconds a cycle does not make a wall after a respawn. @@ -312,25 +311,9 @@ include settings_visual.cfg -#HEADLIGHT 1 # turn on headlight effect (requires shaders) - -FADEOUT_NAME_DELAY 5.0 # Time the player names are shown. Set to 0 if you don't want to show them at all or -1 if you want to show them always. -SHOW_OWN_NAME 0 # Should your own name be shown above your cycle, too? - -# custom screen mode or window size (in case your OS does not report back your favorite -# screen mode by itself) - -CUSTOM_SCREEN_WIDTH 320 # width of the resolution -CUSTOM_SCREEN_HEIGHT 200 # height of the resolution -CUSTOM_SCREEN_ASPECT 1 # aspect ratio of the pixels (only affects game - # rendering, not the menu) - -PLAYER_RANDOM_COLOR 0 # if set to 1, a random generator will try to pick a color for you that - # differs from the other players on the server. - ############################################################################################ # -# camera settings +# camera settings (more in settings_visual.cfg) # ############################################################################################ @@ -345,53 +328,6 @@ CAMERA_OVERRIDE_CUSTOM_GLANCE 0 # override custom glance settings with vanues from the server CAMERA_OVERRIDE_CUSTOM_GLANCE_SERVER_CUSTOM 0 # the same, but only affects the server custom camera -CAMERA_FOLLOW_START_X -30 # fixed external camera start position -CAMERA_FOLLOW_START_Y -30 # ( relative to cycle ) -CAMERA_FOLLOW_START_Z 80 - -CAMERA_SMART_START_X 10 # smart camera start position -CAMERA_SMART_START_Y 30 # ( relative to cycle ) -CAMERA_SMART_START_Z 2 - -CAMERA_FREE_START_X 10 # free camera start position -CAMERA_FREE_START_Y -70 # ( relative to cycle ) -CAMERA_FREE_START_Z 100 - - - # custom camera position -CAMERA_CUSTOM_BACK 6 # how much the custom camera is moved back -CAMERA_CUSTOM_RISE 4 # the height of the custom camera above the cycle -CAMERA_CUSTOM_BACK_FROMSPEED .5 # how much the camera is moved back for every m/s speed -CAMERA_CUSTOM_RISE_FROMSPEED .4 # the height of the camera above the cycle for every m/s speed -CAMERA_CUSTOM_PITCH -.58 # inclination of the camera -CAMERA_CUSTOM_ZOOM 0 # how much the camera zooms in your cycle at the beginning of the round (to show the team's formation) -CAMERA_CUSTOM_TURN_SPEED 4 # speed the custom camera turns with -CAMERA_CUSTOM_TURN_SPEED_180 4 # factor to the turn speed after a quick reversal - - # glance camera position -CAMERA_GLANCE_BACK 6 # how much the glance camera is moved back -CAMERA_GLANCE_RISE 4 # the height of the glance camera above the cycle -CAMERA_GLANCE_BACK_FROMSPEED .5 # how much the camera is moved back for every m/s speed -CAMERA_GLANCE_RISE_FROMSPEED .4 # the height of the camera above the cycle for every m/s speed -CAMERA_GLANCE_PITCH -.58 # inclination of the camera - -# the old custom camera settings for those who miss them - -#CAMERA_CUSTOM_BACK 15 # how much the camera is moved back -#CAMERA_CUSTOM_RISE 10 # the height of the camera above the cycle -#CAMERA_CUSTOM_BACK_FROMSPEED 0 # how much the camera is moved back for every m/s speed -#CAMERA_CUSTOM_RISE_FROMSPEED 0 # the height of the camera above the cycle for every m/s speed -#CAMERA_CUSTOM_PITCH -.7 # inclination of the camera -#CAMERA_CUSTOM_ZOOM .5 # how much the camera zooms in your cycle at the beginning of the round (to show the team's formation) -#CAMERA_CUSTOM_TURN_SPEED 40 # speed the custom camera turns with -#CAMERA_CUSTOM_TURN_SPEED_180 2 # factor to the turn speed after a quick reversal -#CAMERA_GLANCE_BACK 15 # how much the glance camera is moved back -#CAMERA_GLANCE_RISE 10 # the height of the glance camera above the cycle -#CAMERA_GLANCE_BACK_FROMSPEED 0 # how much the camera is moved back for every m/s speed -#CAMERA_GLANCE_RISE_FROMSPEED 0 # the height of the camera above the cycle for every m/s speed -#CAMERA_GLANCE_PITCH -.7 # inclination of the camera - - # server defined custom camera position CAMERA_SERVER_CUSTOM_BACK 30 # how much the camera is moved back CAMERA_SERVER_CUSTOM_RISE 20 # the height of the camera above the cycle @@ -412,16 +348,6 @@ CAMERA_SERVER_CUSTOM_TURN_SPEED -1 # speed the custom camera turns with CAMERA_SERVER_CUSTOM_TURN_SPEED_180 4 # factor to the turn speed after a quick reversal -CAMERA_IN_TURN_SPEED 40 # speed the internal camera turns with - -# camera clipping VS wall lowering settings - -CAMERA_VISIBILITY_LOWER_WALL 1 # if set, walls are lowerd when they block the view and the camera is not moved -CAMERA_VISIBILITY_LOWER_WALL_SMART 0 # like CAMERA_VISIBILITY_LOWER_WALL, but special setting for the smart camera - -BUG_TRANSPARENCY 0 # unsupported: make all rim walls semi-transparent by rendering them without occlusion tests -BUG_TRANSPARENCY_DEMAND 0 # unsupported: use transparency instead of lowering walls - ############################################################################################ # # game rules settings @@ -473,7 +399,7 @@ FILTER_COLOR_NAMES 0 # Filter color codes from player names. FILTER_NAME_ENDS 1 # Filter whitespace from beginning and end of player names. FILTER_NAME_MIDDLE 1 # Filter excess whitespace and other junk from the middle of player names. -FILTER_COLOR_SERVER_NAMES 0 # Filter color codes from server names in the server browser. +FILTER_COLOR_SERVER_NAMES 0 # Filter color codes from server names in the server browser. Only affects the client. SILENCE_DEFAULT 0 # silence new players by default? ENABLE_CHAT 1 # allow public messages? @@ -506,6 +432,16 @@ IDLE_REMOVE_TIME 0 # Time in seconds after which an inactive player is removed from the game IDLE_KICK_TIME 0 # Time in seconds after which an inactive player is kicked +KEEP_PLAYER_SLOT 0 # Set to 1 if spectators should be auto-removed if the server gets full so potential + # players can always join. Warning, may also remove players if the server allows for + # the client slots to fill up before the player slots are all full. + # The system prefers to kick, in that order of priority: + # Spectators over invited players over players + # People with lower access level + +# Both IDLE_KICK_TIME and KEEP_PLAYER_SLOT don't kick players/spectators with an access level +# of at least ACCESS_LEVEL_AUTOKICK_IMMUNITY. + DOUBLEBIND_TIME -10.0 # Time in seconds during which no two different keyboard events can # trigger the same action, negative or zero values disable the detection. @@ -603,94 +539,19 @@ # and may change meaning from release to release. ############################################################################################ -# A white background is rendered behind text displays if the text color is darker -# than the color given here. Either every color component needs to be lower -# than the one given, or the sum needs to be lower than the given sum. -FONT_MIN_R .5 -FONT_MIN_G .5 -FONT_MIN_B .5 -FONT_MIN_TOTAL .7 -#FONT_MIN_TOTAL 1.0 # that was the hardcoded value in 0.2.7.1 and earlier. -# font selection settings. If a character is smaller in pixels than the given -# dimensions, the lowres font will be used. -FONT_BIG_THRESHOLD_WIDTH 12 -FONT_BIG_THRESHOLD_HEIGHT 24 +# server browser query settings. Affect clients and master servers. -# visibility culling settings: AA forces the cycle to be visible from the -# camera position, and additionally tracks the visibility of three extra -# points (visibility targets), one in front of the cycle, two by its sides. -# these settings control how they are handled: the front and side distance -# of the targets is determined by _EXTENSION, and the side targets will be -# put forward relative to the cycle by _SIDESKEW. Rays will be cast from the -# cycle to the so determined positions and the real targets will be placed -# at _WALL_DISTANCE times the maximal unblocked distance. Additionally, if the -# targets have been blocked by walls the last frame, they won't snap to the -# full allowed distance right away, but only slowly move there, determined by -# _RECOVERY_SPEED. Lastly, _CLIP_SPEED determines the speed the camera will -# be moved with to keep the extra targets in view. - -CAMERA_VISIBILITY_RECOVERY_SPEED 1 # the speed the external visibility targets recovers from wall hits -CAMERA_VISIBILITY_WALL_DISTANCE .5 # the distance the visibility targets keep from walls -CAMERA_VISIBILITY_CLIP_SPEED 40 # speed with wich the visibility targets is brought into view -CAMERA_VISIBILITY_EXTENSION 1 # distance (measured in seconds, gets multiplied by speed) of the visibility targets from the watched object -CAMERA_VISIBILITY_SIDESKEW .5 # extra forward component of the sideways visibility targets - -# smart camera settings. Don't ask for support, they are very obscure and not even -# z-man knows what everything does. Units are often arbitrary. -# The code that uses them is really messy. -# The more obscure settings are lower in the section. - -CAMERA_SMART_DISTANCE 4.0 # typical distance the camera keeps from the cycle -CAMERA_SMART_HEIGHT 2.0 # typical height in speed units -CAMERA_SMART_TURN_GRINDING 5.0 # Amount of turning from grinding walls - -CAMERA_SMART_MIN_DISTANCE 10.0 # minimal distance of the camera to the cycle in .3 meters -CAMERA_SMART_HEIGHT_EXTRA .5 # extra factor for height. Either this or the previous setting is redundant :) -CAMERA_SMART_HEIGHT_TURNING .5 # influence of turning on camera height -CAMERA_SMART_HEIGHT_GRINDING 0.0 # influence of grinding on camera height. In 0.2.7.1, this was set to 2, causing the camera to tilt down too far. -CAMERA_SMART_HEIGHT_OBSTACLE 1.0 # influence of obstacles in front of the cycle - -# these settings determine the focal point calculation -CAMERA_SMART_CENTER_POS_SMOOTH 6.0 # speed of cycle position smoothinga -CAMERA_SMART_CENTER_DIR_SMOOTH 3.0 # speed of cycle direction smoothinga -CAMERA_SMART_CENTER_LOOKAHEAD .5 # amount of lookahead on top of smoothing, relative to speed -CAMERA_SMART_CENTER_MAX_LOOKAHEAD 5 # maximal amount of lookahead on top of smoothing - -# now come the really obscure settings -CAMERA_SMART_AVOID_FRONT 10.0 # factor moving the camera to the side if it is in front of the cycle -CAMERA_SMART_AVOID_FRONT2 0.1 # another factor moving the camera to the side if it is in front of the cycle - -CAMERA_SMART_CYCLESPEED 20.0 # typical cycle speed - -CAMERA_SMART_DISTANCESCALE .2 # distance scale measured relative to cycle speed -CAMERA_SMART_MIN_DISTANCESCALE 5.0 # minimal distance scale in meters - -# red/green 3D rendering settings -# you need red/green or red/cyan 3D glasses to see anything meaningful if you use these -#CAMERA_EYE_DISTANCE 0 # The distance between the two eyes of the camera. Meaninful values lie between 0.1 and 0.5 -#CAMERA_EYE_1_COLOR 1 # The color mask of the first eye of the camera. 1 is red, 2 is green, 4 is blue, any sum of these values means more than one color -#CAMERA_EYE_1_COLOR 6 # The color mask of the second eye of the camera -#CAMERA_EYE_1_COLOR 2 # for red/green glasses -#CAMERA_IN_MAX_FOCUS_DISTANCE .5 # This, multiplied by the current speed, determines the maximum distance of the focus of the two eyes unless a wall is closer - - -# server browser query settings - BROWSER_QUERY_FILTER 1 # query filter. Set to 0 to poll all servers, 1 to query servers with nonnegative score bias, 2 to query only those with positive bias and 3 to not query at all. Non-queried servers will appear to have ping 999; the player info comes indirectly from the master server. BROWSER_QUERIES_SIMULTANEOUS 20 # max. number of simultaneous query messages that are sent BROWSER_QUERY_DELAY_SINGLE 0.5 # time delay between queries of the same server BROWSER_QUERY_DELAY_GLOBAL 0.025 # time delay between all queries BROWSER_NUM_QUERIES 3 # number of queries per try BROWSER_CONTACTLOSS 4 # number of failed contact attemps before a server can be considered lost + TIMER_SYNC_START_FUDGE 0.1 # fudge factor: the game timer tends to be late at the start of the round. This fudge factor compensates for it by hacking it a bit into the future. TIMER_SYNC_START_FUDGE_STOP 2.0 # the round time at which fudging is stopped. -ARENA_WALL_SHADOW_SIZE 0.1 # maximal size of the arena wall shadow compared to the camera/wall height -ARENA_WALL_SHADOW_SIDEDIST 10.0 # shadows are drawn when the cycle gets closer to the line the wall follows than this -ARENA_WALL_SHADOW_DIST 30.0 # shadows are drawn when the cycle's path gets closer to the wall than this -ARENA_WALL_SHADOW_NEAR 1.0 # getting closer to the wall than this distance does not increase the shadow much - # On some occasions, to avoid phasing bugs, we let a cycle drop its trail and # build a new segment. This is invisible to the player, but the code is better # at handling the dropped segments. This value determines in which intervals @@ -775,6 +636,7 @@ # On top of the measured lag, the timer goes faster by this amount in seconds even # if no lag was reported. Increase this if you know you have a very bad network link # and if you are experiencing lag slides on servers running 0.2.8.3 or later. +# This setting only has an effect on the client. LAG_OFFSET_CLIENT 0.0 # This setting has exactly the same effect, but is server controlled. Use it if your Modified: armagetronad/trunk/armagetronad/config/settings_authentication.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/config/settings_authentication.cfg 2011-01-01 18:14:12 UTC (rev 9496) @@ -240,6 +240,11 @@ # seconds. +# Minimal access level to be protected against autokicks (from idling or +# when someone needs to go when a player slot is to be kept open) + +ACCESS_LEVEL_AUTOKICK_IMMUNITY 7 + # If you are spectating a game and your access level is at least ACCESS_LEVEL_SPY_TEAM 2 Modified: armagetronad/trunk/armagetronad/config/settings_visual.cfg =================================================================== --- armagetronad/trunk/armagetronad/config/settings_visual.cfg 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/config/settings_visual.cfg 2011-01-01 18:14:12 UTC (rev 9496) @@ -27,3 +27,166 @@ #FLOOR_BLUE .3 # floor color (without moviepack) MOTION_BLUR_TIME .0075 # time over which the last rendered frames are blurred together in motion blur mode +FADEOUT_NAME_DELAY 5.0 # Time the player names are shown. Set to 0 if you don't want to show them at all or -1 if you want to show them always. +SHOW_OWN_NAME 0 # Should your own name be shown above your cycle, too? + +# custom screen mode or window size (in case your OS does not report back your favorite +# screen mode by itself) + +CUSTOM_SCREEN_WIDTH 320 # width of the resolution +CUSTOM_SCREEN_HEIGHT 200 # height of the resolution +CUSTOM_SCREEN_ASPECT 1 # aspect ratio of the pixels (only affects game + # rendering, not the menu) + +PLAYER_RANDOM_COLOR 0 # if set to 1, a random generator will try to pick a color for you that + # differs from the other players on the server. + +CYCLE_BLINK_FREQUENCY 10 # Frequency in Hz an invulnerable cycle blinks with. + +############################################################################################ +# +# camera settings +# +############################################################################################ + +CAMERA_FOLLOW_START_X -30 # fixed external camera start position +CAMERA_FOLLOW_START_Y -30 # ( relative to cycle ) +CAMERA_FOLLOW_START_Z 80 + +CAMERA_SMART_START_X 10 # smart camera start position +CAMERA_SMART_START_Y 30 # ( relative to cycle ) +CAMERA_SMART_START_Z 2 + +CAMERA_FREE_START_X 10 # free camera start position +CAMERA_FREE_START_Y -70 # ( relative to cycle ) +CAMERA_FREE_START_Z 100 + + + # custom camera position +CAMERA_CUSTOM_BACK 6 # how much the custom camera is moved back +CAMERA_CUSTOM_RISE 4 # the height of the custom camera above the cycle +CAMERA_CUSTOM_BACK_FROMSPEED .5 # how much the camera is moved back for every m/s speed +CAMERA_CUSTOM_RISE_FROMSPEED .4 # the height of the camera above the cycle for every m/s speed +CAMERA_CUSTOM_PITCH -.58 # inclination of the camera +CAMERA_CUSTOM_ZOOM 0 # how much the camera zooms in your cycle at the beginning of the round (to show the team's formation) +CAMERA_CUSTOM_TURN_SPEED 4 # speed the custom camera turns with +CAMERA_CUSTOM_TURN_SPEED_180 4 # factor to the turn speed after a quick reversal + + # glance camera position +CAMERA_GLANCE_BACK 6 # how much the glance camera is moved back +CAMERA_GLANCE_RISE 4 # the height of the glance camera above the cycle +CAMERA_GLANCE_BACK_FROMSPEED .5 # how much the camera is moved back for every m/s speed +CAMERA_GLANCE_RISE_FROMSPEED .4 # the height of the camera above the cycle for every m/s speed +CAMERA_GLANCE_PITCH -.58 # inclination of the camera + +# the old custom camera settings for those who miss them + +#CAMERA_CUSTOM_BACK 15 # how much the camera is moved back +#CAMERA_CUSTOM_RISE 10 # the height of the camera above the cycle +#CAMERA_CUSTOM_BACK_FROMSPEED 0 # how much the camera is moved back for every m/s speed +#CAMERA_CUSTOM_RISE_FROMSPEED 0 # the height of the camera above the cycle for every m/s speed +#CAMERA_CUSTOM_PITCH -.7 # inclination of the camera +#CAMERA_CUSTOM_ZOOM .5 # how much the camera zooms in your cycle at the beginning of the round (to show the team's formation) +#CAMERA_CUSTOM_TURN_SPEED 40 # speed the custom camera turns with +#CAMERA_CUSTOM_TURN_SPEED_180 2 # factor to the turn speed after a quick reversal +#CAMERA_GLANCE_BACK 15 # how much the glance camera is moved back +#CAMERA_GLANCE_RISE 10 # the height of the glance camera above the cycle +#CAMERA_GLANCE_BACK_FROMSPEED 0 # how much the camera is moved back for every m/s speed +#CAMERA_GLANCE_RISE_FROMSPEED 0 # the height of the camera above the cycle for every m/s speed +#CAMERA_GLANCE_PITCH -.7 # inclination of the camera + +CAMERA_IN_TURN_SPEED 40 # speed the internal camera turns with + +# camera clipping VS wall lowering settings + +CAMERA_VISIBILITY_LOWER_WALL 1 # if set, walls are lowerd when they block the view and the camera is not moved +CAMERA_VISIBILITY_LOWER_WALL_SMART 0 # like CAMERA_VISIBILITY_LOWER_WALL, but special setting for the smart camera + +BUG_TRANSPARENCY 0 # unsupported: make all rim walls semi-transparent by rendering them without occlusion tests +BUG_TRANSPARENCY_DEMAND 0 # unsupported: use transparency instead of lowering walls + +############################################################################################ +# EXPERT SECTION +# The settings in this section sometimes have obsucre effects and you +# sometimes need to know how the settings are used in the code to predict +# the effects of changes. +# They're unsupported, undocumented (apart from what you see in this file) +# and may change meaning from release to release. +############################################################################################ + +# A white background is rendered behind text displays if the text color is darker +# than the color given here. Either every color component needs to be lower +# than the one given, or the sum needs to be lower than the given sum. +FONT_MIN_R .5 +FONT_MIN_G .5 +FONT_MIN_B .5 +FONT_MIN_TOTAL .7 +#FONT_MIN_TOTAL 1.0 # that was the hardcoded value in 0.2.7.1 and earlier. + +# font selection settings. If a character is smaller in pixels than the given +# dimensions, the lowres font will be used. +FONT_BIG_THRESHOLD_WIDTH 12 +FONT_BIG_THRESHOLD_HEIGHT 24 + +# visibility culling settings: AA forces the cycle to be visible from the +# camera position, and additionally tracks the visibility of three extra +# points (visibility targets), one in front of the cycle, two by its sides. +# these settings control how they are handled: the front and side distance +# of the targets is determined by _EXTENSION, and the side targets will be +# put forward relative to the cycle by _SIDESKEW. Rays will be cast from the +# cycle to the so determined positions and the real targets will be placed +# at _WALL_DISTANCE times the maximal unblocked distance. Additionally, if the +# targets have been blocked by walls the last frame, they won't snap to the +# full allowed distance right away, but only slowly move there, determined by +# _RECOVERY_SPEED. Lastly, _CLIP_SPEED determines the speed the camera will +# be moved with to keep the extra targets in view. + +CAMERA_VISIBILITY_RECOVERY_SPEED 1 # the speed the external visibility targets recovers from wall hits +CAMERA_VISIBILITY_WALL_DISTANCE .5 # the distance the visibility targets keep from walls +CAMERA_VISIBILITY_CLIP_SPEED 40 # speed with wich the visibility targets is brought into view +CAMERA_VISIBILITY_EXTENSION 1 # distance (measured in seconds, gets multiplied by speed) of the visibility targets from the watched object +CAMERA_VISIBILITY_SIDESKEW .5 # extra forward component of the sideways visibility targets + +ARENA_WALL_SHADOW_SIZE 0.1 # maximal size of the arena wall shadow compared to the camera/wall height +ARENA_WALL_SHADOW_SIDEDIST 10.0 # shadows are drawn when the cycle gets closer to the line the wall follows than this +ARENA_WALL_SHADOW_DIST 30.0 # shadows are drawn when the cycle's path gets closer to the wall than this +ARENA_WALL_SHADOW_NEAR 1.0 # getting closer to the wall than this distance does not increase the shadow much + +# smart camera settings. Don't ask for support, they are very obscure and not even +# z-man knows what everything does. Units are often arbitrary. +# The code that uses them is really messy. +# The more obscure settings are lower in the section. + +CAMERA_SMART_DISTANCE 4.0 # typical distance the camera keeps from the cycle +CAMERA_SMART_HEIGHT 2.0 # typical height in speed units +CAMERA_SMART_TURN_GRINDING 5.0 # Amount of turning from grinding walls + +CAMERA_SMART_MIN_DISTANCE 10.0 # minimal distance of the camera to the cycle in .3 meters +CAMERA_SMART_HEIGHT_EXTRA .5 # extra factor for height. Either this or the previous setting is redundant :) +CAMERA_SMART_HEIGHT_TURNING .5 # influence of turning on camera height +CAMERA_SMART_HEIGHT_GRINDING 0.0 # influence of grinding on camera height. In 0.2.7.1, this was set to 2, causing the camera to tilt down too far. +CAMERA_SMART_HEIGHT_OBSTACLE 1.0 # influence of obstacles in front of the cycle + +# these settings determine the focal point calculation +CAMERA_SMART_CENTER_POS_SMOOTH 6.0 # speed of cycle position smoothinga +CAMERA_SMART_CENTER_DIR_SMOOTH 3.0 # speed of cycle direction smoothinga +CAMERA_SMART_CENTER_LOOKAHEAD .5 # amount of lookahead on top of smoothing, relative to speed +CAMERA_SMART_CENTER_MAX_LOOKAHEAD 5 # maximal amount of lookahead on top of smoothing + +# now come the really obscure settings +CAMERA_SMART_AVOID_FRONT 10.0 # factor moving the camera to the side if it is in front of the cycle +CAMERA_SMART_AVOID_FRONT2 0.1 # another factor moving the camera to the side if it is in front of the cycle + +CAMERA_SMART_CYCLESPEED 20.0 # typical cycle speed + +CAMERA_SMART_DISTANCESCALE .2 # distance scale measured relative to cycle speed +CAMERA_SMART_MIN_DISTANCESCALE 5.0 # minimal distance scale in meters + +# red/green 3D rendering settings +# you need red/green or red/cyan 3D glasses to see anything meaningful if you use these +#CAMERA_EYE_DISTANCE 0 # The distance between the two eyes of the camera. Meaninful values lie between 0.1 and 0.5 +#CAMERA_EYE_1_COLOR 1 # The color mask of the first eye of the camera. 1 is red, 2 is green, 4 is blue, any sum of these values means more than one color +#CAMERA_EYE_1_COLOR 6 # The color mask of the second eye of the camera +#CAMERA_EYE_1_COLOR 2 # for red/green glasses +#CAMERA_IN_MAX_FOCUS_DISTANCE .5 # This, multiplied by the current speed, determines the maximum distance of the focus of the two eyes unless a wall is closer + Modified: armagetronad/trunk/armagetronad/config/subcultures.srv =================================================================== --- armagetronad/trunk/armagetronad/config/subcultures.srv 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/config/subcultures.srv 2011-01-01 18:14:12 UTC (rev 9496) @@ -6,3 +6,12 @@ tna 0 name Competitions ServerEnd + +ServerBegin +connection generalconsumption.org +port 4533 +method 0 +key 0 +tna 0 +name Ladle Servers +ServerEnd Modified: armagetronad/trunk/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/trunk/armagetronad/language/deutsch.txt 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/language/deutsch.txt 2011-01-01 18:14:12 UTC (rev 9496) @@ -2898,7 +2898,7 @@ login_error_noremote Authentifizierung via Globaler ID ist auf diesem Server nicht aktiviert. login_error_blacklist Meldeamt \1 ist auf der schwarzen Liste dieses Servers. login_error_whitelist Meldeamt \1 ist nicht auf der weissen Liste dieses Servers. -login_error_pharm Server-Adresse passt nicht, \1 (vom Client) != \2 (Serveraddresse). Pharming m\xF6glich. Wenn du dich gerade vom LAN mit deinem eigenen Server verbindest, kannst du "TRUST_LAN" aktivieren (nur wenn sich im LAN keine B\xF6sewichte verstecken, nat\xFCrlich), oder setze "SERVER_IP", um dem Server seine korrekte Adresse mitzuteilen. +login_error_pharm Server-Adresse passt nicht, \1 (vom Client) != \2 (Serveraddresse). Pharming m\xF6glich. Wenn du dich gerade vom LAN mit deinem eigenen Server verbindest, kannst du "TRUST_LAN" aktivieren (nur wenn sich im LAN keine B\xF6sewichte verstecken, nat\xFCrlich). Wenn nicht, benutze "SERVER_DNS", um dem Server seine korrekte Adresse mitzuteilen. login_error_pharm_cheap \xC4rger mit Server-Adresse. Der Client schickt eine unspeziefische Adresse. login_error_methodmismatch Die lokale Methode zum Passworttest wurde zwischen dem Setzen des Passworts und jetzt ver\xE4ndert. In der Serverkonfiguration m\xFCssen alle zur Authentifizierungsmethode relevanten Einstellungen VOR den Passw\xF6rtern lokaler Accounts stehen. login_error_nomethod Keine geeignete Authentifizierungsmethode gefunden. Der Client unterst\xFCtzt \1, der Server \2, und das Meldeamt \3. Modified: armagetronad/trunk/armagetronad/language/english_base.txt =================================================================== --- armagetronad/trunk/armagetronad/language/english_base.txt 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/language/english_base.txt 2011-01-01 18:14:12 UTC (rev 9496) @@ -341,6 +341,7 @@ chatter_remove_time_help Time in seconds after which a permanent chatter is removed from the game idle_remove_time_help Time in seconds after which an inactive player is removed from the game idle_kick_time_help Time in seconds after which an inactive player is kicked +keep_player_slot_help If set to 1, every time the server gets full, an unworthy spectator is kicked. #******************************************** #******************************************** @@ -645,6 +646,7 @@ dedicated_fps_help Maximum simulation steps per second the dedicated server will perform dedicated_fps_idle_factor_help Number of times per frame the server should check whether simulation can be done if no network input is coming talk_to_master_help Announce this server on the internet? +add_master_server_help Announce this server to another master server. Usage: ADD_MASTER_SERVER host port(optional, default=4533). max_out_rate_help Maximum network output rate max_in_rate_help Maximum network input rate message_cache_size_help Size of the network message cache in messages. @@ -785,7 +787,7 @@ ladderlog_write_death_teamkill_help Write to ladderlog: DEATH_TEAMKILL <prey> <predator> ladderlog_write_game_end_help Write to ladderlog: GAME_END ladderlog_write_game_time_help Write to ladderlog: GAME_TIME <time> (see also: GAME_TIME_INTERVAL) -ladderlog_write_match_winner_help Write to ladderlog: MATCH_WINNER <winner> +ladderlog_write_match_winner_help Write to ladderlog: MATCH_WINNER <team> <players> ladderlog_write_new_match_help Write to ladderlog: NEW_MATCH ladderlog_write_new_round_help Write to ladderlog: NEW_ROUND ladderlog_write_num_humans_help Write to ladderlog: NUM_HUMANS <number of humans> @@ -793,9 +795,10 @@ ladderlog_write_player_entered_help Write to ladderlog: PLAYER_ENTERED <name> <IP> <screen name> ladderlog_write_player_left_help Write to ladderlog: PLAYER_LEFT <name> <IP> ladderlog_write_player_renamed_help Write to ladderlog: PLAYER_RENAMED <old name> <new name> <ip> <screen name> +ladderlog_write_positions_help Write to ladderlog: POSITIONS <team> <player1 player2 ...> ladderlog_write_round_score_help Write to ladderlog: ROUND_SCORE <score difference> <player> [<team>] ladderlog_write_round_score_team_help Write to ladderlog: ROUND_SCORE_TEAM <score difference> <team> -ladderlog_write_round_winner_help Write to ladderlog: ROUND_WINNER <winner> +ladderlog_write_round_winner_help Write to ladderlog: ROUND_WINNER <team> <players> ladderlog_write_sacrifice_help Write to ladderlog: SACRIFICE <player who used the hole> <player who created the hole> <player owning the wall the hole was made into> ladderlog_write_wait_for_external_script_help Write to ladderlog: WAIT_FOR_EXTERNAL_SCRIPT (see also: WAIT_FOR_EXTERNAL_SCRIPT and WAIT_FOR_EXTERNAL_SCRIPT_TIMEOUT) ladderlog_game_time_interval_help If nonnegative, write a line with the current game time to the ladder log every n seconds. @@ -2536,6 +2539,7 @@ player_topologypolice Order from Topology Police: \1 team_shuffle \1 gets shuffled from rank \2 to \3. +team_preshuffle \1 will join at rank \2. team_shuffle_suppress Future shuffle messages from this player will be suppressed.\n player_noshuffleup You are not allowed to shuffle up.\n player_noshuffle Your shuffling wish has no effect.\n @@ -2744,6 +2748,10 @@ network_kill_spamkick You have been auto-kicked for spamming. voted_kill_kick You have been kicked by an angry mob of players; please stay away. network_kill_spectator You have been sitting in spectator mode for too long. +network_kill_unworthy The server is full; you have been removed to make room for potential players. Only come back if you really have to. +network_kill_unworthy_banreason The server is overloaded and new connections need to be throttled. Sorry for the inconvenience. +network_kill_unworthy_ban The server is full; you have been removed to make room for potential players. Only come back if you really have to, and wait \1 minutes. +network_kill_unworthy_log Kicking unworthy spectator \1 for \2 minutes.\n network_ban_kph Kicks per hour of IP \1 are now \2.\n network_ban Players from IP \1 are banned for \2 minutes. Reason: \3\n @@ -2803,6 +2811,8 @@ network_master_status Receiving server \1...\n network_master_finish Received \1 servers.\n network_master_start Host Game +network_master_pollanswer Answering ping poll from \1.\n +network_master_pollanswer_last Answering ping poll from \1. This is the last logged poll.\n network_master_host_inet_help This will start a network game on your computer and announce it on the internet. network_master_host_lan_help This will start a network game that is only visible from your LAN. @@ -3024,6 +3034,7 @@ access_level_chat_help Minimal access level for chatting. access_level_shout_help Minimal access level for shouting. access_level_ips_help Minimal access level you need for seeing IPs of other players in the /players command. +access_level_autokick_immunity_help Minimal access level to be protected against autokicks. access_level_nver_help Minimal access level you need for seeing Network versions/strings from other players in /players. access_level_spy_console_help Minimal access level you need for seeing console input from other (in-game) admins. access_level_spy_team_help Minimal access level you need for seeing /team messages as a spectator. @@ -3101,7 +3112,7 @@ login_error_noremote Authentication via Global ID not available on this server. login_error_blacklist Authority \1 is on this server's blacklist. login_error_whitelist Authority \1 is not on this server's whitelist. -login_error_pharm Server adress mismatch, \1 (sent by client) != \2 (our address). Pharming suspected. If you are connecting from the LAN and get this error, either set "TRUST_LAN" on the server (only if your LAN can be fully trusted, of course) or use "SERVER_IP" to make the local IP known to the server. +login_error_pharm Server adress mismatch, \1 (sent by client) != \2 (our address). Pharming suspected. If you are connecting from the LAN and get this error, set "TRUST_LAN" on the server (only if your LAN can be fully trusted, of course). If you are connecting from the internet, use "SERVER_DNS" to make its own real IP known to the server. login_error_pharm_cheap Server address trouble. Client sent unspecific server address. login_error_methodmismatch The local method used for auhtentication has been modified since your password was set. In the server's config files, put all commands that define authentication methods before all local password definitions. login_error_nomethod No authentication method could be found. Your client supports \1, this server supports \2, and the authentication server supports \3. Modified: armagetronad/trunk/armagetronad/src/engine/eChat.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/engine/eChat.cpp 2011-01-01 18:14:12 UTC (rev 9496) @@ -554,6 +554,19 @@ numberShuffles_ = 0; } +tString eShuffleSpamTester::ShuffleMessage( ePlayerNetID *player, int position ) const +{ + tString message; + message << tOutput( "$team_preshuffle", player->GetColoredName() + "0xRESETT", position ); + + if ( ShouldDisplaySuppressMessage() ) + message << " " << tOutput( "$team_shuffle_suppress" ); + else + message << '\n'; + + return message; +} + tString eShuffleSpamTester::ShuffleMessage( ePlayerNetID *player, int fromPosition, int toPosition ) const { tString message; Modified: armagetronad/trunk/armagetronad/src/engine/eChat.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eChat.h 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/engine/eChat.h 2011-01-01 18:14:12 UTC (rev 9496) @@ -295,7 +295,8 @@ bool ShouldAnnounce() const; void Reset(); void Shuffle(); - tString ShuffleMessage( ePlayerNetID *player, int fromPosition, int toPosition ) const; + tString ShuffleMessage( ePlayerNetID *player, int position ) const; //!< print message for player wishing to pre-join shuffle to position + tString ShuffleMessage( ePlayerNetID *player, int fromPosition, int toPosition ) const; //!< print message for player shuffling in-team protected: bool ShouldDisplaySuppressMessage() const; int numberShuffles_; Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.cpp 2011-01-01 18:14:12 UTC (rev 9496) @@ -3466,12 +3466,19 @@ // /teamshuffle +/-<dist>: shuffles you dist to the outside/inside // con << msgRest << "\n"; int IDNow = p->TeamListID(); + int len = eTeam::maxPlayers; if (!p->CurrentTeam()) { - sn_ConsoleOut(tOutput("$player_not_on_team"), p->Owner()); - return; + // players start on the outside by default + if( IDNow < 0 ) + { + IDNow = len-1; + } } - int len = p->CurrentTeam()->NumPlayers(); + else + { + len = p->CurrentTeam()->NumPlayers(); + } // but read the target position as additional parameter int IDWish = len-1; // default to shuffle to the outside @@ -3508,7 +3515,7 @@ if (IDWish >= len) IDWish = len-1; - if(IDWish < IDNow) + if( !p->CurrentTeam() || IDWish < IDNow ) { #ifndef KRAWALL_SERVER if ( !se_allowShuffleUp ) @@ -3531,10 +3538,31 @@ return; } - p->CurrentTeam()->Shuffle( IDNow, IDWish ); - se_ListTeam( p, p->CurrentTeam() ); + if( p->CurrentTeam() ) + { + // really shuffle + p->CurrentTeam()->Shuffle( IDNow, IDWish ); + se_ListTeam( p, p->CurrentTeam() ); + } + else + { + // just store the shuffle wish for later + p->SetShuffleWish( IDWish ); + } } +void ePlayerNetID::SetShuffleWish( int pos ) +{ + tASSERT( !CurrentTeam() ); + + if ( shuffleSpam.ShouldAnnounce() ) + { + sn_ConsoleOut( shuffleSpam.ShuffleMessage( this, pos+1 ) ); + } + + teamListID = pos; +} + class eHelpTopic { tString m_shortdesc, m_text; @@ -4576,6 +4604,202 @@ static int se_maxPlayersPerIP = 4; static tSettingItem<int> se_maxPlayersPerIPConf( "MAX_PLAYERS_SAME_IP", se_maxPlayersPerIP ); +// should unworthy spectators be kicked if the server is full? +static bool se_kickUnworthy=false; +tSettingItem< bool > se_kickUnworthyConf( "KEEP_PLAYER_SLOT", se_kickUnworthy ); + +// access level needed to grant immunity against all forms of idle kicks +static tAccessLevel se_autokickImmunity = tAccessLevel_TeamLeader; +static tSettingItem< tAccessLevel > se_autokickImmunityConf( "ACCESS_LEVEL_AUTOKICK_IMMUNITY", se_autokickImmunity ); + +// compares the worth of two players. Returns 1 if the first is better, -1 if the second is better, 0 if they are equal. +static int se_comparePlayerWorth( ePlayerNetID * a, ePlayerNetID * b, int nullPointerSign=1 ) +{ + // check for NULL pointers + if( !a ) + { + if ( !b ) + { + return 0; + } + else + { + return -nullPointerSign; + } + } + else + { + if ( !b ) + { + return nullPointerSign; + } + } + + // potential players > spectators + if ( !se_GetManagedTeam( a ) ) + { + if( se_GetManagedTeam( b ) ) + { + return -1; + } + } + else + { + if( !se_GetManagedTeam( b ) ) + { + return 1; + } + } + + // actual players > potential players + if ( !a->CurrentTeam() ) + { + if( b->CurrentTeam() ) + { + return -1; + } + } + else + { + if( !b->CurrentTeam() ) + { + return 1; + } + } + + // access level counts +#ifdef KRAWALL_SERVER + if( a->GetAccessLevel() < b->GetAccessLevel() ) + { + return 1; + } + else if( a->GetAccessLevel() > b->GetAccessLevel() ) + { + return -1; + } +#endif + + // players with login process > players without + if( !nAuthentication::LoginInProcess( a ) ) + { + if( nAuthentication::LoginInProcess( b ) ) + { + return -1; + } + } + else + { + if( !nAuthentication::LoginInProcess( b ) ) + { + return 1; + } + } + + // players online for shorter times are more worthy + if( a->GetTimeCreated() < b->GetTimeCreated() ) + { + return 1; + } + else if( a->GetTimeCreated() > b->GetTimeCreated() ) + { + return 1; + } + + return 0; +} + +// the user that last logged in; spare him. +static int se_kickUnworthySpare=-1; + +// clear out one unworthy spectator +static void se_KickUnworthy() +{ + int userToSpare=se_kickUnworthySpare; + + static REAL banForMinutes = 0; + static double roundBegin = -1; + double lastRoundBegin = roundBegin; + + // each player joining increases the ban, rounds passing decrease it + if( userToSpare >= 0 ) + { + banForMinutes += .05f; + } + else + { + banForMinutes *= 0.875; + roundBegin = tSysTimeFloat(); + } + + // nothing to do? + if( !se_kickUnworthy || sn_NumUsers() < sn_MaxUsers() ) + { + return; + } + + // find the most worthy player for each client + ePlayerNetID * mostWorthy[MAXCLIENTS+2]; + for( int i = MAXCLIENTS+1; i >= 0; --i ) + { + mostWorthy[i] = NULL; + } + for( int i = se_PlayerNetIDs.Len() - 1; i >=0; --i ) + { + ePlayerNetID * p = se_PlayerNetIDs(i); + ePlayerNetID * & rival = mostWorthy[p->Owner()]; + if( se_comparePlayerWorth( p, rival ) > 0 ) + { + rival = p; + } + } + + // find the most unworthy client + int mostUnworthyUser = 0; + + for( int i = MAXCLIENTS; i >= 1; --i ) + { + // NULL players are actually more worthy here now + ePlayerNetID * player = mostWorthy[i]; + if( ( i != userToSpare && sn_Connections[i].socket ) && + // don't kick players with immune access level + !( player && se_autokickImmunity >= player->GetAccessLevel() ) && + // give players one round to sign in + !( player && nAuthentication::LoginInProcess(player) && player->GetTimeCreated() >= lastRoundBegin ) && + ( !mostUnworthyUser || se_comparePlayerWorth( mostWorthy[mostUnworthyUser], mostWorthy[i], -1 ) > 0 ) ) + { + mostUnworthyUser = i; + } + } + + // take care not to auto-kick someone with a high access level + if( mostUnworthyUser ) + { + tString name; + ePlayerNetID * player = mostWorthy[mostUnworthyUser]; + if( player ) + { + mostWorthy[mostUnworthyUser]->PrintName( name ); + } + else + { + name = "?"; + } + + con << tOutput( "$network_kill_unworthy_log", name, banForMinutes ); + if( banForMinutes > 1 ) + { + nMachine::GetMachine( mostUnworthyUser ).Ban( banForMinutes*60, + tString( + tOutput( "$network_kill_unworthy_banreason" ) ) ); + sn_DisconnectUser( mostUnworthyUser, tOutput( "$network_kill_unworthy_ban", banForMinutes ) ); + } + else + { + sn_DisconnectUser( mostUnworthyUser, tOutput( "$network_kill_unworthy" ) ); + } + } +} + // array of players in legacy spectator mode: they have been // deleted by their clients, but no new player has popped up for them yet static tJUST_CONTROLLED_PTR< ePlayerNetID > se_legacySpectators[MAXCLIENTS+2]; @@ -4593,12 +4817,19 @@ se_legacySpectators[ owner ] = NULL; } -// callback clearing the legacy spectator when a client enters or leaves -static void se_LegacySpectatorClearer() +static void se_PlayerLoginLogoutCallback() { + // clear the legacy spectator when a client enters or leaves se_ClearLegacySpectator( nCallbackLoginLogout::User() ); + + // always keep one slot free + if( nCallbackLoginLogout::Login() ) + { + se_kickUnworthySpare=nCallbackLoginLogout::User(); + st_ToDo( se_KickUnworthy ); + } } -static nCallbackLoginLogout se_legacySpectatorClearer( se_LegacySpectatorClearer ); +static nCallbackLoginLogout se_playerLoginLogoutCallback( se_PlayerLoginLogoutCallback ); @@ -6698,6 +6929,13 @@ } } +// sorted storage for pre-join shuffle commands +typedef std::multimap< int, tJUST_CONTROLLED_PTR< ePlayerNetID > > +ePrejoinShuffleMap; +typedef std::pair< int, tJUST_CONTROLLED_PTR< ePlayerNetID > > +ePrejoinPair; +static ePrejoinShuffleMap se_prejoinShuffles; + // Update the netPlayer_id list void ePlayerNetID::Update(){ #ifdef KRAWALL_SERVER @@ -6998,6 +7236,35 @@ eTeam::teams(i)->UpdateProperties(); } + // execute all prejoin shuffles + for( ePrejoinShuffleMap::iterator i = se_prejoinShuffles.begin(); i!= se_prejoinShuffles.end(); ++i ) + { + ePlayerNetID * player = (*i).second; + if( player && player->IsActive() ) + { + eTeam * team = player->CurrentTeam(); + if( team ) + { + int wish = (*i).first; + + // sanity check + if( wish < 0 ) + { + wish = 0; + } + if( wish >= team->NumPlayers() ) + { + wish = team->NumPlayers()-1; + } + + // delegate shuffling work + team->Shuffle( player->TeamListID(), wish ); + } + } + } + se_prejoinShuffles.clear(); + + // get rid of deleted netobjects nNetObject::ClearAllDeleted(); } @@ -7182,7 +7449,7 @@ } // kick idle players (Removes player from list, this must be the last operation of the loop) - if ( se_idleKickTime > 0 && se_idleKickTime < p->LastActivity() - roundTime ) + if ( se_idleKickTime > 0 && se_idleKickTime < p->LastActivity() - roundTime && se_autokickImmunity < p->GetAccessLevel() ) { sn_KickUser( p->Owner(), tOutput( "$network_kill_idle" ) ); @@ -7192,6 +7459,10 @@ } } } + + // kick unworthy spectators (in case MAX_CLIENTS has changed) + se_kickUnworthySpare = -1; + se_KickUnworthy(); } void ePlayerNetID::ThrowOutDisconnected() @@ -7536,9 +7807,20 @@ eTeam *oldTeam = currentTeam; if ( nextTeam ) + { + if( !oldTeam && teamListID >= 0 ) + { + // clear current team list ID, it was just a shuffle wish + // but store the shuffle wish first + se_prejoinShuffles.insert( ePrejoinPair( teamListID, this ) ); + teamListID = -1; + } nextTeam->AddPlayer ( this ); + } else if ( oldTeam ) + { oldTeam->RemovePlayer( this ); + } if( nCLIENT != sn_GetNetState() && GetRefcount() > 0 ) { Modified: armagetronad/trunk/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/engine/ePlayer.h 2011-01-01 18:14:12 UTC (rev 9496) @@ -273,6 +273,7 @@ eTeam* NextTeam() const { return nextTeam; } // return the team I will be next round eTeam* CurrentTeam() const { return currentTeam; } // return the team I am in int TeamListID() const { return teamListID; } // return my position in the team + void SetShuffleWish( int pos ); //!< sets a desired team position eTeam* FindDefaultTeam(); // find a good default team for us void SetDefaultTeam(); // register me in a good default team void SetTeamForce(eTeam* team ); // register me in the given team without checks Modified: armagetronad/trunk/armagetronad/src/engine/eTeam.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTeam.cpp 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/engine/eTeam.cpp 2011-01-01 18:14:12 UTC (rev 9496) @@ -987,6 +987,24 @@ } } +static eLadderLogWriter se_positionWriter( "POSITIONS", true ); +void eTeam::WriteLaunchPositions() +{ + for ( int i = teams.Len() - 1; i >= 0; --i ) + { + eTeam *team = teams(i); + + // AI teams are boring. + if ( !team->IsHuman() ) + continue; + + se_positionWriter << ePlayerNetID::FilterName( team->Name() ); + for ( int j = 0; j < team->players.Len(); j++ ) + se_positionWriter << team->players( j )->GetLogName(); + se_positionWriter.write(); + } +} + // inquire or set the ability to use a color as a team name bool eTeam::NameTeamAfterColor ( bool wish ) { Modified: armagetronad/trunk/armagetronad/src/engine/eTeam.h =================================================================== --- armagetronad/trunk/armagetronad/src/engine/eTeam.h 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/engine/eTeam.h 2011-01-01 18:14:12 UTC (rev 9496) @@ -97,6 +97,7 @@ static void Enforce( int minTeams, int maxTeams, int maxImbalance ); static void WritePlayers( eLadderLogWriter & writer, const eTeam *team ); + static void WriteLaunchPositions(); // Logs player positions to ladderlog.txt public: // public methods static void EnforceConstraints(); // make sure the limits on team number and such are met Modified: armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp =================================================================== --- armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/network/nAuthentication.cpp 2011-01-01 18:14:12 UTC (rev 9496) @@ -1154,3 +1154,21 @@ st_DoToDo(); } +//! returns whether a login is currently in process for the given user ID +bool nAuthentication::LoginInProcess( nNetObject * user ) +{ +#ifdef KRAWALL_SERVER + if( !user ) + { + return false; + } + + // fetch the process + nLoginProcess * process = nLoginProcess::Find( user->Owner() ); + + // compare the user + return ( process && user == process->user ); +#else + return false; +#endif +} Modified: armagetronad/trunk/armagetronad/src/network/nAuthentication.h =================================================================== --- armagetronad/trunk/armagetronad/src/network/nAuthentication.h 2011-01-01 15:36:57 UTC (rev 9495) +++ armagetronad/trunk/armagetronad/src/network/nAuthentication.h 2011-01-01 18:14:12 UTC (rev 9496) @@ -58,6 +58,9 @@ //! call when you have some time for lengthy authentication queries to servers static void OnBreak(); + + //! returns whether a login is currently in process for the given user + ... [truncated message content] |