From: <wrt...@us...> - 2007-04-23 17:52:53
|
Revision: 7210 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7210&view=rev Author: wrtlprnft Date: 2007-04-23 10:50:46 -0700 (Mon, 23 Apr 2007) Log Message: ----------- - Added ALLOW_TEAM_CHANGES setting to lock the teams for tournaments and the like - Added (DIS)?ALLOW_TEAM_CHANGES_PLAYER command to specifically (dis)allow a player from switching teams - Localized the error message you get if you say /teamleave on a server with AUTO_TEAM 0 Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2007-04-22 15:04:00 UTC (rev 7209) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2007-04-23 17:50:46 UTC (rev 7210) @@ -27,6 +27,8 @@ doublebinders get while not punishing players who press both left and right at the same time. - LAG_O_METER(TRESHOLD|BLEND|USE_OLD): Configure the minimal size of the Lag-O-Meter, its color and whether to scrap it all and stick with the old one. +- ALLOW_TEAM_CHANGE: if set to 0 players won't be able to join a team, create a new team or change to another team. +- ALLOW_TEAM_CHANGE_PLAYER/DISALLOW_TEAM_CHANGE_PLAYER: allow/disallow specific players to switch teams Featurelets: - The client now can hadle network traffic while it is waiting for the graphics Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-04-22 15:04:00 UTC (rev 7209) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-04-23 17:50:46 UTC (rev 7210) @@ -358,6 +358,7 @@ spam_maxlen_help Maximal length of chat message. spam_autokick_help Spam score that causes you to get kicked instantly. silence_all_help If set to 1, all chat messages will be omitted. +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 kick messages spam_chat You chatted too much. @@ -790,6 +791,8 @@ kill_help Kill a specific player (as warning before a kick) silence_help Silence a specific player so he can't use public chat any more (/msg and /team still work) voice_help Reverse of SILENCE +allow_team_change_player_help Allow a specific player to change teams even if ALLOW_TEAM_CHANGE is disabled +disallow_team_change_player_help Reverse of ALLOW_TEAM_CHANGE_PLAYER kick_help Kicks the specified player from the server. 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. @@ -2043,6 +2046,8 @@ #******************************************** #******************************************** +player_teamleave_disallowed Sorry, does not work with automatic team assignment.\n +player_teamchanges_disallowed Sorry, the administrator disabled team changes.\n 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 @@ -2050,6 +2055,8 @@ spam_protection_silenced SPAM PROTECTION: you have been silenced by the server administrator.\n player_silenced \10xff7777 has been silenced.\n player_voiced \10x77ff77 has been given his voice back.\n +player_allowed_teamchange \10x77ff77 has been allowed to change his team.\n +player_disallowed_teamchange \10xff7777 cannot change teams anymore.\n vote_spam_protection VOTE SPAM PROTECTION: you are disallowed from issuing votes for the next \1 seconds.\n chat_title_text Say: player_entered_game \1 0x7fff7fentered the game.\n Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-04-22 15:04:00 UTC (rev 7209) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-04-23 17:50:46 UTC (rev 7210) @@ -62,6 +62,9 @@ static bool se_assignTeamAutomatically = true; static tSettingItem< bool > se_assignTeamAutomaticallyConf( "AUTO_TEAM", se_assignTeamAutomatically ); +static bool se_allowTeamChanges = true; +static tSettingItem< bool > se_allowTeamChangesConf( "ALLOW_TEAM_CHANGE", se_allowTeamChanges ); + static tReferenceHolder< ePlayerNetID > se_PlayerReferences; class PasswordStorage @@ -1345,9 +1348,13 @@ else if (command == "/teamleave") { if ( se_assignTeamAutomatically ) { - sn_ConsoleOut("Sorry, does not work with automatic team assignment.\n", p->Owner() ); + sn_ConsoleOut(tOutput("$player_teamleave_disallowed"), p->Owner() ); return; } + if(!p->TeamChangeAllowed()) { + sn_ConsoleOut(tOutput("$player_disallowed_teamchange"), p->Owner() ); + return; + } eTeam * leftTeam = p->NextTeam(); if ( leftTeam ) @@ -1958,8 +1965,7 @@ static nSpamProtectionSettings se_chatSpamSettings( 1.0f, "SPAM_PROTECTION_CHAT", tOutput("$spam_protection") ); -ePlayerNetID::ePlayerNetID(int p):nNetObject(),listID(-1), teamListID(-1) - ,registeredMachine_(0), pID(p),chatSpam_( se_chatSpamSettings ) +ePlayerNetID::ePlayerNetID(int p):nNetObject(),listID(-1), teamListID(-1), allowTeamChange_(false), registeredMachine_(0), pID(p),chatSpam_( se_chatSpamSettings ) { favoriteNumberOfPlayersPerTeam = 1; @@ -2024,7 +2030,7 @@ ePlayerNetID::ePlayerNetID(nMessage &m):nNetObject(m),listID(-1), teamListID(-1) - , registeredMachine_(0), chatSpam_( se_chatSpamSettings ) + , allowTeamChange_(false), registeredMachine_(0), chatSpam_( se_chatSpamSettings ) { greeted =false; chatting_ =false; @@ -3207,7 +3213,7 @@ ePlayerNetID* player = se_PlayerNetIDs(i); // only assign new team if it is possible - if ( player->NextTeam() != player->CurrentTeam() && + if ( player->TeamChangeAllowed() && player->NextTeam() != player->CurrentTeam() && ( !player->NextTeam() || player->NextTeam()->PlayerMayJoin( player ) ) ) { @@ -3225,7 +3231,7 @@ ePlayerNetID* player = se_PlayerNetIDs(i); // 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() ) + if ( player->TeamChangeAllowed() && player->NextTeam() && !player->CurrentTeam() ) { eTeam * wish = player->NextTeam(); bool assignBack = se_assignTeamAutomatically; @@ -3253,6 +3259,12 @@ // announce unfullfilled wishes if ( player->NextTeam() != player->CurrentTeam() && player->NextTeam() ) { + //if the player can't change teams delete the team wish + if(!player->TeamChangeAllowed()) { + player->SetTeam( player->CurrentTeam() ); + continue; + } + tOutput message( "$player_joins_team_wish", player->GetName(), player->NextTeam()->Name() ); @@ -3635,11 +3647,15 @@ // * team management * // ******************* +bool ePlayerNetID::TeamChangeAllowed() const { + return se_allowTeamChanges || allowTeamChange_; +} + // put a new player into a default team void ePlayerNetID::FindDefaultTeam( ) { // only the server should do this, the client does not have the full information on how to do do it right. - if ( sn_GetNetState() == nCLIENT || !se_assignTeamAutomatically || spectating_ ) + if ( sn_GetNetState() == nCLIENT || !se_assignTeamAutomatically || spectating_ || !TeamChangeAllowed() ) return; static bool recursion = false; @@ -3770,6 +3786,11 @@ // check if the team change is legal tASSERT ( nCLIENT != sn_GetNetState() ); + if(!TeamChangeAllowed()) { + sn_ConsoleOut(tOutput("$player_teamchanges_disallowed")); + return; + } + if ( !eTeam::NewTeamAllowed() || ( bool( currentTeam ) && ( currentTeam->NumHumanPlayers() == 1 ) ) || IsSpectating() ) @@ -3865,6 +3886,11 @@ m >> newTeam; + if(!TeamChangeAllowed()) { + sn_ConsoleOut( tOutput( "$player_teamchanges_disallowed" ), Owner() ); + break; + } + // annihilate team if it no longer is in the game if ( bool(newTeam) && newTeam->TeamID() < 0 ) newTeam = 0; @@ -4065,7 +4091,7 @@ static ePlayerNetID * ReadPlayer( std::istream & s, char const * error ) { - // read name of player to be killed + // read name of player to be returned tString name; name.ReadLine( s ); int num = name.toInt(); @@ -4074,7 +4100,7 @@ { ePlayerNetID* p = se_PlayerNetIDs(i); - // check whether it's p who should be killed, + // check whether it's p who should be returned, // either by comparing the owner or the name. bool itsHim = false; if ( num > 0 ) @@ -4738,4 +4764,19 @@ } } - +static void se_allowTeamChangesPlayer(bool allow, std::istream &s) { + ePlayerNetID * p = ReadPlayer( s, "$network_kick_notfound" ); + if ( p ) + { + sn_ConsoleOut( tOutput( (allow ? "$player_allowed_teamchange" : "$player_disallowed_teamchange"), p->GetName() ) ); + p->TeamChangeAllowed( allow ); + } +} +static void se_allowTeamChangesPlayer(std::istream &s) { + se_allowTeamChangesPlayer(true, s); +} +static void se_disallowTeamChangesPlayer(std::istream &s) { + se_allowTeamChangesPlayer(false, s); +} +static tConfItemFunc se_allowTeamChangesPlayerConf("ALLOW_TEAM_CHANGE_PLAYER", &se_allowTeamChangesPlayer); +static tConfItemFunc se_disallowTeamChangesPlayerConf("DISALLOW_TEAM_CHANGE_PLAYER", &se_disallowTeamChangesPlayer); Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h 2007-04-22 15:04:00 UTC (rev 7209) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h 2007-04-23 17:50:46 UTC (rev 7210) @@ -144,6 +144,7 @@ bool spectating_; //!< are we currently spectating? Spectators don't get assigned to teams. bool chatting_; //!< are we currently chatting? int chatFlags_; //!< different types of reasons for beeing chatting + bool allowTeamChange_; //!< allow team changes even if ALLOW_TEAM_CHANGE is disabled? //For improved remoteadmin bool loggedIn; //Is this user logged in? @@ -193,6 +194,8 @@ bool IsSpectating() const { return spectating_; } // team management + bool TeamChangeAllowed() const; //!< is this player allowed to change teams? + void TeamChangeAllowed(bool allowed) {allowTeamChange_ = allowed;} //!< set if this player should always be allowed to change teams 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 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2007-05-18 21:30:27
|
Revision: 7225 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7225&view=rev Author: wrtlprnft Date: 2007-05-18 14:30:24 -0700 (Fri, 18 May 2007) Log Message: ----------- - Changed meaning of SILENCE_ALL on the server to work the same way as it does on the client. - Added ENABLE_CHAT to both server and client that does pretty much what its name suggests. See http://forums.armagetronad.net/viewtopic.php?p=172531#172531 Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/config/settings.cfg armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2007-05-11 16:00:32 UTC (rev 7224) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2007-05-18 21:30:24 UTC (rev 7225) @@ -3,7 +3,8 @@ New settings and commands: - If all clients support it, PING_CHARITY_MIN/MAX can be used to constrain ping charity. - SILENCE and VOICE allow to control chat of annoying players. -- SILENCE_ALL can be used on the server to inhibit all cross-team communication. +- SILENCE_ALL can be used on the server to inhibit all cross-team communication unless specifically voiced. +- ENABLE_CHAT can be set to 0 to disable all chat. If it is set on the server it only disables public chat and logged in players can still speak. - LAG_*: controls game level lag compensation. - FILTER_NAME_MIDDLE: collapses multiple whitespaces to one in player names. - FORTRESS_CONQEST_TIMEOUT: if an enemy contact with a zone happens longer ago than Modified: armagetronad/branches/0.2.8/armagetronad/config/settings.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/settings.cfg 2007-05-11 16:00:32 UTC (rev 7224) +++ armagetronad/branches/0.2.8/armagetronad/config/settings.cfg 2007-05-18 21:30:24 UTC (rev 7225) @@ -466,7 +466,8 @@ 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 all chat messages? +SILENCE_ALL 0 # silence new players by default? +ENABLE_CHAT 1 # allow public messages? # ladder constants Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-05-11 16:00:32 UTC (rev 7224) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-05-18 21:30:24 UTC (rev 7225) @@ -357,7 +357,8 @@ spam_penalty_help Number of seconds to silence a spammer. spam_maxlen_help Maximal length of chat message. spam_autokick_help Spam score that causes you to get kicked instantly. -silence_all_help If set to 1, all chat messages will be omitted. +silence_all_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 # spam kick messages @@ -2053,6 +2054,7 @@ spam_protection SPAM PROTECTION: you are silenced for the next \1 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 player_silenced \10xff7777 has been silenced.\n player_voiced \10x77ff77 has been given his voice back.\n player_allowed_teamchange \10x77ff77 has been allowed to change his team.\n Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-05-11 16:00:32 UTC (rev 7224) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-05-18 21:30:24 UTC (rev 7225) @@ -65,6 +65,9 @@ static bool se_allowTeamChanges = true; static tSettingItem< bool > se_allowTeamChangesConf( "ALLOW_TEAM_CHANGE", se_allowTeamChanges ); +static bool se_enableChat = true; //flag indicating whether chat should be allowed at all (logged in players can always chat) +static tSettingItem<bool> se_enaChat("ENABLE_CHAT", se_enableChat); + static tReferenceHolder< ePlayerNetID > se_PlayerReferences; class PasswordStorage @@ -732,7 +735,7 @@ } #endif - if ( p && !p->IsSilenced() ) + if ( p && !p->IsSilenced() && se_enableChat ) { //tColoredString say2( say ); //say2.RemoveHex(); @@ -747,7 +750,7 @@ static void se_DisplayChatLocallyClient( ePlayerNetID* p, const tString& message ) { - if ( p && !p->IsSilenced() ) + if ( p && !p->IsSilenced() && se_enableChat ) { con << message << "\n"; } @@ -1239,15 +1242,16 @@ static tSettingItem<bool> se_allowShuffleUpConf("TEAM_ALLOW_SHUFFLE_UP", se_allowShuffleUp); -static bool se_silenceAll = false; // flag indicating whether everyone should be silenced +static bool se_silenceAll = false; // flag indicating whether new players should be silenced static tSettingItem<bool> se_silAll("SILENCE_ALL", se_silenceAll); + // checks whether a player is silenced, giving him appropriate warnings if he is bool IsSilencedWithWarning( ePlayerNetID const * p ) { - if ( se_silenceAll && ! p->isLoggedIn() ) + if ( !se_enableChat && ! p->isLoggedIn() ) { // everyone except the admins is silenced sn_ConsoleOut( tOutput( "$spam_protection_silenceall" ), p->Owner() ); @@ -1255,8 +1259,13 @@ } else if ( p->IsSilenced() ) { - // player is specially silenced - sn_ConsoleOut( tOutput( "$spam_protection_silenced" ), p->Owner() ); + if(se_silenceAll) { + // player is silenced, but all players are silenced by default + sn_ConsoleOut( tOutput( "$spam_protection_silenced_default" ), p->Owner() ); + } else { + // player is specially silenced + sn_ConsoleOut( tOutput( "$spam_protection_silenced" ), p->Owner() ); + } return true; } @@ -2121,7 +2130,7 @@ { this->CreateVoter(); - this->silenced_ = ( sn_GetNetState() != nSERVER ) && se_silenceAll; + this->silenced_ = se_silenceAll; // register with machine and kick user if too many players are present if ( Owner() != 0 && sn_GetNetState() == nSERVER ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-05-27 11:05:22
|
Revision: 7273 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7273&view=rev Author: z-man Date: 2007-05-27 04:04:57 -0700 (Sun, 27 May 2007) Log Message: ----------- Removed obsolete IMGLib reference in error message. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/configure.ac Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8623 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8650 Modified: armagetronad/branches/0.2.8/armagetronad/configure.ac =================================================================== --- armagetronad/branches/0.2.8/armagetronad/configure.ac 2007-05-27 09:36:47 UTC (rev 7272) +++ armagetronad/branches/0.2.8/armagetronad/configure.ac 2007-05-27 11:04:57 UTC (rev 7273) @@ -658,7 +658,7 @@ AC_CHECK_LIB(SDL_image, IMG_Load,, dnl AC_CHECK_LIB(IMG, main,, -AC_MSG_ERROR([You need libIMG/SDL_image to compile Armagetron.] +AC_MSG_ERROR([You need the library SDL_image to compile Armagetron.] dnl ) )) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-05-27 11:05:46
|
Revision: 7274 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7274&view=rev Author: z-man Date: 2007-05-27 04:05:42 -0700 (Sun, 27 May 2007) Log Message: ----------- New setting to enforce this ominous "open" play style by making all grinds non-sealing: CYCLE_RUBBER_MINDISTANCE_GAP* Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/config/settings.cfg armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8650 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:8651 Modified: armagetronad/branches/0.2.8/armagetronad/config/settings.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/settings.cfg 2007-05-27 11:04:57 UTC (rev 7273) +++ armagetronad/branches/0.2.8/armagetronad/config/settings.cfg 2007-05-27 11:05:42 UTC (rev 7274) @@ -150,6 +150,12 @@ CYCLE_RUBBER_WALL_SHRINK 0 # With finite length trails, the used rubber is multiplied with this value and subtracted from the wall length. A value of 1 lets the trail receed at constant speed. All values are supported, but negative values may degrade performance and cause false positives from the topology police if that is enabled. +# "open" vs "closed" play. To enforce "open" play, set the next value to something positive, +# values between .5 and .9 make most sense. If you choose to do so, increase CYCLE_RUBBER_MINDISTANCE +# for optimal effect; with normal speed settings, keep it between .2 and 2. +CYCLE_RUBBER_MINDISTANCE_GAP 0 # 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. +CYCLE_RUBBER_MINDISTANCE_GAP_SIDE .5 # Gap detection only sees gaps that the cycle may reach in no less than this many seconds. + # braking CYCLE_BRAKE_REFILL .1 # refill rate of brake reservoir CYCLE_BRAKE_DEPLETE 1.0 # depletion rate of brake reservoir ( set to 0 to reenable pre 0.2.5 behaviour of infinite brakes ) Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-05-27 11:04:57 UTC (rev 7273) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-05-27 11:05:42 UTC (rev 7274) @@ -96,6 +96,8 @@ cycle_rubber_timebased_help Rubber usage is based on distance travelled if this is 0 (default) and the time passed if this is 1. Intermediate values and values out of these bounds are supported as well. cycle_rubber_speed_help Logarithmic speed of wall approximation when rubber is in effect (every second, you get closer to the wall by a factor of ~0.4^{this value}) cycle_rubber_mindistance_help The minimal distance rubber code keeps you from the wall in front of you +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. +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_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. Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp 2007-05-27 11:04:57 UTC (rev 7273) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp 2007-05-27 11:05:42 UTC (rev 7274) @@ -92,7 +92,6 @@ } // ***************************************************************** - // version feature indicating that proper verlet integration should be used static nVersionFeature sg_verletIntegration( 7 ); @@ -1529,6 +1528,46 @@ } } +static REAL sg_Gap( gSensor const & front, gSensor const & side, eCoord const & dir, REAL norm, REAL def, REAL & tolerance ) +{ + if ( side.ehit && side.ehit->Other() ) + { + // determine the adistance of the two endpoints of the side edge + // to the wall in front of us + REAL gap1 = ( front.ehit->Vec()*( *side.ehit->Point() - *front.ehit->Point() ) )/norm; + REAL gap2 = ( front.ehit->Vec()*( *side.ehit->Other()->Point() - *front.ehit->Point() ) )/norm; + + // correct for orientation using the current driving direction + REAL sign = (dir * front.ehit->Vec())/norm; + if ( sign != 0 ) + { + sign = 1/sign; + gap1 *= sign; + gap2 *= sign; + } + + // if both values are positive, update the cache with the smaller one + tolerance = ( fabs(gap1) + fabs(gap2) ) * EPS * 10; + REAL minGap = gap1 < gap2 ? gap1 : gap2; + + return minGap; + } + else + { + // return something close to the front wall + tolerance = EPS * 10 * front.hit; + return def; + } +} + +static REAL sg_rubberCycleMinDistanceGap = .0f; // if != 0, CYCLE_RUBBER_MINDISTANCE effectively is never bigger than this value times the size of any detected gaps the cylce can squeeze through. +static REAL sg_rubberCycleMinDistanceGapSide = .5f; // Gaps may be detected only if the cycle is able to drive into them in this time + +static nSettingItemWatched<REAL> c_rcmdg("CYCLE_RUBBER_MINDISTANCE_GAP", + sg_rubberCycleMinDistanceGap, nConfItemVersionWatcher::Group_Bumpy, 14 ); +static nSettingItem<REAL> c_rcmdgs("CYCLE_RUBBER_MINDISTANCE_GAP_SIDE", + sg_rubberCycleMinDistanceGapSide); + // ******************************************************************************************* // * // * MaxSpaceAhead @@ -1655,9 +1694,114 @@ stopDistance = mindistance + sg_rubberCycleMinDistanceRatio * norm; ::sg_DropTempWall( this->Direction(), fr ); + + // enforce "open" play: every successive grind to a wall can get closer and closer. + + REAL rubberCycleMinDistanceGapDistance = sg_rubberCycleMinDistanceGapSide * Speed(); + + + if ( sg_rubberCycleMinDistanceGap > 0 ) + { + // determine the width of the gap previous grinders left + for ( int dir = -1; dir < 2; dir += 2 ) + { + // see if cached value is still good + REAL & gapCache = gap_[(dir+1)/2]; + bool & keepLooking = keepLookingForGap_[(dir+1)/2]; + + if ( gapCache > fr.hit && keepLooking ) + { + // determine next direction when turning into dir + int wn = windingNumberWrapped_; + Grid()->Turn(wn, dir); + eCoord dirCast = Grid()->GetDirection(wn); + + bool gapFound = false; + for ( int back = -1; back <= 2; ++back ) + { + // determine next direction when turning into dir + int wn2 = wn; + Grid()->Turn(wn2, back); + eCoord dirCast2 = Grid()->GetDirection(wn2); + + // send out a side sensor + gSensor side( const_cast< gCycleMovement * >( this ), + this->Position(), + ( dirCast + dirCast2 ) * .5 ); + + side.detect( rubberCycleMinDistanceGapDistance ); + + // only allow non-hit default search for the ray that goes straight to the side + if ( back != 0 && !side.ehit ) + continue; + + REAL tolerance; + REAL minGap = sg_Gap( fr, side, dirDrive, norm, fr.hit * .5, tolerance ); + + while ( minGap > tolerance ) + { + // last test: see if there really is a gap after that wall ends + gSensor side2( const_cast< gCycleMovement * >( this ), + this->Position() + this->Direction() * ( fr.hit - minGap * .9 ), + dirCast ); + side2.detect( rubberCycleMinDistanceGapDistance ); + + // if this sensor did not hit or hit farther than the first sensor, the gap is real + if ( fabs(side2.hit - side.hit) < tolerance ) + { + // true gap not found yet + REAL dumpTolerance; + REAL lastMinGap = minGap; + minGap = sg_Gap( fr, side2, dirDrive, norm, minGap * .5, dumpTolerance ); + // no improvement? give up. + if ( minGap >= lastMinGap * .9 ) + break; + } + else + { + gapFound = true; + + // true gap found, is it smaller than the last one? + if ( minGap < gapCache ) + { + gapCache = minGap; + + // bail out of outer loop + back = 100; + } + + // bail out of inner loop + break; + } + } + } + + // no gap to see anywhere + if ( ! gapFound ) + { + // don't waste time looking from now on + keepLooking = false; + + // if there was no gap detected so far, there is no gap. + if ( gapCache > 5E+19 ) + gapCache = 0; + } + } + } + + // fetch cache, ignoring zeroes + REAL gap = ( ( gap_[0] > 0 ? gap_[0] : 1E+30 ) < ( gap_[1] > 0 ? gap_[1] : 1E+30 ) ) ? gap_[0] : gap_[1]; + if ( gap > 0 ) + { + REAL minDistanceGap = gap * sg_rubberCycleMinDistanceGap; + if ( stopDistance > minDistanceGap ) + stopDistance = minDistanceGap; + } + } } sg_ArchiveReal( stopDistance, 9 ); + // revert to almost old rubber logic if old clients are connected. This may cause rips, but we don't care. if ( sg_rubberCycleLegacy && !sg_nonRippable.Supported() && stopDistance > .001 ) stopDistance = .001; @@ -2969,6 +3113,9 @@ verletSpeed_ *= sg_cycleTurnSpeedFactor; rubberMalus += sg_rubberCycleMalusTurn; + gap_[0] = gap_[1] = 1E+30; + keepLookingForGap_[0] = keepLookingForGap_[1] = true; + // turn winding numbers int wn = windingNumberWrapped_; Grid()->Turn(wn, dir); @@ -3745,6 +3892,9 @@ rubberMalus=0.0f; rubberSpeedFactor=1.0f; + gap_[0] = gap_[1] = 1E+30; + keepLookingForGap_[0] = keepLookingForGap_[1] = true; + alive_ = 1; z=.75; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h 2007-05-27 11:04:57 UTC (rev 7273) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.h 2007-05-27 11:05:42 UTC (rev 7274) @@ -223,7 +223,10 @@ int windingNumber_; //!< number that gets increased on every right turn and decreased on every left turn ( used by the AI ) int windingNumberWrapped_; //!< winding number wrapped to be used as an index to the axes code - eCoord lastTurnPos_; //! the location of the last turn + mutable REAL gap_[2]; //!< when driving towards a wall, this is set to the maximal distance we need to approach it so that when the cycle turns, it can squeeze through any gaps + mutable bool keepLookingForGap_[2]; //!< flags telling the system whether it is worthwile to look for further, smaller, gaps + + eCoord lastTurnPos_; //!< the location of the last turn REAL lastTurnTimeRight_; //!< the time of the last turn right REAL lastTurnTimeLeft_; //!< the time of the last turn left REAL lastTimeAlive_; //!< the time of the last timestep where we would not have been killed This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-11-11 23:32:08
|
Revision: 7371 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7371&view=rev Author: z-man Date: 2007-11-11 15:32:12 -0800 (Sun, 11 Nov 2007) Log Message: ----------- Added desktop size detection for SDL >= 1.2.10 and added desktop size as a choice for a screen resolution. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.h armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-11-11 23:06:22 UTC (rev 7370) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-11-11 23:32:12 UTC (rev 7371) @@ -715,7 +715,7 @@ custom_screen_height_help Custom screen size custom_screen_width_help Custom screen size custom_screen_aspect_help Custom screen aspect ratio ( pixel width/pixel height) -screen_size_desktop Desktop (requires restart) +screen_size_desktop Desktop armagetron_screenmode_help Screen resolution armagetron_last_screenmode_help Last screen resolution armagetron_windowsize_help Window size Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp 2007-11-11 23:06:22 UTC (rev 7370) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.cpp 2007-11-11 23:32:12 UTC (rev 7371) @@ -72,8 +72,8 @@ bool sr_ZTrick=false; bool sr_useDisplayLists=false; -static int width[]={320 ,320,400,512,640,800,1024 ,1280, 1280 ,1280 ,1600 ,1680 ,2048 ,800,320}; -static int height[]={200,240,300,384,480,600,768 ,800, 854 ,1024 ,1200 ,1050 ,1572 ,600,200}; +static int width[]={0,320 ,320,400,512,640,800,1024 ,1280, 1280 ,1280 ,1600 ,1680 ,2048 ,800,320}; +static int height[]={0,200,240,300,384,480,600,768 ,800, 854 ,1024 ,1200 ,1050 ,1572 ,600,200}; static REAL aspect[]={1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1 ,1,1 ,1}; int sr_screenWidth,sr_screenHeight; @@ -110,11 +110,21 @@ #endif #ifdef DEBUG -rScreenSettings currentScreensetting(ArmageTron_320_200); +rScreenSettings currentScreensetting(ArmageTron_640_480); #else -rScreenSettings currentScreensetting(ArmageTron_640_480, true); +rScreenSettings currentScreensetting(sr_DesktopScreensizeSupported() ? ArmageTron_Desktop : ArmageTron_800_600, true); #endif +bool sr_DesktopScreensizeSupported() +{ + SDL_version const & sdlVersion = *SDL_Linked_Version(); + + return + sdlVersion.major > 1 || sdlVersion.major == 1 && + ( sdlVersion.minor > 2 || sdlVersion.minor == 2 && + ( sdlVersion.patch >= 10 ) ); +} + static int failed_attempts = 0; static tConfItem<rResolution> screenres("ARMAGETRON_SCREENMODE",currentScreensetting.res.res); @@ -277,6 +287,12 @@ int rScreenSize::Compare( rScreenSize const & other ) const { + // desktop size dominates all + if ( width == 0 && other.width != 0 ) + return 1; + if ( other.width == 0 && width != 0 ) + return -1; + if ( width < other.width ) return -1; else if ( width > other.width ) @@ -315,6 +331,11 @@ rScreenSettings::rScreenSettings( rResolution r, bool fs, rColorDepth cd, bool sdl, bool ce ) :res(r), windowSize(r), fullscreen(fs), colorDepth(cd), zDepth( ArmageTron_ColorDepth_Desktop ), useSDL(sdl), checkErrors(true), aspect (1) { + // special case for desktop resolution: window size of 640x480 + if ( r == ArmageTron_Desktop ) + { + windowSize = rScreenSize( ArmageTron_640_480 ); + } } void sr_ReinitDisplay(){ @@ -512,6 +533,29 @@ } } + // determine desktop resolution + static int sr_desktopWidth = 0, sr_desktopHeight = 0; + if ( sr_desktopWidth == 0 && sr_DesktopScreensizeSupported() ) + { + // select sane defaults in case the following operation fails + sr_desktopWidth = 640; + sr_desktopHeight = 480; + + 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 ) + { + sr_screenWidth = sr_desktopWidth; + sr_screenHeight = sr_desktopHeight; + } + if ( (sr_screen=SDL_SetVideoMode (sr_screenWidth, sr_screenHeight, CD, attrib)) Modified: armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.h 2007-11-11 23:06:22 UTC (rev 7370) +++ armagetronad/branches/0.2.8/armagetronad/src/render/rScreen.h 2007-11-11 23:32:12 UTC (rev 7371) @@ -33,7 +33,7 @@ #include "tCallbackString.h" typedef enum { - ArmageTron_320_200=0,ArmageTron_320_240,ArmageTron_400_300, + ArmageTron_Desktop=0,ArmageTron_320_200,ArmageTron_Min=ArmageTron_320_200, ArmageTron_320_240,ArmageTron_400_300, ArmageTron_512_384,ArmageTron_640_480,ArmageTron_800_600, ArmageTron_1024_768,ArmageTron_1280_800,ArmageTron_1280_854,ArmageTron_1280_1024, ArmageTron_1600_1200,ArmageTron_1680_1050,ArmageTron_2048_1572,ArmageTron_Custom, ArmageTron_Invalid=-1 @@ -80,6 +80,8 @@ bool ce =true); }; +bool sr_DesktopScreensizeSupported(); + extern rScreenSettings currentScreensetting; extern rScreenSettings lastSuccess; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2007-11-11 23:06:22 UTC (rev 7370) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gMenus.cpp 2007-11-11 23:32:12 UTC (rev 7371) @@ -237,12 +237,16 @@ else { // add custom resolution - NewChoice( ArmageTron_Custom );//, "$screen_custom_text","$screen_custom_help" ); + NewChoice( ArmageTron_Custom ); + + // add desktop resolution + if ( sr_DesktopScreensizeSupported() && !addFixed ) + NewChoice( ArmageTron_Desktop ); // the maximal allowed screen size rScreenSize maxSize(0,0); - // fill in available modes (avoid dublicates) + // fill in available modes (avoid duplicates) for(i=0;modes[i];++i) { // add mode (if it's new) @@ -257,7 +261,7 @@ // add fixed resolutions (as window sizes) if ( addFixed ) { - for ( i = ArmageTron_Custom; i>=0; --i ) + for ( i = ArmageTron_Custom; i>=ArmageTron_Min; --i ) { rScreenSize size( static_cast< rResolution >(i) ); @@ -274,7 +278,11 @@ rScreenSize const & size = *iter; std::stringstream s; - s << size.width << " x " << size.height; + if ( size.width + size.height > 0 ) + s << size.width << " x " << size.height; + else + s << tOutput("$screen_size_desktop"); + res_men.NewChoice( s.str().c_str(), help, size ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lu...@us...> - 2007-11-12 08:12:20
|
Revision: 7374 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7374&view=rev Author: luke-jr Date: 2007-11-12 00:12:22 -0800 (Mon, 12 Nov 2007) Log Message: ----------- hack to send ladderlog to stdout (default disabled, of course) Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-11-11 23:50:44 UTC (rev 7373) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-11-12 08:12:22 UTC (rev 7374) @@ -683,6 +683,7 @@ console_rows_max_help Number of lines of console output when scrolling back console_decorate_id_help Decorates every line of console output with the client ID console_decorate_ip_help Decorates every line of console output with the client IP +console_ladder_log_help Sends ladder log output to the console show_fps_help Enable fps display floor_mirror_help Floor mirror mode floor_detail_help Floor detail settings Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-11 23:50:44 UTC (rev 7373) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2007-11-12 08:12:22 UTC (rev 7374) @@ -2773,8 +2773,16 @@ return object; } +static bool se_consoleLadderLog = false; +static tSettingItem< bool > se_consoleLadderLogConf( "CONSOLE_LADDER_LOG", se_consoleLadderLog ); + void se_SaveToLadderLog( tOutput const & out ) { + if (se_consoleLadderLog) + { + std::cout << "[L] " << out; + std::cout.flush(); + } if (sn_GetNetState()!=nCLIENT && !tRecorder::IsPlayingBack()) { std::ofstream o; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-11-12 14:38:26
|
Revision: 7378 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7378&view=rev Author: z-man Date: 2007-11-12 06:38:30 -0800 (Mon, 12 Nov 2007) Log Message: ----------- Added CYCLE_SPEED_MAX. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-11-12 14:37:35 UTC (rev 7377) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-11-12 14:38:30 UTC (rev 7378) @@ -49,6 +49,7 @@ cycle_speed_help Basic speed of your cycle if you drive straight and not close to walls cycle_speed_min_help Minimal speed of your cycle, measured relative to CYCLE_SPEED +cycle_speed_max_help Maximal speed of your cycle, measured relative to CYCLE_SPEED. A value of 0 means no top speed. cycle_speed_decay_below_help Rate of cycle speed approaching the value of CYCLE_SPEED from below cycle_speed_decay_above_help Rate of cycle speed approaching the value of CYCLE_SPEED from above cycle_start_speed_help Initial cycle speed Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp 2007-11-12 14:37:35 UTC (rev 7377) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycleMovement.cpp 2007-11-12 14:38:30 UTC (rev 7378) @@ -146,11 +146,18 @@ // minimal speed static REAL sg_speedCycleMin=.25; -static nSettingItemWatched<REAL> c_sm("CYCLE_SPEED_MIN", - sg_speedCycleMin, - nConfItemVersionWatcher::Group_Bumpy, - 9); +static nSettingItemWatched<REAL> c_smin("CYCLE_SPEED_MIN", + sg_speedCycleMin, + nConfItemVersionWatcher::Group_Bumpy, + 9); +// minimal speed +static REAL sg_speedCycleMax=0; +static nSettingItemWatched<REAL> c_smax("CYCLE_SPEED_MAX", + sg_speedCycleMax, + nConfItemVersionWatcher::Group_Bumpy, + 14); + REAL sg_speedCycleDecayBelow = 5; static nSettingItemWatched<REAL> c_sdb("CYCLE_SPEED_DECAY_BELOW", sg_speedCycleDecayBelow, @@ -3063,6 +3070,10 @@ // clamp speed REAL minSpeed = sg_speedCycle*SpeedMultiplier()*sg_speedCycleMin; REAL maxSpeed = ( 100 + sg_speedCycle*SpeedMultiplier() )* 100000; + if ( sg_speedCycleMax > 0 ) + { + maxSpeed = sg_speedCycle*SpeedMultiplier()*sg_speedCycleMax; + } sg_ArchiveReal( minSpeed, 9 ); sg_ArchiveReal( maxSpeed, 9 ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-29 20:48:24
|
Revision: 7429 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7429&view=rev Author: z-man Date: 2007-12-29 12:48:28 -0800 (Sat, 29 Dec 2007) Log Message: ----------- Timer hickups are now swallowed with a once-per-session warning. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10264 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10308 Modified: armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2007-12-29 20:13:55 UTC (rev 7428) +++ armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2007-12-29 20:48:28 UTC (rev 7429) @@ -1920,6 +1920,8 @@ #******************************************** #******************************************** +timer_hickup Die Systemuhr scheint gerade um \1 Sekunden gesprungen zu sein. Wenn das häufger vorkommt, solltest Du ihre Funktion ueberpruefen. + #******************************************** #******************************************** # Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-12-29 20:13:55 UTC (rev 7428) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2007-12-29 20:48:28 UTC (rev 7429) @@ -1914,6 +1914,8 @@ #******************************************** #******************************************** +timer_hickup Timer hickup of \1 seconds detected and compensated. If this happens frequently, you should check whether your system timer is operating correctly.\n + #******************************************** #******************************************** # Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2007-12-29 20:13:55 UTC (rev 7428) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2007-12-29 20:48:28 UTC (rev 7429) @@ -29,9 +29,9 @@ #include "tSysTime.h" #include "tRecorder.h" +#include "tConsole.h" +#include "tLocale.h" -// Both implementations are stolen from Q1. - //! time structure struct tTime { @@ -246,10 +246,36 @@ // get time from OS GetTime( time ); + + // test hickupery + // time.seconds -= time.seconds/10; + + // record starting point if ( start.microseconds == 0 && start.seconds == 0 ) + { start = time; - relative = time - start; + } + // detect and counter timer hickups + tTime newRelative = time - start; + tTime timeStep = newRelative - relative; + if ( timeStep.seconds < 0 || timeStep.seconds > 10 ) + { + static bool warn = true; + if ( warn ) + { + warn = false; + con << tOutput( "$timer_hickup", float( timeStep.seconds + timeStep.microseconds * 1E-6 ) ); + } + + start = start + timeStep; + } + else + { + relative = newRelative; + } + + if ( relative.seconds > 20 ) { int x; @@ -290,7 +316,7 @@ if ( usecdelay > 0 ) tDelay( usecdelay ); - tTime timeNewRelative; + static tTime timeNewRelative; tAdvanceFrameSys( timeStart, timeNewRelative ); // try to fetch time from playback @@ -326,18 +352,18 @@ double tSysTimeFloat () { #ifdef DEBUG - if ( ! tRecorder::IsPlayingBack() ) - { - tTime time; - tAdvanceFrameSys( timeStart, time ); - time = time - timeRelative; - // if ( time.seconds > 5 ) + // if ( ! tRecorder::IsPlayingBack() ) + // { + // static tTime time; + // tAdvanceFrameSys( timeStart, time ); + // tTime timeStep = time - timeRelative; + // if ( timeStep.seconds > 5 ) // { // std::cout << "tAdvanceFrame not called often enough!\n"; // st_Breakpoint(); // tAdvanceFrameSys( timeRealRelative ); // } - } + // } #endif return timeRelative.seconds + timeRelative.microseconds*0.000001; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2007-12-30 00:15:54
|
Revision: 7431 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7431&view=rev Author: z-man Date: 2007-12-29 16:15:59 -0800 (Sat, 29 Dec 2007) Log Message: ----------- Added TIME_FACTOR variable to compensate for dodgy system timers. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/config/settings.cfg armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10308 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10313 Modified: armagetronad/branches/0.2.8/armagetronad/config/settings.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/settings.cfg 2007-12-29 21:59:58 UTC (rev 7430) +++ armagetronad/branches/0.2.8/armagetronad/config/settings.cfg 2007-12-30 00:15:59 UTC (rev 7431) @@ -760,6 +760,9 @@ # This one is for old clients that don't support the automatic lag adaption protocol. LAG_OFFSET_LEGACY 0.0 +# In the very unlikely event that your system timer goes slow or fast and you absolutely +# cannot do anything about that, you can +TIME_FACTOR 2.0 # deprecated settings, they'll go away unless there are protests Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt 2007-12-29 21:59:58 UTC (rev 7430) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt 2007-12-30 00:15:59 UTC (rev 7431) @@ -7,6 +7,7 @@ #******************************************** #******************************************** +time_factor_help UNDOCUMENTED network_lock_out_028_test_help UNDOCUMENTED arena_wall_shadow_dist_help UNDOCUMENTED arena_wall_shadow_near_help UNDOCUMENTED Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2007-12-29 21:59:58 UTC (rev 7430) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2007-12-30 00:15:59 UTC (rev 7431) @@ -30,6 +30,7 @@ #include "tSysTime.h" #include "tRecorder.h" #include "tConsole.h" +#include "tConfiguration.h" #include "tLocale.h" //! time structure @@ -349,6 +350,9 @@ #endif } +static float st_timeFactor = 1.0; +static tSettingItem< float > st_timeFactorConf( "TIME_FACTOR", st_timeFactor ); + double tSysTimeFloat () { #ifdef DEBUG @@ -366,7 +370,7 @@ // } #endif - return timeRelative.seconds + timeRelative.microseconds*0.000001; + return ( timeRelative.seconds + timeRelative.microseconds*1E-6 ) * st_timeFactor; } static struct tTime timeRealStart; // the real time at the start of the program @@ -376,5 +380,5 @@ { // get real time from real OS tAdvanceFrameSys( timeRealStart, timeRealRelative ); - return timeRealRelative.seconds + timeRealRelative.microseconds*0.000001; + return ( timeRealRelative.seconds + timeRealRelative.microseconds*1E-6 ) * st_timeFactor; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wrt...@us...> - 2008-01-01 19:51:05
|
Revision: 7439 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7439&view=rev Author: wrtlprnft Date: 2008-01-01 11:51:05 -0800 (Tue, 01 Jan 2008) Log Message: ----------- added new ladderlog stuff (used to be edlog), thanks to ed and voodoo (poke z-man) Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-01 19:51:05 UTC (rev 7439) @@ -59,6 +59,18 @@ - New "About" menu item in the main menu displays the version of Armagetron Advanced, the paths it uses, links to the main site, wiki and forums and the names of the project admins. +- New entries in ladderlog.txt: + - GAME_TIME <time> (only if enabled via the LADDERLOG_GAME_TIME_INTERVAL + setting): The time that has passed since the last start of a round + - BASEZONE_CONQUERED <team> <x> <y>: A fortress zone belonging to <team> + at the coordinates (<x>, <y>) has been conquered + - BASEZONE_CONQUERER <player>: at the time of the last BASEZONE_CONQUERED + message, <player> has been in the conquered zone + - ONLINE_PLAYER <player> [<ping [<team>]]: At the beginning of the round, + <player> had <ping> and was on <team>. This line is not printed for bots + - NUM_HUMANS <n>: There are <n> players that are not AIs and are part of + a team. + - ROUND_SCORE has the player's team's score appended. Bugfixes: - Fixed various trail end related extrapolation/simulation inaccuracies that looked Modified: armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg 2008-01-01 19:51:05 UTC (rev 7439) @@ -193,6 +193,8 @@ CONSOLE_DECORATE_ID 1 # Decorates every line of console output with the client ID CONSOLE_DECORATE_IP 0 # Decorates every line of console output with the client IP +LADDERLOG_GAME_TIME_INTERVAL -1 # write a line to ladderlog.txt indicating how "old" the curent game is at most every n seconds. Negative values disable this feature. + SINCLUDE server_info.cfg # ping flood response DOS protection: if pings from a single machine are requested more often than this, # they are not answered. Setting the last item to a negative value disables the system. Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-01 19:51:05 UTC (rev 7439) @@ -684,6 +684,7 @@ console_decorate_id_help Decorates every line of console output with the client ID console_decorate_ip_help Decorates every line of console output with the client IP console_ladder_log_help Sends ladder log output to the console +ladderlog_game_time_interval If nonnegative, write a line with the current game time to the ladder log every n seconds. show_fps_help Enable fps display floor_mirror_help Floor mirror mode floor_detail_help Floor detail settings Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-01 19:51:05 UTC (rev 7439) @@ -3073,8 +3073,37 @@ return ret; } +void ePlayerNetID::RankingLadderLog() { + SortByScore(); + int num_humans = 0; + int max = se_PlayerNetIDs.Len(); + for(int i = 0; i < max; ++i) { + ePlayerNetID *p = se_PlayerNetIDs(i); + if(p->Owner() == 0) continue; // ignore AIs + tString line("ONLINE_PLAYER "); + + line << p->GetUserName(); + + if(p->IsActive()) { + line << " " << p->ping; + if(p->currentTeam) { + line << " " << FilterName(p->currentTeam->Name()); + ++num_humans; + } + } + + line << '\n'; + se_SaveToLadderLog(line); + } + tString line("NUM_HUMANS "); + line << num_humans << '\n'; + se_SaveToLadderLog(line); +} + + + tColoredString & operator << (tColoredString &s,const ePlayer &p){ return s << tColoredString::ColorString(p.rgb[0]/15.0, p.rgb[1]/15.0, @@ -4826,7 +4855,7 @@ lastScore_ = IMPOSSIBLY_LOW_SCORE; ret << "ROUND_SCORE " << scoreDifference << " " << GetUserName(); if ( currentTeam ) - ret << " " << FilterName( currentTeam->Name() ); + ret << " " << FilterName( currentTeam->Name() ) << " " << currentTeam->Score(); ret << "\n"; se_SaveToLadderLog( ret ); } Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.h 2008-01-01 19:51:05 UTC (rev 7439) @@ -260,6 +260,7 @@ static void SortByScore(); // brings the players into the right order static tString Ranking( int MAX=12, bool cut = true ); // returns a ranking list + static void RankingLadderLog(); // writes a small ranking list to ladderlog static void ResetScore(); // resets the ranking list static void DisplayScores(); // display scores on the screen Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tString.cpp 2008-01-01 19:51:05 UTC (rev 7439) @@ -1089,20 +1089,20 @@ // skip color codes if (*c=='0' && len >= 2 && c[1]=='x') { - if(len >= 8) - { - c += 8; - len -= 8; - removed = true; - } - else - { - // skip incomplete color codes, too - return RemoveColors( ret ); - } + if(len >= 8) + { + c += 8; + len -= 8; + removed = true; + } + else + { + // skip incomplete color codes, too + return RemoveColors( ret ); + } } else - { + { ret << (*(c++)); len--; } Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tSysTime.cpp 2008-01-01 19:51:05 UTC (rev 7439) @@ -358,16 +358,16 @@ #ifdef DEBUG // if ( ! tRecorder::IsPlayingBack() ) // { - // static tTime time; - // tAdvanceFrameSys( timeStart, time ); - // tTime timeStep = time - timeRelative; - // if ( timeStep.seconds > 5 ) - // { - // std::cout << "tAdvanceFrame not called often enough!\n"; - // st_Breakpoint(); - // tAdvanceFrameSys( timeRealRelative ); - // } - // } + // static tTime time; + // tAdvanceFrameSys( timeStart, time ); + // tTime timeStep = time - timeRelative; + // if ( timeStep.seconds > 5 ) + // { + // std::cout << "tAdvanceFrame not called often enough!\n"; + // st_Breakpoint(); + // tAdvanceFrameSys( timeRealRelative ); + // } + // } #endif return ( timeRelative.seconds + timeRelative.microseconds*1E-6 ) * st_timeFactor; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-01 19:51:05 UTC (rev 7439) @@ -1001,7 +1001,11 @@ static tSettingItem<REAL> ldd_ga("LADDER_GAIN_EXTRA", ladder_gain_extra); +static float sg_gameTimeInterval=-1; +static tSettingItem<float> sggti("LADDERLOG_GAME_TIME_INTERVAL", + sg_gameTimeInterval); + class ladder: public highscores<REAL>{ public: virtual void Load(){ @@ -3071,6 +3075,8 @@ init_game_objects(grid); + ePlayerNetID::RankingLadderLog(); + // do the first analysis of the round, now is the time to get it used to the number of teams Analysis( -1000 ); @@ -4057,6 +4063,15 @@ synced_ = true; } + static float lastTime = -1; + + if(sg_gameTimeInterval >= 0 && (gtime >= lastTime + sg_gameTimeInterval || (gtime < lastTime && gtime >= 0))) { + tOutput out; + out << "GAME_TIME " << gtime << '\n'; + se_SaveToLadderLog(out); + lastTime = gtime; + } + if (state==GS_PLAY){ if (gtime<0 && gtime>-PREPARE_TIME+.3) eCamera::s_Timestep(grid, gtime); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-01 17:04:17 UTC (rev 7438) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-01 19:51:05 UTC (rev 7439) @@ -980,6 +980,27 @@ void gBaseZoneHack::OnConquest( void ) { + tString log; + log << "BASEZONE_CONQUERED " << ePlayerNetID::FilterName(team->Name()) << " " << GetPosition().x << " " << GetPosition().y << '\n'; + se_SaveToLadderLog(log); + float rr = GetRadius(); + rr *= rr; + for(int i = 0; i < MAXCLIENTS; ++i) { + ePlayerNetID *player = se_PlayerNetIDs(i); + if(!player) { + continue; + } + gCycle *cycle = dynamic_cast<gCycle *>(player->Object()); + if(!cycle) { + continue; + } + if(cycle->Alive() && (cycle->Position() - Position()).NormSquared() < rr) { + tString log; + log << "BASEZONE_CONQUERER " << player->GetUserName() << '\n'; + se_SaveToLadderLog(log); + } + } + // calculate score. If nobody really was inside the zone any more, half it. int totalScore = sg_onConquestScore; if ( 0 == enemiesInside_ ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-01 22:03:49
|
Revision: 7443 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7443&view=rev Author: z-man Date: 2008-01-01 14:03:55 -0800 (Tue, 01 Jan 2008) Log Message: ----------- Updated OSX descriptions. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/README-Subversion Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10331 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10332 Modified: armagetronad/branches/0.2.8/armagetronad/README-Subversion =================================================================== --- armagetronad/branches/0.2.8/armagetronad/README-Subversion 2008-01-01 22:03:23 UTC (rev 7442) +++ armagetronad/branches/0.2.8/armagetronad/README-Subversion 2008-01-01 22:03:55 UTC (rev 7443) @@ -86,8 +86,11 @@ == Armagetron Advanced 10.2.8 * Change the target to Armagetron Advanced 10.2.8 -* In config_common.h un-comment "#define MACOSX_VERSION_10_2 1" +* (No longer required) In config_common.h un-comment "#define MACOSX_VERSION_10_2 1" * Build +* This build should be superior to the regular Armagetron Advanced build; it should + be compatible with all versions of OSX from 10.2.8 on and still run natively on + Intel Macs. == Armagetron Advanced Dedicated * Change to the dedicated target. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-03 22:51:21
|
Revision: 7447 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7447&view=rev Author: z-man Date: 2008-01-03 14:51:21 -0800 (Thu, 03 Jan 2008) Log Message: ----------- Moved config_common.h to config_common.h.in for the Mac so no SVN files get modified by process_files.rb. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/process_files.rb Added Paths: ----------- armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h.in Removed Paths: ------------- armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h Property Changed: ---------------- / Property changes on: ___________________________________________________________________ Name: svk:merge - 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10339 + 0f5b4d08-0226-0410-8d76-d6dd9a32ed7b:/local/armagetronad:10349 Modified: armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/process_files.rb =================================================================== --- armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/process_files.rb 2008-01-02 00:58:28 UTC (rev 7446) +++ armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/process_files.rb 2008-01-03 22:51:21 UTC (rev 7447) @@ -11,8 +11,9 @@ # :in moves the file from :file to :file minus the ".in" extension files = [ { - :file => "/src/macosx/config_common.h", + :file => "/src/macosx/config_common.h.in", :tags => "version" + :in => true }, { :file => "/src/macosx/English.lproj/InfoPlist.strings.in", Deleted: armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h 2008-01-02 00:58:28 UTC (rev 7446) +++ armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h 2008-01-03 22:51:21 UTC (rev 7447) @@ -1,175 +0,0 @@ -/* config.h. Generated by configure. */ -/* config.h.in. Generated from configure.ac by autoheader. */ - -#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 -#define MACOSX_VERSION_10_2 1 -#endif - -/* AIX */ -/* #undef AIX */ - -/* BeOS */ -/* #undef BEOS */ - -/* Include pthread support for binary relocation? */ -/* #undef BR_PTHREAD */ - -/* Define if your system deos not like the pointer tricks in eWall.h. */ -/* #undef CAUTION_WALL */ - -/* Define if you wish to compile a dedicated server */ -/* #undef DEDICATED */ - -/* Define if you wish to use the old and dirty OpenGL initialization method */ -/* #undef DIRTY */ - -/* Define if you dont want to use a custom memory manager. */ -#define DONTUSEMEMMANAGER 1 - -/* Use binary relocation? */ -/* #undef ENABLE_BINRELOC */ - -/* Define to 1 if you have the `atan2f' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_ATAN2F 1 -#endif - -/* Define to 1 if you have the `cosf' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_COSF 1 -#endif - -/* Define to 1 if you have the `fabsf' function. */ -#define HAVE_FABSF 1 - -/* Define to 1 if you have the `floorf' function. */ -#define HAVE_FLOORF 1 - -/* Define to 1 if you have the <inttypes.h> header file. */ -#define HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the `isblank' function. */ -#define HAVE_ISBLANK 1 - -/* Define to 1 if you have the `jpeg' library (-ljpeg). */ -/* #undef HAVE_LIBJPEG */ - -/* Define to 1 if you have the `pthread' library (-lpthread). */ -/* #undef HAVE_LIBPTHREAD */ - -/* Define to 1 if you have the `wsock32' library (-lwsock32). */ -/* #undef HAVE_LIBWSOCK32 */ - -/* Define if you have the X11 library (-lX11). */ -/* #undef HAVE_LIBX11 */ - -/* Define to 1 if you have the `xml2' library (-lxml2). */ -#define HAVE_LIBXML2 1 - -/* Define if your xml2 library is obsolete (lacks - xmlParserInputBufferCreateFilenameDefault). */ -/* #ifndef MACOSX_VERSION_10_2 - * #define HAVE_LIBXML2_WO_PIBCREATE 1 - * #endif - */ - -/* Define to 1 if you have the `z' library (-lz). */ -#define HAVE_LIBZ 1 - -/* Define to 1 if you have the <memory.h> header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `select' function. */ -#define HAVE_SELECT 1 - -/* Define to 1 if you have the `sinf' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_SINF 1 -#endif - -/* Define if you have the type socklen_t. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_SOCKLEN_T 1 -#endif - -/* Define to 1 if you have the `sqrtf' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_SQRTF 1 -#endif - -/* Define to 1 if you have the <stdint.h> header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the <stdlib.h> header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the <strings.h> header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the <string.h> header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the <sys/stat.h> header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the <sys/types.h> header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the `tanf' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_TANF 1 -#endif - -/* Define to 1 if you have the <unistd.h> header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `wmemset' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_WMEMSET 1 -#endif - -/* Define to 1 if you have the `logf' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_LOGF 1 -#endif - -/* Define to 1 if you have the `expf' function. */ -#ifndef MACOSX_VERSION_10_2 -#define HAVE_EXPF 1 -#endif - -/* enables krawall */ -/* #undef KRAWALL */ - -/* enables krawall server */ -/* #undef KRAWALL_SERVER */ - -/* GNU/Linux */ -/* #undef LINUX */ - -/* Mac OS X */ -#define MACOSX 1 - -/* The size of a `Enum', as computed by sizeof. */ -#define SIZEOF_ENUM 4 - -/* The size of a `int ', as computed by sizeof. */ -#define SIZEOF_INT_ 4 - -/* Solaris */ -/* #undef SOLARIS */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Version number of package */ -#define VERSION @version@ - -/* Windows 9x/NT/2k/XP */ -/* #undef WIN32 */ - -/* Define to 1 if the X Window System is missing or not being used. */ -/* #undef X_DISPLAY_MISSING */ - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ Added: armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h.in =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h.in (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h.in 2008-01-03 22:51:21 UTC (rev 7447) @@ -0,0 +1,175 @@ +/* config.h. Generated by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +#if MAC_OS_X_VERSION_MIN_REQUIRED == 1020 +#define MACOSX_VERSION_10_2 1 +#endif + +/* AIX */ +/* #undef AIX */ + +/* BeOS */ +/* #undef BEOS */ + +/* Include pthread support for binary relocation? */ +/* #undef BR_PTHREAD */ + +/* Define if your system deos not like the pointer tricks in eWall.h. */ +/* #undef CAUTION_WALL */ + +/* Define if you wish to compile a dedicated server */ +/* #undef DEDICATED */ + +/* Define if you wish to use the old and dirty OpenGL initialization method */ +/* #undef DIRTY */ + +/* Define if you dont want to use a custom memory manager. */ +#define DONTUSEMEMMANAGER 1 + +/* Use binary relocation? */ +/* #undef ENABLE_BINRELOC */ + +/* Define to 1 if you have the `atan2f' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_ATAN2F 1 +#endif + +/* Define to 1 if you have the `cosf' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_COSF 1 +#endif + +/* Define to 1 if you have the `fabsf' function. */ +#define HAVE_FABSF 1 + +/* Define to 1 if you have the `floorf' function. */ +#define HAVE_FLOORF 1 + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `isblank' function. */ +#define HAVE_ISBLANK 1 + +/* Define to 1 if you have the `jpeg' library (-ljpeg). */ +/* #undef HAVE_LIBJPEG */ + +/* Define to 1 if you have the `pthread' library (-lpthread). */ +/* #undef HAVE_LIBPTHREAD */ + +/* Define to 1 if you have the `wsock32' library (-lwsock32). */ +/* #undef HAVE_LIBWSOCK32 */ + +/* Define if you have the X11 library (-lX11). */ +/* #undef HAVE_LIBX11 */ + +/* Define to 1 if you have the `xml2' library (-lxml2). */ +#define HAVE_LIBXML2 1 + +/* Define if your xml2 library is obsolete (lacks + xmlParserInputBufferCreateFilenameDefault). */ +/* #ifndef MACOSX_VERSION_10_2 + * #define HAVE_LIBXML2_WO_PIBCREATE 1 + * #endif + */ + +/* Define to 1 if you have the `z' library (-lz). */ +#define HAVE_LIBZ 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Define to 1 if you have the `select' function. */ +#define HAVE_SELECT 1 + +/* Define to 1 if you have the `sinf' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_SINF 1 +#endif + +/* Define if you have the type socklen_t. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_SOCKLEN_T 1 +#endif + +/* Define to 1 if you have the `sqrtf' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_SQRTF 1 +#endif + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the `tanf' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_TANF 1 +#endif + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `wmemset' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_WMEMSET 1 +#endif + +/* Define to 1 if you have the `logf' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_LOGF 1 +#endif + +/* Define to 1 if you have the `expf' function. */ +#ifndef MACOSX_VERSION_10_2 +#define HAVE_EXPF 1 +#endif + +/* enables krawall */ +/* #undef KRAWALL */ + +/* enables krawall server */ +/* #undef KRAWALL_SERVER */ + +/* GNU/Linux */ +/* #undef LINUX */ + +/* Mac OS X */ +#define MACOSX 1 + +/* The size of a `Enum', as computed by sizeof. */ +#define SIZEOF_ENUM 4 + +/* The size of a `int ', as computed by sizeof. */ +#define SIZEOF_INT_ 4 + +/* Solaris */ +/* #undef SOLARIS */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Version number of package */ +#define VERSION @version@ + +/* Windows 9x/NT/2k/XP */ +/* #undef WIN32 */ + +/* Define to 1 if the X Window System is missing or not being used. */ +/* #undef X_DISPLAY_MISSING */ + +/* Define to empty if `const' does not conform to ANSI C. */ +/* #undef const */ Property changes on: armagetronad/branches/0.2.8/armagetronad/src/macosx/config_common.h.in ___________________________________________________________________ Name: svn:keywords + Author Date Id Revision Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-10 16:09:03
|
Revision: 7496 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7496&view=rev Author: z-man Date: 2008-01-10 08:08:24 -0800 (Thu, 10 Jan 2008) Log Message: ----------- Added KICK_TO and MOVE_TO, redirecting a player to a different server. Fixed crash from one of the leak fixes. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-10 16:08:24 UTC (rev 7496) @@ -1,6 +1,9 @@ Changes since 0.2.8.2: New settings and commands: +- KICK_TO and MOVE_TO: redirect a client to a different server +- DEFAULT_KICK(_TO)_MESSAGE: default reason given to players for a kick +- DEFAULT_KICK_TO_SERVER/PORT: default redirection target for KICK/MOVE_TO. - If all clients support it, PING_CHARITY_MIN/MAX can be used to constrain ping charity. - SILENCE and VOICE allow to control chat of annoying players. - SILENCE_ALL can be used on the server to inhibit all cross-team communication unless specifically voiced. Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-10 16:08:24 UTC (rev 7496) @@ -800,6 +800,12 @@ allow_team_change_player_help Allow a specific player to change teams even if ALLOW_TEAM_CHANGE is disabled disallow_team_change_player_help Reverse of ALLOW_TEAM_CHANGE_PLAYER kick_help Kicks the specified player from the server. +default_kick_reason_help The reason given to a player kicked by KICK if none is specified. +kick_to_help Kicks the specified player from the server and, if the client supports it, redirects him to a different server. +move_to_help Kicks the specified player from the server and, if the client supports it, redirects him to a different server. Does not imply an autoban penalty. +default_kick_to_reason_help The reason given to a player kicked by KICK_TO or MOVE_TO if none is specified. +default_kick_to_server Default server a player is redirected to by KICK_TO and MOVE_TO in ip/name:port notation. + 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_list_help Prints a list of currently banned IPs. @@ -2215,6 +2221,7 @@ network_login_done Done!\n network_kill_log User \1 kicked, reason given to him: \2\n +network_redirect \n\nYou will now be redirected to the server \1:\2.\n network_kill_preface Reason given by server: network_kill_maxidgrabber It ran out of IDs; your client was the one occupying most of them for himself. The reason for this can be a bug. network_kill_maxiduser It ran out of IDs; your client was the one occupying most of them. Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/ePlayer.cpp 2008-01-10 16:08:24 UTC (rev 7496) @@ -4135,13 +4135,17 @@ static tConfItemFunc se_PlayerMessage_c("PLAYER_MESSAGE", &se_PlayerMessageConf); +static tString se_defaultKickReason(""); +static tConfItemLine se_defaultKickReasonConf( "DEFAULT_KICK_REASON", se_defaultKickReason ); + static void se_KickConf(std::istream &s) { // get user ID int num = se_ReadUser( s ); - tString reason; - reason.ReadLine(s); + tString reason = se_defaultKickReason; + if ( !s.eof() ) + reason.ReadLine(s); // and kick. if ( num > 0 && !s.good() ) @@ -4157,6 +4161,62 @@ static tConfItemFunc se_kickConf("KICK",&se_KickConf); +static tString se_defaultKickToServer(""); +static int se_defaultKickToPort = 4534; +static tString se_defaultKickToReason(""); + +static tSettingItem< tString > se_defaultKickToServerConf( "DEFAULT_KICK_TO_SERVER", se_defaultKickToServer ); +static tSettingItem< int > se_defaultKickToPortConf( "DEFAULT_KICK_TO_PORT", se_defaultKickToPort ); +static tConfItemLine se_defaultKickToReasonConf( "DEFAULT_KICK_TO_REASON", se_defaultKickToReason ); + +static void se_MoveToConf(std::istream &s, REAL severity ) +{ + // get user ID + int num = se_ReadUser( s ); + + // read redirection target + tString server = se_defaultKickToServer; + if ( !s.eof() ) + { + s >> server; + } + + int port = se_defaultKickToPort; + if ( !s.eof() ) + s >> port; + + nServerInfoRedirect redirect( server, port ); + + tString reason = se_defaultKickToReason; + if ( !s.eof() ) + reason.ReadLine(s); + + // and kick. + if ( num > 0 && !s.good() ) + { + sn_KickUser( num , reason.Len() > 1 ? static_cast< char const *>( reason ) : "$network_kill_kick", severity, &redirect ); + } + else + { + con << "Usage: KICK_TO <user ID or name> <server IP to kick to>:<server port to kick to> <Reason>\n"; + return; + } +} + +static void se_KickToConf(std::istream &s ) +{ + se_MoveToConf( s, 1 ); +} + +static tConfItemFunc se_kickToConf("KICK_TO",&se_KickToConf); + +static void se_MoveToConf(std::istream &s ) +{ + se_MoveToConf( s, 0 ); +} + +static tConfItemFunc se_moveToConf("MOVE_TO",&se_MoveToConf); + static void se_BanConf(std::istream &s) { // get user ID Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp 2008-01-10 16:08:24 UTC (rev 7496) @@ -721,6 +721,8 @@ virtual void OnDestroy() { machine_ = 0; + + delete this; } private: nMachine * machine_; Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.cpp 2008-01-10 16:08:24 UTC (rev 7496) @@ -30,6 +30,7 @@ #include "nSimulatePing.h" #include "nConfig.h" #include "nNetwork.h" +#include "nServerInfo.h" #include "tConsole.h" #include "tDirectories.h" #include "nSocket.h" @@ -87,7 +88,7 @@ static tConfItemLine sn_sbtip("SERVER_IP", net_hostip); -void sn_DisconnectUserNoWarn(int i, const tOutput& reason ); +void sn_DisconnectUserNoWarn(int i, const tOutput& reason, nServerInfoBase * redirectTo = 0 ); int sn_defaultDelay=10000; @@ -1292,7 +1293,18 @@ real_req_info_handler=handle; } +// the server we are redirected to +static std::auto_ptr< nServerInfoBase > sn_redirectTo; +std::auto_ptr< nServerInfoBase > sn_GetRedirectTo() +{ + return sn_redirectTo; +} +nServerInfoBase * sn_PeekRedirectTo() +{ + return sn_redirectTo.get(); +} + void login_deny_handler(nMessage &m){ if ( !m.End() ) { @@ -1306,6 +1318,21 @@ sn_DenyReason = tOutput( "$network_kill_unknown" ); } + if ( !m.End() ) + { + // read redirection data from message + tString connectionName; + m >> connectionName; + int port; + m >> port; + + if ( connectionName.Len() > 1 ) + { + // create server info and fill it with data + sn_redirectTo = std::auto_ptr< nServerInfoBase>( new nServerInfoRedirect( connectionName, port ) ); + } + } + if (!login_failed) con << tOutput("$network_login_denial"); if (sn_GetNetState()!=nSERVER){ @@ -2481,6 +2508,9 @@ nConnectError sn_Connect( nAddress const & server, nLoginType loginType, nSocket const * socket ){ sn_DenyReason = ""; + // reset redirection + sn_redirectTo.release(); + // pings in the beginning of the login are not really representative nPingAverager::SetWeight(.0001); @@ -2977,7 +3007,7 @@ */ } -void sn_KickUser(int i, const tOutput& reason, REAL severity ) +void sn_KickUser(int i, const tOutput& reason, REAL severity, nServerInfoBase * redirectTo ) { // print it con << tOutput( "$network_kill_log", i, reason ); @@ -2986,10 +3016,10 @@ nMachine::GetMachine(i).OnKick( severity ); // do it - sn_DisconnectUser( i, reason ); + sn_DisconnectUser( i, reason, redirectTo ); } -void sn_DisconnectUser(int i, const tOutput& reason ) +void sn_DisconnectUser(int i, const tOutput& reason, nServerInfoBase * redirectTo ) { // don't be daft and kill yourself, server! if ( i == 0 && sn_GetNetState() == nSERVER ) @@ -3011,10 +3041,10 @@ return; } - sn_DisconnectUserNoWarn( i, reason ); + sn_DisconnectUserNoWarn( i, reason, redirectTo ); } -void sn_DisconnectUserNoWarn(int i, const tOutput& reason ) +void sn_DisconnectUserNoWarn(int i, const tOutput& reason, nServerInfoBase * redirectTo ) { nCurrentSenderID senderID( i ); @@ -3037,6 +3067,18 @@ for(int j=2;j>=0;j--){ nMessage* mess = (new nMessage(login_deny)); *mess << tString( reason ); + + // write redirection + tString redirection; + int port; + if ( redirectTo ) + { + redirection = redirectTo->GetConnectionName(); + port = redirectTo->GetPort(); + } + *mess << redirection; + *mess << port; + mess->SendImmediately(i, false); nMessage::SendCollected(i); } Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nNetwork.h 2008-01-10 16:08:24 UTC (rev 7496) @@ -40,6 +40,7 @@ class nSocket; class nAddress; class nBasicNetworkSystem; +class nServerInfoBase; extern nBasicNetworkSystem sn_BasicNetworkSystem; @@ -98,8 +99,8 @@ nConnectError sn_GetLastError(); nNetState sn_GetNetState(); void sn_SetNetState(nNetState x); -void sn_DisconnectUser(int i, const tOutput& reason ); //!< terminate connection with user i (peacefully) -void sn_KickUser(int i, const tOutput& reason, REAL severity = 1 ); //!< throw out user i (violently) +void sn_DisconnectUser(int i, const tOutput& reason, nServerInfoBase * redirectTo = 0 ); //!< terminate connection with user i (peacefully) +void sn_KickUser(int i, const tOutput& reason, REAL severity = 1, nServerInfoBase * redirectTo = 0 ); //!< throw out user i (violently) void sn_GetAdr(int user, tString& name); unsigned int sn_GetPort(int user); @@ -741,6 +742,13 @@ ~nSocketResetInhibitor(); }; +// on disconnection, this returns a server we should be redirected to (or NULL if we should not be redirected) +std::auto_ptr< nServerInfoBase > sn_GetRedirectTo(); + +// take a peek at the same info +nServerInfoBase * sn_PeekRedirectTo(); + + // ******************************************************************************************* // * // * GetWeight @@ -944,7 +952,6 @@ void nMachineDecorator::Destroy( void ) { this->OnDestroy(); - delete this; } // ******************************************************************************* Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-01-10 16:08:24 UTC (rev 7496) @@ -844,6 +844,8 @@ { if ( warned_ ) con << "Flood protection ban of " << GetIP() << " removed because machine is discarded.\n"; + + delete this; } void Block() Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-01-10 16:08:24 UTC (rev 7496) @@ -95,6 +95,18 @@ inline nServerInfoBase & SetPort( unsigned int port ); //!< Sets the network port the server listens on }; +//! server information, just to redirect and for other immediate applications +class nServerInfoRedirect: public nServerInfoBase +{ +public: + // construct a server directly with connection name and port + nServerInfoRedirect( tString const & connectionName, unsigned int port ) + { + nServerInfoBase::SetConnectionName( connectionName ); + nServerInfoBase::SetPort( port ); + }; +}; + //! Full server information class nServerInfo: public tListItem<nServerInfo>, public nServerInfoBase { Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-10 16:08:24 UTC (rev 7496) @@ -1951,19 +1951,23 @@ static void sg_NetworkError( const tOutput& title, const tOutput& message, REAL timeout ) { + tOutput message2 ( message ); + if ( sn_DenyReason.Len() > 2 ) { - tOutput message2 ( message ); message2.AddLiteral("\n\n"); message2.AddLocale("network_kill_preface"); message2.AddLiteral("\n"); message2.AddLiteral(sn_DenyReason); - tConsole::Message( title, message2, timeout ); } - else + + nServerInfoBase * redirect = sn_PeekRedirectTo(); + if ( redirect ) { - tConsole::Message( title, message, timeout ); + message2.Append( tOutput( "$network_redirect", redirect->GetConnectionName(), (int)redirect->GetPort() ) ); } + + tConsole::Message( title, message2, timeout ); } // revert settings to defaults in the current scope @@ -1996,7 +2000,7 @@ } } -void ConnectToServer(nServerInfoBase *server) +void ConnectToServerCore(nServerInfoBase *server) { tASSERT( server ); @@ -2097,7 +2101,6 @@ } } - if (!sg_RequestedDisconnection && !uMenu::quickexit) switch (sn_GetLastError()) { @@ -2123,6 +2126,46 @@ sr_textOut=to; } +void ConnectToServer(nServerInfoBase *server) +{ + ConnectToServerCore( server ); + + REAL redirections = 0; + double lastTime = tSysTimeFloat(); + + // check for redirection + while( true ) + { + std::auto_ptr< nServerInfoBase > redirectTo( sn_GetRedirectTo() ); + + // abort loop + if ( !(&(*redirectTo)) ) + { + break; + } + + ConnectToServerCore( redirectTo.get() ); + + // redirection spam chain protection, allow one redirection every 30 seconds. Should + // be short enough to allow hacky applications (server-to-server teleport), but + // long enough to allow players to escape via the menu or at least shift-esc. + static const REAL timeout = 30; + static const REAL maxRedirections = 5; + + redirections = redirections + 1; + if ( redirections > maxRedirections ) + { + break; + } + + // decay spam protection + double newTime = tSysTimeFloat(); + REAL dt = newTime - lastTime; + lastTime = newTime; + redirections *= 1/(1 + dt * maxRedirections * timeout ); + } +} + static tConfItem<int> mor("MAX_OUT_RATE",sn_maxRateOut); static tConfItem<int> mir("MAX_IN_RATE",sn_maxRateIn); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-10 10:48:46 UTC (rev 7495) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-10 16:08:24 UTC (rev 7496) @@ -48,6 +48,7 @@ enum { NUM_FAVORITES = 10 }; //! favorite server information, just to connect +/* class gServerInfoFavorite: public nServerInfoBase { public: @@ -58,6 +59,8 @@ nServerInfoBase::SetPort( port ); }; }; +*/ +typedef nServerInfoRedirect gServerInfoFavorite; static tString sg_ConfName( int ID, char const * name ) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-10 16:30:17
|
Revision: 7497 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7497&view=rev Author: z-man Date: 2008-01-10 08:30:20 -0800 (Thu, 10 Jan 2008) Log Message: ----------- Added redirection possibility for vote kicks. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-10 16:08:24 UTC (rev 7496) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-10 16:30:20 UTC (rev 7497) @@ -5,6 +5,7 @@ - DEFAULT_KICK(_TO)_MESSAGE: default reason given to players for a kick - DEFAULT_KICK_TO_SERVER/PORT: default redirection target for KICK/MOVE_TO. - If all clients support it, PING_CHARITY_MIN/MAX can be used to constrain ping charity. +- VOTE_KICK_TO_SERVER/PORT: redirection target for vote kicks. - SILENCE and VOICE allow to control chat of annoying players. - SILENCE_ALL can be used on the server to inhibit all cross-team communication unless specifically voiced. - ENABLE_CHAT can be set to 0 to disable all chat. If it is set on the server it only disables public chat and logged in players can still speak. Modified: armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg 2008-01-10 16:08:24 UTC (rev 7496) +++ armagetronad/branches/0.2.8/armagetronad/config/settings_dedicated.cfg 2008-01-10 16:30:20 UTC (rev 7497) @@ -204,6 +204,17 @@ PING_FLOOD_TIME_100 100.0 # Minimum time for 100 ping packets to arrive. PING_FLOOD_GLOBAL .1 # The same times, multiplied by this value, count for all pings from all machines. Negative values disable global flood protection. +# default settings for MOVE/KICK(_TO) + +# default kick reason given for the KICK console command +#DEFAULT_KICK_REASON + +# default redirection kick/move reason given for the KICK/MOVE_TO console commands +#DEFAULT_KICK_TO_REASON + +DEFAULT_KICK_TO_SERVER # default server to kick/move to (IP or hostname) +DEFAULT_KICK_TO_PORT 4534 # default port of the server to kick/move to + ############################################################################################ # # Game settings Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-10 16:08:24 UTC (rev 7496) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-10 16:30:20 UTC (rev 7497) @@ -804,7 +804,10 @@ kick_to_help Kicks the specified player from the server and, if the client supports it, redirects him to a different server. move_to_help Kicks the specified player from the server and, if the client supports it, redirects him to a different server. Does not imply an autoban penalty. default_kick_to_reason_help The reason given to a player kicked by KICK_TO or MOVE_TO if none is specified. -default_kick_to_server Default server a player is redirected to by KICK_TO and MOVE_TO in ip/name:port notation. +default_kick_to_server Default server IP/name a player is redirected to by KICK_TO and MOVE_TO. +default_kick_to_port Default server port a player is redirected to by KICK_TO and MOVE_TO. +vote_kick_to_server Server IP/name a player is redirected to by vote kicks. +vote_kick_to_port Default server port a player is redirected to by vote kicks. 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. Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp 2008-01-10 16:08:24 UTC (rev 7496) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eVoter.cpp 2008-01-10 16:30:20 UTC (rev 7497) @@ -35,6 +35,7 @@ #include "uMenu.h" #include "nConfig.h" +#include "nServerInfo.h" #include "rConsole.h" @@ -728,6 +729,25 @@ nMachine * machine_; }; +static tString se_voteKickToServer(""); +static int se_voteKickToPort = 4534; +static tSettingItem< tString > se_voteKickToServerConf( "VOTE_KICK_TO_SERVER", se_voteKickToServer ); +static tSettingItem< int > se_voteKickToPortConf( "VOTE_KICK_TO_PORT", se_voteKickToPort ); + +void se_VoteKickUser( int user ) +{ + if ( se_voteKickToServer.Len() < 2 ) + { + sn_KickUser( user, tOutput("$voted_kill_kick") ); + } + else + { + // kick player to default destination + nServerInfoRedirect redirect( se_voteKickToServer, se_voteKickToPort ); + sn_KickUser( user, tOutput("$voted_kill_kick"), 1, &redirect ); + } +} + // something to vote on class eVoteItemKick: public virtual eVoteItem { @@ -834,7 +854,7 @@ // kick the player, he is online int user = player_->Owner(); if ( user > 0 ) - sn_KickUser( user, tOutput("$voted_kill_kick") ); + se_VoteKickUser( user ); } else if ( machine_ ) { @@ -848,7 +868,7 @@ { if ( &nMachine::GetMachine( user ) == machine ) { - sn_KickUser( user, tOutput("$voted_kill_kick") ); + se_VoteKickUser( user ); kick = true; } } @@ -979,7 +999,7 @@ if(sn_GetNetState()==nSERVER) { // kill user directly - sn_KickUser( player_->Owner(), tOutput("$voted_kill_kick") ); + se_VoteKickUser( player_->Owner() ); } { // issue kick vote This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nem...@us...> - 2008-01-11 02:13:13
|
Revision: 7501 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7501&view=rev Author: nemostultae Date: 2008-01-10 18:13:14 -0800 (Thu, 10 Jan 2008) Log Message: ----------- ?\226?\128?\162 Only build for native architecture in ?\226?\128?\156Debug?\226?\128?\157 builds ?\226?\128?\162?\194?\160Changed to a valid CFBundleSignature to silence a warning Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj armagetronad/branches/0.2.8/armagetronad/src/macosx/Info.plist Modified: armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj =================================================================== --- armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj 2008-01-11 01:41:32 UTC (rev 7500) +++ armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj 2008-01-11 02:13:14 UTC (rev 7501) @@ -1863,6 +1863,7 @@ 8CBA5D45089EE60D007E21DC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; COPY_PHASE_STRIP = NO; FRAMEWORK_SEARCH_PATHS = /Library/Frameworks/ArmagetronAdvanced/current/; GCC_DYNAMIC_NO_PIC = NO; Modified: armagetronad/branches/0.2.8/armagetronad/src/macosx/Info.plist =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/macosx/Info.plist 2008-01-11 01:41:32 UTC (rev 7500) +++ armagetronad/branches/0.2.8/armagetronad/src/macosx/Info.plist 2008-01-11 02:13:14 UTC (rev 7501) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> @@ -17,7 +17,7 @@ <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleSignature</key> - <string>armagetronAdvanced_X</string> + <string>????</string> <key>NSMainNibFile</key> <string>SDLMain</string> <key>NSPrincipalClass</key> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <nem...@us...> - 2008-01-11 07:16:55
|
Revision: 7503 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7503&view=rev Author: nemostultae Date: 2008-01-10 23:16:57 -0800 (Thu, 10 Jan 2008) Log Message: ----------- ?\226?\128?\162 Only build for native architecture in dedicated ?\226?\128?\156Debug?\226?\128?\157 builds as well. ?\226?\128?\162 Remove package files build step from dedicated target ?\226?\128?\162 Pass in useful command-line arguments for dedicated target (--datadir, etc?\226?\128?\166) ?\226?\128?\162 Added ?\226?\128?\156Create Client Release?\226?\128?\157, ?\226?\128?\156Create Dedicated Release?\226?\128?\157, and ?\226?\128?\156Create Full Release?\226?\128?\157 targets. The disk images are placed in $BUILT_PRODUCTS_DIR (build/Release usually). The ?\226?\128?\156Create Client Release?\226?\128?\157 target checks to see if you have an $AA_RECORDER_APP environment variable set, and if you do the recorder app will be included in the disk image. For example I have in my .bash_profile: AA_RECORDER_APP="/Users/Shared/Applications/Games/Armagetron Advanced Recorder.app" ?\226?\128?\162 Changed a few svn:ignore properties to ignore generated files ?\226?\128?\162 dmg-convert, dmg-create ?\226?\134?\146 added ?\226?\128?\162 Updated README-Subversion with new information about targets Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj armagetronad/branches/0.2.8/armagetronad/README-Subversion Added Paths: ----------- armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-convert armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-create Property Changed: ---------------- armagetronad/branches/0.2.8/armagetronad/ armagetronad/branches/0.2.8/armagetronad/src/macosx/ armagetronad/branches/0.2.8/armagetronad/src/macosx/English.lproj/ Property changes on: armagetronad/branches/0.2.8/armagetronad ___________________________________________________________________ Name: svn:ignore - 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 .version.new .cvsfiles stamp-h1 touch universal_variable_substitutions universal_variable_values.in universal_variables extrapaths universal_variable_values_makefile + 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 .version.new .cvsfiles stamp-h1 touch universal_variable_substitutions universal_variable_values.in universal_variables extrapaths universal_variable_values_makefile macosx_build_information.yml Modified: armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj =================================================================== --- armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj 2008-01-11 07:06:39 UTC (rev 7502) +++ armagetronad/branches/0.2.8/armagetronad/MacOS/Armagetron Advanced.xcodeproj/project.pbxproj 2008-01-11 07:16:57 UTC (rev 7503) @@ -6,6 +6,44 @@ objectVersion = 42; objects = { +/* Begin PBXAggregateTarget section */ + 9B8A49B90D3708A30094FB81 /* Create Dedicated Release */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 9B8A49C80D37095A0094FB81 /* Build configuration list for PBXAggregateTarget "Create Dedicated Release" */; + buildPhases = ( + 9B8A49B80D3708A30094FB81 /* ShellScript */, + ); + dependencies = ( + ); + name = "Create Dedicated Release"; + productName = "Create Release"; + }; + 9B8A49BE0D3708E10094FB81 /* Create Full Release */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 9B8A49C90D37095A0094FB81 /* Build configuration list for PBXAggregateTarget "Create Full Release" */; + buildPhases = ( + ); + dependencies = ( + 9B8A49FD0D374AC90094FB81 /* PBXTargetDependency */, + 9B8A49FF0D374ACD0094FB81 /* PBXTargetDependency */, + ); + name = "Create Full Release"; + productName = Aggregate; + }; + 9B8A49C20D3709170094FB81 /* Create Client Release */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 9B8A49C70D37095A0094FB81 /* Build configuration list for PBXAggregateTarget "Create Client Release" */; + buildPhases = ( + 9B8A49C10D3709170094FB81 /* ShellScript */, + ); + dependencies = ( + 9B8A49C60D3709270094FB81 /* PBXTargetDependency */, + ); + name = "Create Client Release"; + productName = "Create Client Release"; + }; +/* End PBXAggregateTarget section */ + /* Begin PBXBuildFile section */ 6459A1320D2AE2B40042EFE8 /* libpng.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B5414A20A45C78200745CE6 /* libpng.framework */; }; 64C038B70D2E84E500810BB1 /* config_common.h.in in Resources */ = {isa = PBXBuildFile; fileRef = 64C038B60D2E84E500810BB1 /* config_common.h.in */; }; @@ -352,6 +390,30 @@ 9B69F6280A63E1A700F5F2E4 /* eLagCompensation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B69F6220A63E1A700F5F2E4 /* eLagCompensation.h */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 9B8A49C50D3709270094FB81 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8D1107260486CEB800E47090 /* Armagetron Advanced */; + remoteInfo = "Armagetron Advanced"; + }; + 9B8A49FC0D374AC90094FB81 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9B8A49C20D3709170094FB81 /* Create Client Release */; + remoteInfo = "Create Client Release"; + }; + 9B8A49FE0D374ACD0094FB81 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9B8A49B90D3708A30094FB81 /* Create Dedicated Release */; + remoteInfo = "Create Dedicated Release"; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 8CB97ABB096265A800AE8BCD /* Copy Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -1087,7 +1149,6 @@ 8CAD914E095A392A00DA0ECC /* Headers */, 8C11CA3F095A268E007AE0EA /* Sources */, 8C11CA40095A268E007AE0EA /* Frameworks */, - 8CAD91B7095A459400DA0ECC /* Sort Package */, ); buildRules = ( ); @@ -1159,6 +1220,9 @@ 8D1107260486CEB800E47090 /* Armagetron Advanced */, 8CB97AAC096265A800AE8BCD /* Armagetron Advanced 10.2.8 */, 8C11CA41095A268E007AE0EA /* Armagetron Advanced Dedicated */, + 9B8A49C20D3709170094FB81 /* Create Client Release */, + 9B8A49B90D3708A30094FB81 /* Create Dedicated Release */, + 9B8A49BE0D3708E10094FB81 /* Create Full Release */, ); }; /* End PBXProject section */ @@ -1261,20 +1325,6 @@ shellPath = "/bin/bash -l"; shellScript = "# Sort map resources\n\ntop_level=..\n\n# Only run this script when it is a CVS build\nif [ \"`ruby -ryaml -e 'print YAML.load_file(\\\"../macosx_build_information.yml\\\")[:kind]'`\" = \"CVS\" ]\nthen\n\tsh \"${top_level}/batch/make/sortresources\" \"${top_level}/resource/proto\" \"${top_level}/resource/included\" \"${top_level}/batch/make/sortresources.py\"\nfi"; }; - 8CAD91B7095A459400DA0ECC /* Sort Package */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Sort Package"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = "/bin/bash -l"; - shellScript = "package_dir=\"${TARGET_BUILD_DIR}/Armagetron Advanced Dedicated\"\ntop_level=..\n\n#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n#\n# Create a directory and put the needed files inside\n#\n#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\nif [ -d \"${package_dir}\" ]\nthen\n\trm -rf \"${package_dir}\"\nfi\n\nmkdir \"${package_dir}\"\necho \"${TARGET_BUILD_DIR}/${TARGET_NAME}\"\ncp \"${TARGET_BUILD_DIR}/armagetronad-dedicated\" \"${package_dir}\"\n\nfor copy_me in \"${top_level}/config\" \"${top_level}/language\" \"${top_level}/resource\"\ndo\n\tcp -R \"${copy_me}\" \"${package_dir}\"\ndone\n\n\n\n#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n#\n# Remove useless files\n#\n#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\nrm -rf \"${package_dir}/resource/proto\"\nfind \"${package_dir}\" -depth -type d -name CVS -exec rm -rf \\{\\} \\;\nfor a in \"*.am\" \"*.in\" \"*.h\" \"astylerc\" \".cvsignore\"\ndo\n\tfind \"${package_dir}\" -name \"${a}\" -exec rm -f \\{\\} \\;\ndone"; - }; 8CB97AAD096265A800AE8BCD /* Process Files */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1359,6 +1409,32 @@ shellPath = "/bin/bash -l"; shellScript = "# Change the libpng to the one in the Frameworks/ directory\n# UPDATE: moved to libpng framework. This is not needed anymore. It is kept here for future reference.\n\n# install_name_tool -change /usr/local/lib/libpng12.0.dylib @executable_path/../Frameworks/libpng12.0.dylib \\\n# \"${TARGET_BUILD_DIR}/${TARGET_NAME}.app/Contents/MacOS/${TARGET_NAME}\"\n"; }; + 9B8A49B80D3708A30094FB81 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/bash; + shellScript = "TMPDIR=\"${TEMP_FILES_DIR}\"\nto_package_dir=$(mktemp -dt armagetronad)\nversion=$(ruby -ryaml -e \"print YAML.load_file('../macosx_build_information.yml')[:version]\")\nfinal_dmg=\"${BUILT_PRODUCTS_DIR}/armagetronad-dedicated-${version}.macosx-universal\"\n\ntest -f \"${final_dmg}.dmg\" && rm \"${final_dmg}.dmg\"\n\nprog_dir=\"${to_package_dir}/Armagetron Advanced Dedicated\"\nmkdir \"${prog_dir}\"\n\ncp \"${TARGET_BUILD_DIR}/armagetronad-dedicated\" \"${prog_dir}\"\nfor copy_me in \"../config\" \"../language\" \"../resource\"\ndo\n\tcp -R \"${copy_me}\" \"${prog_dir}\"\ndone\n\n\nrm -rf \"${prog_dir}/resource/proto\"\nfind \"${prog_dir}\" -depth -type d -name .svn -exec rm -rf \\{\\} \\;\nfor a in \"*.am\" \"*.in\" \"*.h\" \"astylerc\"\ndo\n\tfind \"${prog_dir}\" -name \"${a}\" -exec rm -f \\{\\} \\;\ndone\n\n\nuncompressed_dmg=$(./build_tools/dmg-create \"${to_package_dir}\" \"Armagetron Advanced Dedicated\")\n\n./build_tools/dmg-convert \"${uncompressed_dmg}\" \"${final_dmg}\"\nrm \"${uncompressed_dmg}\"\nrm -r \"${prog_dir}\"\n"; + }; + 9B8A49C10D3709170094FB81 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = "/bin/bash -l"; + shellScript = "TMPDIR=\"${TEMP_FILES_DIR}\"\nto_package_dir=$(mktemp -dt armagetronad)\nversion=$(ruby -ryaml -e \"print YAML.load_file('../macosx_build_information.yml')[:version]\")\nfinal_dmg=\"${BUILT_PRODUCTS_DIR}/armagetronad-${version}.macosx-universal\"\n\ntest -f \"${final_dmg}.dmg\" && rm \"${final_dmg}.dmg\"\n\ncp -R \"${BUILT_PRODUCTS_DIR}/Armagetron Advanced.app\" \"${to_package_dir}\"\n\nif [ -n \"${AA_RECORDER_APP}\" ]\nthen\n\tcp -R \"${AA_RECORDER_APP}\" \"${to_package_dir}\"\nfi\n\nuncompressed_dmg=$(./build_tools/dmg-create \"${to_package_dir}\" \"Armagetron Advanced\")\n\n./build_tools/dmg-convert \"${uncompressed_dmg}\" \"${final_dmg}\"\nrm \"${uncompressed_dmg}\""; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -1683,6 +1759,24 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 9B8A49C60D3709270094FB81 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8D1107260486CEB800E47090 /* Armagetron Advanced */; + targetProxy = 9B8A49C50D3709270094FB81 /* PBXContainerItemProxy */; + }; + 9B8A49FD0D374AC90094FB81 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9B8A49C20D3709170094FB81 /* Create Client Release */; + targetProxy = 9B8A49FC0D374AC90094FB81 /* PBXContainerItemProxy */; + }; + 9B8A49FF0D374ACD0094FB81 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9B8A49B90D3708A30094FB81 /* Create Dedicated Release */; + targetProxy = 9B8A49FE0D374ACD0094FB81 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 8C6EF51B08A32A0500816348 /* InfoPlist.strings */ = { isa = PBXVariantGroup; @@ -1698,6 +1792,7 @@ 8C11CA47095A269A007AE0EA /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ARCHS = "$(NATIVE_ARCH)"; COPY_PHASE_STRIP = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_MODEL_TUNING = G5; @@ -1983,6 +2078,69 @@ }; name = Release; }; + 9B8A49BA0D3708A30094FB81 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "Create Release"; + }; + name = Debug; + }; + 9B8A49BB0D3708A30094FB81 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = "Create Release"; + ZERO_LINK = NO; + }; + name = Release; + }; + 9B8A49BF0D3708E10094FB81 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = Aggregate; + }; + name = Debug; + }; + 9B8A49C00D3708E10094FB81 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = Aggregate; + ZERO_LINK = NO; + }; + name = Release; + }; + 9B8A49C30D3709180094FB81 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + PRODUCT_NAME = "Create Client Release"; + }; + name = Debug; + }; + 9B8A49C40D3709180094FB81 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_FIX_AND_CONTINUE = NO; + PRODUCT_NAME = "Create Client Release"; + ZERO_LINK = NO; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2022,6 +2180,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 9B8A49C70D37095A0094FB81 /* Build configuration list for PBXAggregateTarget "Create Client Release" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B8A49C30D3709180094FB81 /* Debug */, + 9B8A49C40D3709180094FB81 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9B8A49C80D37095A0094FB81 /* Build configuration list for PBXAggregateTarget "Create Dedicated Release" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B8A49BA0D3708A30094FB81 /* Debug */, + 9B8A49BB0D3708A30094FB81 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9B8A49C90D37095A0094FB81 /* Build configuration list for PBXAggregateTarget "Create Full Release" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9B8A49BF0D3708E10094FB81 /* Debug */, + 9B8A49C00D3708E10094FB81 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; Added: armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-convert =================================================================== --- armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-convert (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-convert 2008-01-11 07:16:57 UTC (rev 7503) @@ -0,0 +1,7 @@ +#!/bin/bash +# usage: dmg-convert <uncompressed-dmg> <save-as> + +udmg="${1}" +saveas="${2}" + +hdiutil convert "${udmg}" -format UDZO -o "${saveas}" Property changes on: armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-convert ___________________________________________________________________ Name: svn:executable + * Added: armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-create =================================================================== --- armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-create (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-create 2008-01-11 07:16:57 UTC (rev 7503) @@ -0,0 +1,9 @@ +#!/bin/bash +# usage: dmg-create <srcdir> <volname> +# prints created dmg out to stdout + +srcdir="${1}" +volname="${2}" + +dmg=$(mktemp -t armagetronad) +hdiutil create -srcdir "${srcdir}" -format UDIF "${dmg}" -volname "${volname}" 2>&1 > /dev/null && echo "${dmg}.dmg" Property changes on: armagetronad/branches/0.2.8/armagetronad/MacOS/build_tools/dmg-create ___________________________________________________________________ Name: svn:executable + * Modified: armagetronad/branches/0.2.8/armagetronad/README-Subversion =================================================================== --- armagetronad/branches/0.2.8/armagetronad/README-Subversion 2008-01-11 07:06:39 UTC (rev 7502) +++ armagetronad/branches/0.2.8/armagetronad/README-Subversion 2008-01-11 07:16:57 UTC (rev 7503) @@ -62,11 +62,17 @@ == Armagetron Advanced.xcodeproj -This will only open in Xcode >= 2.1. It has three targets: +This will only open in Xcode >= 2.1. It has these targets: * Armagetron Advanced -- The client * Armagetron Advanced 10.2.8 -- The client for Mac OS X 10.2.8 * Armagetron Advanced Dedicated -- Dedicated Server +* Create Client Release -- Create a distributable disk image of the client. This target checks to see if you have an $AA_RECORDER_APP environment variable set, and if you do the recorder app will be included in the disk image. For example I have in my .bash_profile: + AA_RECORDER_APP="/Users/Shared/Applications/Games/Armagetron Advanced Recorder.app" + +* Create Dedicated Release -- Create a distributable disk image of the dedicated server. +* Create Full Release -- Runs both "Create Client Release" and "Create Dedicated Release" + Armagetron Advanced requires: * SDL.framework * SDL_mixer.framework Property changes on: armagetronad/branches/0.2.8/armagetronad/src/macosx ___________________________________________________________________ Name: svn:ignore + config_common.h Property changes on: armagetronad/branches/0.2.8/armagetronad/src/macosx/English.lproj ___________________________________________________________________ Name: svn:ignore + InfoPlist.strings This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-17 13:27:23
|
Revision: 7530 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7530&view=rev Author: z-man Date: 2008-01-17 05:26:51 -0800 (Thu, 17 Jan 2008) Log Message: ----------- Committed version 3 of the friends patch by tank. Version 3.1 pending, I have problems applying it, and want to check what svn diff says. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/Makefile.am armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-16 19:08:01 UTC (rev 7529) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-17 13:26:51 UTC (rev 7530) @@ -1361,6 +1361,13 @@ bookmarks_menu_name_help The name of the server. This is used only for display, not functional purposes. bookmarks_menu_connect Connect to \1 +friends_menu Mates +friends_menu_help Edit your mates. +friends_enable Mates Enabled +friends_enable_help Turn on/off friends mates filtering. +friend_word Mate +friend_help If a server has this name on its players list, it will show when filtering is on. + #******************************************** #******************************************** # @@ -2294,7 +2301,7 @@ network_master_score Score network_master_users Users network_master_ping Ping -network_master_browserhelp Press "Enter" to connect to this server, "p" to refresh a single server, "r" to refresh the whole list, "+/-" to set the score bias for this server, "cursor left/right" to change the sorting key, or "b" to add the server to your bookmarks. +network_master_browserhelp Press "Enter" to connect to this server, "p" to refresh a single server, "r" to refresh the whole list, "+/-" to set the score bias for this server, "cursor left/right" to change the sorting key, or "b" to add the server to your bookmarks. "m" toggles mates filtering. network_master_connecting Connecting to \1...\n network_master_send Sending my server info...\n network_master_reqlist Requesting server list...\n Modified: armagetronad/branches/0.2.8/armagetronad/src/Makefile.am =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/Makefile.am 2008-01-16 19:08:01 UTC (rev 7529) +++ armagetronad/branches/0.2.8/armagetronad/src/Makefile.am 2008-01-17 13:26:51 UTC (rev 7530) @@ -104,6 +104,7 @@ tron/gSensor.cpp tron/gSensor.h tron/gServerBrowser.cpp tron/gServerBrowser.h tron/gSparks.cpp tron/gSparks.h\ tron/gSpawn.cpp tron/gSpawn.h tron/gStuff.cpp tron/gStuff.h tron/gTeam.cpp tron/gTeam.h tron/gWall.cpp\ tron/gWall.h tron/gWinZone.cpp tron/gWinZone.h\ + tron/gFriends.h tron/gFriends.cpp\ tron/gServerFavorites.h tron/gServerFavorites.cpp libui_a_SOURCES=ui/uInput.cpp ui/uInput.h ui/uInputQueue.cpp ui/uInputQueue.h ui/uMenu.cpp ui/uMenu.h Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-16 19:08:01 UTC (rev 7529) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-17 13:26:51 UTC (rev 7530) @@ -57,6 +57,7 @@ #include "gCamera.h" #include "gServerBrowser.h" #include "gServerFavorites.h" +#include "gFriends.h" #include "gLogo.h" #include "gLanguageMenu.h" #include "nServerInfo.h" @@ -2342,6 +2343,10 @@ (&net_menu,"$bookmarks_menu", "$bookmarks_menu_help",&gServerFavorites::FavoritesMenu); + uMenuItemFunction bud + (&net_menu,"$friends_menu", + "$friends_menu_help",&gFriends::FriendsMenu); + uMenuItemFunction opt (&net_menu,"$network_opts_text", "$network_opts_help",&net_options); Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-16 19:08:01 UTC (rev 7529) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-17 13:26:51 UTC (rev 7530) @@ -29,6 +29,7 @@ #include "gGame.h" #include "gLogo.h" #include "gServerFavorites.h" +#include "gFriends.h" #include "nServerInfo.h" #include "nNetwork.h" @@ -67,12 +68,24 @@ { public: gServerMenuItem *menuItem; + bool show; //for server browser hiding - gServerInfo():menuItem(NULL) + gServerInfo():menuItem(NULL), show(true) { }; virtual ~gServerInfo(); + + // during browsing, the whole server list consists of gServerInfos + static gServerInfo * GetFirstServer() + { + return dynamic_cast< gServerInfo * >( nServerInfo::GetFirstServer() ); + } + + gServerInfo * Next() + { + return dynamic_cast< gServerInfo * >( nServerInfo::Next() ); + } }; nServerInfo* CreateGServer() @@ -285,15 +298,20 @@ switch (event.key.keysym.sym) { case(SDLK_LEFT): - sortKey_ = ( sortKey_ + nServerInfo::KEY_MAX-1 ) % nServerInfo::KEY_MAX; + sortKey_ = ( sortKey_ + nServerInfo::KEY_MAX-1 ) % nServerInfo::KEY_MAX; Update(); return; break; case(SDLK_RIGHT): - sortKey_ = ( sortKey_ + 1 ) % nServerInfo::KEY_MAX; + sortKey_ = ( sortKey_ + 1 ) % nServerInfo::KEY_MAX; Update(); return; break; + case(SDLK_m): + FriendsToggle(); + Update(); + return; + break; default: break; } @@ -322,29 +340,62 @@ // get currently selected server gServerMenuItem *item = NULL; if ( selected < items.Len() ) + { item = dynamic_cast<gServerMenuItem*>(items(selected)); + } gServerInfo* info = NULL; if ( item ) { info = item->GetServer(); } + // keep the cursor position relative to the top, if possible + int selectedFromTop = items.Len() - selected; + ReverseItems(); nServerInfo::CalcScoreAll(); nServerInfo::Sort( nServerInfo::PrimaryKey( sortKey_ ) ); int mi = 1; - nServerInfo *run = nServerInfo::GetFirstServer(); + gServerInfo *run = gServerInfo::GetFirstServer(); + bool oneFound = false; //so we can display all if none were found while (run) { - if (mi >= items.Len()) - tNEW(gServerMenuItem)(this); + //check friend filter + if (getFriendsEnabled()) + { + run->show = false; + int i; + tString userNames = run->UserNames(); + tString* friends = getFriends(); + for (i = MAX_FRIENDS; i>=0; i--) + { + if (run->Users() > 0 && friends[i].Len() > 1 && userNames.StrPos(friends[i]) >= 0) + { + oneFound = true; + run->show = true; + } + } + } + run = run->Next(); + } - gServerMenuItem *item = dynamic_cast<gServerMenuItem*>(items(mi)); - item->SetServer(run); - run = run->Next(); - mi ++; + run = gServerInfo::GetFirstServer(); + { + while (run) + { + if (run->show || oneFound == false) + { + if (mi >= items.Len()) + tNEW(gServerMenuItem)(this); + + gServerMenuItem *item = dynamic_cast<gServerMenuItem*>(items(mi)); + item->SetServer(run); + mi++; + } + run = run->Next(); + } } if (items.Len() == 1) @@ -358,7 +409,10 @@ ReverseItems(); - // set cursor to currently selected server + // keep the cursor position relative to the top, if possible ( calling function will handle the clamping ) + selected = items.Len() - selectedFromTop; + + // set cursor to currently selected server, if possible if ( info && info->menuItem ) { selected = info->menuItem->GetID(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-18 22:20:44
|
Revision: 7546 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7546&view=rev Author: z-man Date: 2008-01-18 14:20:18 -0800 (Fri, 18 Jan 2008) Log Message: ----------- Added boolean return value to console (fullscreen) messages. Added escape possibility to server redirections. Removed redirection spam protection, it makes no sense any more. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.cpp armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.h armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.h Modified: armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-18 22:20:18 UTC (rev 7546) @@ -2237,7 +2237,7 @@ network_login_done Fertig!\n network_kill_log User \1 vom Server geworfen, Grund: \2\n -network_redirect \n\nDu wirst nun auf den Server \1:\2 weitergeleitet.\n +network_redirect \n\nDu wirst nun auf den Server \1:\2 weitergeleitet; du kannst das durch einen Druck auf ESC verhindern.\n network_kill_preface Vom Server angegebener Grund: network_kill_maxidgrabber Keine ObjektIDs mehr frei; Dein Client hatte die meisten davon f\xFCr sich selbst belegt ( Bug? ). network_kill_maxiduser Keine ObjektIDs mehr frei; Dein Client hatte die meisten davon belegt ( Bug? ). Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-18 22:20:18 UTC (rev 7546) @@ -2231,7 +2231,7 @@ network_login_done Done!\n network_kill_log User \1 kicked, reason given to him: \2\n -network_redirect \n\nYou will now be redirected to the server \1:\2.\n +network_redirect \n\nYou will now be redirected to the server \1:\2. You can prevent that by pressing ESC.\n network_kill_preface Reason given by server: network_kill_maxidgrabber It ran out of IDs; your client was the one occupying most of them for himself. The reason for this can be a bug. network_kill_maxiduser It ran out of IDs; your client was the one occupying most of them. Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.cpp 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.cpp 2008-01-18 22:20:18 UTC (rev 7546) @@ -230,13 +230,14 @@ s_callback = a_callback; } -void tConsole::Message(const tOutput& message, const tOutput& interpretation, REAL timeout){ +bool tConsole::Message(const tOutput& message, const tOutput& interpretation, REAL timeout){ if (s_callback) - (*s_callback)(message, interpretation, timeout); + return (*s_callback)(message, interpretation, timeout); else { con << tString(message) << ":\n"; con << tString(interpretation) << '\n'; + return true; } } Modified: armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.h 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/src/tools/tConsole.h 2008-01-18 22:20:18 UTC (rev 7546) @@ -70,7 +70,7 @@ { public: // callback for messages the user should read - typedef void MessageCallback(const tOutput& message, const tOutput& interpretation, REAL timeout); + typedef bool MessageCallback(const tOutput& message, const tOutput& interpretation, REAL timeout); virtual ~tConsole(); @@ -85,7 +85,7 @@ void CenterDisplay(tString s,REAL timeout=5,REAL r=1,REAL g=1,REAL b=1); // give a message to the user - static void Message(const tOutput& message, const tOutput& interpetation, REAL timeout = -1); + static bool Message(const tOutput& message, const tOutput& interpetation, REAL timeout = -1); virtual tString ColorString(REAL r, REAL g, REAL b) const; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-18 22:20:18 UTC (rev 7546) @@ -1950,7 +1950,7 @@ static bool sg_RequestedDisconnection = false; -static void sg_NetworkError( const tOutput& title, const tOutput& message, REAL timeout ) +static bool sg_NetworkError( const tOutput& title, const tOutput& message, REAL timeout ) { tOutput message2 ( message ); @@ -1968,7 +1968,7 @@ message2.Append( tOutput( "$network_redirect", redirect->GetConnectionName(), (int)redirect->GetPort() ) ); } - tConsole::Message( title, message2, timeout ); + return tConsole::Message( title, message2, timeout ); } // revert settings to defaults in the current scope @@ -2001,7 +2001,8 @@ } } -void ConnectToServerCore(nServerInfoBase *server) +// return code: false if there was an error or abort +bool ConnectToServerCore(nServerInfoBase *server) { tASSERT( server ); @@ -2053,7 +2054,7 @@ #ifndef DEDICATED se_SoundUnlock(); #endif - return; + return false; break; case nDENIED: @@ -2061,7 +2062,7 @@ #ifndef DEDICATED se_SoundUnlock(); #endif - return; + return false; break; } @@ -2102,16 +2103,18 @@ } } + bool ret = true; + if (!sg_RequestedDisconnection && !uMenu::quickexit) switch (sn_GetLastError()) { case nOK: - sg_NetworkError("$network_message_abortconn_title", - "$network_message_abortconn_inter", 20); + ret = sg_NetworkError("$network_message_abortconn_title", + "$network_message_abortconn_inter", 20); break; default: - sg_NetworkError("$network_message_lostconn_title", - "$network_message_lostconn_inter", 20); + ret = sg_NetworkError("$network_message_lostconn_title", + "$network_message_lostconn_inter", 20); break; } @@ -2125,17 +2128,19 @@ ePlayerNetID::ClearAll(); sr_textOut=to; + + return ret; } void ConnectToServer(nServerInfoBase *server) { - ConnectToServerCore( server ); + bool okToRedirect = ConnectToServerCore( server ); - REAL redirections = 0; - double lastTime = tSysTimeFloat(); + // REAL redirections = 0; + // double lastTime = tSysTimeFloat(); // check for redirection - while( true ) + while( okToRedirect ) { std::auto_ptr< nServerInfoBase > redirectTo( sn_GetRedirectTo() ); @@ -2145,8 +2150,9 @@ break; } - ConnectToServerCore( redirectTo.get() ); + okToRedirect = ConnectToServerCore( redirectTo.get() ); + /* // redirection spam chain protection, allow one redirection every 30 seconds. Should // be short enough to allow hacky applications (server-to-server teleport), but // long enough to allow players to escape via the menu or at least shift-esc. @@ -2164,6 +2170,7 @@ REAL dt = newTime - lastTime; lastTime = newTime; redirections *= 1/(1 + dt * maxRedirections * timeout ); + */ } } Modified: armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.cpp 2008-01-18 22:20:18 UTC (rev 7546) @@ -1037,8 +1037,8 @@ } - -void uMenu::Message(const tOutput& message, const tOutput& interpretation, REAL to){ +// return value: false only if the user pressed ESC +bool uMenu::Message(const tOutput& message, const tOutput& interpretation, REAL to){ #ifdef DEDICATED con << message << ":\n"; con << interpretation << '\n'; @@ -1103,6 +1103,8 @@ case SDLK_DOWN: offset += 1; continue; + case SDLK_ESCAPE: + return false; default: break; } @@ -1163,5 +1165,7 @@ sr_textOut = textOutBack; #endif + + return true; } Modified: armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.h 2008-01-18 18:59:22 UTC (rev 7545) +++ armagetronad/branches/0.2.8/armagetronad/src/ui/uMenu.h 2008-01-18 22:20:18 UTC (rev 7546) @@ -106,7 +106,7 @@ } // print a big message and a small interpretation - static void Message(const tOutput& message, const tOutput& interpretation, REAL timeout = -1); + static bool Message(const tOutput& message, const tOutput& interpretation, REAL timeout = -1); //! returns whether there is currently an active menu static bool MenuActive(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-19 01:38:21
|
Revision: 7547 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7547&view=rev Author: z-man Date: 2008-01-18 17:38:25 -0800 (Fri, 18 Jan 2008) Log Message: ----------- Added subcultures managed by one master server each. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/config/default.cfg armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.h armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.h Modified: armagetronad/branches/0.2.8/armagetronad/config/default.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/default.cfg 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/config/default.cfg 2008-01-19 01:38:25 UTC (rev 7547) @@ -3,8 +3,13 @@ # changes the systemwide defaults, but does not affect anyone who # has already played. +BOOKMARK__MASTER10_ADDRESS master1.armagetronad.net +BOOKMARK__MASTER10_NAME Competitions +BOOKMARK__MASTER10_PORT 4532 + SERVER_NAME Unnamed Server CM_LOCY -0.5 + KEYBOARD 333 PLAYER_BIND ZOOM_OUT 1 KEYBOARD 332 PLAYER_BIND ZOOM_IN 1 KEYBOARD 327 PLAYER_BIND BANK_DOWN 1 Modified: armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-19 01:38:25 UTC (rev 7547) @@ -1359,7 +1359,7 @@ bookmarks_menu Lieblings-Server bookmarks_menu_help Verwaltet die Lieblingsserver und initiiert Verbindungen. bookmarks_menu_edit Verwaltung -bookmarks_menu_edit_help Verwaltet die Lieblingsserver +bookmarks_menu_edit_help Verwaltet die Server bookmarks_menu_edit_slot Bearbeite \1 bookmarks_menu_address Adresse bookmarks_menu_address_help Die Adresse des Servers @@ -1367,6 +1367,9 @@ bookmarks_menu_name_help Der Name des Servers. Wird nur f\xFCr die Anzeige verwendet und hat keine Funktion, ist also frei w\xE4hlbar. bookmarks_menu_connect Verbindung zu \1 aufbauen +masters_menu Subkulturen +masters_menu_help Verbinde dich mit alternativen Gemeinschaften von Servern + friends_menu Meine Freunde friends_menu_help Trage hier deine Freude ein. friends_enable Meine Freude Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-19 01:38:25 UTC (rev 7547) @@ -1352,8 +1352,8 @@ bookmarks_menu Server Bookmarks bookmarks_menu_help Add, edit, and connect to your server bookmarks. -bookmarks_menu_edit Edit Bookmarks -bookmarks_menu_edit_help Edit and add server bookmarks. +bookmarks_menu_edit Edit +bookmarks_menu_edit_help Edit and add servers. bookmarks_menu_edit_slot Edit \1 bookmarks_menu_address Address bookmarks_menu_address_help The address of the server to connect to. @@ -1361,6 +1361,9 @@ bookmarks_menu_name_help The name of the server. This is used only for display, not functional purposes. bookmarks_menu_connect Connect to \1 +masters_menu Subcultures +masters_menu_help Add, edit, and connect to alternative master servers for special purposes. + friends_menu Mates friends_menu_help Edit your mates. friends_enable Mates Enabled Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.cpp 2008-01-19 01:38:25 UTC (rev 7547) @@ -1372,18 +1372,26 @@ } */ -tString MasterFile() +tString MasterFile( char const * suffix ) { - tString ret ( "frommaster.srv" ); - return ret; + std::ostringstream filename; + filename << "frommaster" << suffix << ".srv"; + return tString( filename.str().c_str() ); } -void nServerInfo::GetFromMaster(nServerInfo *masterInfo) +void nServerInfo::GetFromMaster(nServerInfoBase *masterInfo, char const * fileSuffix ) { sn_AcceptingFromMaster = true; + if ( !fileSuffix ) + { + fileSuffix = ""; + } + + bool multiMaster = false; if (!masterInfo) { + multiMaster = true; masterInfo = GetRandomMaster(); } @@ -1393,7 +1401,7 @@ DeleteAll(); // load all the servers we know - Load( tDirectories::Var(), MasterFile() ); + Load( tDirectories::Var(), MasterFile( fileSuffix ) ); // find the latest server we know about unsigned int latest=0; @@ -1418,8 +1426,16 @@ break; case nTIMEOUT: // delete the master and select a new one - delete masterInfo; - masterInfo = sn_masterList; + if ( multiMaster ) + { + delete masterInfo; + masterInfo = sn_masterList; + } + else + { + masterInfo = 0; + } + if ( masterInfo ) { con << tOutput( "$network_master_timeout_retry" ); @@ -1474,7 +1490,7 @@ o << "$network_master_finish"; con << o; - Save(tDirectories::Var(), MasterFile()); + Save(tDirectories::Var(), MasterFile( fileSuffix )); sn_SetNetState(nSTANDALONE); @@ -1563,7 +1579,7 @@ sn_SetNetState(nSTANDALONE); } -void nServerInfo::TellMasterAboutMe(nServerInfo *masterInfo) +void nServerInfo::TellMasterAboutMe(nServerInfoBase *masterInfo) { // don't reinitialize the network system nSocketResetInhibitor inhibitor; @@ -1583,12 +1599,12 @@ if (!masterInfo) { // recurse, logging in to all masters - masterInfo = GetMasters(); + nServerInfo * run = GetMasters(); - while ( masterInfo ) + while ( run ) { - TellMasterAboutMe( masterInfo ); - masterInfo = masterInfo->Next(); + TellMasterAboutMe( run ); + run = run->Next(); } return; Modified: armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/network/nServerInfo.h 2008-01-19 01:38:25 UTC (rev 7547) @@ -235,9 +235,9 @@ static nServerInfo* GetMasters(); //!< get the list of master servers static nServerInfo* GetRandomMaster(); //!< gets a random master server - static void GetFromMaster(nServerInfo *masterInfo=NULL); // get all the basic infos from the master server + static void GetFromMaster(nServerInfoBase *masterInfo=NULL, char const * fileSuffix = NULL ); // get all the basic infos from the master server, stored in the server info file of the given suffix - static void TellMasterAboutMe(nServerInfo *masterInfo=NULL); // dedicated server: tell master server about my existence + static void TellMasterAboutMe(nServerInfoBase *masterInfo=NULL); // dedicated server: tell master server about my existence static void GetFromLAN(unsigned int pollBeginPort=4534, unsigned int pollEndPort=4544); // get all the basic infos from a LAN broadcast Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-19 01:38:25 UTC (rev 7547) @@ -1876,7 +1876,9 @@ } if (sg_TalkToMaster) - nServerInfo::TellMasterAboutMe(); + { + nServerInfo::TellMasterAboutMe( gServerBrowser::CurrentMaster() ); + } sn_SetNetState(nSERVER); @@ -2345,6 +2347,9 @@ (&net_menu,"$network_custjoin_text", "$network_custjoin_help",&gServerFavorites::CustomConnectMenu); + uMenuItemFunction mas + (&net_menu,"$masters_menu", + "$masters_menu_help",&gServerFavorites::AlternativesMenu); uMenuItemFunction fav (&net_menu,"$bookmarks_menu", Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.cpp 2008-01-19 01:38:25 UTC (rev 7547) @@ -181,6 +181,21 @@ void gServerBrowser::BrowseMaster() { + BrowseSpecialMaster(0,""); +} + +// the currently active master +static nServerInfoBase * sg_currentMaster = 0; +nServerInfoBase * gServerBrowser::CurrentMaster() +{ + return sg_currentMaster; +} + + +void gServerBrowser::BrowseSpecialMaster( nServerInfoBase * master, char const * prefix ) +{ + sg_currentMaster = master; + sg_RequestLANcontinuously = false; sn_ServerInfoCreator *cback = nServerInfo::SetCreator(&CreateGServer); @@ -199,7 +214,7 @@ sr_textOut=true; nServerInfo::DeleteAll(); - nServerInfo::GetFromMaster(); + nServerInfo::GetFromMaster( master, prefix ); nServerInfo::Save(); // gLogo::SetBig(true); @@ -218,9 +233,10 @@ sg_TalkToMaster = false; nServerInfo::SetCreator(cback); + + sg_currentMaster = master; } - void gServerBrowser::BrowseLAN() { // TODO: reacivate and see what happens. Done. Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.h 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerBrowser.h 2008-01-19 01:38:25 UTC (rev 7547) @@ -29,16 +29,20 @@ #define ArmageTron_ServerBrowser_H class nServerInfo; +class nServerInfoBase; class gServerBrowser { public: static void BrowseFavorites(); // browse favorite servers - static void BrowseMaster(); // browse servers from master server + static void BrowseMaster(); // browse servers from the central master servers + static void BrowseSpecialMaster( nServerInfoBase * master, char const * prefix ); // browse servers from a special master server static void BrowseLAN(); // browse servers in the LAN static void BrowseServers(); // browse the servers currently in the list static void ConfigurationMenu(); // browser configuration menu + static nServerInfoBase * CurrentMaster(); // the currently active master server + static int lowPort, highPort; }; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 01:38:25 UTC (rev 7547) @@ -62,10 +62,10 @@ */ typedef nServerInfoRedirect gServerInfoFavorite; -static tString sg_ConfName( int ID, char const * name ) +static tString sg_ConfName( int ID, char const * prefix, char const * name ) { std::stringstream s; - s << "BOOKMARK_" << ID+1 << name; + s << "BOOKMARK_" << prefix << ID+1 << name; return tString( s.str().c_str() ); } @@ -77,13 +77,13 @@ friend class gServerFavoritesHolder; //! constructor - gServerFavorite( int ID ) + gServerFavorite( int ID, char const * prefix ) : name_( "" ) , port_( sn_defaultPort ) , index_( ID ) - , confName_( sg_ConfName( ID, "_NAME") ,name_ ) - , confAddress_( sg_ConfName( ID, "_ADDRESS"), address_ ) - , confPort( sg_ConfName( ID, "_PORT"), port_ ) + , confName_( sg_ConfName( ID, prefix, "_NAME") ,name_ ) + , confAddress_( sg_ConfName( ID, prefix, "_ADDRESS"), address_ ) + , confPort( sg_ConfName( ID, prefix, "_PORT"), port_ ) { }; @@ -119,12 +119,12 @@ class gServerFavoritesHolder { public: - gServerFavoritesHolder() - :custom(-1) + gServerFavoritesHolder( char const * prefix ) + :custom(-1, prefix) { // generate favorites for (int i = NUM_FAVORITES-1; i>=0; --i ) - favorites[i] = new gServerFavorite( i ); + favorites[i] = new gServerFavorite( i, prefix ); } ~gServerFavoritesHolder() @@ -153,8 +153,11 @@ }; // server bookmarks -static gServerFavoritesHolder sg_holder; +static gServerFavoritesHolder sg_favoriteHolder(""); +// alternative master servers +static gServerFavoritesHolder sg_masterHolder("_MASTER"); + //! edit submenu item quitting the parent menu when it's done class gMenuItemEditSubmenu: public uMenuItemSubmenu { @@ -178,9 +181,32 @@ //! connect to a favorite server static void sg_ConnectFavorite( int ID ) { - sg_holder.GetFavorite(ID).Connect(); + sg_favoriteHolder.GetFavorite(ID).Connect(); } +//! browse servers on alternative master server +static void sg_AlternativeMaster( int ID ) +{ + // generate suffix for filename + std::stringstream suffix; + suffix << "_" << ID; + + // fetch server info + gServerFavorite & favorite = sg_masterHolder.GetFavorite(ID); + gServerInfoFavorite fav( favorite.address_, favorite.port_ ); + + // browse master info + gServerBrowser::BrowseSpecialMaster( &fav, suffix.str().c_str() ); +} + +// current connection function +static INTFUNCPTR sg_Connect = &sg_ConnectFavorite; +// current server holder +static gServerFavoritesHolder * sg_holder = &sg_favoriteHolder; +// current minimal port accessible in the menu +static int sg_lowPort = gServerBrowser::lowPort; +// yeah, this could all be more elegant. + //! conglomerate of menus and entries for custom connect class gCustomConnectEntries { @@ -189,8 +215,8 @@ { // prepare output reading "Edit <server name>" // create menu items (autodeleted when the edit menu is killed) - tNEW(uMenuItemFunctionInt) ( menu,"$network_custjoin_connect_text" ,"$network_custjoin_connect_help" ,&sg_ConnectFavorite, fav.GetIndex() ); - tNEW(uMenuItemInt) ( menu,"$network_custjoin_port_text","$network_custjoin_port_help", fav.port_, gServerBrowser::lowPort, gServerBrowser::highPort); + tNEW(uMenuItemFunctionInt) ( menu,"$network_custjoin_connect_text" ,"$network_custjoin_connect_help", sg_Connect, fav.GetIndex() ); + tNEW(uMenuItemInt) ( menu,"$network_custjoin_port_text","$network_custjoin_port_help", fav.port_, sg_lowPort, gServerBrowser::highPort ); tNEW(uMenuItemString) ( menu,"$bookmarks_menu_address","$bookmarks_menu_address_help",fav.address_); } @@ -262,7 +288,7 @@ // create menu entries gServerFavoriteMenuEntries * entries[ NUM_FAVORITES ]; for ( i = NUM_FAVORITES-1; i>=0; --i ) - entries[i] = tNEW( gServerFavoriteMenuEntries )( sg_holder.GetFavorite(i), edit_menu ); + entries[i] = tNEW( gServerFavoriteMenuEntries )( sg_holder->GetFavorite(i), edit_menu ); // enter menu edit_menu.Enter(); @@ -300,7 +326,7 @@ // create new connection items for ( int i = NUM_FAVORITES-1; i>=0; --i ) { - gServerFavorite & fav = sg_holder.GetFavorite(i); + gServerFavorite & fav = sg_holder->GetFavorite(i); if (fav.name_ != "" && fav.name_ != "Empty" && fav.address_ != "") { @@ -308,7 +334,7 @@ fc.SetTemplateParameter(1,tColoredString::RemoveColors(fav.name_) ); fc << "$bookmarks_menu_connect"; - tNEW(uMenuItemFunctionInt)(sg_connectionMenu ,fc ,"$network_custjoin_connect_help" ,&sg_ConnectFavorite, i ); + tNEW(uMenuItemFunctionInt)(sg_connectionMenu ,fc ,"$network_custjoin_connect_help" , sg_Connect, i ); } } } @@ -333,17 +359,12 @@ } } -// ********************************************************************************************* -// * -// * FavoritesMenu -// * -// ********************************************************************************************* -//! -//! -// ********************************************************************************************* +static void sg_FavoritesMenu( INTFUNCPTR connect, gServerFavoritesHolder & holder, int lowPort ) +{ + sg_Connect = connect; + sg_holder = &holder; + sg_lowPort = lowPort; -void gServerFavorites::FavoritesMenu( void ) -{ sg_TransferCustomServer(); uMenu net_menu("$bookmarks_menu"); @@ -362,6 +383,34 @@ // ********************************************************************************************* // * +// * FavoritesMenu +// * +// ********************************************************************************************* +//! +//! +// ********************************************************************************************* + +void gServerFavorites::FavoritesMenu( void ) +{ + sg_FavoritesMenu( &sg_ConnectFavorite, sg_favoriteHolder, gServerBrowser::lowPort ); +} + +// ********************************************************************************************* +// * +// * AlternativesMenu +// * +// ********************************************************************************************* +//! +//! +// ********************************************************************************************* + +void gServerFavorites::AlternativesMenu( void ) +{ + sg_FavoritesMenu( &sg_AlternativeMaster, sg_masterHolder, gServerBrowser::lowPort - 10 ); +} + +// ********************************************************************************************* +// * // * CustomConnectMenu // * // ********************************************************************************************* @@ -376,7 +425,7 @@ uMenu net_menu("$network_custjoin_text"); sg_connectionMenu = & net_menu; - gServerFavorite & fav = sg_holder.GetFavorite(-1); + gServerFavorite & fav = sg_favoriteHolder.GetFavorite(-1); // create menu entries gCustomConnectEntries submenu( fav, &net_menu ); @@ -402,7 +451,7 @@ for ( int i = NUM_FAVORITES-1; i>=0; --i ) { - gServerFavorite & fav = sg_holder.GetFavorite(i); + gServerFavorite & fav = sg_favoriteHolder.GetFavorite(i); if (fav.name_ == "" || fav.name_ == "Empty") { @@ -435,7 +484,7 @@ for ( int i = NUM_FAVORITES-1; i>=0; --i ) { - gServerFavorite & fav = sg_holder.GetFavorite(i); + gServerFavorite & fav = sg_favoriteHolder.GetFavorite(i); if (fav.name_ != "" && fav.name_ != "Empty" && fav.address_ == server->GetConnectionName() && fav.port_ == static_cast< int >( server->GetPort() ) ) { Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.h 2008-01-18 22:20:18 UTC (rev 7546) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.h 2008-01-19 01:38:25 UTC (rev 7547) @@ -35,6 +35,9 @@ class gServerFavorites { public: + //! open the alternative masters + static void AlternativesMenu(); + //! open the favorites menu static void FavoritesMenu(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-19 10:30:26
|
Revision: 7551 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7551&view=rev Author: z-man Date: 2008-01-19 02:30:30 -0800 (Sat, 19 Jan 2008) Log Message: ----------- Default comptetition subculture for everyone. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/config/default.cfg armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp Added Paths: ----------- armagetronad/branches/0.2.8/armagetronad/config/subcultures.srv Modified: armagetronad/branches/0.2.8/armagetronad/config/default.cfg =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/default.cfg 2008-01-19 09:56:44 UTC (rev 7550) +++ armagetronad/branches/0.2.8/armagetronad/config/default.cfg 2008-01-19 10:30:30 UTC (rev 7551) @@ -3,10 +3,6 @@ # changes the systemwide defaults, but does not affect anyone who # has already played. -BOOKMARK__MASTER10_ADDRESS master1.armagetronad.net -BOOKMARK__MASTER10_NAME Competitions -BOOKMARK__MASTER10_PORT 4532 - SERVER_NAME Unnamed Server CM_LOCY -0.5 Added: armagetronad/branches/0.2.8/armagetronad/config/subcultures.srv =================================================================== --- armagetronad/branches/0.2.8/armagetronad/config/subcultures.srv (rev 0) +++ armagetronad/branches/0.2.8/armagetronad/config/subcultures.srv 2008-01-19 10:30:30 UTC (rev 7551) @@ -0,0 +1,8 @@ +ServerBegin +connection master1.armagetronad.net +port 4532 +method 0 +key 0 +tna 0 +name Competitions +ServerEnd Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 09:56:44 UTC (rev 7550) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 10:30:30 UTC (rev 7551) @@ -35,6 +35,7 @@ #include "uMenu.h" #include "tConfiguration.h" +#include "tDirectories.h" #include "gServerBrowser.h" #include "nServerInfo.h" @@ -144,6 +145,47 @@ tASSERT( favorites[index] ); return *favorites[index]; } + + bool AddFavorite( nServerInfoBase const * server ) + { + if ( !server ) + return false; + + for ( int i = NUM_FAVORITES-1; i>=0; --i ) + { + gServerFavorite & fav = GetFavorite(i); + + if (fav.name_ == "" || fav.name_ == "Empty") + { + fav.name_ = tColoredString::RemoveColors(server->GetName()); + fav.address_ = server->GetConnectionName(); + fav.port_ = server->GetPort(); + + return true; + } + } + + return false; +} + + bool IsFavorite( nServerInfoBase const * server ) + { + if ( !server ) + return false; + + for ( int i = NUM_FAVORITES-1; i>=0; --i ) + { + gServerFavorite & fav = GetFavorite(i); + + if (fav.name_ != "" && fav.name_ != "Empty" && fav.address_ == server->GetConnectionName() && fav.port_ == static_cast< int >( server->GetPort() ) ) + { + return true; + } + } + + return false; + } + private: // regular bookmarks gServerFavorite * favorites[NUM_FAVORITES]; @@ -406,6 +448,23 @@ void gServerFavorites::AlternativesMenu( void ) { + // load default subcultures + nServerInfo::Load( tDirectories::Config(), "subcultures.srv" ); + + // add them + nServerInfo * run = nServerInfo::GetFirstServer(); + while( run ) + { + if ( !sg_masterHolder.IsFavorite( run ) ) + { + sg_masterHolder.AddFavorite( run ); + } + + run = run->Next(); + } + + nServerInfo::DeleteAll(); + sg_FavoritesMenu( &sg_AlternativeMaster, sg_masterHolder, gServerBrowser::lowPort - 10 ); } @@ -446,24 +505,7 @@ bool gServerFavorites::AddFavorite( nServerInfoBase const * server ) { - if ( !server ) - return false; - - for ( int i = NUM_FAVORITES-1; i>=0; --i ) - { - gServerFavorite & fav = sg_favoriteHolder.GetFavorite(i); - - if (fav.name_ == "" || fav.name_ == "Empty") - { - fav.name_ = tColoredString::RemoveColors(server->GetName()); - fav.address_ = server->GetConnectionName(); - fav.port_ = server->GetPort(); - - return true; - } - } - - return false; + return sg_favoriteHolder.AddFavorite( server ); } // ********************************************************************************************* @@ -479,20 +521,7 @@ bool gServerFavorites::IsFavorite( nServerInfoBase const * server ) { - if ( !server ) - return false; - - for ( int i = NUM_FAVORITES-1; i>=0; --i ) - { - gServerFavorite & fav = sg_favoriteHolder.GetFavorite(i); - - if (fav.name_ != "" && fav.name_ != "Empty" && fav.address_ == server->GetConnectionName() && fav.port_ == static_cast< int >( server->GetPort() ) ) - { - return true; - } - } - - return false; + return sg_favoriteHolder.IsFavorite( server ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-19 11:38:16
|
Revision: 7553 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7553&view=rev Author: z-man Date: 2008-01-19 03:37:51 -0800 (Sat, 19 Jan 2008) Log Message: ----------- Minor corrections. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-19 11:15:21 UTC (rev 7552) +++ armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-19 11:37:51 UTC (rev 7553) @@ -2310,7 +2310,7 @@ network_master_score Bewertung network_master_users Benutzer network_master_ping Ping -network_master_browserhelp Dr\xFCcke Return/Enter, um eine Verbindung zu diesem Server aufzubauen, "p" um diesen Server anzuPingen, "r", um die gesamte Liste aufzufRischen, "+/-" um dem Server einen Bewertungsbonus/malus zu geben, "Pfeiltaste Links/Rechts" um die Sortierung zu \xE4ndern, oder "b", um den Server zu den LieBlingsservern hinzuzuf\xFCgen. +network_master_browserhelp Dr\xFCcke Return/Enter, um eine Verbindung aufzubauen, "p" um diesen Server anzuPingen, "r", um die Liste aufzufRischen, "+/-" um dem Server einen Bewertungsbonus/malus zu geben, "Pfeiltaste Links/Rechts" um die Sortierung zu \xE4ndern, "m", um den Meine-Freude-Filter ein/auszuschalten, oder "b", um den Server zu den LieBlingsservern hinzuzuf\xFCgen. network_master_connecting Verbindung mit \1 wird aufgebaut...\n network_master_send Schicke meine Daten...\n network_master_reqlist Fordere Server-Liste an...\n Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 11:15:21 UTC (rev 7552) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 11:37:51 UTC (rev 7553) @@ -449,6 +449,7 @@ void gServerFavorites::AlternativesMenu( void ) { // load default subcultures + nServerInfo::DeleteAll(); nServerInfo::Load( tDirectories::Config(), "subcultures.srv" ); // add them This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-19 13:35:26
|
Revision: 7554 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7554&view=rev Author: z-man Date: 2008-01-19 05:35:28 -0800 (Sat, 19 Jan 2008) Log Message: ----------- separated language strings of subculture menu from those of the server favorites. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-19 11:37:51 UTC (rev 7553) +++ armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-19 13:35:28 UTC (rev 7554) @@ -1340,9 +1340,6 @@ network_custjoin_name_text Servername: network_custjoin_name_help Der Rechnername oder die IP-Adresse des Rechners, auf dem der Server l\xE4uft -network_custjoin_connect_text Verbindung aufbauen -network_custjoin_connect_help Teleport zum Spieleraster! - #network host menu network_host_text Spiel leiten network_host_help Startet einen Server; andere Spieler k\xF6nnen sich dann verbinden. @@ -1367,9 +1364,23 @@ bookmarks_menu_name_help Der Name des Servers. Wird nur f\xFCr die Anzeige verwendet und hat keine Funktion, ist also frei w\xE4hlbar. bookmarks_menu_connect Verbindung zu \1 aufbauen +bookmarks_menu_edit_connect_text Verbindung aufbauen +bookmarks_menu_edit_connect_help Teleport zum Spieleraster! + masters_menu Subkulturen masters_menu_help Verbinde dich mit alternativen Gemeinschaften von Servern +masters_menu_edit Verwaltung +masters_menu_edit_help Verwaltet die Subkulturen +masters_menu_edit_slot Bearbeite \1 +masters_menu_address Adresse +masters_menu_address_help Die Adresse des Master-Servers, der die Subkultur verwaltet +masters_menu_name Name +masters_menu_name_help Der Name der Subkultur. Wird nur f\xFCr die Anzeige verwendet und hat keine Funktion, ist also frei w\xE4hlbar. +masters_menu_connect Mit Subkultur \1 verbinden +masters_menu_edit_connect_text Subkultur Betreten +masters_menu_edit_connect_help \xD6ffnet ein Master-Server-Browser-\xE4hliches Menu mit allen Servern dieser Subkultur + friends_menu Meine Freunde friends_menu_help Trage hier deine Freude ein. friends_enable Meine Freude Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-19 11:37:51 UTC (rev 7553) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-19 13:35:28 UTC (rev 7554) @@ -1334,9 +1334,6 @@ network_custjoin_name_text Server Name: network_custjoin_name_help The name or IP adress of the server you wish to join -network_custjoin_connect_text Connect To Server -network_custjoin_connect_help Enter the game grid! - #network host menu network_host_text Host Network Game network_host_help Start a server. @@ -1352,17 +1349,30 @@ bookmarks_menu Server Bookmarks bookmarks_menu_help Add, edit, and connect to your server bookmarks. -bookmarks_menu_edit Edit -bookmarks_menu_edit_help Edit and add servers. +bookmarks_menu_edit Edit Bookmarks +bookmarks_menu_edit_help Edit and add favorite servers. bookmarks_menu_edit_slot Edit \1 bookmarks_menu_address Address bookmarks_menu_address_help The address of the server to connect to. bookmarks_menu_name Name bookmarks_menu_name_help The name of the server. This is used only for display, not functional purposes. bookmarks_menu_connect Connect to \1 +bookmarks_menu_edit_connect_text Connect To Server +bookmarks_menu_edit_connect_help Enter the game grid! + masters_menu Subcultures masters_menu_help Add, edit, and connect to alternative master servers for special purposes. +masters_menu_edit Edit Subcultures +masters_menu_edit_help Edit and add subcultures. +masters_menu_edit_slot Edit \1 +masters_menu_address Address +masters_menu_address_help The address of the master server managing the subculture. +masters_menu_name Name +masters_menu_name_help The name of the subculture. This is used only for display, not functional purposes. +masters_menu_connect Browse \1 +masters_menu_edit_connect_text Browse Subculture +masters_menu_edit_connect_help Opens a master server like server browser specialized for servers of this subculture. friends_menu Mates friends_menu_help Edit your mates. Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 11:37:51 UTC (rev 7553) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gServerFavorites.cpp 2008-01-19 13:35:28 UTC (rev 7554) @@ -247,8 +247,27 @@ static gServerFavoritesHolder * sg_holder = &sg_favoriteHolder; // current minimal port accessible in the menu static int sg_lowPort = gServerBrowser::lowPort; +// current language id prefix +static char * sg_languageIDPrefix = "$bookmarks_"; // yeah, this could all be more elegant. +// generates a language string item fitting the current situation +static void sg_AddBookmarkString( char const * suffix, tOutput & addTo ) +{ + std::ostringstream s; + s << sg_languageIDPrefix; + s << suffix; + addTo << s.str().c_str(); +} + +// generates a language string item fitting the current situation +static tOutput sg_GetBookmarkString( char const * suffix ) +{ + tOutput ret; + sg_AddBookmarkString( suffix, ret ); + return ret; +} + //! conglomerate of menus and entries for custom connect class gCustomConnectEntries { @@ -257,9 +276,9 @@ { // prepare output reading "Edit <server name>" // create menu items (autodeleted when the edit menu is killed) - tNEW(uMenuItemFunctionInt) ( menu,"$network_custjoin_connect_text" ,"$network_custjoin_connect_help", sg_Connect, fav.GetIndex() ); + tNEW(uMenuItemFunctionInt) ( menu, sg_GetBookmarkString( "menu_edit_connect_text" ), sg_GetBookmarkString( "menu_edit_connect_help" ), sg_Connect, fav.GetIndex() ); tNEW(uMenuItemInt) ( menu,"$network_custjoin_port_text","$network_custjoin_port_help", fav.port_, sg_lowPort, gServerBrowser::highPort ); - tNEW(uMenuItemString) ( menu,"$bookmarks_menu_address","$bookmarks_menu_address_help",fav.address_); + tNEW(uMenuItemString) ( menu,sg_GetBookmarkString( "menu_address" ),sg_GetBookmarkString( "menu_address_help" ),fav.address_); } gCustomConnectEntries() @@ -285,7 +304,6 @@ gServerFavoriteMenuEntries( gServerFavorite & fav, uMenu & edit_menu ) { // prepare output reading "Edit <server name>" - tOutput fe; tString serverName = tColoredString::RemoveColors(fav.name_); if ( serverName == "" || serverName == "Empty" ) { @@ -294,8 +312,10 @@ serverName = s.str().c_str(); } + + tOutput fe; fe.SetTemplateParameter(1, serverName); - fe << "$bookmarks_menu_edit_slot"; + sg_AddBookmarkString( "menu_edit_slot", fe ); // create edit menu edit_ = tNEW(uMenu) (fe); @@ -303,7 +323,7 @@ Generate( fav, edit_ ); - tNEW(uMenuItemString) ( edit_,"$bookmarks_menu_name","$bookmarks_menu_name_help",fav.name_); + tNEW(uMenuItemString) ( edit_,sg_GetBookmarkString( "menu_name" ),sg_GetBookmarkString( "menu_name_help" ),fav.name_); } ~gServerFavoriteMenuEntries() @@ -325,7 +345,7 @@ int i; // create menu - uMenu edit_menu("$bookmarks_menu_edit"); + uMenu edit_menu(sg_GetBookmarkString( "menu_edit" ) ); // create menu entries gServerFavoriteMenuEntries * entries[ NUM_FAVORITES ]; @@ -372,11 +392,11 @@ if (fav.name_ != "" && fav.name_ != "Empty" && fav.address_ != "") { - tOutput fc; // Connect to "favn_name" + tOutput fc; fc.SetTemplateParameter(1,tColoredString::RemoveColors(fav.name_) ); - fc << "$bookmarks_menu_connect"; + sg_AddBookmarkString( "menu_connect", fc ); - tNEW(uMenuItemFunctionInt)(sg_connectionMenu ,fc ,"$network_custjoin_connect_help" , sg_Connect, i ); + tNEW(uMenuItemFunctionInt)(sg_connectionMenu ,fc ,sg_GetBookmarkString( "menu_edit_connect_help" ) , sg_Connect, i ); } } } @@ -409,10 +429,10 @@ sg_TransferCustomServer(); - uMenu net_menu("$bookmarks_menu"); + uMenu net_menu(sg_GetBookmarkString( "menu" ) ); sg_connectionMenu = & net_menu; - uMenuItemFunction edit(&net_menu,"$bookmarks_menu_edit", "$bookmarks_menu_edit_help",&sg_EditServers); + uMenuItemFunction edit(&net_menu,sg_GetBookmarkString( "menu_edit" ), sg_GetBookmarkString( "menu_edit_help" ),&sg_EditServers); sg_connectionMenuItemKeep = & edit; sg_GenerateConnectionItems(); @@ -434,6 +454,7 @@ void gServerFavorites::FavoritesMenu( void ) { + sg_languageIDPrefix = "$bookmarks_"; sg_FavoritesMenu( &sg_ConnectFavorite, sg_favoriteHolder, gServerBrowser::lowPort ); } @@ -466,6 +487,7 @@ nServerInfo::DeleteAll(); + sg_languageIDPrefix = "$masters_"; sg_FavoritesMenu( &sg_AlternativeMaster, sg_masterHolder, gServerBrowser::lowPort - 10 ); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-27 11:04:33
|
Revision: 7656 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7656&view=rev Author: z-man Date: 2008-01-27 03:04:37 -0800 (Sun, 27 Jan 2008) Log Message: ----------- Added OnRoundEnd() member function to eGameObject that is called after a round winner was declared and before the round ends. Implemented SCORE_SURVIVE for player survival and FORTRESS_HELD_SCORE for not losing each fortress zone with that. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-27 11:04:37 UTC (rev 7656) @@ -1,6 +1,8 @@ Changes since 0.2.8.2: New settings and commands: +- SCORE_SURVIVE for player survival and FORTRESS_HELD_SCORE for not losing + each fortress zone. - KICK_TO and MOVE_TO: redirect a client to a different server - DEFAULT_KICK(_TO)_MESSAGE: default reason given to players for a kick - DEFAULT_KICK_TO_SERVER/PORT: default redirection target for KICK/MOVE_TO. Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-27 11:04:37 UTC (rev 7656) @@ -139,6 +139,7 @@ enemy_currenttime_influence_help If set to 1, not the build time of the encountered wall, but the current time enters the comparison of enemy influences. Arbitrary blending values are allowed. enemy_suicide_timeout_help If no enemy influence can be found for the last this many seconds, a player's death counts as a suicide. score_die_help What you get for dying +score_survive_help What you get for surviving score_kill_help What you get for killing someone score_suicide_help What you get for stupidly dying score_win_help What you get for winning a round @@ -2069,6 +2070,7 @@ player_win_instant \1 was awarded \2 points for hitting the instant win zone.\n player_win_conquest \1 was awarded \2 points for conquering the enemy base.\n +player_win_held_fortress \1 was awarded \2 points for holding the base.\n player_win_conquest_specific \1 was awarded \2 points for conquering \3's base.\n player_kill_collapse \1 was eradicated by its collapsing zone.\n player_win_survive \1 was awarded \2 points for holding the base.\n @@ -2110,6 +2112,7 @@ player_lose_suicide \1 committed suicide and lost \2 points.\n player_free_suicide \1 committed suicide.\n player_win_frag \1 core dumped \3 for \2 points.\n +player_win_survive \1 got \2 points for surviving.\n player_free_frag \1 core dumped \2.\n player_teamkill \1 core dumped teammate \2! Boo! No points for that!\n player_win_frag_ai \1 got \2 points for core dumping an AI player.\n Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base_notranslate.txt 2008-01-27 11:04:37 UTC (rev 7656) @@ -100,6 +100,7 @@ camera_smart_glance_height_help Elevation of the smartcam when glancing # preliminary settings for fortress dynamics +fortress_held_score_help Score you get for holding your fortress. fortress_conquest_decay_rate_help Rate a fortress zone "recovers" from being conquered fortress_conquest_rate_help Rate a fortress zone gets conquered with for each enemy in it fortress_defend_rate_help Rate a fortress zone "recovers" for each defending player Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.cpp 2008-01-27 11:04:37 UTC (rev 7656) @@ -595,6 +595,8 @@ } // return value: shall this object be destroyed? +void eGameObject::OnRoundEnd(){} + void eGameObject::Kill(){} // draws it to the screen using OpenGL Modified: armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/engine/eGameObject.h 2008-01-27 11:04:37 UTC (rev 7656) @@ -150,13 +150,16 @@ return w; } - // destroys the gameobject (in the game) + //! called when the round ends + virtual void OnRoundEnd(); + + //! destroys the gameobject (in the game) virtual void Kill(); - // tells whether the object is alive + //! tells whether the object is alive virtual bool Alive() const {return false;} - // draws it to the screen using OpenGL + //! draws object to the screen using OpenGL virtual void Render(const eCamera *cam); // draws the cockpit or whatever is seen from the interior Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-01-27 11:04:37 UTC (rev 7656) @@ -204,8 +204,9 @@ //static bool moviepack_hack=false; // do we use it? //static tSettingItem<bool> ump("MOVIEPACK_HACK",moviepack_hack); +static int score_survive=0; +static tSettingItem<int> s_sur("SCORE_SURVIVE",score_survive); - static int score_die=-2; static tSettingItem<int> s_d("SCORE_DIE",score_die); @@ -2342,6 +2343,17 @@ gCycleMovement::RemoveFromGame(); } +// called when the round ends +void gCycle::OnRoundEnd() +{ + // give survival bonus + if ( Alive() && player ) + { + player->AddScore( score_survive, tOutput("$player_win_survive"), tOutput() ); + } +} + + static inline void rotate(eCoord &r,REAL angle){ REAL x=r.x; r.x+=r.y*angle; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h 2008-01-27 11:04:37 UTC (rev 7656) @@ -201,6 +201,8 @@ virtual void RemoveFromGame(); // call this instead of the destructor + virtual void OnRoundEnd(); //!< called when the round ends + // virtual REAL DoGetDistanceSinceLastTurn ( ) const ; //!< returns the distance since the last turn public: virtual void Die ( REAL time ) ; //!< dies at the specified time Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gGame.cpp 2008-01-27 11:04:37 UTC (rev 7656) @@ -3018,6 +3018,7 @@ extern REAL sent_per_messid[100]; static REAL lastdeath=0; +static bool roundOver=false; // flag set when the round winner is declared static void sg_VoteMenuIdle() { @@ -3131,6 +3132,7 @@ // con << "Creating objects...\n"; lastdeath = -100; + roundOver = false; // rename players as per request if ( synced_ ) @@ -3769,6 +3771,23 @@ int winnerExtraRound = ( winner != 0 || alive == 0 ) ? 1 : 0; + + // do round end stuff one second after a winner was declared + if ( winner && !roundOver && time-lastdeath >= 2.0f ) + { + roundOver = true; + + const tList<eGameObject>& gameObjects = Grid()->GameObjects(); + for (int i=gameObjects.Len()-1;i>=0;i--) + { + eGameObject * e = gameObjects(i); + if ( e ) + { + e->OnRoundEnd(); + } + } + } + // analyze the ranking list if ( time-lastdeath < 2.0f ) { Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-27 11:04:37 UTC (rev 7656) @@ -1091,8 +1091,34 @@ } } +static int sg_onSurviveScore = 0; +static tSettingItem< int > sg_onSurviveConquestScoreConfig( "FORTRESS_HELD_SCORE", sg_onSurviveScore ); + + // ******************************************************************************* // * +// * OnRoundEnd +// * +// ******************************************************************************* +//! +//! +// ******************************************************************************* + +void gBaseZoneHack::OnRoundEnd( void ) +{ + // survived? + if ( currentState_ == State_Safe ) + { + // award owning team + if ( team ) + { + team->AddScore( sg_onSurviveScore, tOutput("$player_win_held_fortress"), tOutput() ); + } + } +} + +// ******************************************************************************* +// * // * OnEnter // * // ******************************************************************************* Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h 2008-01-27 02:51:12 UTC (rev 7655) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.h 2008-01-27 11:04:37 UTC (rev 7656) @@ -170,6 +170,7 @@ virtual void OnVanish(); //!< called when the zone vanishes virtual void OnConquest(); //!< called when the zone gets conquered virtual void CheckSurvivor(); //!< checks for the only surviving zone + virtual void OnRoundEnd(); //!< called on the end of the round static void CountZonesOfTeam( eGrid const * grid, eTeam * otherTeam, int & count, gBaseZoneHack * & farthest ); //!< counts the zones belonging to the given team. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-27 14:05:11
|
Revision: 7664 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7664&view=rev Author: z-man Date: 2008-01-27 06:05:11 -0800 (Sun, 27 Jan 2008) Log Message: ----------- Fortress holding award is only granted to teams that are still alive. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-27 13:43:35 UTC (rev 7663) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-27 14:05:11 UTC (rev 7664) @@ -2071,6 +2071,7 @@ player_win_instant \1 was awarded \2 points for hitting the instant win zone.\n player_win_conquest \1 was awarded \2 points for conquering the enemy base.\n player_win_held_fortress \1 was awarded \2 points for holding the base.\n +player_win_held_fortress_penalty \1 lost \2 points for being too defensive.\n player_win_conquest_specific \1 was awarded \2 points for conquering \3's base.\n player_kill_collapse \1 was eradicated by its collapsing zone.\n player_win_survive \1 was awarded \2 points for holding the base.\n Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-27 13:43:35 UTC (rev 7663) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-27 14:05:11 UTC (rev 7664) @@ -1110,9 +1110,9 @@ if ( currentState_ == State_Safe ) { // award owning team - if ( team ) + if ( team && team->Alive() ) { - team->AddScore( sg_onSurviveScore, tOutput("$player_win_held_fortress"), tOutput() ); + team->AddScore( sg_onSurviveScore, tOutput("$player_win_held_fortress"), tOutput("$player_win_held_fortress_penalty") ); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <z-...@us...> - 2008-01-28 18:00:41
|
Revision: 7679 http://armagetronad.svn.sourceforge.net/armagetronad/?rev=7679&view=rev Author: z-man Date: 2008-01-28 10:00:40 -0800 (Mon, 28 Jan 2008) Log Message: ----------- ZOMG HOLERZ! Added detection and scoring for tactical holes. Modified Paths: -------------- armagetronad/branches/0.2.8/armagetronad/NEWS armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt armagetronad/branches/0.2.8/armagetronad/language/english_base.txt armagetronad/branches/0.2.8/armagetronad/language/spanish.txt armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.h armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.cpp armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.h armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp Modified: armagetronad/branches/0.2.8/armagetronad/NEWS =================================================================== --- armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/NEWS 2008-01-28 18:00:40 UTC (rev 7679) @@ -1,6 +1,7 @@ Changes since 0.2.8.2: New settings and commands: +- SCORE_HOLE for awarding sacrifice. - SCORE_SURVIVE for player survival and FORTRESS_HELD_SCORE for not losing each fortress zone. - KICK_TO and MOVE_TO: redirect a client to a different server Modified: armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/language/deutsch.txt 2008-01-28 18:00:40 UTC (rev 7679) @@ -2078,7 +2078,7 @@ player_win_conquest \1 bekam \2 Punkte f\xFCr das erobern der Basis des Feindes.\n player_win_conquest_specific \1 bekam \2 Punkte f\xFCr das erobern der Basis von \3.\n player_kill_collapse \1 wurde von seiner kollabierenden Zone vernichtet.\n -player_win_survive \1 bekam \2 Punkte f\xFCr das Halten der eigenen Basis.\n +player_win_held_fortress \1 bekam \2 Punkte f\xFCr das Halten der eigenen Basis.\n zone_collapse_harmless \1s Zone verpufft harmlos wegen mangelden Feindkontakts.\n Modified: armagetronad/branches/0.2.8/armagetronad/language/english_base.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/language/english_base.txt 2008-01-28 18:00:40 UTC (rev 7679) @@ -140,6 +140,7 @@ enemy_suicide_timeout_help If no enemy influence can be found for the last this many seconds, a player's death counts as a suicide. score_die_help What you get for dying score_survive_help What you get for surviving +score_hole_help What you get for making a hole for your teammates score_kill_help What you get for killing someone score_suicide_help What you get for stupidly dying score_win_help What you get for winning a round @@ -2071,10 +2072,11 @@ player_win_instant \1 was awarded \2 points for hitting the instant win zone.\n player_win_conquest \1 was awarded \2 points for conquering the enemy base.\n player_win_held_fortress \1 was awarded \2 points for holding the base.\n -player_win_held_fortress_penalty \1 lost \2 points for being too defensive.\n +player_lose_held_fortress \1 lost \2 points for being too defensive.\n player_win_conquest_specific \1 was awarded \2 points for conquering \3's base.\n player_kill_collapse \1 was eradicated by its collapsing zone.\n -player_win_survive \1 was awarded \2 points for holding the base.\n +player_win_hole \1 got \2 points for a sacrifice for the good of the team.\n +player_lose_hole 0xffff00ZOMG! 0xff7f00HOLER!!1!!0xRESETT \1 lost \2 points for being a cheap ass lamer.\n zone_collapse_harmless \1's zone collapses harmlessly for lack of enemy contacts.\n Modified: armagetronad/branches/0.2.8/armagetronad/language/spanish.txt =================================================================== --- armagetronad/branches/0.2.8/armagetronad/language/spanish.txt 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/language/spanish.txt 2008-01-28 18:00:40 UTC (rev 7679) @@ -1888,7 +1888,7 @@ #ORIGINAL TEXT: \1 was awarded \2 points for conquering \3's base.\n #player_win_conquest_specific UNTRANSLATED player_kill_collapse \1 fue suprimido al derrumbarse su zona.\n -player_win_survive \1 consigue \2 puntos por mantener la base.\n +player_win_held_fortress \1 consigue \2 puntos por mantener la base.\n #******************************************** Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.cpp 2008-01-28 18:00:40 UTC (rev 7679) @@ -204,6 +204,9 @@ //static bool moviepack_hack=false; // do we use it? //static tSettingItem<bool> ump("MOVIEPACK_HACK",moviepack_hack); +static int score_hole=0; +static tSettingItem<int> s_h("SCORE_HOLE",score_hole); + static int score_survive=0; static tSettingItem<int> s_sur("SCORE_SURVIVE",score_survive); @@ -2068,6 +2071,7 @@ void gCycle::MyInitAfterCreation(){ dropWallRequested_ = false; lastGoodPosition_ = pos; + holeAccountedFor_ = false; #ifdef DEBUG // con << "creating cycle.\n"; @@ -2328,7 +2332,7 @@ if ( this->Alive() && lastTime < se_GameTime() + 10.0f ) { Die( lastTime ); - tNEW(gExplosion)(grid, pos, lastTime, color_); + tNEW(gExplosion)(grid, pos, lastTime, color_, this); } if ( sn_GetNetState() == nSERVER ) @@ -2349,7 +2353,7 @@ // give survival bonus if ( Alive() && player ) { - player->AddScore( score_survive, tOutput("$player_win_survive"), tOutput() ); + Player()->AddScore( score_survive, tOutput("$player_win_survive"), tOutput() ); } } @@ -3224,12 +3228,12 @@ return gCycleMovement::EdgeIsDangerous( ww, time, a ); } -// turn one future walls of a cycle into gaping holes of nothingness if it inteed belongs to the cycle +// turn future walls of a cycle into gaping holes of nothingness if it indeed belongs to the cycle static void sg_KillFutureWall( gCycle * cycle, gNetPlayerWall * wall ) { if ( cycle && wall && wall->Cycle() == cycle && wall->Pos(1) > cycle->GetDistance() ) { - wall->BlowHole( cycle->GetDistance(), wall->Pos(1) + 100 ); + wall->BlowHole( cycle->GetDistance(), wall->Pos(1) + 100, 0 ); } } @@ -3262,6 +3266,24 @@ // request a sync for everyone if this is a non-bogus wall passage, maybe not all clients know the wall is passable if ( ( !currentWall || ww != currentWall->Wall() ) && ( !lastWall || ww != lastWall->Wall() ) ) RequestSyncAll(); + + // check whether we drove through a hole in an enemy wall made by a teammate + gPlayerWall const * w = dynamic_cast< gPlayerWall const * >( ww ); + if ( w ) + { + gCycle * holer = w->Holer( a, time ); + if ( holer && !holer->holeAccountedFor_ && + holer->Player() && + Player() && + holer->Player()->CurrentTeam() == Player()->CurrentTeam() && + w->Cycle() && w->Cycle()->Player() && + w->Cycle()->Player()->CurrentTeam() != Player()->CurrentTeam() + ) + { + holer->holeAccountedFor_ = true; + holer->Player()->AddScore( score_hole, tOutput("$player_win_hole"), tOutput("$player_lose_hole") ); + } + } return; } @@ -3603,7 +3625,7 @@ RequestSync(true); if (Alive()){ Die( lastTime ); - tNEW(gExplosion)(grid, pos,lastTime, color_); + tNEW(gExplosion)(grid, pos,lastTime, color_, this ); // eEdge::SeethroughHasChanged(); if ( currentWall ) @@ -5022,7 +5044,7 @@ correctDistanceSmooth=0; DropWall( false ); - tNEW(gExplosion)( grid, lastSyncMessage_.pos, lastSyncMessage_.time ,color_ ); + tNEW(gExplosion)( grid, lastSyncMessage_.pos, lastSyncMessage_.time ,color_, this ); return; } Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gCycle.h 2008-01-28 18:00:40 UTC (rev 7679) @@ -121,6 +121,7 @@ friend class gPlayerWall; friend class gNetPlayerWall; friend class gDestination; + friend class gExplosion; eSoundPlayer *engine; eSoundPlayer *turning; @@ -134,6 +135,7 @@ std::auto_ptr< gCycleChatBot > chatBot_; bool dropWallRequested_; //!< flag indicating that someone requested a wall drop + bool holeAccountedFor_; //!< flag indicating whether we already gave the player credit for making a hole for his teammates public: eCoord lastGoodPosition_; // the location of the last known good position Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.cpp 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.cpp 2008-01-28 18:00:40 UTC (rev 7679) @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -57,6 +57,7 @@ static eCoord s_explosionCoord; static REAL s_explosionRadius; static REAL s_explosionTime; +static gCycle * s_holer = 0; // blow a hole centered at s_explosionCoord with radius s_explosionRadius into wall w static void S_BlowHoles( eWall * w ) @@ -117,7 +118,7 @@ if ( end > start ) { - wall->BlowHole ( start, end ); + wall->BlowHole ( start, end, s_holer ); } } @@ -134,13 +135,17 @@ } */ -gExplosion::gExplosion(eGrid *grid, const eCoord &pos,REAL time, gRealColor& color) +gExplosion::gExplosion(eGrid *grid, const eCoord &pos,REAL time, gRealColor& color, gCycle * owner ) :eGameObject(grid, pos, eCoord(0,0), NULL, true), sound(explode), createTime(time), expansion(0), - listID(-1) + listID(-1), + owner_(owner) { + if ( owner ) + owner->holeAccountedFor_ = false; + lastTime = time; explosion_r = color.r; explosion_g = color.g; @@ -213,6 +218,7 @@ REAL factor = expansion / REAL( expansionSteps ); s_explosionRadius = gCycle::ExplosionRadius() * sqrt(factor); s_explosionTime = createTime; + s_holer = owner_; if ( s_explosionRadius > 0 && (currentTime < createTime+4) ) { @@ -222,6 +228,7 @@ this->CurrentFace() ); } + s_holer = 0; } /* @@ -246,7 +253,7 @@ const gPlayerWall* w = c->CurrentWall(); if ( !w || w->BegTime() < time || w->EndTime() < time ) - { + { // c has not made a turn; we need to stay around some more return false; } @@ -268,7 +275,9 @@ void gExplosion::PassEdge(const eWall *,REAL ,REAL ,int){} -void gExplosion::Kill(){createTime=lastTime-100;} +void gExplosion::Kill(){ + createTime=lastTime-100; +} void gExplosion::OnNewWall( eWall* w ) { @@ -305,7 +314,7 @@ tRandomizer & randomizer = tRandomizer::GetInstance(); - for(int j=i;j<40;j++){ + for (int j=i;j<40;j++){ expvec[i++]=Vec3(fak*( randomizer.Get() -.5f ), fak*( randomizer.Get() -.5f ), 1); @@ -314,7 +323,7 @@ // 1); } - for(int k=expvec.Len()-1;k>=0;k--) + for (int k=expvec.Len()-1;k>=0;k--) expvec[k]=expvec[k]*(1/expvec[k].Norm()); } @@ -325,11 +334,11 @@ #ifndef DEDICATED void gExplosion::Render(const eCamera *cam){ #ifdef USE_PARTICLES - if(sg_crashExplosion){ + if (sg_crashExplosion){ theExplosion->Render(cam); } -#else - if(sg_crashExplosion){ +#else + if (sg_crashExplosion){ REAL a1=(lastTime-createTime)+.01f;//+.2; REAL e=a1-1; @@ -351,7 +360,7 @@ glColor4f(explosion_r,explosion_g,explosion_b,fade); BeginLines(); - for(int i=expvec.Len()-1;i>=0;i--){ + for (int i=expvec.Len()-1;i>=0;i--){ glVertex3f(a1*expvec[i].x[0],a1*expvec[i].x[1],a1*expvec[i].x[2]); glVertex3f( e*expvec[i].x[0], e*expvec[i].x[1], e*expvec[i].x[2]); } Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.h 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gExplosion.h 2008-01-28 18:00:40 UTC (rev 7679) @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -32,12 +32,13 @@ #include "eGameObject.h" #include "gParticles.h" +class gCycle; struct gRealColor; class gExplosion: virtual public eGameObject { // Boom! public: - gExplosion(eGrid *grid, const eCoord &pos,REAL time, gRealColor& color); + gExplosion(eGrid *grid, const eCoord &pos,REAL time, gRealColor& color, gCycle * owner ); virtual ~gExplosion(); virtual bool Timestep(REAL currentTime); @@ -73,5 +74,7 @@ static REAL expansionTime; int listID; + + tJUST_CONTROLLED_PTR< gCycle > owner_; // the owner/victim of the explosion }; #endif Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.cpp 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.cpp 2008-01-28 18:00:40 UTC (rev 7679) @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -213,7 +213,7 @@ tBeg-=t; tEnd-=t; t=t%4; - while(t<0) + while (t<0) t+=4; gWallRim_mp[t]->Select(); } @@ -262,7 +262,7 @@ #ifndef WIN32 Vertex(0,0,1,0); -#else +#else Vertex(0.001f,0.001f,1,0); // Windows OpenGL has problems with // infitite points perpenticular to the viewing direction #endif @@ -294,7 +294,7 @@ const eCoord *p1=&EndPoint(0); const eCoord *p2=&EndPoint(1); - if(bf_cull) + if (bf_cull) glDisable(GL_CULL_FACE); REAL X_SCALE=sg_RimStretchX; @@ -470,7 +470,7 @@ REAL ta=tBeg; eCoord ca=P1; - for(int i=int(ceil(tBeg));i<tEnd;i++){ + for (int i=int(ceil(tBeg));i<tEnd;i++){ eCoord cb=P1+(P2-P1)*((i-tBeg)/(tEnd-tBeg)); gWallRim_helper(ca,cb,ta,i,h,Z_SCALE,sw); ca=cb; @@ -495,7 +495,7 @@ //eWall::Render_helper(edge,(p1->x+p1->y)/SCALE,(p2->x+p2->y)/SCALE,40,height); - if(bf_cull) + if (bf_cull) glEnable(GL_CULL_FACE); if ( transparency ) @@ -582,7 +582,7 @@ #ifdef DEBUG #define CHECKWALL this->Check(); #else -#define CHECKWALL +#define CHECKWALL #endif gPlayerWall::gPlayerWall(gNetPlayerWall*w, gCycle *p) @@ -820,7 +820,7 @@ for ( i = coords_.Len() - divindex - 1 ; i>=0; --i ) W2->coords_(i) = coords_( divindex + i ); - W2->coords_(0).Pos = mp; + W2->coords_(0).Pos = mp; W2->coords_(0).Time = mt; if ( flipped ) @@ -1050,7 +1050,7 @@ if (hfrac>0){ - if(upperlinecolor(r,g,b,a)){ + if (upperlinecolor(r,g,b,a)){ // draw additional upper line sr_DepthOffset(true); @@ -1075,7 +1075,7 @@ } #else static const REAL extrarise = 0; -#endif +#endif BeginQuads(); glEdgeFlag(GL_FALSE); glTexCoord2f(ta,hfrac); @@ -1152,7 +1152,7 @@ upperlinecolor(r,g,b,a);//a*afunc(rat)); BeginLineStrip(); - for(int i=0;i<=segs;i++){ + for (int i=0;i<=segs;i++){ REAL frag=i/float(segs); REAL rat=ra+frag*(re-ra); REAL x=(p1.x+frag*(p2.x-p1.x))*(1-xfunc(rat))+ppos.x*xfunc(rat); @@ -1179,7 +1179,7 @@ //ppos=ePlayer->pos-ePlayer->dir*gCYCLE__LEN; - for(int i=0;i<=segs;i++){ + for (int i=0;i<=segs;i++){ REAL frag=i/float(segs); REAL rat=ra+frag*(re-ra); REAL x=(p1.x+frag*(p2.x-p1.x))*(1-xfunc(rat))+ppos.x*xfunc(rat); @@ -1351,6 +1351,14 @@ return netWall_->IsDangerous( LocalToGlobal( a ), time ); } +// returns the guy who holed here +gCycle * gPlayerWall::Holer( REAL a, REAL time ) const +{ + CHECKWALL; + + return netWall_->Holer( LocalToGlobal( a ), time ); +} + REAL gPlayerWall::EndPos() const { CHECKWALL; @@ -1379,11 +1387,11 @@ return netWall_->Time( netWall_->Alpha( this->begDist_ ) ); } -void gPlayerWall::BlowHole ( REAL beg, REAL end ) +void gPlayerWall::BlowHole ( REAL beg, REAL end, gCycle * holer ) { CHECKWALL; - this->netWall_->BlowHole( beg, end ); + this->netWall_->BlowHole( beg, end, holer ); } /* @@ -1400,7 +1408,7 @@ int end = IndexAlpha(1.0f); gPlayerWallCoord* ecoord = &coords[end]; S_Mix( ecoord, 1.0f, ecoord[1] ); - + // useful coordinates now lie between begin and end+1 // throw away junk at the beginning @@ -1502,7 +1510,7 @@ return; tASSERT( Wall()->Splittable() ); - for(int i=MAX_VIEWERS-1;i>=0;i--) + for (int i=MAX_VIEWERS-1;i>=0;i--) Wall()->SetVisHeight(i,0); Wall()->Remove(); @@ -1517,7 +1525,7 @@ id(-1),griddedid(-1), cycle_(cyc),lastWall_(NULL),dir(d),dbegin(dbeg), beg(begi),end(begi),tBeg(tBegi),tEnd(tBegi), -inGrid(false){ + inGrid(false){ dir=dir; // Don't normalize: *REAL(1/sqrt(dir.NormSquared())); preliminary=(sn_GetNetState()==nCLIENT); obsoleted_=-100; @@ -1636,8 +1644,10 @@ // copy the last coordinate entry int len = coords_.Len(); - coords_[len] = coords_[len-1]; + // temporary is required to compensate for growing array nightmare + coords_[len] = gPlayerWallCoord( coords_[len-1] ); + CHECKWALL; } @@ -1684,7 +1694,7 @@ grid->Check(); #endif - if(griddedid<0){ + if (griddedid<0){ if ( this->cycle_ ) { tASSERT( static_cast< bool >(this->edge_) ); @@ -1728,7 +1738,7 @@ grid->Check(); #endif - if(griddedid<0 && bool(this->cycle_) && !preliminary ){ + if (griddedid<0 && bool(this->cycle_) && !preliminary ){ // just copy the current edge into the grid if ( this->edge_ ){ @@ -1770,7 +1780,7 @@ con << "Many walls: " << (maxw=sg_netPlayerWalls.Len()) << '\n'; #endif - for(int i=sg_netPlayerWalls.Len()-1;i>=0;i--){ + for (int i=sg_netPlayerWalls.Len()-1;i>=0;i--){ gNetPlayerWall *w=sg_netPlayerWalls(i); if (w->inGrid && w->griddedid<0 && se_GameTime()>w->gridding) w->real_CopyIntoGrid(w->cycle_->Grid()); @@ -1907,7 +1917,8 @@ eCoord gNetPlayerWall::Vec() { - if ( edge_ ) return edge_->Vec(); else return eCoord(); + if ( edge_ ) return edge_->Vec(); + else return eCoord(); } gPlayerWall *gNetPlayerWall::Wall(){ @@ -1957,7 +1968,7 @@ ReleaseData(); #ifndef DEDICATED - if(this->displayList_!=0) + if (this->displayList_!=0) glDeleteLists(this->displayList_,1); #endif } @@ -2078,7 +2089,7 @@ real_Update(tEnd_new,end_new, true); - if(Wall() && new_inGrid && !inGrid) + if (Wall() && new_inGrid && !inGrid) { /* if ( ( beg - end ).NormSquared() > 0.01f ) @@ -2136,7 +2147,9 @@ } } -gCycleMovement *gNetPlayerWall::CycleMovement() const {return cycle_;} +gCycleMovement *gNetPlayerWall::CycleMovement() const { + return cycle_; +} void gNetPlayerWall::Clear() { @@ -2144,7 +2157,7 @@ // return; int i; - for(i=sg_netPlayerWalls.Len()-1;i>=0;i--){ + for (i=sg_netPlayerWalls.Len()-1;i>=0;i--){ // sg_netPlayerWalls(i)->owner=sn_myNetID; //delete sg_netPlayerWalls(i); gNetPlayerWall* w = sg_netPlayerWalls(i); @@ -2157,7 +2170,7 @@ w->edge_->Wall()->Insert(); } - for(i=sg_netPlayerWallsGridded.Len()-1;i>=0;i--){ + for (i=sg_netPlayerWallsGridded.Len()-1;i>=0;i--){ // sg_netPlayerWallsGridded(i)->owner=sn_myNetID; gNetPlayerWall* w = sg_netPlayerWallsGridded(i); tControlledPTR< nNetObject > bounce( w ); @@ -2170,7 +2183,7 @@ void gNetPlayerWall::Check() const { -#ifdef DEBUG +#ifdef DEBUG int i; for ( i = coords_.Len() -2 ; i>=0; --i ) { @@ -2295,7 +2308,7 @@ return true; } -bool gNetPlayerWall::IsDangerous( REAL a, REAL time ) const +bool gNetPlayerWall::IsDangerousApartFromHoles( REAL a, REAL time ) const { CHECKWALL; @@ -2348,10 +2361,38 @@ return false; } + return true; +} + +bool gNetPlayerWall::IsDangerous( REAL a, REAL time ) const +{ + CHECKWALL; + + if ( !IsDangerousApartFromHoles( a, time ) ) + { + return false; + } + const gPlayerWallCoord* coord = &coords_(IndexAlpha(a)); return coord->IsDangerous; } +// returns the guy who holed here +gCycle * gNetPlayerWall::Holer( REAL a, REAL time ) const +{ + CHECKWALL; + + // it does not count as a hole if the wall has expired already + // for other reasons + if ( !IsDangerousApartFromHoles( a, time ) ) + { + return false; + } + + const gPlayerWallCoord* coord = &coords_(IndexAlpha(a)); + return coord->holer; +} + REAL gNetPlayerWall::EndPos() const { CHECKWALL; @@ -2380,7 +2421,7 @@ return coords_(0).Time; } -void gNetPlayerWall::BlowHole ( REAL beg, REAL end ) +void gNetPlayerWall::BlowHole ( REAL beg, REAL end, gCycle * holer ) { CHECKWALL; @@ -2485,6 +2526,7 @@ // enter the hole coords_(begind+1).IsDangerous = false; coords_(begind+1).Time = begtime; + coords_(begind+1).holer = holer; coords_(begind+1).Pos = beg; coords_(begind+2).Time = endtime; coords_(begind+2).Pos = end; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.h =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.h 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWall.h 2008-01-28 18:00:40 UTC (rev 7679) @@ -5,7 +5,7 @@ ArmageTron -- Just another Tron Lightcycle Game in 3D. Copyright (C) 2000 Manuel Moos (ma...@mo...) #include <stdio> -#include <stdlib.h> +#include <stdlib.h> ************************************************************************** This program is free software; you can redistribute it and/or @@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - + *************************************************************************** */ @@ -63,11 +63,14 @@ REAL tBeg_, tEnd_; //!< begin and end texture coordinates }; +//! a coordinate entry for wall points, where walls turn into holes +//! or vice versa class gPlayerWallCoord{ public: - REAL Pos; - REAL Time; - bool IsDangerous; + REAL Pos; //!< the start position, measured relative to the point where the cycle started driving + REAL Time; //!< the time this point was created + bool IsDangerous; //!< true iff the segment AFTER this point is a true wall (and not a hole) + tJUST_CONTROLLED_PTR< gCycle > holer; //< if it is a hole, store who made it here. }; class gPlayerWall:public eWall{ @@ -106,8 +109,9 @@ REAL Alpha(REAL pos) const; bool IsDangerousAnywhere( REAL time ) const; bool IsDangerous( REAL a, REAL time ) const; + gCycle * Holer( REAL a, REAL time ) const; // returns the guy who holed here - void BlowHole ( REAL dbeg, REAL dend ); // blow a hole into the wall form distance dbeg to dend + void BlowHole ( REAL dbeg, REAL dend, gCycle * holer ); // blow a hole into the wall form distance dbeg to dend, created by holer REAL BegPos() const; REAL EndPos() const; @@ -195,9 +199,11 @@ REAL Pos(REAL a) const; REAL Alpha(REAL pos) const; bool IsDangerousAnywhere( REAL time ) const; - bool IsDangerous( REAL a, REAL time ) const; + bool IsDangerousApartFromHoles( REAL a, REAL time ) const; // checks all danger signs, except hooles + bool IsDangerous( REAL a, REAL time ) const; // checks all danger signs + gCycle * Holer( REAL a, REAL time ) const; // returns the cycle responsible for a hole - void BlowHole ( REAL dbeg, REAL dend ); // blow a hole into the wall form distance dbeg to dend + void BlowHole ( REAL dbeg, REAL dend, gCycle * holer ); // blow a hole into the wall form distance dbeg to dend REAL BegPos() const; REAL EndPos() const; @@ -238,7 +244,7 @@ virtual bool SyncIsNew(nMessage &m); -eTempEdge *Edge(){return this->edge_;} + eTempEdge *Edge(){return this->edge_;} gPlayerWall *Wall(); gCycle *Cycle() const {return this->cycle_;} gCycleMovement *CycleMovement() const; Modified: armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp =================================================================== --- armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-28 17:46:11 UTC (rev 7678) +++ armagetronad/branches/0.2.8/armagetronad/src/tron/gWinZone.cpp 2008-01-28 18:00:40 UTC (rev 7679) @@ -907,7 +907,7 @@ // reward survival if ( !ret && onlySurvivor_ ) { - const char* message= ( eTeam::teams.Len() > 2 || sg_onConquestScore ) ? "$player_win_survive" : "$player_win_conquest"; + const char* message= ( eTeam::teams.Len() > 2 || sg_onConquestScore ) ? "$player_win_held_fortress" : "$player_win_conquest"; sg_DeclareWinner( team, message ); } @@ -1112,7 +1112,7 @@ // award owning team if ( team && team->Alive() ) { - team->AddScore( sg_onSurviveScore, tOutput("$player_win_held_fortress"), tOutput("$player_win_held_fortress_penalty") ); + team->AddScore( sg_onSurviveScore, tOutput("$player_win_held_fortress"), tOutput("$player_lose_held_fortress") ); } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |