// #name = Enhanced Server Info Window // #version = 2.05 // #date = January 23, 2002 // #status = release // #category = Dreaded Script Pack // #description = Revises the "Server Info Window" to display more information, more efficiently. // #author = Ben Ross (AKA: Dreadnaught!) // #warrior = Dreadnaught! // #email = benross@mail.com // --------------------------------------------------------------------------- $Dread::EnhancedServerInfoWindow = 1; $Dread::EnhancedServerInfoWindow::AlternateStyle = 1; $Dread::EnhancedServerInfoWindow::BrowserLinks = 1; // --------------------------------------------------------------------------- // ----- EXTRA STRING SUPPORT -------------------------------------------- // --------------------------------------------------------------------------- function SimObject::StringOfChar( %this, %char, %num ) { if( %char $= "" || %num <= 0 ) return; if( %num > 100 ) %num = 100; %string = ""; for( %i = 0; %i < %num; %i++ ) %string = %string @ %char; return %string; } // --------------------------------------------------------------------------- function SimObject::CharReplace( %this, %string, %oldChar, %newChar ) { if( %string $= "" || %oldChar $= "" || %newChar $= "" ) return; while( (%pos = strStr(%string, %oldChar)) != -1 ) { %alpha = getSubStr(%string, 0, %pos); %omega = getSubStr(%string, (%pos + strLen(%oldChar)), strLen(%string)); %string = %alpha @ %newChar @ %omega; } return %string; } // --------------------------------------------------------------------------- function SimObject::IncNumLen( %this, %string, %num ) { if( %string $= "" || %num <= 0 ) return; if( %num > 100 ) %num = 100; while( strLen(%string) < %num ) %string = "0" @ %string; return %string; } // --------------------------------------------------------------------------- function SimObject::TextRichToHyper( %this, %text ) { %ch = "\cp " TAB "\c6 " TAB "\c7 " TAB "\c8 " TAB "\c9 " TAB "\co "; for( %i = 0; %i < getFieldCount(%ch); %i++ ) { %oldChar = getWord(getField(%ch, %i), 0); %newChar = getWord(getField(%ch, %i), 1); %text = %this.charReplace(%text, %oldChar, %newChar); } return %text; } // --------------------------------------------------------------------------- function SimObject::FileSafeAscii( %this, %string ) { // Invalid File Name Characters: \ / : * ? " ' < > | %chars = "\\" TAB "/" TAB ":" TAB "*" TAB "?" TAB "\"" TAB "\'" TAB "<" TAB ">" TAB "|"; for( %i = 0; %i < getFieldCount(%chars); %i++ ) %string = %this.charReplace(%string, getField(%chars, %i), "_"); return %string; } // --------------------------------------------------------------------------- function SimObject::GetFileDetails( %this ) { %player = getField($pref::Player[$pref::Player::Current], 0); %mission = $clMissionName; %server = $clServerName; switch$( $clMissionType ) { case "Bounty": %gameType = "Bounty"; case "Capture and Hold": %gameType = "CnH"; case "Capture the Flag": %gameType = "CTF"; case "Deathmatch": %gameType = "DM"; case "Defend and Destroy": %gameType = "DnD"; case "Hunters": %gameType = "Hunters"; case "Rabbit": %gameType = "Rabbit"; case "Siege": %gameType = "Siege"; case "SinglePlayer": %gameType = "Training"; case "Team Hunters": %gameType = "THunt"; case "Chaser - Team Aerial Combat": %gameType = "Chaser TAC"; case "Capture and Hold - Team Aerial Combat": %gameType = "CnH TAC"; case "Retrieval - Team Aerial Combat": %gameType = "Retrieval TAC"; case "Convoy - Team Aerial Combat": %gameType = "Convoy TAC"; case "Capture the Flag - Team Aerial Combat": %gameType = "CTF TAC"; case "Team Deathmatch - Team Aerial Combat": %gameType = "TDM TAC"; default: %gameType = $clMissionType; } // Default: "PlayerName, MissionName (GameType), ServerName" %details = %this.nameDetails; %details = %this.charReplace(%details, "PlayerName", %player); %details = %this.charReplace(%details, "MissionName", %mission); %details = %this.charReplace(%details, "GameType", %gameType); %details = %this.charReplace(%details, "ServerName", %server); return %this.fileSafeAscii(%details); } package Dread_EnhancedServerInfoWindow // Start Package { // --------------------------------------------------------------------------- // ----- MODIFIED PRE-EXISTING FUNCTIONS --------------------------------- // --------------------------------------------------------------------------- // client.cs - (2027) function handleSiegeResultMessage( %msgType, %msgString, %string ) { if( $Dread::EnhancedServerInfoWindow ) %string = SiegeHalftimeHeaderText.textRichToHyper(%string); parent::handleSiegeResultMessage(%msgType, %msgString, %string); } // --------------------------------------------------------------------------- // client.cs - (2078) function handleSiegeLineMessage( %msgType, %msgString, %string ) { if( $Dread::EnhancedServerInfoWindow ) %string = SiegeHalftimeText.textRichToHyper(%string); parent::handleSiegeLineMessage(%msgType, %msgString, %string); } // --------------------------------------------------------------------------- // DebriefGui.cs - (119) function handleDebriefResultMessage( %msgType, %msgString, %string ) { if( $Dread::EnhancedServerInfoWindow ) %string = DebriefResultText.textRichToHyper(%string); parent::handleDebriefResultMessage(%msgType, %msgString, %string); } // --------------------------------------------------------------------------- // DebriefGui.cs - (130) function handleDebriefLineMessage( %msgType, %msgString, %string ) { if( $Dread::EnhancedServerInfoWindow ) %string = DebriefText.textRichToHyper(%string); parent::handleDebriefLineMessage(%msgType, %msgString, %string); } // --------------------------------------------------------------------------- // GameGui.cs - (249) function GMJ_Browser::runQuery( %this ) { if( !$Dread::EnhancedServerInfoWindow ) { parent::runQuery(%this); return; } GMJ_ProgressBar.setValue( 0 ); $JoinGameAddress = ""; GMJ_JoinBtn.setActive( false ); GMJ_RefreshServerBtn.setActive( false ); %this.clearList(); // Clear the Server Info dialog: SI_InfoWindow.setText( "No server selected." ); SI_ContentWindow.setText( "" ); if ( %this.lastQuery $= "LanServers" ) { GMJ_StatusText.setValue( "Querying LAN servers..." ); GMJ_FilterBtn.setActive( false ); GMJ_FilterBtn.setVisible( false ); GMJ_FilterText.setText( "LAN Servers" ); queryLanServers( $JoinGamePort ); GMJ_StopBtn.setActive( true ); } else if ( %this.lastQuery $= "Demo" ) { GMJ_StatusText.setValue( "Querying the master server..." ); GMJ_FilterBtn.setActive( false ); GMJ_FilterBtn.setVisible( false ); GMJ_FilterText.setText( "Demo Servers" ); queryMasterServer( $JoinGamePort ); GMJ_StopBtn.setActive( true ); } else { GMJ_FilterBtn.setActive( true ); GMJ_FilterBtn.setVisible( true ); %this.key = LaunchGui.key++; DatabaseQueryArray( 5, 0, "", %this, %this.key ); if ( $pref::ServerBrowser::activeFilter == 0 ) { GMJ_StatusText.setValue( "Querying the master server..." ); GMJ_FilterText.setText( "All servers" ); queryMasterServer( $JoinGamePort ); GMJ_StopBtn.setActive( true ); } else if ( $pref::ServerBrowser::activeFilter == 1 ) { // Buddy list query: GMJ_StatusText.setValue( "Fetching buddy list..." ); GMJ_FilterText.setText( "Buddies" ); %this.isQueryingBuddyListServers = true; // These two lines were moved up, so the buddy list is // always queried, whether it is used as a filter or not // %this.key = LaunchGui.key++; // DatabaseQueryArray( 5, 0, "", %this, %this.key ); } else if ( $pref::ServerBrowser::activeFilter == 2 ) { // Favorites only: GMJ_FilterText.setText( "Favorites" ); if ( $pref::ServerBrowser::FavoriteCount <= 0 || $pref::ServerBrowser::Favorite[0] $= "" ) { GMJ_StatusText.setValue( "No favorites found." ); MessageBoxOK( "INVALID FILTER", "You haven't marked any servers as favorites. Click the Favorites column to mark a server as a favorite." ); } else { GMJ_StatusText.setValue( "Querying favorites..." ); queryFavoriteServers(); GMJ_StopBtn.setActive( true ); } } else { GMJ_StatusText.setValue( "Querying the master server..." ); %filterIndex = $pref::ServerBrowser::activeFilter - 3; if ( $pref::ServerBrowser::Filter[%filterIndex] !$= "" ) { %filter = $pref::ServerBrowser::Filter[%filterIndex]; GMJ_FilterText.setText( getField( %filter, 0 ) ); %rulesSet = getField( %filter, 1 ); if ( %rulesSet $= "" ) %rulesSet = "any"; %missionType = getField( %filter, 2 ); if ( %missionType $= "" ) %missionType = "any"; %maxPlayers = getField( %filter, 4 ); if ( %maxPlayers $= "" ) %maxPlayers = 255; %maxBots = getField( %filter, 7 ); if ( %maxBots $= "" ) %maxBots = 16; %regionMask = getField( %filter, 5 ); if ( %regionMask $= "" ) %regionMask = 4294967295; queryMasterServer( $JoinGamePort, 0, // Flags %rulesSet, // Rules Set %missionType, // Mission Type getField( %filter, 3 ), // Min Players %maxPlayers, // Max Players %maxBots, // Max Bots %regionMask, // Region Mask getField( %filter, 6 ), // Max Ping getField( %filter, 8 ), // Min CPU Speed getField( %filter, 9 ) ); // Filter flags GMJ_StopBtn.setActive( true ); } else { // Filter is invalid, so fall back to the default: $pref::ServerBrowser::activeFilter = 0; GMJ_FilterText.setText( "All servers" ); queryMasterServer( $JoinGamePort ); GMJ_StopBtn.setActive( true ); } } } } // --------------------------------------------------------------------------- // GameGui.cs - (366) function GMJ_Browser::onDatabaseQueryResult( %this, %status, %resultString, %key ) { if( !$Dread::EnhancedServerInfoWindow ) { parent::onDatabaseQueryResult(%this, %status, %resultString, %key); return; } if ( %this.key != %key ) return; if ( getField( %resultString, 0 ) <= 0 && %this.isQueryingBuddyListServers ) { GMJ_StatusText.setValue( "No buddies found." ); MessageBoxOK( "INVALID FILTER", "You have no buddies in your buddy list!" ); } else // Prepare for the incoming buddy list: { %this.buddyList = ""; SI_ContentWindow.buddyList = ""; } } // --------------------------------------------------------------------------- // GameGui.cs - (381) function GMJ_Browser::onDatabaseRow( %this, %row, %isLastRow, %key ) { if( !$Dread::EnhancedServerInfoWindow ) { parent::onDatabaseRow(%this, %row, %isLastRow, %key); return; } if( %this.key != %key ) return; %buddyName = getField(%row, 0); %buddyGuid = getField(%row, 3); if( %this.isQueryingBuddyListServers ) { %num = %this.incNumLen((getFieldCount(%this.buddyList) + 1), 3); echo("\c9Got Buddy #", %num, ": \"", %buddyName, "\" (", %buddyGuid, ")"); } %this.buddyList = (%this.buddyList $= "") ? %buddyGuid : %this.buddyList TAB %buddyGuid; SI_ContentWindow.buddyList = (SI_ContentWindow.buddyList $= "") ? %buddyName : SI_ContentWindow.buddyList TAB %buddyName; if( %isLastRow ) { if( %this.isQueryingBuddyListServers ) { GMJ_StatusText.setValue("Querying the master server..."); queryMasterServer( $JoinGamePort, // Port 0, // Flags "Any", // Rules Set "Any", // Mission Type 0, // Min Players 255, // Max Players 16, // Max Bots 0xFFFFFFFF, // Region Mask 0, // Max Ping 0, // Min CPU Speed 0, // Filter flags %this.buddyList); GMJ_StopBtn.setActive(true); %this.isQueryingBuddyListServers = false; } %this.buddyList = ""; } } // --------------------------------------------------------------------------- // GameGui.cs - (548) function ServerInfoDlg::onWake( %this ) { parent::onWake(%this); if( !$Dread::EnhancedServerInfoWindow ) return; %bar = getWord(SI_InfoScroll.getExtent(), 1); if( $pref::ServerBrowser::InfoWindowBarPos < 25 ) $pref::ServerBrowser::InfoWindowBarPos = %bar; if( %bar != $pref::ServerBrowser::InfoWindowBarPos ) { %adjust = $pref::ServerBrowser::InfoWindowBarPos - %bar; SI_InfoScroll.resize( getWord(SI_InfoScroll.getPosition(), 0), getWord(SI_InfoScroll.getPosition(), 1), getWord(SI_InfoScroll.getExtent(), 0), (%bar + %adjust) ); SI_Frame.rows = getWord(SI_Frame.rows, 0) SPC (getWord(SI_Frame.rows, 1) + %adjust); SI_ContentScroll.resize( getWord(SI_ContentScroll.getPosition(), 0), (getWord(SI_ContentScroll.getPosition(), 1) + %adjust), getWord(SI_ContentScroll.getExtent(), 0), (getWord(SI_ContentScroll.getExtent(), 1) - %adjust) ); } // %this.update(); } // --------------------------------------------------------------------------- // GameGui.cs - (575) function ServerInfoDlg::update( %this ) { if( !$Dread::EnhancedServerInfoWindow ) { parent::update(%this); return; } %status = GMJ_Browser.getServerStatus(); if ( %status $= "invalid" ) { SI_InfoWindow.setText( "No server selected." ); return; } %info = GMJ_Browser.getServerInfoString(); %nameFont = ""; %infoText = "" @ %this.headerStyle @ "NAME:" @ %nameFont @ "" TAB getRecord( %info, 0 ) @ "" NL "" @ %this.headerStyle @ "ADDRESS:" TAB getRecord( %info, 1 ) @ ""; %refreshable = false; if ( %status $= "responded" ) { %temp = getRecord( %info, 2 ); if ( %temp !$= "" ) { %temp = (%temp !$= "base") ? "" @ %temp @ "" : %temp; %infoText = %infoText NL "" @ %this.headerStyle @ "RULES SET:" TAB %temp @ ""; } %temp = getRecord( %info, 3 ); if ( %temp $= "" ) %temp = "None"; %infoText = %infoText NL "" @ %this.headerStyle @ "FLAGS:" TAB %temp @ ""; %temp = getRecord( %info, 4 ); if ( %temp !$= "" ) %infoText = %infoText NL "" @ %this.headerStyle @ "GAME TYPE:" TAB %temp @ ""; %temp = getRecord( %info, 5 ); if ( %temp !$= "" ) %infoText = %infoText NL "" @ %this.headerStyle @ "MAP NAME:" TAB %temp @ ""; %temp = getRecords( %info, 6, 10 ); if ( %temp !$= "" ) %infoText = %infoText NL "" @ %this.headerStyle @ "SERVER INFO:" TAB %temp @ ""; // Fill in the content window: %content = GMJ_Browser.getServerContentString(); SI_ContentWindow.fill( %content ); %refreshable = !isServerQueryActive(); } else { switch$ ( %status ) { case "new": %temp = "Not queried yet."; SI_ContentWindow.setText( "Not available." ); case "querying": %temp = "Querying..."; SI_ContentWindow.setText( "Not available." ); case "updating": %temp = "Updating..."; case "timedOut": %temp = "Timed out."; SI_ContentWindow.setText( "Not available." ); %refreshable = !isServerQueryActive(); } %infoText = %infoText NL "" @ %this.headerStyle @ "STATUS: " TAB %temp; } SI_InfoWindow.setText( %infoText ); SI_InfoScroll.scrollToTop(); SI_ContentScroll.scrollToTop(); SI_RefreshBtn.setActive( %refreshable ); } // --------------------------------------------------------------------------- // GameGui.cs - (641) function SI_ContentWindow::fill( %this, %content ) { if( !$Dread::EnhancedServerInfoWindow ) { parent::fill(%this, %content); return; } if ( getRecordCount(%content) == 1 ) { %this.setText(""); return; } %this.clearData(); %record = 0; %teamCount = getRecord(%content, %record); %record++; for( %t = 0; %t < %teamCount; %t++ ) %this.addTeamData(getRecord(%content, (%t + %record))); %record += %teamCount; %playerCount = getRecord(%content, %record); %record++; for( %p = 0; %p < %playerCount; %p++ ) %this.addPlayerData(getRecord(%content, (%p + %record))); for( %i = 0; %i < (%this.countPlayers - 1); %i++ ) { for( %x = (%i + 1); %x < %this.countPlayers; %x++ ) { if( SI_DataTable.playerScore[%x] > SI_DataTable.playerScore[%i] ) { %name = SI_DataTable.playerName[%i]; %team = SI_DataTable.playerTeam[%i]; %score = SI_DataTable.playerScore[%i]; SI_DataTable.playerName[%i] = SI_DataTable.playerName[%x]; SI_DataTable.playerTeam[%i] = SI_DataTable.playerTeam[%x]; SI_DataTable.playerScore[%i] = SI_DataTable.playerScore[%x]; SI_DataTable.playerName[%x] = %name; SI_DataTable.playerTeam[%x] = %team; SI_DataTable.playerScore[%x] = %score; } } } %font = ""; %boldFont = ""; %smallFont = ""; if( %teamCount > 1 ) { %teamCount = %this.countTeams; if( $Dread::EnhancedServerInfoWindow::AlternateStyle ) { for( %i = 0; %i < %playerCount; %i++ ) { %playerName = SI_DataTable.playerName[%i]; %playerTeam = SI_DataTable.playerTeam[%i]; %playerScore = SI_DataTable.playerScore[%i]; %thisPlayerString[%i] = "" SPC %this.isBuddy(%playerName) @ "" SPC %this.getLink(%playerName) @ "" @ %font @ %playerScore @ ""; for( %x = 0; %x < %teamCount; %x++ ) { if( %playerTeam $= SI_DataTable.teamName[%x] ) %teamPlayerString[%x] = %teamPlayerString[%x] NL %thisPlayerString[%i]; } } %string = ""; for( %i = 0; %i < %teamCount; %i++ ) { %scoreFont = (SI_DataTable.teamScore[%i] $= "N/A") ? %font : %boldFont; %titleString[%i] = "" @ SI_DataTable.teamName[%i] SPC " (" @ %smallFont @ SI_DataTable.teamPlayers[%i] @ ")" @ %scoreFont @ SI_DataTable.teamScore[%i] @ ""; if( %i >= 1 ) %titleString[%i] = "\n" @ %titleString[%i]; %string = %string @ %titleString[%i] @ %teamPlayerString[%i] @ "\n"; } } else { %playerString = %playerString NL "\n" @ ServerInfoDlg.headerStyle @ "PLAYER NAME" @ "TEAMSCORE"; for( %i = 0; %i < %playerCount; %i++ ) { %playerName = SI_DataTable.playerName[%i]; %playerTeam = SI_DataTable.playerTeam[%i]; %playerScore = SI_DataTable.playerScore[%i]; %thisPlayerString[%i] = "" SPC %this.isBuddy(%playerName) @ "" SPC %this.getLink(%playerName) @ "" SPC %playerTeam @ "" SPC %playerScore @ ""; for( %x = 0; %x < %teamCount; %x++ ) { if( %playerTeam $= SI_DataTable.teamName[%x] ) %teamPlayerString[%x] = %teamPlayerString[%x] NL %thisPlayerString[%i]; } } %string = "" @ ServerInfoDlg.headerStyle @ "TEAM NAMEPLAYERSSCORE"; for( %i = 0; %i < %teamCount; %i++ ) { %playerString = %playerString @ %teamPlayerString[%i]; if( ((%i + 1) < %teamCount) && (SI_DataTable.teamPlayers[%i] > 0) ) %playerString = %playerString @ "\n"; if( SI_DataTable.teamScore[%i] $= "N/A" ) %thisTeamScore = "" @ %font @ SI_DataTable.teamScore[%i] @ ""; else %thisTeamScore = SI_DataTable.teamScore[%i]; %string = %string NL "" SPC SI_DataTable.teamName[%i] @ "" SPC SI_DataTable.teamPlayers[%i] @ "" SPC SI_DataTable.teamScore[%i] @ ""; } %string = %string @ %playerString; } } else { if( $Dread::EnhancedServerInfoWindow::AlternateStyle ) %string = "Players In Game (" @ %smallFont @ %playerCount @ ")"; else %string = "" @ ServerInfoDlg.headerStyle @ "PLAYER NAMESCORE"; for( %i = 0; %i < %playerCount; %i++ ) { %playerName = SI_DataTable.playerName[%i]; %playerScore = SI_DataTable.playerScore[%i]; if( $Dread::EnhancedServerInfoWindow::AlternateStyle ) %playerScore = "" @ %font @ %playerScore @ ""; %string = %string NL "" SPC %this.isBuddy(%playerName) @ "" SPC %this.getLink(%playerName) @ "" SPC %playerScore @ ""; } } %this.setText(%string); } // --------------------------------------------------------------------------- // webbrowser.cs - (1654) function PlayerPane::onDatabaseQueryResult( %this, %status, %resultString, %key ) { parent::onDatabaseQueryResult(%this, %status, %resultString, %key); if( !$Dread::EnhancedServerInfoWindow ) return; if( %this.key != %key ) return; if( getField(%status, 0) == 0 ) { if( strStr(%this.state, "warriorBuddyList") != -1 ) SI_ContentWindow.buddyList = ""; } } // --------------------------------------------------------------------------- // webbrowser.cs - (1813) function PlayerPane::onDatabaseRow( %this, %row, %isLastRow, %key ) { parent::onDatabaseRow(%this, %row, %isLastRow, %key); if( !$Dread::EnhancedServerInfoWindow ) return; if( %this.key != %key ) return; if( %this.state $= "warriorBuddyList" ) SI_ContentWindow.buddyList = (SI_ContentWindow.buddyList $= "") ? getField(%row, 0) : SI_ContentWindow.buddyList TAB getField(%row, 0); } // --------------------------------------------------------------------------- // ----- NEW FUNCTIONS --------------------------------------------------- // --------------------------------------------------------------------------- function SI_ContentWindow::ClearData( %this ) { if( isObject(SI_DataTable) ) SI_DataTable.delete(); new ScriptObject(SI_DataTable); %this.countTeams = 0; %this.countPlayers = 0; ServerInfoDlg.add(SI_DataTable); } // --------------------------------------------------------------------------- function SI_ContentWindow::AddTeamData( %this, %team ) { %idx = %this.countTeams; SI_DataTable.teamName[%idx] = getField( %team, 0 ); SI_DataTable.teamScore[%idx] = getField( %team, 1 ); SI_DataTable.teamPlayers[%idx] = 0; %this.countTeams++; } // --------------------------------------------------------------------------- function SI_ContentWindow::AddPlayerData( %this, %player ) { if( %this.countTeams <= 0 ) return; %idx = %this.countPlayers; SI_DataTable.playerName[%idx] = getField( %player, 0 ); SI_DataTable.playerTeam[%idx] = getField( %player, 1 ); SI_DataTable.playerScore[%idx] = getField( %player, 2 ); %this.countPlayers++; %playerCounted = false; for( %t = 0; %t < %this.countTeams; %t++ ) { if( SI_DataTable.playerTeam[%idx] $= SI_DataTable.teamName[%t] ) { SI_DataTable.teamPlayers[%t]++; %playerCounted = true; } } if( !%playerCounted ) { %this.addTeamData(SI_DataTable.playerTeam[%idx] TAB "N/A"); SI_DataTable.teamPlayers[(%this.countTeams - 1)]++; } } // --------------------------------------------------------------------------- function SI_ContentWindow::GetWarrior( %this, %player ) { if( (%name = strStr(%player, "\c6")) == -1 ) return -1; if( (%clan = strStr(%player, "\c7")) != -1 ) { %end = (%clan > %name) ? %clan : strLen(%player); %player = getSubStr(%player, %name, %end); } return stripChars(%player, "\cp\c6\c7\c8\c9\co"); } // --------------------------------------------------------------------------- function SI_ContentWindow::IsBuddy( %this, %player ) { %fieldCount = getFieldCount(%this.buddyList); // Return if: No buddies in list, Player is smurf, Player is bot if( (%fieldCount <= 0) || (strStr(%player, "\c6") == -1) ) return ""; %player = %this.getWarrior(%player); %match = false; for( %i = 0; (!%match && %i < %fieldCount); %i++ ) { if( %player $= getField(%this.buddyList, %i) ) %match = true; } if( %match ) { %font = ""; return "" @ %font @ "»"; } return ""; } // --------------------------------------------------------------------------- function SI_ContentWindow::GetLink( %this, %player, %debrief ) { %prefix = ""; %suffix = ""; if( $Dread::EnhancedServerInfoWindow::BrowserLinks && !%debrief ) { if( (%warrior = %this.getWarrior(%player)) != -1 ) { %prefix = ""; %suffix = ""; } } return %prefix @ %this.textRichToHyper(%player) @ %suffix; } // --------------------------------------------------------------------------- }; // End Package activatePackage(Dread_EnhancedServerInfoWindow); // ---------------------------------------------------------------------------