From 116be1648d06068d992a8c6330e66960697914c1 Mon Sep 17 00:00:00 2001 From: Robert MacGregor Date: Mon, 17 Jul 2017 23:10:36 -0400 Subject: [PATCH] v22460 (04/13/01): **Tweak, Spider Clamp turrets need more Surface area for legal deploy space now**: *Minor tweak to improve long-term server stability. *A new voice Codec, 'GSM' was added to allow voice communication between Linux and Windows users. *Minor Sound system tweaks and fixes. *Minor BOT navigation and seeking improvements. *Fix removing BOTs counting toward the Vote Meter representation. *Improvement for Vehicle Physics, particularly instances when Vehicles would get stuck on their edge. *Fix for BOT's skins not dynamically updating to correct team skin, when Admin team changed them. *Fixed bug where certain cases would cause Cursor to vanish when it should not. *Minor Server query improvements. *Fix Players can be added to the 'Admin List'. *No more voting to BAN, only Super ADMIN may now BAN. *Various GUI improvements, notably the Voice Com. elements in the Lobby, and some minor pointer Icon improvements for certain cases. *Linux 'Penguin' Symbol added for Server List Screen when joining, so users may identify Windows and Linux servers at a glance. --- SierraUp.cfg | 2 +- base/console_end.cs | 27 +- base/gui/ChatDlg.gui | 1 + base/gui/ChatGui.gui | 3 +- base/gui/ConsoleDlg.gui | 5 - base/gui/CreditsGui.gui | 3 +- base/gui/EditorGui.gui | 1 - base/gui/ForumsGui.gui | 56 ++-- base/gui/FrameOverlayGui.gui | 1 + base/gui/HUDDlgs.gui | 2 + base/gui/InteriorDebug.gui | 5 - base/gui/InteriorPreviewGui.gui | 1 - base/gui/JoinChatDlg.gui | 131 ++++++--- base/gui/LobbyGui.gui | 2 +- base/gui/PlayGui.gui | 1 + base/gui/TaskHudDlg.gui | 1 + base/input.log | 2 +- base/scripts/CTFGame.cs | 26 +- base/scripts/ChatGui.cs | 334 +++++++++++++++++++--- base/scripts/CnHGame.cs | 1 + base/scripts/DMGame.cs | 20 +- base/scripts/DnDGame.cs | 3 + base/scripts/GameGui.cs | 13 +- base/scripts/LaunchLanGui.cs | 2 - base/scripts/LobbyGui.cs | 52 +++- base/scripts/OptionsDlg.cs | 36 ++- base/scripts/RabbitGame.cs | 4 +- base/scripts/SiegeGame.cs | 1 + base/scripts/SinglePlayerGame.cs | 20 +- base/scripts/TeamHuntersGame.cs | 17 -- base/scripts/admin.cs | 97 ++++++- base/scripts/ai.cs | 17 +- base/scripts/client.cs | 7 +- base/scripts/clientDefaults.cs | 11 +- base/scripts/commanderMap.cs | 6 +- base/scripts/commonDialogs.cs | 21 +- base/scripts/creditsGui.cs | 7 - base/scripts/defaultGame.cs | 40 ++- base/scripts/deployables.cs | 22 ++ base/scripts/hud.cs | 13 - base/scripts/player.cs | 55 ++-- base/scripts/server.cs | 38 ++- base/scripts/serverDefaults.cs | 3 +- base/scripts/vehicles/clientVehicleHud.cs | 6 - base/scripts/vehicles/vehicle_havoc.cs | 3 + base/scripts/webbrowser.cs | 23 +- base/scripts/webemail.cs | 10 + base/scripts/webforums.cs | 74 ++++- base/scripts/weblinks.cs | 12 +- base/scripts/webnews.cs | 58 ++-- base/version.cs | 2 +- console_start.cs | 56 ++-- 52 files changed, 912 insertions(+), 442 deletions(-) diff --git a/SierraUp.cfg b/SierraUp.cfg index be377ea..a1773d9 100644 --- a/SierraUp.cfg +++ b/SierraUp.cfg @@ -1,7 +1,7 @@ ProductName "Tribes2" DisplayName "Tribes 2" PatchFolder .\patch -CurrentVersion 0.22337.0.0 +CurrentVersion 0.22460.0.0 AutoStart MonitorPatch LaunchExe "tribes2.exe" diff --git a/base/console_end.cs b/base/console_end.cs index a58e015..5b4157b 100644 --- a/base/console_end.cs +++ b/base/console_end.cs @@ -523,12 +523,33 @@ function abs(%val) function ServerConnectionAccepted() { - Canvas.setContent("LoadingGui"); + %info = GMJ_Browser.getServerInfoString(); + %desc = "joined a" SPC getField(%info,4) @ " game (" @ getField(%info,3) @ ") on the \"" @ getField(%info,0) @ "\" server."; + + IRCClient::onJoinGame($JoinGameAddress,%desc); + + if ( !$pref::Net::CheckEmail ) + CancelEmailCheck(); + +// if($pref::Net::DisconnectChat) +// IRCClient::quit(); + + Canvas.setContent("LoadingGui"); } function LocalConnectionAccepted() -{ - Canvas.setContent("LoadingGui"); +{ + %desc = $pref::IRCClient::hostmsg; + + IRCClient::onJoinGame("", %desc); + + if ( !$pref::Net::CheckEmail ) + CancelEmailCheck(); + +// if($pref::Net::DisconnectChat) +// IRCClient::quit(); //this is screwed up right now ^^ + + Canvas.setContent("LoadingGui"); } function DispatchLaunchMode() diff --git a/base/gui/ChatDlg.gui b/base/gui/ChatDlg.gui index 2e7cc77..15a5bf1 100644 --- a/base/gui/ChatDlg.gui +++ b/base/gui/ChatDlg.gui @@ -7,6 +7,7 @@ new GuiControl(MainChatHud) { minExtent = "8 8"; visible = "1"; modal = "1"; + bypassHideCursor = "1"; setFirstResponder = "0"; new GuiNoMouseCtrl() { diff --git a/base/gui/ChatGui.gui b/base/gui/ChatGui.gui index a67d018..95609dc 100644 --- a/base/gui/ChatGui.gui +++ b/base/gui/ChatGui.gui @@ -89,7 +89,7 @@ new GuiChunkedBitmapCtrl(ChatGui) { lineSpacing = "0"; lineContinuedIndex = "5"; allowedMatches[0] = "http"; - matchColor = "0 0 255 255"; + matchColor = "4 235 105 255"; }; }; }; @@ -152,6 +152,7 @@ new GuiChunkedBitmapCtrl(ChatGui) { maxLength = "255"; password = "0"; glowOffset = "9 9"; + tabComplete = "1"; }; new GuiTextCtrl() { profile = "ShellTextRightProfile"; diff --git a/base/gui/ConsoleDlg.gui b/base/gui/ConsoleDlg.gui index 2cd1173..ce2150e 100644 --- a/base/gui/ConsoleDlg.gui +++ b/base/gui/ConsoleDlg.gui @@ -63,18 +63,13 @@ function ToggleConsole(%make) { Canvas.popDialog(ConsoleDlg); $ConsoleActive = false; - if(!ConsoleDlg.mouseOn) - CursorOff(); if ( $enableDirectInput ) activateKeyboard(); } else { Canvas.pushDialog(ConsoleDlg, 99); - ConsoleDlg.mouseOn = Canvas.isCursorOn(); $ConsoleActive = true; - if(!ConsoleDlg.mouseOn) - CursorOn(); deactivateKeyboard(); } } diff --git a/base/gui/CreditsGui.gui b/base/gui/CreditsGui.gui index 1fd3e2d..376cc41 100644 --- a/base/gui/CreditsGui.gui +++ b/base/gui/CreditsGui.gui @@ -10,7 +10,8 @@ new GuiChunkedBitmapCtrl(CreditsGui) { variable = "$ShellBackground"; helpTag = "0"; useVariable = "1"; - qLineCount = "0"; + hideCursor = "1"; + qLineCount = "0"; new ShellPaneCtrl() { profile = "ShellPaneProfile"; diff --git a/base/gui/EditorGui.gui b/base/gui/EditorGui.gui index 51fbcac..54df945 100644 --- a/base/gui/EditorGui.gui +++ b/base/gui/EditorGui.gui @@ -283,7 +283,6 @@ function Editor::onSleep(%this) MoveMap.pop(); GlobalActionMap.unbind(keyboard, "tab"); lockMouse(false); - CursorOn(); %this.popDialogs(); diff --git a/base/gui/ForumsGui.gui b/base/gui/ForumsGui.gui index 4de2479..4b864ff 100644 --- a/base/gui/ForumsGui.gui +++ b/base/gui/ForumsGui.gui @@ -10,6 +10,16 @@ new GuiChunkedBitmapCtrl(ForumsGui) { variable = "$ShellBackground"; helpTag = "0"; useVariable = "1"; + forumCount = "-1"; + refreshFlag = "0"; + state = "done"; + eid = "112"; + ebstat = "1"; + initialized = "1"; + key = "163"; + TDialogOpen = "0"; + bflag = "4"; + TextCheck = "0"; new ShellPaneCtrl(ForumShell) { profile = "ShellPaneProfile"; @@ -152,6 +162,13 @@ new GuiChunkedBitmapCtrl(ForumsGui) { drawSeparators = "0"; headerSort = "0"; allowReposition = "0"; + noSelect = "0"; + lastID = "413653"; + state = "done"; + highestUpdate = "413653"; + lastDate = "04/20/2001 11:09am"; + allRead = "1"; + key = "162"; }; }; new ShellScrollCtrl() { @@ -186,12 +203,14 @@ new GuiChunkedBitmapCtrl(ForumsGui) { horizSizing = "width"; vertSizing = "height"; position = "0 0"; - extent = "532 180"; + extent = "532 36"; minExtent = "8 8"; visible = "1"; helpTag = "0"; lineSpacing = "2"; allowColorChars = "0"; + maxChars = "-1"; + deniedSound = "InputDeniedSound"; }; }; }; @@ -336,7 +355,7 @@ new GuiChunkedBitmapCtrl(ForumsGui) { horizSizing = "right"; vertSizing = "bottom"; position = "0 0"; - extent = "137 1908"; + extent = "137 414"; minExtent = "8 8"; visible = "1"; helpTag = "0"; @@ -392,7 +411,7 @@ new GuiChunkedBitmapCtrl(ForumsGui) { horizSizing = "right"; vertSizing = "bottom"; position = "0 0"; - extent = "52 1161"; + extent = "52 1902"; minExtent = "8 8"; visible = "1"; helpTag = "0"; @@ -424,6 +443,7 @@ new GuiChunkedBitmapCtrl(ForumsGui) { drawSeparators = "0"; headerSort = "1"; allowReposition = "0"; + noSelect = "0"; }; }; new GuiTextCtrl() { @@ -455,39 +475,39 @@ new GuiChunkedBitmapCtrl(ForumsGui) { profile = "ShellButtonProfile"; horizSizing = "right"; vertSizing = "top"; - position = "234 300"; - extent = "117 38"; + position = "291 300"; + extent = "82 38"; minExtent = "32 38"; visible = "1"; command = "ForumsRefreshTopics();"; helpTag = "0"; - text = "REFRESH TOPICS"; + text = "REFRESH "; simpleStyle = "0"; }; - new ShellBitmapButton(FM_NextThreads) { + new ShellBitmapButton(FTNextBtn) { profile = "ShellButtonProfile"; horizSizing = "right"; vertSizing = "top"; - position = "406 309"; - extent = "90 38"; + position = "357 300"; + extent = "53 38"; minExtent = "32 38"; - visible = "0"; - command = "ForumsGoTopics(1);"; + visible = "1"; + command = "ForumsGui.NextThreadPage();"; helpTag = "0"; - text = "NEXT TOPICS"; + text = "--->"; simpleStyle = "0"; }; - new ShellBitmapButton(FM_PrevThreads) { + new ShellBitmapButton(FTPrevBtn) { profile = "ShellButtonProfile"; horizSizing = "right"; vertSizing = "top"; - position = "324 309"; - extent = "90 38"; + position = "254 300"; + extent = "53 38"; minExtent = "32 38"; - visible = "0"; - command = "ForumsGoTopics(2);"; + visible = "1"; + command = "ForumsGui.PreviousThreadPage();"; helpTag = "0"; - text = "PREV TOPICS"; + text = "<---"; simpleStyle = "0"; }; new ShellBitmapButton(RForumsBtn) { diff --git a/base/gui/FrameOverlayGui.gui b/base/gui/FrameOverlayGui.gui index 7cb0feb..cd7412d 100644 --- a/base/gui/FrameOverlayGui.gui +++ b/base/gui/FrameOverlayGui.gui @@ -10,6 +10,7 @@ new GuiControl(FrameOverlayGui) { setFirstResponder = "True"; modal = "false"; helpTag = "0"; + bypassHideCursor = "1"; new GuiConsoleTextCtrl(TextOverlayControl) { profile = "GuiTextProfile"; diff --git a/base/gui/HUDDlgs.gui b/base/gui/HUDDlgs.gui index 4b53457..b8af1d8 100644 --- a/base/gui/HUDDlgs.gui +++ b/base/gui/HUDDlgs.gui @@ -301,6 +301,7 @@ new GuiControl(MessageHud) extent = "640 480"; minExtent = "8 8"; visible = "0"; + bypassHideCursor = "1"; new ShellFieldCtrl(MessageHud_Frame) { @@ -351,6 +352,7 @@ new GuiControl(ChatMenuHudDlg) extent = "640 480"; minExtent = "8 8"; visible = "0"; + bypassHideCursor = "1"; new ShellFieldCtrl(ChatMenuHud) { diff --git a/base/gui/InteriorDebug.gui b/base/gui/InteriorDebug.gui index 20968ee..eb9cb1e 100644 --- a/base/gui/InteriorDebug.gui +++ b/base/gui/InteriorDebug.gui @@ -148,13 +148,8 @@ function InteriorDontRestrict::onAction() function interiorDebugDialog::onWake( %this ) { - %this.cursor = isCursorOn(); - if ( !%this.cursor ) - CursorOn(); } function interiorDebugDialog::onSleep( %this ) { - if ( !%this.cursor ) - CursorOff(); } diff --git a/base/gui/InteriorPreviewGui.gui b/base/gui/InteriorPreviewGui.gui index f049280..44bae97 100644 --- a/base/gui/InteriorPreviewGui.gui +++ b/base/gui/InteriorPreviewGui.gui @@ -93,6 +93,5 @@ function InteriorPreviewGui::onSleep(%this) GlobalActionMap.unbind(keyboard, "tab"); GlobalActionMap.unbind(keyboard, "f9"); lockMouse(false); - CursorOn(); } diff --git a/base/gui/JoinChatDlg.gui b/base/gui/JoinChatDlg.gui index 39d34fc..5ccf389 100644 --- a/base/gui/JoinChatDlg.gui +++ b/base/gui/JoinChatDlg.gui @@ -7,63 +7,113 @@ new GuiControl(JoinChatDlg) { extent = "640 480"; minExtent = "8 8"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; new ShellPaneCtrl(JoinChatPane) { profile = "ShellDlgPaneProfile"; horizSizing = "center"; vertSizing = "center"; - position = "117 47"; + position = "120 60"; extent = "400 360"; minExtent = "48 92"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; text = "CHOOSE CHAT CHANNEL"; + maxLength = "255"; noTitleBar = "0"; - new ShellScrollCtrl() { - profile = "NewScrollCtrlProfile"; - horizSizing = "center"; - vertSizing = "height"; - position = "91 36"; - extent = "218 232"; - minExtent = "24 52"; + new ShellFancyArrayScrollCtrl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "48 39"; + extent = "304 227"; + minExtent = "8 8"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; - willFirstRespond = "1"; - hScrollBar = "alwaysOff"; - vScrollBar = "alwaysOn"; - constantThumbHeight = "0"; - defaultLineHeight = "15"; - childMargin = "0 3"; - fieldBase = "gui/shll_field"; + fixedHorizontal = "1"; + vertSpacerBitmap = "gui/shll_vertspacer"; + horzSpacerBitmap = "gui/shll_horzspacer"; - new GuiScrollContentCtrl() { - profile = "GuiDefaultProfile"; + new VirtualScrollCtrl() { + profile = "NewScrollCtrlProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "4 7"; - extent = "194 218"; + position = "0 16"; + extent = "304 211"; minExtent = "8 8"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; + willFirstRespond = "0"; + hScrollBar = "alwaysOff"; + vScrollBar = "alwaysOn"; + constantThumbHeight = "0"; + defaultLineHeight = "15"; + childMargin = "0 0"; - new ShellTextList(JoinChatList) { - profile = "ShellTextArrayProfile"; + new VirtualScrollContentCtrl() { + profile = "GuiDefaultProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "0 0"; - extent = "194 8"; + position = "4 4"; + extent = "280 203"; minExtent = "8 8"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; - enumerate = "1"; - resizeCell = "1"; - columns = "0"; - fitParentWidth = "1"; - clipColumnText = "0"; + + new GuiControl() { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "288 9616"; + minExtent = "8 8"; + visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; + helpTag = "0"; + }; }; }; + new ShellFancyTextList(JoinChatList) { + profile = "ShellServerBrowserProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "284 223"; + minExtent = "8 20"; + visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; + altCommand = "JoinChatDlg.join();"; + helpTag = "0"; + startScrollRegion = "0 0"; + headerBitmap = "gui/server_tabs"; + sortArrowBitmap = "gui/shll_sortarrow"; + fieldBase = "gui/shll_field"; + barBase = "gui/shll_bar"; + glowOffset = "4"; + rowHeight = "19"; + headerFontSize = "0"; + headerFontColor = "8 19 6 255"; + headerFontColorHL = "25 68 56 255"; + separatorColor = "192 192 192 255"; + drawSeparators = "0"; + headerSort = "1"; + allowReposition = "0"; + noSelect = "0"; + allowColorChars = "0"; + }; }; new ShellBitmapButton() { profile = "ShellButtonProfile"; @@ -73,8 +123,10 @@ new GuiControl(JoinChatDlg) { extent = "128 38"; minExtent = "32 38"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; command = "Canvas.popDialog(JoinChatDlg); LaunchTabView.viewTab(\"CHAT\",ChatGui,0);"; - accelerator = "escape"; + accelerator = "escape"; helpTag = "0"; text = "CANCEL"; simpleStyle = "0"; @@ -83,10 +135,12 @@ new GuiControl(JoinChatDlg) { profile = "GuiDefaultProfile"; horizSizing = "center"; vertSizing = "top"; - position = "86 269"; - extent = "228 36"; + position = "67 269"; + extent = "272 36"; minExtent = "8 8"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; new ShellTextEditCtrl(JoinChatName) { @@ -94,13 +148,19 @@ new GuiControl(JoinChatDlg) { horizSizing = "right"; vertSizing = "bottom"; position = "48 0"; - extent = "180 38"; + extent = "223 38"; minExtent = "32 38"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; + command = "JoinChatName.onCharInput();"; + altCommand = "JoinChatDlg.join();"; helpTag = "0"; + maxLength = "24"; historySize = "0"; - maxLength = "255"; password = "0"; + tabComplete = "0"; + deniedSound = "InputDeniedSound"; glowOffset = "9 9"; }; new GuiTextCtrl() { @@ -111,8 +171,11 @@ new GuiControl(JoinChatDlg) { extent = "44 22"; minExtent = "8 8"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; helpTag = "0"; text = "Channel:"; + maxLength = "255"; }; }; new ShellBitmapButton() { @@ -123,6 +186,8 @@ new GuiControl(JoinChatDlg) { extent = "128 38"; minExtent = "32 38"; visible = "1"; + hideCursor = "0"; + bypassHideCursor = "0"; command = "JoinChatDlg.join();"; helpTag = "0"; text = "JOIN CHAT"; diff --git a/base/gui/LobbyGui.gui b/base/gui/LobbyGui.gui index e6f0a51..947553c 100644 --- a/base/gui/LobbyGui.gui +++ b/base/gui/LobbyGui.gui @@ -156,7 +156,7 @@ new GuiChunkedBitmapCtrl(LobbyGui) { minExtent = "8 20"; visible = "1"; helpTag = "0"; - startScrollRegion = "4 0"; + startScrollRegion = "3 0"; headerBitmap = "gui/server_tabs"; sortArrowBitmap = "gui/shll_sortarrow"; fieldBase = "gui/shll_field"; diff --git a/base/gui/PlayGui.gui b/base/gui/PlayGui.gui index 6b6a0fc..f1f5704 100644 --- a/base/gui/PlayGui.gui +++ b/base/gui/PlayGui.gui @@ -9,6 +9,7 @@ new GameTSCtrl(PlayGui) { visible = "1"; setFirstResponder = "1"; modal = "1"; + hideCursor = "1"; helpTag = "0"; beaconBaseTextureName = "gui/beacon_base"; beaconTargetTextureName = "gui/crosshairs"; diff --git a/base/gui/TaskHudDlg.gui b/base/gui/TaskHudDlg.gui index c97ee12..96672ee 100644 --- a/base/gui/TaskHudDlg.gui +++ b/base/gui/TaskHudDlg.gui @@ -8,6 +8,7 @@ new GuiControl(TaskHudDlg) { minExtent = "8 8"; visible = "0"; helpTag = "0"; + bypassHideCursor = "1"; new ShellFieldCtrl() { profile = "GuiChatBackProfile"; diff --git a/base/input.log b/base/input.log index da17c35..3e96b03 100644 --- a/base/input.log +++ b/base/input.log @@ -1,4 +1,4 @@ -Input log opened at Sun Apr 15 10:48:48 2001 +Input log opened at Mon Apr 23 18:55:20 2001 Operating System: WinNT version 5.0 diff --git a/base/scripts/CTFGame.cs b/base/scripts/CTFGame.cs index 65991a4..0625e21 100644 --- a/base/scripts/CTFGame.cs +++ b/base/scripts/CTFGame.cs @@ -479,7 +479,7 @@ function CTFGame::gameOver(%game) messageAll('MsgClearObjHud', ""); for(%i = 0; %i < ClientGroup.getCount(); %i ++) { - %client = %group.getObject(%i); + %client = ClientGroup.getObject(%i); %game.resetScore(%client); } for(%j = 1; %j <= %game.numTeams; %j++) @@ -520,30 +520,6 @@ function CTFGame::clientMissionDropReady(%game, %client) DefaultGame::clientMissionDropReady(%game, %client); } -//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths -// function CTFGame::recalcScore(%game, %cl) -// { -// // currently no penalty for suicide? -// //%cl.offenseScore = ((%cl.kills * %game.SCORE_PER_KILL) * (%cl.kills * %game.SCORE_PER_KILL)) / ((%cl.kills * %game.SCORE_PER_KILL) + (%cl.deaths * %game.SCORE_PER_DEATH)); //currently 1 pt per -// %cl.offenseScore = %cl.kills * %game.SCORE_PER_KILL + // 1 -// %cl.deaths * %game.SCORE_PER_DEATH + // -1 -// %cl.escortAssists * %game.SCORE_PER_ESCORT_ASSIST + // 1 -// %cl.teamKills * %game.SCORE_PER_TEAMKILL + // -1 -// %cl.flagCaps * %game.SCORE_PER_PLYR_FLAG_CAP + // 3 -// %cl.genDestroys * %game.SCORE_PER_GEN_DESTROY + // 2 -// -// %cl.defenseScore = %cl.genDefends * %game.SCORE_PER_GEN_DEFEND + // 1 -// %cl.carrierKills * %game.SCORE_PER_CARRIER_KILL + // 1 -// %cl.escortAssists * %game.SCORE_PER_ESCORT_ASSIST + // 1 -// %cl.turretKills * %game.SCORE_PER_TURRET_KILL + // 1 -// %cl.flagReturns * %game.SCORE_PER_FLAG_RETURN + // 1 -// %cl.genRepairs * %game.SCORE_PER_GEN_REPAIR + // 1 -// -// %cl.score = %cl.offenseScore + %cl.defenseScore; -// -// %game.recalcTeamRanks(%cl); -// } - function CTFGame::assignClientTeam(%game, %client, %respawn) { DefaultGame::assignClientTeam(%game, %client, %respawn); diff --git a/base/scripts/ChatGui.cs b/base/scripts/ChatGui.cs index 3f48bf9..21cdd7d 100644 --- a/base/scripts/ChatGui.cs +++ b/base/scripts/ChatGui.cs @@ -53,11 +53,21 @@ function JoinChatDlg::onWake(%this) MessageBoxYesNo("Connect IRC","Connect to IRC server?","IRCClient::connect();","Canvas.popDialog(JoinChatDlg);"); } +//------------------------------------------------------------------------------ +function JoinChatList::onAdd( %this ) +{ + %this.addColumn( 0, "Channel Name", 210, 210, 210 ); + %this.addColumn( 1, "Users", 74, 74, 74, "numeric center" ); + %this.addColumn( 2, "", 0, 0, 0, "numeric" ); + %this.setSortColumn( 2 ); + %this.setSortIncreasing( false ); + %this.addStyle( 1, $ShellBoldFont, $ShellFontSize, "180 180 180", "220 220 220", "40 40 40" ); +} + //------------------------------------------------------------------------------ function JoinChatList::onSelect(%this,%id,%text) { - %stripped = stripChars( %text, "\c4"); - JoinChatName.setValue(%stripped); + JoinChatName.setValue( getField( %text, 0 ) ); } //------------------------------------------------------------------------------ @@ -76,6 +86,24 @@ function JoinChatDlg::join(%this) } } +//------------------------------------------------------------------------------ +function JoinChatName::onCharInput( %this ) +{ + %text = %this.getValue(); + if ( %text !$= "" ) + { + %count = JoinChatList.rowCount(); + for ( %row = 0; %row < %count; %row++ ) + { + if ( %text $= getSubStr( getField( JoinChatList.getRowText( %row ), 0 ), 0, strlen( %text ) ) ) + break; + } + + if ( %row < %count ) + JoinChatList.scrollVisible( %row ); + } +} + //------------------------------------------------------------------------------ function ChatGui::onAdd(%this) { @@ -145,7 +173,7 @@ function ChatTabView::onSelect(%this,%obj,%name) if ($IRCClient::currentChannel == $IRCClient::attachedChannel) ChatGuiMessageVector.detach(); ChatGuiMessageVector.attach(%obj); - ChatGuiMessageVector.scrollToBottom(); + //ChatGuiMessageVector.scrollToBottom(); $IRCClient::attachedChannel = %obj; } $IRCClient::currentChannel = %obj; @@ -197,12 +225,17 @@ function ChatGuiMessageVector::urlClickCallback(%this,%type,%url,%content) case "http": gotoWebPage(%url); case "server": - IRCClient::onJoinGame(%content,%url); - + //IRCClient::onJoinGame(%content,%url); %url = nextToken(%url,a," "); %url = nextToken(%url,map,"("); %url = nextToken(%url,type,")"); + if(getSubStr(%content, 0, 1) $= "#") + { + // this is a fake server, its really a channel for invites + IRCClient::join(%content); + return; + } // set the loading gui // LoadingGui.map = %map; // LoadingGui.missionType = %type; @@ -755,17 +788,18 @@ function IRCClient::notify(%event) JoinChatList.clear(); for (%i = 0; %i < $IRCClient::numChannels; %i++) { - %officailChannelMod = IRCClient::getOfficailChannelMod($IRCClient::channelNames[%i]); - %channelListDisplayName = %officailChannelMod @ IRCClient::displayChannel($IRCClient::channelNames[%i]) @"\c1 ["@ $IRCClient::channelUsers[%i] @"]"; - JoinChatList.addRow(%i, %channelListDisplayName); - } - JoinChatList.sort(0); - if (strlen(JoinChatName.getValue())) - { - %i = JoinChatList.findTextIndex(JoinChatName.getValue()); - JoinChatList.scrollVisible(%i); - JoinChatList.setSelectedById(JoinChatList.getRowId(%i)); + switch$ ( $IRCClient::channelNames[%i] ) + { + case "#Tribes2": %temp = 3; + case "#Tribes2-recruiting": %temp = 2; + case "#Help": %temp = 1; + default: %temp = 0; + } + JoinChatList.addRow(%i, IRCClient::displayChannel( $IRCClient::channelNames[%i]) TAB $IRCClient::channelUsers[%i] TAB %temp ); + JoinChatList.setRowStyle( %i, %temp > 0 ); } + JoinChatList.sort(); + JoinChatName.onCharInput(); case IDIRC_CHANNEL_HAS_KEY: KeyChannelName.setValue(IRCClient::displayChannel($IRCClient::keyChannel)); Canvas.pushDialog(ChannelKeyDlg); @@ -799,11 +833,8 @@ function IRCClient::notify(%event) } ChatTabView.removeTab($IRCClient::deletedChannel); case IDIRC_INVITED: - MessageBoxOKCancel("Invite", - "You have been invited to channel " @ - IRCClient::displayChannel($IRCClient::invitechannel) @ - " by " @ $IRCClient::inviteperson @ ".", - "IRCClient::join($IRCClient::invitechannel);"); + //MessageBoxOKCancel("Invite", "You have been invited to channel " @ IRCClient::displayChannel($IRCClient::invitechannel) @ " by " @ $IRCClient::inviteperson @ ".", "IRCClient::join($IRCClient::invitechannel);"); + IRCClient::newMessage($IRCClient::CurrentChannel, "You have been invited to channel " @ $IRCClient::invitechannel @ " by " @ $IRCClient::inviteperson @ "."); case IDIRC_BAN_LIST: ChannelBannedList_refresh(); case IDIRC_TOPIC: @@ -859,6 +890,8 @@ function IRCClient::connected() //------------------------------------------------------------------------------ function IRCClient::newMessage(%channel,%message) { + %message = IRCClient::findChannelURL(%message); + if (%channel == $IRCClient::channels.getObject(0) || %channel $= "") $IRCClient::channels.getObject(0).pushBackLine(%message); @@ -1136,20 +1169,6 @@ function IRCClient::findChannel(%name,%create) } } -//------------------------------------------------------------------------------ -function IRCClient::getOfficailChannelMod(%name) -{ - if(%name $= "#Tribes2" - || %name $= "#Tribes2-recruiting" - || %name $= "#Help") - { - return "\c4"; - } - else return ""; - -} - - //------------------------------------------------------------------------------ function IRCClient::displayChannel(%channel) { @@ -1445,8 +1464,7 @@ function IRCClient::dispatch(%prefix,%command,%params) case "JOIN": IRCClient::onJoin(%prefix,%params); case "NICK": - error("onNick has been removed!"); - //IRCClient::onNick(%prefix,%params); + IRCClient::onNick(%prefix,%params); case "QUIT": IRCClient::onQuit(%prefix,%params); case "ERROR": @@ -1638,7 +1656,7 @@ function IRCClient::onPrivMsg(%prefix,%params) // should we highlight this message if($pref::IRCClient::highlightOn) %msg = IRCClient::nickHighLight(%msg); - + %nick = %ch; if (getSubStr(%ch,0,1) $= "@" || getSubStr(%ch,0,1) $= "+") %nick = getSubStr(%nick,1,strlen(%nick)-1); @@ -1665,6 +1683,54 @@ function IRCClient::onPrivMsg(%prefix,%params) } } +//------------------------------------------------------------------------------ +function IRCClient::findChannelURL(%msg) +{ + %numWords = getWordCount(%msg); + for(%i = 0; %i < %numWords; %i++) + { + %word = getWord(%msg, %i); + %firstLetter = getSubStr(%word, 0, 1); + + if(%firstLetter $= "#") + { + // this is a fake server link that will get parsed to an + // IRCClient::join by the urlCallback hack + %newWord = ""@ IRCClient::displayChannel(%word)@""; + %word = %newWord; + } + + if(%newText $= "") + %newText = %word; + else %newText = %newText SPC %word; + } + + return %newText; +} + +//------------------------------------------------------------------------------ +function IRCClient::onNick(%prefix,%params) +{ + %person = IRCClient::findPerson2(%prefix,false); + + if (%person) + { + if (!(%person.flags & $PERSON_IGNORE)) + IRCClient::newMessage($IRCClient::currentChannel,%person.getName() @ " is now known as " @ %params @ "."); + + %channel = IRCClient::findChannel(%person.getName()); + + if (%channel) + %channel.setName(%params); + + %person.setName(%params); + + // If this is me, re-set the console variable + if (%person == $IRCClient::people.getObject(0)) + $IRCClient::NickName = %person.getName(); + } +} + //------------------------------------------------------------------------------ function IRCClient::onQuit(%prefix,%params) { @@ -1681,7 +1747,11 @@ function IRCClient::onQuit(%prefix,%params) if (!(%p.flags & $PERSON_IGNORE)) IRCClient::newMessage(%c,"\c4" @ IRCClient::taggedNick(%p) @ " has disconnected from IRC."); if (%c == $IRCClient::currentChannel) + { IRCClient::notify(IDIRC_PART); + //IRCClient::part(%c.getName()); + } + } } @@ -2668,11 +2738,14 @@ function IRCClient::nick(%nick) if (($IRCClient::state $= IDIRC_CONNECTED || $IRCClient::state $= IDIRC_CONNECTING_IRC) && strlen(nick)) { - if (stricmp(%nick, $IRCClient::people.getObject(0).displayName)) + if (stricmp(%nick, $IRCClient::people.getObject(0).getName())) IRCClient::send("NICK " @ %nick); } else - $IRCClient::people.getObject(0).displayName = %nick; + { + $IRCClient::people.getObject(0).setName(%nick); + $IRCClient::NickName = %nick; + } } //------------------------------------------------------------------------------ @@ -2681,6 +2754,166 @@ function IRCClient::name(%name) $IRCClient::people.getObject(0).real = %name; } +//-------------------------------------------------------------------------------- +function ChatMessageEntry::onTabComplete(%this) +{ + // the word that the cursor is on or just behind + // and exchange it for a matching nick from this channel + + //%channel = $IRCClient::channels.getObject(0); + %me = $IRCClient::people.getObject(0); + + // if there is no text just iterate through the channel members + + %text = %this.getValue(); + + if(%text $= "") + { + error("null string completion not implemented yet."); + return; + } + + %cursorPos = %this.getCursorPos(); + %textLen = strLen(%text); + + // find the first space behind the cursor + for(%a = %cursorPos; %a >= 0; %a--) + { + %letter = getSubStr(%text, %a, 1); + if(%letter $= " ") + { + %space = %a + 1; // add 1 so we dont INCLUDE the space + %begining = %space; + //echo("first space is at pos" SPC %begining); + break; + } + if(%a == 0) + { + //echo("there are no prev spaces."); + %begining = 0; + } + } + + // find the first space in front of the cursor + for(%b = %cursorPos; %b <= %textLen; %b++) + { + %letter = getSubStr(%text, %b, 1); + if(%letter $= " ") + { + %end = %b; + //echo("end space is at pos" SPC %end); + + break; + } + if(%b == %textLen) + { + //echo("there are no end spaces."); + %end = %textLen; + } + + } + + //why dont we move the cursor to the end of the word if they try and tab complete + //successfull or not + %this.setCursorPos(%b); + + // this forms a word + %wordLen = %end - %begining; + %word = getSubStr(%text, %begining, %wordLen); + //error("Word to tabComplete: "@%word@"."); + + //we interupt here + // if we have the last word we tab completed then we are trying to cycle + // we want to cycle with the stem of the last word we completed from + // so we use the stem instead of the word + if(%word $= %me.lastCompletion) + { + %word = %me.lastCompletionStub; + %wordLen = strLen(%word); + } + + // is it a tab-completable word? + for (%i = 0; %i < $IRCClient::people.getCount(); %i++) + { + %person = $IRCClient::people.getObject(%i); + if(%person.untagged !$= "") + %personName = %person.untagged; + else %personName = %person; + + %personSnip = getSubStr(%personName, 0, %wordLen); + + if(%personSnip $= %word) + { + %nickPossiblity[%numMatches++] = %personName; + } + } + + if(!%numMatches) + { + //error("no matches...sorry."); + return; + } + + // we have ALL the possible tab completes for the word + // if we have just tab completed on of them give us the next one instead + // cycle through the possiblities + + for(%i = 1; %i <= %numMatches; %i++) + { + if(%nickPossiblity[%i] $= %me.lastCompletion) + { + %newWord = %nickPossiblity[%i+1]; + break; + } + } + if(%newWord $= "" ) + %newWord = %nickPossiblity1; + + %newWordLenDif = strLen(%newWord) - strLen(%word); + + if(%newWord $= "") + { + //error("There is no word to tab complete"); + return -1; + } + + // there is a word (%newWord) find out which word it is + for(%i = 0; %i < getWordCount(%text); %i++) + { + %wordCheck = getWord(%text, %i); + //echo("is this word our candidate? "@%wordCheck); + if(%wordCheck $= %word) + { + %wordNum = %i; + } + //what if there are multiple instances of this word? + } + + // replace the word with the new word and move the cursor + + for(%x = 0; %x < getWordCount(%text); %x++) + { + %thisWord = getWord(%text, %x); + + if(%wordNum == %x) + { + %thisWord = %newWord; + } + + if(%newText $= "") + %newText = %thisWord; + else %newText = %newText SPC %thisWord; + } + + %this.setCursorPos( %this.getCursorPos() + %newWordLenDif -1 ); + + // replace what the current text is, with new text + %this.setValue(%newText); + + %me.lastCompletion = %newWord; + %me.lastCompletionStub = %word; +} + //---------------------------------------------------------------------- function IRCClient::nickHighLight(%message) { @@ -2978,21 +3211,25 @@ function IRCClient::onJoinServer(%mission,%server,%address,%mayprequire,%prequir } //------------------------------------------------------------------------------ - function IRCClient::onJoinGame(%address,%desc) + function IRCClient::onJoinGame(%address, %desc) { //error("IRCClient::onJoinGame( "@ %address @", "@ %desc @" )"); - IRCClient::away("joined a game."); + //IRCClient::away("joined a game."); %me = $IRCClient::people.getObject(0); if(%address $= %me.lastAddress) + { return; + } %me.lastAddress = %address; - if (%address $= "") - %msg = $pref::IRCClient::hostMsg; + %joinLink = "Click here to follow."; + + if(%address $= "") + %msg = %desc; else - %msg = "launched into " @ %desc @ "."; + %msg = %desc SPC %joinLink; //IRCClient::sendAction(%msg); @@ -3000,7 +3237,10 @@ function IRCClient::onJoinServer(%mission,%server,%address,%mayprequire,%prequir { %c = $IRCClient::channels.getObject(%i); if (!%c.private) + { IRCClient::send("PRIVMSG " @ %c.getName() @ " :\x01ACTION " @ %msg @ "\x01"); + IRCClient::newMessage($IRCClient::currentChannel, IRCClient::taggedNick($IRCClient::people.getObject(0)) @ "\c9 " @ %msg); + } } } @@ -3012,6 +3252,6 @@ function IRCClient::onLeaveGame() if ($LaunchMode $= "Normal") { - IRCClient::init(); - IRCClient::connect(); -} \ No newline at end of file + IRCClient::init(); + IRCClient::connect(); +} diff --git a/base/scripts/CnHGame.cs b/base/scripts/CnHGame.cs index 632ff51..43744b8 100644 --- a/base/scripts/CnHGame.cs +++ b/base/scripts/CnHGame.cs @@ -444,6 +444,7 @@ function CnHGame::resetScore(%game, %client) %client.offenseScore = 0; %client.kills = 0; %client.deaths = 0; + %client.suicides = 0; %client.teamKills = 0; %client.flipFlopsCapped = 0; diff --git a/base/scripts/DMGame.cs b/base/scripts/DMGame.cs index f20e601..f213815 100644 --- a/base/scripts/DMGame.cs +++ b/base/scripts/DMGame.cs @@ -213,24 +213,6 @@ function DMGame::updateKillScores(%game, %clVictim, %clKiller, %damageType, %imp messageClient(%clVictim, 'MsgDMPlayerDies', "", %clVictim.deaths + %clVictim.suicides); } -//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths -//function DMGame::recalcScore(%game, %client) -//{ -// // MES - just in case :) -// if((%client.kills + %client.deaths) == 0) -// %client.efficiency = 0; -// else -// %client.efficiency = ((%client.kills) * (%client.kills)) / (%client.kills + %client.deaths); - - //TINMAN - I changed this since DM seems based on efficiency, and the previous score doesn't appear anywhere... - //%client.score = (%client.kills * %game.SCORE_PER_KILL) + (%client.deaths * %game.SCORE_PER_DEATH); -// %client.score = mFloatLength(%client.efficiency, 1); - -// messageClient(%client, 'MsgDMYourEfficIs', "", %client.score); -// %game.recalcTeamRanks(%client); -// %game.checkScoreLimit(%client); -//} - function DMGame::recalcScore(%game, %client) { %killValue = %client.kills * %game.SCORE_PER_KILL; @@ -272,7 +254,7 @@ function DMGame::gameOver(%game) cancel(%game.timeThread); messageAll('MsgClearObjHud', ""); for(%i = 0; %i < ClientGroup.getCount(); %i ++) { - %client = %group.getObject(%i); + %client = ClientGroup.getObject(%i); %game.resetScore(%client); } } diff --git a/base/scripts/DnDGame.cs b/base/scripts/DnDGame.cs index 1d70351..c2e153a 100644 --- a/base/scripts/DnDGame.cs +++ b/base/scripts/DnDGame.cs @@ -267,4 +267,7 @@ function DnDGame::resetScore(%game, %client) %client.scoreSelfKills = 0; %client.teamKills = 0; %client.objScore = 0; + %client.kills = 0; + %client.deaths = 0; + %client.suicides = 0; } \ No newline at end of file diff --git a/base/scripts/GameGui.cs b/base/scripts/GameGui.cs index 4d05ec1..b4bb683 100644 --- a/base/scripts/GameGui.cs +++ b/base/scripts/GameGui.cs @@ -578,16 +578,7 @@ function PasswordDlg::accept( %this ) //------------------------------------------------------------------------------ function JoinSelectedGame() { - // This stuff must go soon! - %info = GMJ_Browser.getValue(); - LoadingGui.map = getField( %info, 3 ); - LoadingGui.missionType = getField( %info, 4 ); - // - - %info = GMJ_Browser.getServerInfoString(); - %desc = "a" SPC getField(%info,4) @ "(" @ getField(%info,3) @ ") game on the \"" @ getField(%info,0) @ "\" server. Click here to follow"; - - IRCClient::onJoinGame($JoinGameAddress,%desc); + $ServerInfo = GMJ_Browser.getServerInfoString(); JoinGame($JoinGameAddress); } @@ -914,7 +905,7 @@ function StartHostedGame() return; } - IRCClient::onJoinGame("", ""); + //IRCClient::onJoinGame("", ""); MessagePopup( "STARTING SERVER", "Initializing..." ); Canvas.repaint(); diff --git a/base/scripts/LaunchLanGui.cs b/base/scripts/LaunchLanGui.cs index 4624a81..b0ca3bd 100644 --- a/base/scripts/LaunchLanGui.cs +++ b/base/scripts/LaunchLanGui.cs @@ -268,8 +268,6 @@ function LaunchGui::onAdd(%this) //---------------------------------------------------------------------------- function LaunchGui::onWake(%this) { - if ( !Canvas.isCursorOn() ) - CursorOn(); $enableDirectInput = "0"; deactivateDirectInput(); Canvas.pushDialog(LaunchToolbarDlg); diff --git a/base/scripts/LobbyGui.cs b/base/scripts/LobbyGui.cs index 87a5323..858fd58 100644 --- a/base/scripts/LobbyGui.cs +++ b/base/scripts/LobbyGui.cs @@ -45,9 +45,6 @@ function LobbyGui::onWake( %this ) } $InLobby = true; - %this.mouseOn = Canvas.isCursorOn(); - if ( !%this.mouseOn ) - CursorOn(); //pop any key maps moveMap.pop(); @@ -57,7 +54,6 @@ function LobbyGui::onWake( %this ) observerBlockMap.pop(); if ( isObject( observerMap ) ) observerMap.pop(); - //flyingCameraMove.pop(); $enableDirectInput = "0"; deactivateDirectInput(); @@ -91,9 +87,6 @@ function LobbyGui::onSleep( %this ) LobbyVoteMenu.mode = ""; LobbyCancelBtn.setVisible( false ); LobbyStatusText.setText( "" ); - if ( !%this.mouseOn ) - CursorOff(); - %this.mouseOn = ""; $InLobby = false; } @@ -114,7 +107,6 @@ function lobbyLeaveGame() function lobbyReturnToGame() { Canvas.setContent( PlayGui ); - CursorOff(); } //------------------------------------------------------------------------------ @@ -139,8 +131,7 @@ function LobbyPlayerList::initColumns( %this ) %this.clear(); %this.clearColumns(); %this.addColumn( 0, " ", 24, 24, 24, "center" ); // Flag column - %this.addColumn( 6, " ", 20, 20, 20, "icon" ); // Voice Enabled column - %this.addColumn( 7, " ", 20, 20, 20, "icon" ); // Listening column + %this.addColumn( 6, "lobby_headset", 36, 36, 36, "headericon" ); // Voice Com column %this.addColumn( 1, "Player", $pref::Lobby::Column1, 50, 200 ); if ( $clTeamCount > 1 ) %this.addColumn( 2, "Team", $pref::Lobby::Column2, 50, 200 ); @@ -197,11 +188,17 @@ function lobbyUpdatePlayer( %clientId ) if ( %player.canListen ) { - %voiceEnabled = %player.voiceEnabled ? "lobby_icon_speak" : ""; - %listening = %player.isListening ? "lobby_icon_listen" : ""; + if ( %player.voiceEnabled ) + { + %voiceIcons = "lobby_icon_speak"; + if ( %player.isListening ) + %voiceIcons = %voiceIcons @ ":lobby_icon_listen"; + } + else + %voiceIcons = %player.isListening ? "lobby_icon_listen" : ""; } else - %voiceEnabled = %listening = "shll_icon_timedout"; + %voiceIcons = "shll_icon_timedout"; if ( $clTeamCount > 1 ) { @@ -209,10 +206,10 @@ function lobbyUpdatePlayer( %clientId ) %teamName = "Observer"; else %teamName = $clTeamScore[%player.teamId, 0] $= "" ? "-" : $clTeamScore[%player.teamId, 0]; - %text = %tag TAB %voiceEnabled TAB %listening TAB %player.name TAB %teamName TAB %player.score TAB %player.ping TAB %player.packetLoss; + %text = %tag TAB %voiceIcons TAB %player.name TAB %teamName TAB %player.score TAB %player.ping TAB %player.packetLoss; } else - %text = %tag TAB %voiceEnabled TAB %listening TAB %player.name TAB %player.score TAB %player.ping TAB %player.packetLoss; + %text = %tag TAB %voiceIcons TAB %player.name TAB %player.score TAB %player.ping TAB %player.packetLoss; if ( LobbyPlayerList.getRowNumById( %clientId ) == -1 ) LobbyPlayerList.addRow( %clientId, %text ); @@ -299,11 +296,36 @@ function LobbyPlayerPopup::onSelect( %this, %id, %text ) case 9: // enable/disable voice communication togglePlayerVoiceCom( %this.player ); + + case 10: + confirmAdminListAdd( %this.player, false ); + + case 11: + confirmAdminListAdd( %this.player, true ); } Canvas.popDialog( LobbyPlayerActionDlg ); } +function confirmAdminListAdd( %client, %super ) +{ + if( %super ) + MessageBoxYesNo( "CONFIRM", "Are you sure you want to add " @ %client.name @ " to the server super admin list?", "toSuperList( " @ %client.clientId @ " );" ); + + else + MessageBoxYesNo( "CONFIRM", "Are you sure you want to add " @ %client.name @ " to the server admin list?", "toAdminList( " @ %client.clientId @ " );" ); +} + +function toSuperList( %client ) +{ + commandToServer( 'AddToSuperAdminList', %client ); +} + +function toAdminList( %client ) +{ + commandToServer( 'AddToAdminList', %client ); +} + //------------------------------------------------------------------------------ function LobbyPlayerPopup::onCancel( %this ) { diff --git a/base/scripts/OptionsDlg.cs b/base/scripts/OptionsDlg.cs index dfdd888..9a1c8ad 100644 --- a/base/scripts/OptionsDlg.cs +++ b/base/scripts/OptionsDlg.cs @@ -11,11 +11,6 @@ $max_TSDetailAdjust = 1.0; //------------------------------------------------------------------------------ function OptionsDlg::onWake( %this ) { - // Save the cursor state since it's possible we will be coming from the sim: - %this.wasCursorOn = Canvas.isCursorOn(); - if ( !%this.wasCursorOn ) - CursorOn(); - $enableDirectInput = "1"; activateDirectInput(); @@ -269,10 +264,6 @@ function OptionsDlg::deviceDependent( %this ) //------------------------------------------------------------------------------ function OptionsDlg::onSleep( %this ) { - // Restore the cursor state: - if ( !%this.wasCursorOn ) - CursorOff(); - $enableDirectInput = "0"; deactivateDirectInput(); @@ -1153,16 +1144,20 @@ function OP_VoiceListenMenu::init( %this ) %this.add( ".v12", 1 ); %this.add( ".v12 - .v24", 3 ); %this.add( ".v12 - .v29", 7 ); -// %this.add( ".v12 - .gsm", 15 ); + %this.add( ".v12 - .gsm", 15 ); switch ( $pref::Audio::decodingMask ) { -// case 0 or 3 or 7 or 15: - case 0 or 3 or 7: + case 0 or 3 or 7 or 15: %this.setSelected( $pref::Audio::decodingMask ); default: %this.setSelected( 1 ); } + + // Linux only has the GSM codec available for now + if ( $platform $= "linux" ) { + %this.setActive(false); + } } //------------------------------------------------------------------------------ @@ -1172,9 +1167,14 @@ function OP_VoiceSendMenu::init( %this ) %this.add( ".v12", 0 ); %this.add( ".v24", 1 ); %this.add( ".v29", 2 ); -// %this.add( ".gsm", 3 ); + %this.add( ".gsm", 3 ); %this.setSelected($pref::Audio::encodingLevel); + + // Linux only has the GSM codec available for now + if ( $platform $= "linux" ) { + %this.setActive(false); + } } function OP_VoiceCodecInfo::init( %this ) @@ -1182,10 +1182,10 @@ function OP_VoiceCodecInfo::init( %this ) %headerStyle = ""; %displayText = "" @ %headerStyle @ "Voice Codec Information:" NL "\n" @ - " .v12: variable bitrate codec (~1.2 kbits/sec win)" NL - " .v24: fixed bitrate codec (2.4 kbits/sec win)" NL - " .v29: fixed bitrate codec (2.9 kbits/sec win)" NL -// " .gsm: fixed bitrate codec (6.6 kbits/sec win/linux)" NL + " .v12: variable bitrate codec (~1.2 kbits/sec win only)" NL + " .v24: fixed bitrate codec (2.4 kbits/sec win only)" NL + " .v29: fixed bitrate codec (2.9 kbits/sec win only)" NL + " .gsm: fixed bitrate codec (6.6 kbits/sec win/linux)" NL "\n" @ "" @ "Setting your codec levels too high can have adverse" @ @@ -1831,13 +1831,11 @@ function RemapDlg::onWake( %this ) RemapText.setText( "Press a key to assign it to this action" NL "or Esc to cancel..." ); else RemapText.setText( "Press a key or button to assign it to this action" NL "or Esc to cancel..." ); - //CursorOff(); } //------------------------------------------------------------------------------ function RemapDlg::onSleep( %this ) { - //CursorOn(); } //------------------------------------------------------------------------------ diff --git a/base/scripts/RabbitGame.cs b/base/scripts/RabbitGame.cs index 2fdeb30..e0e093b 100644 --- a/base/scripts/RabbitGame.cs +++ b/base/scripts/RabbitGame.cs @@ -332,7 +332,7 @@ function RabbitGame::gameOver(%game) messageAll('MsgClearObjHud', ""); for(%i = 0; %i < ClientGroup.getCount(); %i++) { - %client = %group.getObject(%i); + %client = ClientGroup.getObject(%i); %game.resetScore(%client); cancel(%client.waypointSchedule); } @@ -344,6 +344,8 @@ function RabbitGame::resetScore(%game, %client) { %client.score = 0; %client.kills = 0; + %client.deaths = 0; + %client.suicides = 0; %client.flagGrabs = 0; %client.flagTimeMS = 0; } diff --git a/base/scripts/SiegeGame.cs b/base/scripts/SiegeGame.cs index da1df0a..ff22cba 100644 --- a/base/scripts/SiegeGame.cs +++ b/base/scripts/SiegeGame.cs @@ -885,6 +885,7 @@ function SiegeGame::resetScore(%game, %client) %client.score = 0; %client.kills = 0; %client.deaths = 0; + %client.suicides = 0; %client.objScore = 0; %client.teamKills = 0; %client.turretKills = 0; diff --git a/base/scripts/SinglePlayerGame.cs b/base/scripts/SinglePlayerGame.cs index 3f2e3a6..8f7078e 100644 --- a/base/scripts/SinglePlayerGame.cs +++ b/base/scripts/SinglePlayerGame.cs @@ -337,8 +337,7 @@ function SinglePlayerGame::onClientKilled(%game, %clVictim, %clKiller, %damageTy if(%num == 1) %textNum = "one life"; else %textNum = %num SPC "lives"; - messageBoxOk("Restart", "You have" SPC %textNum SPC "remaining.", "CursorOff(); spawnSinglePlayer();"); - //canvas.cursorOn(); + messageBoxOk("Restart", "You have" SPC %textNum SPC "remaining.", "spawnSinglePlayer();"); } else schedule(3000, $player.player, singlePlayerDead); } @@ -418,7 +417,6 @@ function trainingBiodermSpeaks(%client) function singlePlayerDead() { missionFailed($player.miscMsg[trainingDeathLoss]); - CursorOn(); AIMissionEnd(); $objectiveQ[$enemyTeam].clear(); cancel($player.distanceCheckSchedule); @@ -839,7 +837,6 @@ function missionComplete(%text) $player.endMission = schedule(15000, game, forceFinish); messageBoxOk("Victory", %text, "forceFinish();"); - //canvas.cursorOn(); //AI stop clearQueue(); @@ -877,7 +874,6 @@ function reloadMission() { cancel($player.endMission); Game.gameOver(); - CursorOn(); loadMission($currentMission, singlePlayer); debriefContinue(); } @@ -992,10 +988,6 @@ function SinglePlayerGame::createCustomKeymap(%game) //======================================================================================= function SinglePlayerEscapeDlg::onWake( %this ) { - %this.wasCursorOn = Canvas.isCursorOn(); - if ( !%this.wasCursorOn ) - CursorOn(); - $timeScale = 0; if( OptionsDlg.isAwake()) @@ -1014,16 +1006,12 @@ function SinglePlayerEscapeDlg::onSleep( %this ) function SinglePlayerEscapeDlg::leaveGame( %this ) { Canvas.popDialog( SinglePlayerEscapeDlg ); - if ( !%this.wasCursorOn ) - CursorOff(); - MessageBoxYesNo( "LEAVE GAME", $player.miscMsg[LeaveGame], "forceFinish();", "CursorOff(); $timeScale = 1;" ); + MessageBoxYesNo( "LEAVE GAME", $player.miscMsg[LeaveGame], "forceFinish();", "$timeScale = 1;" ); } function SinglePlayerEscapeDlg::gotoSettings( %this ) { Canvas.popDialog( SinglePlayerEscapeDlg ); - //if ( !%this.wasCursorOn ) - // CursorOff(); Canvas.pushDialog( OptionsDlg ); } @@ -1032,7 +1020,6 @@ function SinglePlayerEscapeDlg::returnToGame( %this ) //error( "** CALLING SinglePlayerEscapeDlg::returnToGame **" ); $timeScale = 1; Canvas.popDialog( SinglePlayerEscapeDlg ); - CursorOff(); movemap.push(); //trainingmap.push(); @@ -1041,6 +1028,9 @@ function SinglePlayerEscapeDlg::returnToGame( %this ) function singlePlayerGame::OptionsDlgSleep(%game) { + $enableDirectInput = 1; + activateDirectInput(); + Canvas.pushDialog( SinglePlayerEscapeDlg ); // the player may have changed his keys // we need to reload the big spdialog string table that diff --git a/base/scripts/TeamHuntersGame.cs b/base/scripts/TeamHuntersGame.cs index b20cdd4..22f0d98 100644 --- a/base/scripts/TeamHuntersGame.cs +++ b/base/scripts/TeamHuntersGame.cs @@ -170,23 +170,6 @@ function TeamHuntersGame::resetScore(%game, %client) %client.deaths = 0; } -//NOTE - if we revert to this method of scoring, the function DefaultGame::awardScoreSuicide() no longer increments %client.deaths -// function TeamHuntersGame::recalcScore(%game, %cl) -// { -// if (%cl <= 0) -// return; -// -// %cl.score = 0; -// %cl.score += %cl.kills * %game.SCORE_PER_KILL; -// %cl.score += %cl.deaths * %game.SCORE_PER_DEATH; -// %cl.score += %cl.suicides * %game.SCORE_PER_SUICIDE; -// -// //must send the message to update the HUD -// messageClient(%cl, 'MsgYourScoreIs', "", %cl.score); -// -// %game.recalcTeamRanks(%cl); -// } - function TeamHuntersGame::recalcScore(%game, %cl) { if (%cl <= 0) diff --git a/base/scripts/admin.cs b/base/scripts/admin.cs index 1b07628..4ca3282 100644 --- a/base/scripts/admin.cs +++ b/base/scripts/admin.cs @@ -6,6 +6,8 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar %gender = (%client.sex $= "Male" ? 'he' : 'she'); if ( Game.scheduleVote $= "" ) { + %clientsVoting = 0; + //send a message to everyone about the vote... if (%playerVote) { @@ -36,14 +38,13 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar } Game.kickClient = %arg1; - %clientsVoting = 0; if(%teamSpecific) { - for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) { - %cl = ClientGroup.getObject( %clientIndex ); + %cl = ClientGroup.getObject( %idx ); - if(%cl.team == %client.team) + if (%cl.team == %client.team && !%cl.isAIControlled()) { messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); %clientsVoting++; @@ -51,15 +52,43 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar } } else - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + { + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + %clientsVoting++; + } + } + } } else { - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1.name); + %clientsVoting++; + } + } } } else if ( %typeName $= "VoteChangeMission" ) - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3 (%4).', %client.name, %actionMsg, %arg1, %arg2 ); + { + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 %3 (%4).', %client.name, %actionMsg, %arg1, %arg2 ); + %clientsVoting++; + } + } + } else if (%arg1 !$= 0) { if (%arg2 !$= 0) @@ -68,7 +97,17 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar { %admin = getAdmin(); if(%admin > 0) - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 Tournament Mode (%3).', %client.name, %actionMsg, %arg1); + { + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 Tournament Mode (%3).', %client.name, %actionMsg, %arg1); + %clientsVoting++; + } + } + } else { messageClient( %client, 'clientMsg', 'There must be a server admin to play in Tournament Mode.'); @@ -76,14 +115,43 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar } } else - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3 %4.', %client.name, %actionMsg, %arg1, %arg2); - + { + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 %3 %4.', %client.name, %actionMsg, %arg1, %arg2); + %clientsVoting++; + } + } + } } else - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1); + { + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2 %3.', %client.name, %actionMsg, %arg1); + %clientsVoting++; + } + } + } } else - messageAll( 'VoteStarted', '\c2%1 initiated a vote to %2.', %client.name, %actionMsg); + { + for ( %idx = 0; %idx < ClientGroup.getCount(); %idx++ ) + { + %cl = ClientGroup.getObject( %idx ); + if ( !%cl.isAIControlled() ) + { + messageClient( %cl, 'VoteStarted', '\c2%1 initiated a vote to %2.', %client.name, %actionMsg); + %clientsVoting++; + } + } + } // open the vote hud for all clients that will participate in this vote if(%teamSpecific) @@ -92,7 +160,7 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar { %cl = ClientGroup.getObject( %clientIndex ); - if(%cl.team == %client.team) + if(%cl.team == %client.team && !%cl.isAIControlled()) messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100)); } } @@ -101,7 +169,8 @@ function serverCmdStartNewVote(%client, %typeName, %actionMsg, %arg1, %arg2, %ar for ( %clientIndex = 0; %clientIndex < ClientGroup.getCount(); %clientIndex++ ) { %cl = ClientGroup.getObject( %clientIndex ); - messageClient(%cl, 'openVoteHud', "", $HostGamePlayerCount, ($Host::VotePassPercent / 100)); + if ( !%cl.isAIControlled() ) + messageClient(%cl, 'openVoteHud', "", %clientsVoting, ($Host::VotePassPercent / 100)); } } diff --git a/base/scripts/ai.cs b/base/scripts/ai.cs index 73601b7..2e1b13c 100644 --- a/base/scripts/ai.cs +++ b/base/scripts/ai.cs @@ -473,11 +473,6 @@ function AIConnection::onAIConnect(%client, %name, %team, %skill, %offense, %voi %voicePitch = 1.0; %client.voicePitch = %voicePitch; - if ( getRandom() > 0.5 ) - %client.skin = addTaggedString( "basebot" ); - else - %client.skin = addTaggedString( "basebbot" ); - %client.name = addTaggedString( "\cp\c9" @ %name @ "\co" ); %client.nameBase = %name; @@ -485,8 +480,15 @@ function AIConnection::onAIConnect(%client, %name, %team, %skill, %offense, %voi echo("CADD: " @ %client @ " " @ %client.getAddress()); $HostGamePlayerCount++; + //set the initial team - Game.assignClientTeam() should be called later on... + %client.team = %team; + if ( %client.team & 1 ) + %client.skin = addTaggedString( "basebot" ); + else + %client.skin = addTaggedString( "basebbot" ); + //setup the target for use with the sensor net, etc... - %client.target = allocClientTarget(%client, %client.name, "", %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch); + %client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch); //i need to send a "silent" version of this for single player but still use the callback -jr` if($currentMissionType $= "SinglePlayer") @@ -494,9 +496,6 @@ function AIConnection::onAIConnect(%client, %name, %team, %skill, %offense, %voi else messageAllExcept(%client, -1, 'MsgClientJoin', '\c1%1 joined the game.', %name, %client, %client.target, true); - //set the initial team - Game.assignClientTeam() should be called later on... - %client.team = %team; - //assign the skill %client.setSkillLevel(%skill); diff --git a/base/scripts/client.cs b/base/scripts/client.cs index b06fe05..37845bb 100644 --- a/base/scripts/client.cs +++ b/base/scripts/client.cs @@ -224,8 +224,6 @@ function PlayGui::onWake(%this) // hack city - these controls are floating around and need to be clamped schedule(0, 0, "refreshCenterTextCtrl"); schedule(0, 0, "refreshBottomTextCtrl"); - - CursorOff(); } function refreshBottomTextCtrl() @@ -251,8 +249,6 @@ function PlayGui::onSleep(%this) if ( isObject( observerMap ) ) observerMap.pop(); //flyingCameraMove.pop(); - - CursorOn(); } function onConnectRequestRejected( %msg ) @@ -1652,7 +1648,8 @@ function clientCmdMissionStartPhase2(%seq) // clean some stuff up. MessageHud.close(); purgeResources(); - cls(); + if (!$pref::NoClearConsole) + cls(); commandToServer('MissionStartPhase2Done', %seq); } diff --git a/base/scripts/clientDefaults.cs b/base/scripts/clientDefaults.cs index 774dbc2..bc69cb6 100644 --- a/base/scripts/clientDefaults.cs +++ b/base/scripts/clientDefaults.cs @@ -5,13 +5,18 @@ if ( $platform $= "linux" ) { } else { $pref::Audio::drivers = "Miles"; } -$pref::Audio::frequency = 22100; +$pref::Audio::frequency = 22050; $pref::Audio::sampleBits = 16; $pref::Audio::channels = 2; $pref::Audio::enableVoiceCapture = 1; $pref::Audio::voiceChannels = 1; -$pref::Audio::encodingLevel = 0; -$pref::Audio::decodingMask = 1; +if ( $platform $= "linux" ) { + $pref::Audio::encodingLevel = 3; + $pref::Audio::decodingMask = 15; +} else { + $pref::Audio::encodingLevel = 0; + $pref::Audio::decodingMask = 1; +} $pref::Audio::forceMaxDistanceUpdate = 0; $pref::Audio::environmentEnabled = 0; $pref::Audio::musicEnabled = 1; diff --git a/base/scripts/commanderMap.cs b/base/scripts/commanderMap.cs index 3faa536..86672d9 100644 --- a/base/scripts/commanderMap.cs +++ b/base/scripts/commanderMap.cs @@ -171,7 +171,6 @@ function CommanderMapGui::onWake(%this) alxStop( $HudHandle['CommandScreen'] ); alxPlay(CommandMapActivateSound, 0, 0, 0); $HudHandle['CommandScreen'] = alxPlay(CommandMapHumSound, 0, 0, 0); - CursorOn(); CMDTextButton.setValue(CommanderMap.renderText); @@ -198,7 +197,6 @@ function CommanderMapGui::onSleep(%this) %this.open = false; commandToServer('ScopeCommanderMap', false); - CursorOff(); if(CMContextPopup.visible == true) CMContextPopup.reset(); @@ -214,6 +212,9 @@ function CommanderMapGui::onSleep(%this) // if this gui is being removed outside of CommanderMapGui::close() if(CommanderTV.open && CommanderTV.attached) commandToServer('AttachCommanderCamera', -1); + + //always set the cursor back to an arrow when you leave... + Canvas.setCursor(CMDCursorArrow); } function CommanderMapGui::open(%this) @@ -776,6 +777,7 @@ new ActionMap(CommanderTVControl); CommanderTVControl.bind(mouse, xaxis, yaw); CommanderTVControl.bind(mouse, yaxis, pitch); + function CommanderTV_ButtonPress(%val) { if(%val) diff --git a/base/scripts/commonDialogs.cs b/base/scripts/commonDialogs.cs index 708bdc3..9098dff 100644 --- a/base/scripts/commonDialogs.cs +++ b/base/scripts/commonDialogs.cs @@ -18,16 +18,11 @@ function MessageBoxOK( %title, %message, %callback ) //------------------------------------------------------------------------------ function MessageBoxOKDlg::onWake( %this ) { - %this.mouseOn = Canvas.isCursorOn(); - if ( !%this.mouseOn ) - CursorOn(); } //------------------------------------------------------------------------------ function MessageBoxOKDlg::onSleep( %this ) { - if ( !%this.mouseOn ) - CursorOff(); %this.callback = ""; } @@ -46,16 +41,11 @@ function MessageBoxOKCancel( %title, %message, %callback, %cancelCallback ) //------------------------------------------------------------------------------ function MessageBoxOKCancelDlg::onWake( %this ) { - %this.mouseOn = Canvas.isCursorOn(); - if ( !%this.mouseOn ) - CursorOn(); } //------------------------------------------------------------------------------ function MessageBoxOKCancelDlg::onSleep( %this ) { - if ( !%this.mouseOn ) - CursorOff(); %this.callback = ""; } @@ -74,16 +64,11 @@ function MessageBoxYesNo( %title, %message, %yesCallback, %noCallback ) //------------------------------------------------------------------------------ function MessageBoxYesNoDlg::onWake( %this ) { - %this.mouseOn = Canvas.isCursorOn(); - if ( !%this.mouseOn ) - CursorOn(); } //------------------------------------------------------------------------------ function MessageBoxYesNoDlg::onSleep( %this ) { - if ( !%this.mouseOn ) - CursorOff(); %this.yesCallback = ""; %this.noCallback = ""; } @@ -112,16 +97,11 @@ function CloseMessagePopup() //------------------------------------------------------------------------------ function PickTeamDlg::onWake( %this ) { - %this.mouseOn = Canvas.isCursorOn(); - if ( !%this.mouseOn ) - CursorOn(); } //------------------------------------------------------------------------------ function PickTeamDlg::onSleep( %this ) { - if ( !%this.mouseOn ) - CursorOff(); } //------------------------------------------------------------------------------ @@ -159,6 +139,7 @@ function fillLoadSaveList( %ctrl, %fileSpec, %validate, %isSave ) %id++; } } + %ctrl.sort( 0 ); } //------------------------------------------------------------------------------ diff --git a/base/scripts/creditsGui.cs b/base/scripts/creditsGui.cs index 27dec3d..b765d66 100644 --- a/base/scripts/creditsGui.cs +++ b/base/scripts/creditsGui.cs @@ -20,10 +20,6 @@ function cancelCredits() //delete the contents of the ML ctrl so as to free up memory... Credits_Text.setText(""); - - //restore the mouse - ConsoleDlg.mouseOn = true; - cursorOn(); } function CreditsGui::onWake(%this) @@ -41,9 +37,6 @@ function CreditsGui::onWake(%this) } CreditsActionMap.push(); - //hide the mouse - cursorOff(); - //build the ML text ctrl... exec("scripts/creditsText.cs"); diff --git a/base/scripts/defaultGame.cs b/base/scripts/defaultGame.cs index 9dcfc30..443f439 100644 --- a/base/scripts/defaultGame.cs +++ b/base/scripts/defaultGame.cs @@ -1209,9 +1209,15 @@ function DefaultGame::assignClientTeam(%game, %client, %respawn ) if ( %client.isAIControlled() ) { if ( %leastTeam & 1 ) + { + %client.skin = addTaggedString( "basebot" ); setTargetSkin( %client.target, 'basebot' ); + } else + { + %client.skin = addTaggedString( "basebbot" ); setTargetSkin( %client.target, 'basebbot' ); + } } else setTargetSkin( %client.target, $teamSkin[%client.team] ); @@ -1253,6 +1259,11 @@ function DefaultGame::clientJoinTeam( %game, %client, %team, %respawn ) logEcho(%client.nameBase@" (cl "@%client@") joined team "@%client.team); } +function DefaultGame::AIHasJoined(%game, %client) +{ + //defined to prevent console spam +} + function DefaultGame::AIChangeTeam(%game, %client, %newTeam) { //make sure we're trying to drop an AI @@ -1283,6 +1294,19 @@ function DefaultGame::AIChangeTeam(%game, %client, %newTeam) %client.team = %newTeam; if (%newTeam < 0) Game.assignClientTeam(%client); + else + { + if ( %client.team & 1 ) + { + %client.skin = addTaggedString( "basebot" ); + setTargetSkin( %client.target, 'basebot' ); + } + else + { + %client.skin = addTaggedString( "basebbot" ); + setTargetSkin( %client.target, 'basebbot' ); + } + } messageAllExcept( %client, -1, 'MsgClientJoinTeam', '\c1bot %1 has switched to team %2.', %client.name, $teamName[%client.team], %client, %client.team ); } @@ -2326,8 +2350,14 @@ function DefaultGame::sendGamePlayerPopupMenu( %game, %client, %targetClient, %k %outrankTarget = !%targetClient.isAdmin; if( ! %targetClient.matchStartReady ) - return; - + return; + + if( %client.isSuperAdmin ) + { + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "addAdmin", "", 'Add to Server Admin List', 10); + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "addSuperAdmin", "", 'Add to Server SuperAdmin List', 11); + } + //mute options if ( !%isTargetSelf ) { @@ -2355,9 +2385,6 @@ function DefaultGame::sendGamePlayerPopupMenu( %game, %client, %targetClient, %k if ( !%isTargetSelf ) { messageClient( %client, 'MsgPlayerPopupItem', "", %key, "KickPlayer", "", 'Vote to Kick', 3 ); - - if ( !%isTargetBot ) - messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Vote to Ban', 4 ); } } @@ -2373,7 +2400,8 @@ function DefaultGame::sendGamePlayerPopupMenu( %game, %client, %targetClient, %k if ( !%isTargetBot ) { - messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Ban', 4 ); + if( %client.isSuperAdmin ) + messageClient( %client, 'MsgPlayerPopupItem', "", %key, "BanPlayer", "", 'Ban', 4 ); if ( !%isTargetObserver ) messageClient( %client, 'MsgPlayerPopupItem', "", %key, "ToObserver", "", 'Force observer', 5 ); diff --git a/base/scripts/deployables.cs b/base/scripts/deployables.cs index bdaae84..84e3dad 100644 --- a/base/scripts/deployables.cs +++ b/base/scripts/deployables.cs @@ -31,6 +31,7 @@ $NotDeployableReason::NoTerrainFound = 6; $NotDeployableReason::NoInteriorFound = 7; $NotDeployableReason::TurretTooClose = 8; $NotDeployableReason::TurretSaturation = 9; +$NotDeployableReason::SurfaceTooNarrow = 10; $MinDeployableDistance = 0.5; $MaxDeployableDistance = 4.0; //meters from body @@ -569,6 +570,20 @@ function ShapeBaseImageData::testNoInteriorFound(%item, %surface) //don't check this for non-Clasping turret deployables } +//------------------------------------------------- +function TurretIndoorDeployableImage::testHavePurchase(%item, %xform) +{ + %footprintRadius = 0.34; + %collMask = $TypeMasks::InteriorObjectType; + return %item.deployed.checkDeployPurchase(%xform, %footprintRadius, %collMask); +} + +function ShapeBaseImageData::testHavePurchase(%item, %xform) +{ + //don't check this for non-Clasping turret deployables + return true; +} + //------------------------------------------------- function TurretIndoorDeployableImage::testTurretTooClose(%item, %plyr) { @@ -767,6 +782,10 @@ function ShapeBaseImageData::testInvalidDeployConditions(%item, %plyr, %slot) { %disqualified = $NotDeployableReason::ObjectTooClose; } + else if (!%item.testHavePurchase(%xform)) + { + %disqualified = $NotDeployableReason::SurfaceTooNarrow; + } } if (%plyr.getMountedImage($BackpackSlot) == %item) //player still have the item? @@ -856,6 +875,9 @@ function Deployables::displayErrorMsg(%item, %plyr, %slot, %error) case $NotDeployableReason::TurretSaturation: %msg = '\c2There are too many turrets nearby.%1'; + + case $NotDeployableReason::SurfaceTooNarrow: + %msg = '\c2There is not adequate surface to clamp to here.%1'; default: %msg = '\c2Deploy failed.'; diff --git a/base/scripts/hud.cs b/base/scripts/hud.cs index da860eb..b99918b 100644 --- a/base/scripts/hud.cs +++ b/base/scripts/hud.cs @@ -1132,27 +1132,16 @@ function clientCmdTogglePlayHuds(%val) mainVoteHud.setVisible(0); } -//------------------------------------------------------------------------------ -// - check if anything currently up needs the cursor to be enabled -function keepCursorOn() -{ - return(CommanderMapGui.open || $ConsoleActive); -} - //------------------------------------------------------------------------------ function toggleCursorHuds(%tag) { if($Hud[%tag] !$= "" && $Hud[%tag].pushed) { - if (Canvas.isCursorOn() && !keepCursorOn()) - CursorOff(); hideHud(%tag); clientCmdTogglePlayHuds(true); } else { - if (!Canvas.isCursorOn()) - CursorOn(); showHud(%tag); clientCmdTogglePlayHuds(false); } @@ -1243,8 +1232,6 @@ function closeHud(%msgType, %msgString, %tag) $Hud[%tag].setVisible(false); Canvas.popDialog($Hud[%tag]); $Hud[%tag].pushed = 0; - if (Canvas.isCursorOn() && !keepCursorOn()) - CursorOff(); } } diff --git a/base/scripts/player.cs b/base/scripts/player.cs index c336e23..b4919d0 100644 --- a/base/scripts/player.cs +++ b/base/scripts/player.cs @@ -1082,13 +1082,13 @@ datablock DebrisData( PlayerDebris ) { explodeOnMaxBounce = false; - elasticity = 0.15; + elasticity = 0.35; friction = 0.5; lifetime = 4.0; lifetimeVariance = 0.0; - minSpinSpeed = 40; + minSpinSpeed = 60; maxSpinSpeed = 600; numBounces = 5; @@ -1100,7 +1100,7 @@ datablock DebrisData( PlayerDebris ) useRadiusMass = true; baseRadius = 1; - velocity = 20.0; + velocity = 18.0; velocityVariance = 12.0; }; @@ -1892,6 +1892,8 @@ datablock PlayerData(LightMaleBiodermArmor) : LightMaleHumanArmor shapeFile = "bioderm_light.dts"; jetEmitter = BiodermArmorJetEmitter; + debrisShapeName = "bio_player_debris.dts"; + //Foot Prints decalData = LightBiodermFootprint; decalOffset = 0.3; @@ -1912,6 +1914,8 @@ datablock PlayerData(MediumMaleBiodermArmor) : MediumMaleHumanArmor shapeFile = "bioderm_medium.dts"; jetEmitter = BiodermArmorJetEmitter; + debrisShapeName = "bio_player_debris.dts"; + //Foot Prints decalData = MediumBiodermFootprint; decalOffset = 0.35; @@ -1934,6 +1938,8 @@ datablock PlayerData(HeavyMaleBiodermArmor) : HeavyMaleHumanArmor shapeFile = "bioderm_heavy.dts"; jetEmitter = BiodermArmorJetEmitter; + debrisShapeName = "bio_player_debris.dts"; + //Foot Prints decalData = HeavyBiodermFootprint; decalOffset = 0.4; @@ -2522,30 +2528,27 @@ function Armor::damageObject(%data, %targetObject, %sourceObject, %position, %am // where did this guy get it? %damLoc = %targetObject.getDamageLocation(%position); -// if(%targetClient.race !$= "Bioderm") -// { -// // should this guy be blown apart? -// if( %damageType == $DamageType::Explosion || -// %damageType == $DamageType::TankMortar || -// %damageType == $DamageType::Mortar || -// %damageType == $DamageType::MortarTurret || -// %damageType == $DamageType::BomberBombs || -// %damageType == $DamageType::SatchelCharge ) -// { -// if( %previousDamage >= 0.35 ) // only if <= 35 percent damage remaining -// { -// %targetObject.setMomentumVector(%momVec); -// %targetObject.blowup(); -// } -// } -// } - + // should this guy be blown apart? + if( %damageType == $DamageType::Explosion || + %damageType == $DamageType::TankMortar || + %damageType == $DamageType::Mortar || + %damageType == $DamageType::MortarTurret || + %damageType == $DamageType::BomberBombs || + %damageType == $DamageType::SatchelCharge ) + { + if( %previousDamage >= 0.35 ) // only if <= 35 percent damage remaining + { + %targetObject.setMomentumVector(%momVec); + %targetObject.blowup(); + } + } + // this should be funny... -// if( %damageType == $DamageType::VehicleSpawn && %targetClient.race !$= "Bioderm" ) -// { -// %targetObject.setMomentumVector("0 0 1"); -// %targetObject.blowup(); -// } + if( %damageType == $DamageType::VehicleSpawn ) + { + %targetObject.setMomentumVector("0 0 1"); + %targetObject.blowup(); + } // If we were killed, max out the flash %targetObject.setDamageFlash(0.75); diff --git a/base/scripts/server.cs b/base/scripts/server.cs index 59ed47b..0360310 100644 --- a/base/scripts/server.cs +++ b/base/scripts/server.cs @@ -236,6 +236,10 @@ function DisconnectedCleanup() clearTextureHolds(); purgeResources(); + // Restart the email check: + if ( !EmailGui.checkingEmail && EmailGui.checkSchedule $= "" ) + CheckEmail( true ); + IRCClient::onLeaveGame(); } @@ -884,7 +888,7 @@ function serverSetClientTeamState( %client ) } else // let this player join the team he was on last game { - if(Game.numTeams > 1) + if(Game.numTeams > 1 && %client.lastTeam <= Game.numTeams ) { Game.clientJoinTeam( %client, %client.lastTeam, false ); } @@ -1444,12 +1448,15 @@ function dumpGameString() function isOnAdminList(%client) { - if( !%totalRecords = getRecordCount( $Host::adminList ) ) + if( !%totalRecords = getRecordCount( $Host::AdminList ) ) + { return false; + } for(%i = 0; %i < %totalRecords; %i++) { - %record = getField(getRecord( $Host::adminList, %i ), 0 ); + %record = getField( getRecord( $Host::AdminList, 0 ), %i); + echo( "record: " @ %record @ "guid: " @ %client.guid ); if(%record == %client.guid) return true; } @@ -1460,11 +1467,14 @@ function isOnAdminList(%client) function isOnSuperAdminList(%client) { if( !%totalRecords = getRecordCount( $Host::superAdminList ) ) + { return false; + } for(%i = 0; %i < %totalRecords; %i++) { - %record = getField( getRecord( $Host::superAdminList, %i ), 0); + %record = getField( getRecord( $Host::superAdminList, 0 ), %i); + echo( "record: " @ %record @ "guid: " @ %client.guid ); if(%record == %client.guid) return true; } @@ -1472,8 +1482,11 @@ function isOnSuperAdminList(%client) return false; } -function addToAdminList( %client ) +function ServerCmdAddToAdminList( %admin, %client ) { + if( !%admin.isSuperAdmin ) + return; + %count = getRecordCount( $Host::AdminList ); for ( %i = 0; %i < %count; %i++ ) @@ -1483,11 +1496,17 @@ function addToAdminList( %client ) return; // They're already there! } - $Host::AdminList = $Host::AdminList NL %client.guid; + if( %count == 0 ) + $Host::AdminList = %client.guid; + else + $Host::AdminList = $Host::AdminList TAB %client.guid; } -function addToSuperAdminList( %client ) +function ServerCmdAddToSuperAdminList( %admin, %client ) { + if( !%admin.isSuperAdmin ) + return; + %count = getRecordCount( $Host::SuperAdminList ); for ( %i = 0; %i < %count; %i++ ) @@ -1497,7 +1516,10 @@ function addToSuperAdminList( %client ) return; // They're already there! } - $Host::SuperAdminList = $Host::SuperAdminList NL %client.guid; + if( %count == 0 ) + $Host::SuperAdminList = %client.guid; + else + $Host::SuperAdminList = $Host::SuperAdminList TAB %client.guid; } function resetTournamentPlayers() diff --git a/base/scripts/serverDefaults.cs b/base/scripts/serverDefaults.cs index dce4a8b..ee1dfb7 100644 --- a/base/scripts/serverDefaults.cs +++ b/base/scripts/serverDefaults.cs @@ -55,8 +55,7 @@ $MasterServerAddress = "IP:198.74.40.152:28000"; // 0: .v12 (1.2 kbits/sec), 1: .v24 (2.4 kbits/sec), 2: .v29 (2.9kbits/sec) // 3: gsm (6.6 kbits/sec) -// GSM: $Audio::maxEncodingLevel = 3; -$Audio::maxEncodingLevel = 2; +$Audio::maxEncodingLevel = 3; $Audio::maxVoiceChannels = 2; $Host::MapPlayerLimits["Abominable", "CnH"] = "-1 32"; diff --git a/base/scripts/vehicles/clientVehicleHud.cs b/base/scripts/vehicles/clientVehicleHud.cs index 42a56fa..e0d8f74 100644 --- a/base/scripts/vehicles/clientVehicleHud.cs +++ b/base/scripts/vehicles/clientVehicleHud.cs @@ -116,19 +116,13 @@ function clientCmdStationVehicleShowHud() if ( Canvas.getContent() != PlayGui.getId() ) return; - if ( !Canvas.isCursorOn() ) - CursorOn(); showHud( 'vehicleHud' ); - clientCmdTogglePlayHuds(false); } //------------------------------------------------------------------------------ function clientCmdStationVehicleHideHud() { - if ( Canvas.isCursorOn() ) - CursorOff(); hideHud( 'vehicleHud' ); - clientCmdTogglePlayHuds(true); } \ No newline at end of file diff --git a/base/scripts/vehicles/vehicle_havoc.cs b/base/scripts/vehicles/vehicle_havoc.cs index 1571801..0add226 100644 --- a/base/scripts/vehicles/vehicle_havoc.cs +++ b/base/scripts/vehicles/vehicle_havoc.cs @@ -158,6 +158,9 @@ datablock FlyingVehicleData(HAPCFlyer) : HavocDamageProfile checkRadius = 7.8115; observeParameters = "1 15 15"; + + stuckTimerTicks = 32; // If the hapc spends more than 1 sec in contact with something + stuckTimerAngle = 80; // with a > 80 deg. pitch, BOOM! }; function HAPCFlyer::hasDismountOverrides(%data, %obj) diff --git a/base/scripts/webbrowser.cs b/base/scripts/webbrowser.cs index fd184fc..97d5db6 100644 --- a/base/scripts/webbrowser.cs +++ b/base/scripts/webbrowser.cs @@ -747,7 +747,8 @@ function TribeAdminMemberDlg::onDatabaseQueryResult( %this, %status, %resultStri { case "setMemberProfile": %this.state = "done"; - messageBoxOK("COMPLETE","Member Profile has been updated","WonUpdateCertificate();TL_Roster.setValue(1);"); + ForumsTopicsList.refreshFlag = true; + messageBoxOK("COMPLETE","Member Profile has been updated","WonUpdateCertificate();TL_Profile.setValue(1);"); } } else if (getSubStr(getField(%status,1),0,9) $= "ORA-04061") @@ -1684,7 +1685,25 @@ function PlayerPane::ButtonClick( %this, %senderid ) W_MemberList.addColumn( 1, "TITLE", 80, 0, 300 ); W_MemberList.addColumn( 2, "RNK", 38, 0, 50, "numeric center" ); %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); - TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,13,0,%playerName,%this,%this.key,true); + if(%playerName $= getField(getRecord(wonGetAuthInfo(),0),0)) + { + %ai = wonGetAuthInfo(); + for(%ix=0;%ix= 2; + W_MemberList.AddMember(%wid,%name,%adminLevel,%editkick,%row); + W_MemberList.AddRow(%wid,%name TAB %title TAB %adminLevel); + } + } + else + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,13,0,%playerName,%this,%this.key,true); case 3: //Player Buddylist W_MemberList.Clear(); W_MemberList.ClearColumns(); diff --git a/base/scripts/webemail.cs b/base/scripts/webemail.cs index deebe45..76a3ff7 100644 --- a/base/scripts/webemail.cs +++ b/base/scripts/webemail.cs @@ -380,6 +380,16 @@ function CheckEmail(%calledFromSched) EmailGui.checkingEmail = true; } //----------------------------------------------------------------------------- +function CancelEmailCheck() +{ + if ( EmailGui.checkSchedule ) + { + error( ">> SCHEDULED EMAIL CHECK " @ EmailGui.checkSchedule @ " CANCELED <<" ); + cancel( EmailGui.checkSchedule ); + EmailGui.checkSchedule = ""; + } +} +//----------------------------------------------------------------------------- function EmailEditBlocks() { Canvas.pushDialog(EmailBlockDlg); diff --git a/base/scripts/webforums.cs b/base/scripts/webforums.cs index 841796c..afd435e 100644 --- a/base/scripts/webforums.cs +++ b/base/scripts/webforums.cs @@ -3,6 +3,9 @@ //------------------------------------------ $ForumCacheVersion = 8; //lucky seven...NOT! $ForumCachePath = "webcache/" @ getField(wonGetAuthInfo(),3) @ "/"; +$currentForumPage = 0; +$topicPageLength = 60; + $ForumsConnecting = "CONNECTING"; $ForumsGetForums = "FETCHING FORUM LIST "; $ForumsGetTopics = "FETCHING TOPICS "; @@ -67,6 +70,12 @@ if(!isObject(ForumsMessageVector)) new MessageVector(ForumsMessageVector); } //----------------------------------------------------------------------------- +function updateTopicPageBtn(%prev,%next) +{ + FTPrevBtn.setActive( %prev ); + FTNextBtn.setActive( %next ); +} +//----------------------------------------------------------------------------- function DateStrCompare(%date1,%date2) { %d1 = getSubStr(%date1,0,2); @@ -212,15 +221,13 @@ function ForumsGetTextDisplay(%text, %offSet) //----------------------------------------------------------------------------- function ForumsGoTopics(%direction) { -// ForumsTopicsList.direction = %direction; - ForumsTopicsList.MaxDate = ""; - ForumsTopicsList.MinDate = ""; ForumShell.setTitle($ForumsConnecting); ForumsThreadPane.setVisible(false); ForumsTopicsPane.setVisible(true); FO_RejectBtn.visible = false; FO_EditBtn.visible = false; FO_AcceptBtn.visible = false; + if ( ForumsTopicsList.rowCount() == 0 || ForumsTopicsList.refreshFlag ) { FM_NewTopic.setActive(true); @@ -235,8 +242,8 @@ function ForumsGoTopics(%direction) function ForumsRefreshTopics() { ForumsTopicsList.refreshFlag = true; -// ForumsMessageVector.clear(); -// ForumsMessageVector.tid = ""; + $currentForumPage = 0; + updateTopicPageBtn(0,0); ForumsGui.eid = schedule(250,ForumsGui,GetTopicsList); } //----------------------------------------------------------------------------- @@ -328,12 +335,11 @@ function ForumsNewTopic() } else { -// ForumsGui.LaunchForum = getField(ForumsList.getRowTextById(ForumsList.getSelectedID()),0); $ForumsSubject = ""; Canvas.pushDialog( ForumsComposeDlg ); ForumsBodyText.setValue( "" ); ForumsComposeDlg.parentPost = 0; - ForumsComposeDlg.action = "Post"; + ForumsComposeDlg.action = "Post"; } } //----------------------------------------------------------------------------- @@ -498,15 +504,13 @@ function GetForumsList() //----------------------------------------------------------------------------- function GetTopicsList() { -// error("GTL: " @ ForumsComposeDlg.forum); ForumsGui.key = LaunchGui.key++; ForumShell.setTitle($ForumsGetTopics); ForumsGui.state = "getTopicList"; ForumsTopicsList.clear(); canvas.SetCursor(ArrowWaitCursor); ForumsTopicsList.clearList(); -// error("DQA:" @ 8 TAB ForumsComposeDlg.forum); - DatabaseQueryArray(8,80,ForumsComposeDlg.forum,ForumsGui,ForumsGui.key,true); + DatabaseQueryArray(8,$currentForumPage,ForumsComposeDlg.forum,ForumsGui,ForumsGui.key,true); ForumsTopicsList.refreshFlag = 0; } //----------------------------------------------------------------------------- @@ -565,9 +569,12 @@ function ForumsGui::onWake(%this) ForumShell.setTitle($ForumsConnecting); ForumsGui.state = "getForumList"; canvas.SetCursor(ArrowWaitCursor); + $currentForumPage = 0; DatabaseQueryArray(7,100,"",ForumsGui,ForumsGui.key); } // Make these buttons inactive until a message is selected: + FTPrevBtn.setActive(false); + FTNextBtn.setActive(false); FO_ReplyBtn.setActive( false ); FO_NextBtn.setActive( false ); FO_PreviousBtn.setActive( false ); @@ -615,6 +622,22 @@ function ForumsGui::onDatabaseQueryResult(%this,%status,%resultString,%key) { ForumShell.setTitle($ForumsGetTopics @ ": " @ getField(%resultString,0)); %this.state = "TopicList"; + %recordCount = getField(%resultString,0); + if(%recordCount > $topicPageLength) + { + if($currentForumPage == 0) + updateTopicPageBtn(0,1); + else if($currentForumPage > 0) + updateTopicPageBtn(1,1); + } + else + { + if($currentForumPage == 0) + updateTopicPageBtn(0,0); + else if($currentForumPage > 0) + updateTopicPageBtn(1,0); + } + } else { @@ -812,6 +835,36 @@ function ForumsGui::onDatabaseRow(%this,%row,%isLastRow,%key) } } //----------------------------------------------------------------------------- +function ForumsGui::NextThreadPage() +{ + if($currentForumPage >= 5) + return; + ForumsGui.key = LaunchGui.key++; + ForumShell.setTitle($ForumsGetTopics); + ForumsGui.state = "getTopicList"; + ForumsTopicsList.clear(); + canvas.SetCursor(ArrowWaitCursor); + ForumsTopicsList.clearList(); + $currentForumPage++; + DatabaseQueryArray(8,$currentForumPage,ForumsComposeDlg.forum,ForumsGui,ForumsGui.key,true); + ForumsTopicsList.refreshFlag = 0; +} +//----------------------------------------------------------------------------- +function ForumsGui::PreviousThreadPage() +{ + if($currentForumPage == 0) + return; + ForumsGui.key = LaunchGui.key++; + ForumShell.setTitle($ForumsGetTopics); + ForumsGui.state = "getTopicList"; + ForumsTopicsList.clear(); + canvas.SetCursor(ArrowWaitCursor); + ForumsTopicsList.clearList(); + $currentForumPage--; + DatabaseQueryArray(8,80,ForumsComposeDlg.forum,ForumsGui,ForumsGui.key,true); + ForumsTopicsList.refreshFlag = 0; +} +//----------------------------------------------------------------------------- //-- ForumsList -------------------------------------------------------------- //----------------------------------------------------------------------------- function ForumsList::onSelect(%this) @@ -821,6 +874,7 @@ function ForumsList::onSelect(%this) FM_NewTopic.setActive(true); ForumsComposeDlg.forum = ForumsList.getSelectedID(); ForumShell.setTitle("FORUMS: " @ getField(ForumsList.getRowTextbyID(ForumsList.getSelectedID()),0)); + $currentForumPage = 0; ForumsGui.eid = schedule(250,ForumsGui,GetTopicsList); } //----------------------------------------------------------------------------- diff --git a/base/scripts/weblinks.cs b/base/scripts/weblinks.cs index c0b3009..431a808 100644 --- a/base/scripts/weblinks.cs +++ b/base/scripts/weblinks.cs @@ -1,6 +1,8 @@ addWebLink( "Tribes 2 Home Page", "www.tribes2.com" ); addWebLink( "T2 Technical Information", "sierrastudios.com/games/tribes2/support" ); addWebLink( "5 Assed Monkey", "www.5assedmonkey.com" ); +addWebLink( "Arc 2055", "www.arc2055.com" ); +addWebLink( "Atari Secret Society", "www.atarisecretsociety.org" ); addWebLink( "BarrysWorld", "www.barrysworld.com" ); addWebLink( "Clan Happytyme", "www.happytyme.com" ); addWebLink( "ClanBase", "www.clanbase.com" ); @@ -14,17 +16,21 @@ addWebLink( "Long Dongles", "www.longdongles.com" ); addWebLink( "MaxBaud.Net", "www.maxbaud.net" ); addWebLink( "MoreGaming", "www.moregaming.com" ); addWebLink( "NetGames UK", "www.nguk.net" ); +addWebLink( "NGI", "www.ngi.it" ); addWebLink( "PlanetTribes", "www.planettribes.com" ); +addWebLink( "Raging Angels", "www.ragingangels.org" ); addWebLink( "Rogue Disciples", "www.roguedisciples.com" ); addWebLink( "StrikeForce", "www.strikeforcecenter.com" ); addWebLink( "TeamSound", "www.teamsound.com" ); addWebLink( "Telepresence Heavy Assault Team", "www.that.co.nz" ); -addWebLink( "Tribes2 Database", "www.tribes2database.com" ); -addWebLink( "TribesMaps", "www.tribesmaps.com" ); +addWebLink( "The Ghostbear Tribe", "www.ghostbear.net" ); addWebLink( "TribalWar", "www.tribalwar.com" ); +addWebLink( "Tribes2 Database", "www.tribes2database.com" ); +addWebLink( "Tribes Gamers", "www.tribesgamers.com" ); +addWebLink( "TribesMaps", "www.tribesmaps.com" ); +addWebLink( "Tribes Worlds", "www.tribesworlds.com" ); addWebLink( "Tribes-Universe", "www.tribes-universe.com" ); addWebLink( "WirePlay", "www.wireplay.com.au" ); -addWebLink( "ClanServ", "www.clanserv.com" ); //addWebLink( "Z Free", "games13.clear.net.nz" ); diff --git a/base/scripts/webnews.cs b/base/scripts/webnews.cs index 8ceb798..d618d14 100644 --- a/base/scripts/webnews.cs +++ b/base/scripts/webnews.cs @@ -1,10 +1,16 @@ $WebLinkCount = 0; - +$currentPage = 0; function LaunchNews() { LaunchTabView.viewTab( "NEWS", NewsGui, 0 ); } //----------------------------------------------------------------------------- +function updatePageBtn(%prev,%next) +{ + NewsPrevBtn.setActive( %prev ); + NewsNextBtn.setActive( %next ); +} +//----------------------------------------------------------------------------- function NewsGui::onWake(%this) { Canvas.SetCursor(ArrowWaitCursor); @@ -104,39 +110,21 @@ function NewsGui::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) %this.acl = getField(%status,3); %this.ttlRecords = getField( %status,2 ); %this.recordCount = getField( %RowCount_Result,0 ); - %this.pages = 0; - // RecordSet = least of 24 or rows returned - if(getField(%RowCount_Result,0) < 24) - %this.recordSet = getField(%RowCount_Result,0); - else - %this.recordSet = 24; - - // Calculate the Number of Pages - for( %temprec = %this.ttlRecords; %temprec > 0; %temprec -= 24 ) + if(%this.recordCount > 23) { - %this.pages++; - } - // SET = which page we are on - if( %this.set == 1 && %this.pages >= 2 ) - { - NewsNextBtn.setActive( true ); - NewsPrevBtn.setActive( false ); - } - else if ( %this.set == %this.pages && %this.pages >= 2 ) - { - NewsNextBtn.setActive( false ); - NewsPrevBtn.setActive( true ); - } - else if (%this.set == %this.pages && %this.pages <= 1) - { - NewsNextBtn.setActive( false ); - NewsPrevBtn.setActive( false ); + if($currentPage == 0) + updatePageBtn(0,1); + else if($currentPage > 0) + updatePageBtn(1,1); } else { - NewsNextBtn.setActive( true ); - NewsPrevBtn.setActive( true ); + if($currentPage == 0) + updatePageBtn(0,0); + else if($currentPage > 0) + updatePageBtn(1,0); } + default: // result string } } @@ -313,14 +301,14 @@ function NewsHeadlines::onSelect( %this, %id, %text ) function NewsGui::getPreviousNewsItems( %this ) { // Fetch the next batch of newer news items: - if ( %this.set == 1 ) - return; + if($currentPage == 0) + return; canvas.SetCursor(ArrowWaitCursor); NewsGui.key = LaunchGui.key++; %this.state = "status"; %this.articleCount = 0; - %this.set--; - DatabaseQueryArray(0,0,"1" TAB getField(%this.setList[%this.set],1), NewsGui, NewsGui.key ); + $currentPage--; + DatabaseQueryArray(0,$currentPage,"1" TAB getField(%this.setList[%this.set],1), NewsGui, NewsGui.key ); } //----------------------------------------------------------------------------- function NewsGui::getNextNewsItems( %this ) @@ -330,8 +318,8 @@ function NewsGui::getNextNewsItems( %this ) NewsGui.key = LaunchGui.key++; %this.state = "status"; %this.articleCount = 0; - DatabaseQueryArray(0,0,"1" TAB getField(%this.setList[%this.set],0), NewsGui, NewsGui.key ); - %this.set++; + $currentPage++; + DatabaseQueryArray(0,$currentPage,"1" TAB getField(%this.setList[%this.set],0), NewsGui, NewsGui.key ); } //----------------------------------------------------------------------------- function NewsMOTDText::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) diff --git a/base/version.cs b/base/version.cs index 57d2e31..abefa49 100644 --- a/base/version.cs +++ b/base/version.cs @@ -1 +1 @@ -buildVersion.setValue( "APR 15, 2001, 10:42 AM (dmoore)" ); +buildVersion.setValue( "APR 23, 2001, 6:48 PM (dmoore)" ); diff --git a/console_start.cs b/console_start.cs index e0dffaf..247e857 100644 --- a/console_start.cs +++ b/console_start.cs @@ -1563,21 +1563,6 @@ else helpTag = "0"; text = "Confirm Password:"; }; - new ShellTextEditCtrl() { - profile = "NewTextEditProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "133 115"; - extent = "269 38"; - minExtent = "32 38"; - visible = "1"; - variable = "$CreateAccountEmail"; - helpTag = "0"; - historySize = "0"; - maxLength = "128"; - password = "0"; - glowOffset = "9 9"; - }; new GuiTextCtrl() { profile = "ShellTextRightProfile"; horizSizing = "right"; @@ -1589,17 +1574,20 @@ else helpTag = "0"; text = "Email:"; }; - new ShellToggleButton() { - profile = "ShellRadioProfile"; + new GuiLoginPasswordCtrl(EditAccountPasswordBox) { + profile = "NewTextEditProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "63 156"; - extent = "366 30"; - minExtent = "26 27"; + position = "222 43"; + extent = "180 38"; + minExtent = "32 38"; visible = "1"; - variable = "$CreateAccountSendInfo"; + variable = "$CreateAccountPassword"; helpTag = "0"; - text = "SEND ME INFORMATION ABOUT TRIBES 2 AND OTHER PRODUCTS"; + historySize = "0"; + maxLength = "16"; + password = "1"; + glowOffset = "9 9"; }; new ShellTextEditCtrl() { profile = "NewTextEditProfile"; @@ -1616,21 +1604,33 @@ else password = "1"; glowOffset = "9 9"; }; - new GuiLoginPasswordCtrl(EditAccountPasswordBox) { + new ShellTextEditCtrl() { profile = "NewTextEditProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "222 43"; - extent = "180 38"; + position = "133 115"; + extent = "269 38"; minExtent = "32 38"; visible = "1"; - variable = "$CreateAccountPassword"; + variable = "$CreateAccountEmail"; helpTag = "0"; historySize = "0"; - maxLength = "16"; - password = "1"; + maxLength = "128"; + password = "0"; glowOffset = "9 9"; }; + new ShellToggleButton() { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "63 156"; + extent = "366 30"; + minExtent = "26 27"; + visible = "1"; + variable = "$CreateAccountSendInfo"; + helpTag = "0"; + text = "SEND ME INFORMATION ABOUT TRIBES 2 AND OTHER PRODUCTS"; + }; new ShellBitmapButton() { profile = "ShellButtonProfile"; horizSizing = "right";