diff --git a/SierraUp.cfg b/SierraUp.cfg index 3509366..be377ea 100644 --- a/SierraUp.cfg +++ b/SierraUp.cfg @@ -1,7 +1,7 @@ ProductName "Tribes2" DisplayName "Tribes 2" PatchFolder .\patch -CurrentVersion 0.22228.0.0 +CurrentVersion 0.22337.0.0 AutoStart MonitorPatch LaunchExe "tribes2.exe" diff --git a/base/gui/FilterEditDlg.gui b/base/gui/FilterEditDlg.gui index f23e5ae..f1b8d26 100644 --- a/base/gui/FilterEditDlg.gui +++ b/base/gui/FilterEditDlg.gui @@ -19,6 +19,7 @@ new GuiControl(FilterEditDlg) { visible = "1"; helpTag = "0"; text = "EDIT GAME FILTER"; + maxLength = "255"; noTitleBar = "0"; new GuiTextCtrl() { @@ -31,6 +32,7 @@ new GuiControl(FilterEditDlg) { visible = "1"; helpTag = "0"; text = "Filter Name:"; + maxLength = "255"; }; new ShellTextEditCtrl(FilterEditName) { profile = "NewTextEditProfile"; @@ -42,8 +44,8 @@ new GuiControl(FilterEditDlg) { visible = "1"; helpTag = "0"; text = "New Filter"; - historySize = "0"; maxLength = "16"; + historySize = "0"; password = "0"; glowOffset = "9 9"; }; @@ -51,67 +53,73 @@ new GuiControl(FilterEditDlg) { profile = "ShellTextRightProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "53 78"; - extent = "100 22"; + position = "26 78"; + extent = "60 22"; minExtent = "8 8"; visible = "1"; helpTag = "0"; text = "Rules Set:"; + maxLength = "255"; }; new GuiTextCtrl() { profile = "ShellTextRightProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "53 108"; - extent = "100 22"; + position = "26 108"; + extent = "60 22"; minExtent = "8 8"; visible = "1"; helpTag = "0"; text = "Game Type:"; + maxLength = "255"; }; new GuiTextCtrl() { profile = "ShellTextRightProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "326 78"; + position = "239 78"; extent = "106 22"; minExtent = "8 8"; visible = "1"; helpTag = "0"; text = "Min Player Count:"; + maxLength = "255"; }; new GuiTextCtrl() { profile = "ShellTextRightProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "326 108"; + position = "239 108"; extent = "106 22"; minExtent = "8 8"; visible = "1"; helpTag = "0"; text = "Max Player Count:"; + maxLength = "255"; }; new GuiTextCtrl() { profile = "ShellTextProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "111 197"; + position = "42 230"; extent = "82 22"; minExtent = "8 8"; visible = "1"; helpTag = "0"; text = "Server Location:"; + maxLength = "255"; }; new ShellPopupMenu(FilterEditGameType) { profile = "ShellPopupProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "150 69"; - extent = "150 36"; + position = "83 69"; + extent = "160 36"; minExtent = "49 36"; visible = "1"; helpTag = "0"; text = "Any"; + maxLength = "255"; maxPopupHeight = "200"; buttonBitmap = "gui/shll_pulldown"; rolloverBarBitmap = "gui/shll_pulldownbar_rol"; @@ -122,15 +130,43 @@ new GuiControl(FilterEditDlg) { profile = "NewTextEditNumericProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "428 70"; + position = "341 70"; extent = "80 38"; minExtent = "32 38"; visible = "1"; helpTag = "0"; text = "0"; + maxLength = "3"; validate = "FilterEditDlg.setMinPlayers();"; historySize = "0"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "422 78"; + extent = "84 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Max Bot Count:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(FilterEditMaxBots) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "502 70"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "16"; maxLength = "3"; + validate = "FilterEditDlg.setMaxBots();"; + historySize = "0"; password = "0"; glowOffset = "9 9"; }; @@ -138,12 +174,13 @@ new GuiControl(FilterEditDlg) { profile = "ShellPopupProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "150 99"; - extent = "150 36"; + position = "83 99"; + extent = "160 36"; minExtent = "49 36"; visible = "1"; helpTag = "0"; text = "Any"; + maxLength = "255"; maxPopupHeight = "200"; buttonBitmap = "gui/shll_pulldown"; rolloverBarBitmap = "gui/shll_pulldownbar_rol"; @@ -154,15 +191,43 @@ new GuiControl(FilterEditDlg) { profile = "NewTextEditNumericProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "428 100"; + position = "341 100"; extent = "80 38"; minExtent = "32 38"; visible = "1"; helpTag = "0"; text = "255"; + maxLength = "3"; validate = "FilterEditDlg.setMaxPlayers();"; historySize = "0"; - maxLength = "3"; + password = "0"; + glowOffset = "9 9"; + }; + new GuiTextCtrl() { + profile = "ShellTextRightProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "422 108"; + extent = "84 22"; + minExtent = "8 8"; + visible = "1"; + helpTag = "0"; + text = "Min CPU Speed:"; + maxLength = "255"; + }; + new ShellTextEditCtrl(FilterEditMinCPU) { + profile = "NewTextEditNumericProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "502 100"; + extent = "80 38"; + minExtent = "32 38"; + visible = "1"; + helpTag = "0"; + text = "0"; + maxLength = "4"; + validate = "FilterEditDlg.setMinCPU();"; + historySize = "0"; password = "0"; glowOffset = "9 9"; }; @@ -170,100 +235,143 @@ new GuiControl(FilterEditDlg) { profile = "ShellRadioProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "108 155"; + position = "61 145"; extent = "165 27"; minExtent = "26 27"; visible = "1"; helpTag = "0"; text = "FILTER BY MAX PING"; + maxLength = "255"; }; new ShellTextEditCtrl(FilterEditMaxPing) { profile = "NewTextEditNumericProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "277 150"; + position = "230 140"; extent = "80 38"; minExtent = "32 38"; visible = "1"; helpTag = "0"; text = "0"; + maxLength = "3"; validate = "FilterEditDlg.setMaxPing();"; historySize = "0"; - maxLength = "3"; password = "0"; glowOffset = "9 9"; }; + new ShellToggleButton(FilterEditDedicatedTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "336 145"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "DEDICATED"; + maxLength = "255"; + }; + new ShellToggleButton(FilterEditNoPwdTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "336 175"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "NOT PASSWORDED"; + maxLength = "255"; + }; + new ShellToggleButton(FilterEditCurVersionTgl) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "336 205"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + helpTag = "0"; + text = "CURRENT VERSION"; + maxLength = "255"; + }; new ShellToggleButton(FilterEditLocMask0) { profile = "ShellRadioProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "108 219"; + position = "38 252"; extent = "165 27"; minExtent = "26 27"; visible = "1"; command = "FilterEditDlg.checkRegionMasks( 0 );"; helpTag = "0"; text = "NORTH AMERICA EAST"; - }; - new ShellToggleButton(FilterEditLocMask3) { - profile = "ShellRadioProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "322 219"; - extent = "165 27"; - minExtent = "26 27"; - visible = "1"; - command = "FilterEditDlg.checkRegionMasks( 3 );"; - helpTag = "0"; - text = "AUSTRALIA"; - }; - new ShellToggleButton(FilterEditLocMask1) { - profile = "ShellRadioProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "108 247"; - extent = "165 27"; - minExtent = "26 27"; - visible = "1"; - command = "FilterEditDlg.checkRegionMasks( 1 );"; - helpTag = "0"; - text = "NORTH AMERICA WEST"; - }; - new ShellToggleButton(FilterEditLocMask4) { - profile = "ShellRadioProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "322 247"; - extent = "165 27"; - minExtent = "26 27"; - visible = "1"; - command = "FilterEditDlg.checkRegionMasks( 4 );"; - helpTag = "0"; - text = "ASIA"; + maxLength = "255"; }; new ShellToggleButton(FilterEditLocMask2) { profile = "ShellRadioProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "108 275"; + position = "217 252"; extent = "165 27"; minExtent = "26 27"; visible = "1"; command = "FilterEditDlg.checkRegionMasks( 2 );"; helpTag = "0"; text = "SOUTH AMERICA"; + maxLength = "255"; + }; + new ShellToggleButton(FilterEditLocMask3) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "396 252"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 3 );"; + helpTag = "0"; + text = "AUSTRALIA"; + maxLength = "255"; + }; + new ShellToggleButton(FilterEditLocMask1) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "38 280"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 1 );"; + helpTag = "0"; + text = "NORTH AMERICA WEST"; + maxLength = "255"; }; new ShellToggleButton(FilterEditLocMask5) { profile = "ShellRadioProfile"; horizSizing = "right"; vertSizing = "bottom"; - position = "322 275"; + position = "217 280"; extent = "165 27"; minExtent = "26 27"; visible = "1"; command = "FilterEditDlg.checkRegionMasks( 5 );"; helpTag = "0"; text = "EUROPE"; + maxLength = "255"; + }; + new ShellToggleButton(FilterEditLocMask4) { + profile = "ShellRadioProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "396 280"; + extent = "165 27"; + minExtent = "26 27"; + visible = "1"; + command = "FilterEditDlg.checkRegionMasks( 4 );"; + helpTag = "0"; + text = "ASIA"; + maxLength = "255"; }; new ShellBitmapButton() { profile = "ShellButtonProfile"; diff --git a/base/gui/JoinChatDlg.gui b/base/gui/JoinChatDlg.gui index dc5c702..39d34fc 100644 --- a/base/gui/JoinChatDlg.gui +++ b/base/gui/JoinChatDlg.gui @@ -73,7 +73,7 @@ new GuiControl(JoinChatDlg) { extent = "128 38"; minExtent = "32 38"; visible = "1"; - command = "Canvas.popDialog(JoinChatDlg); LaunchTabView.viewTab(\"Chat\",ChatGui,0);"; + command = "Canvas.popDialog(JoinChatDlg); LaunchTabView.viewTab(\"CHAT\",ChatGui,0);"; accelerator = "escape"; helpTag = "0"; text = "CANCEL"; diff --git a/base/gui/LobbyGui.gui b/base/gui/LobbyGui.gui index 6577e9b..e6f0a51 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 = "2 0"; + startScrollRegion = "4 0"; headerBitmap = "gui/server_tabs"; sortArrowBitmap = "gui/shll_sortarrow"; fieldBase = "gui/shll_field"; diff --git a/base/gui/OptionsDlg.gui b/base/gui/OptionsDlg.gui index e2d8913..09df1ea 100644 --- a/base/gui/OptionsDlg.gui +++ b/base/gui/OptionsDlg.gui @@ -1365,7 +1365,7 @@ new GuiControl(OptionsDlg) { minExtent = "8 8"; visible = "1"; helpTag = "0"; - text = "Voice Listen Quality:"; + text = "Voice Listen Codec(s):"; maxLength = "255"; }; new ShellPopupMenu(OP_VoiceListenMenu) { @@ -1373,7 +1373,7 @@ new GuiControl(OptionsDlg) { horizSizing = "right"; vertSizing = "bottom"; position = "183 87"; - extent = "169 36"; + extent = "129 36"; minExtent = "49 36"; visible = "1"; helpTag = "0"; @@ -1394,7 +1394,7 @@ new GuiControl(OptionsDlg) { minExtent = "8 8"; visible = "1"; helpTag = "0"; - text = "Voice Send Quality:"; + text = "Voice Send Codec:"; maxLength = "255"; }; new ShellPopupMenu(OP_VoiceSendMenu) { @@ -1402,7 +1402,7 @@ new GuiControl(OptionsDlg) { horizSizing = "right"; vertSizing = "bottom"; position = "183 117"; - extent = "169 36"; + extent = "129 36"; minExtent = "49 36"; visible = "1"; helpTag = "0"; @@ -1438,6 +1438,20 @@ new GuiControl(OptionsDlg) { text = "Voice Send Quality:"; maxLength = "255"; }; + new GuiMLTextCtrl(OP_VoiceCodecInfo) { + profile = "GuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "25 159"; + extent = "395 140"; + minExtent = "8 140"; + visible = "1"; + helpTag = "0"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + deniedSound = "InputDeniedSound"; + }; }; new ShellFieldCtrl(OP_ControlsPane) { profile = "ShellFieldProfile"; diff --git a/base/gui/guiProfiles.cs b/base/gui/guiProfiles.cs index 7f2c6e5..ee61f7b 100644 --- a/base/gui/guiProfiles.cs +++ b/base/gui/guiProfiles.cs @@ -1607,7 +1607,7 @@ new GuiControlProfile ("GuiChannelVectorProfile") fontColors[6] = "77 253 95"; // team chat, spam protection message, client tasks fontColors[7] = "40 231 240"; // global chat fontColors[8] = "200 200 50 200"; // used in single player game - fontColors[9] = "0 255 255"; // action + fontColors[9] = "66 219 234"; autoSizeWidth = false; autoSizeHeight = true; }; diff --git a/base/input.log b/base/input.log index 211408b..da17c35 100644 --- a/base/input.log +++ b/base/input.log @@ -1,4 +1,4 @@ -Input log opened at Mon Apr 9 17:42:34 2001 +Input log opened at Sun Apr 15 10:48:48 2001 Operating System: WinNT version 5.0 diff --git a/base/missions/Alcatraz.mis b/base/missions/Alcatraz.mis index 91bd478..2076fb7 100644 --- a/base/missions/Alcatraz.mis +++ b/base/missions/Alcatraz.mis @@ -389,17 +389,6 @@ new SimGroup(MissionGroup) { }; new SimGroup(IslandBase) { - new WayPoint() { - position = "40.0495 -103.975 291.518"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Control Switch"; - team = "0"; - locked = "true"; - }; new StaticShape() { position = "40.0495 -103.975 291.518"; rotation = "1 0 0 0"; @@ -408,6 +397,7 @@ new SimGroup(MissionGroup) { lockCount = "0"; homingCount = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; new InteriorInstance() { position = "40 -104 277.557"; diff --git a/base/missions/BeggarsRun.mis b/base/missions/BeggarsRun.mis index a7187b5..d0ccd54 100644 --- a/base/missions/BeggarsRun.mis +++ b/base/missions/BeggarsRun.mis @@ -3225,7 +3225,7 @@ new SimGroup(MissionGroup) { rotation = "1 0 0 0"; scale = "1 1 1"; description = "AudioDefault3d"; - fileName = "fx/environment/cicadas.wav"; + fileName = "fx/environment/crickets_drygrass.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; diff --git a/base/missions/Caldera.mis b/base/missions/Caldera.mis index 83a31c7..28d1c30 100644 --- a/base/missions/Caldera.mis +++ b/base/missions/Caldera.mis @@ -135,7 +135,7 @@ new SimGroup(MissionGroup) { new SimGroup(Teams) { new SimGroup(Team1) { - + providesPower = true; new SimGroup(WBase) { new StaticShape() { @@ -200,6 +200,7 @@ new SimGroup(MissionGroup) { scoutVehicle = "Removed"; locked = "true"; AssaultVehicle = "Removed"; + needsObjectiveWaypoint = true; }; new InteriorInstance() { position = "-45.7829 -144.124 180.354"; @@ -210,16 +211,6 @@ new SimGroup(MissionGroup) { AudioProfile = "Universal_Base_Pulse_2"; locked = "true"; }; - new StaticShape() { - position = "67.61 -48.218 -207.508"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "GeneratorLarge"; - lockCount = "0"; - homingCount = "0"; - Target = "37"; - locked = "true"; - }; new InteriorInstance() { position = "-216.271 -235.459 148.4"; rotation = "0 0 1 63.0253"; @@ -265,18 +256,6 @@ new SimGroup(MissionGroup) { locked = "true"; originalBarrel = "PlasmaBarrelLarge"; }; - new WayPoint() { - position = "-211.497 -233.586 151.337"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - nameTag = "Vehicle Pad"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Vehicle Pad"; - team = "0"; - locked = "true"; - }; }; new SimGroup(spawnspheres) { @@ -388,18 +367,7 @@ new SimGroup(MissionGroup) { locked = "true"; name = "Tactical Generator"; scoreValue = "5"; - }; - new WayPoint() { - position = "172.84 20.1 219.825"; - rotation = "1 0 0 0"; - scale = "0.1 0.1 0.1"; - nameTag = "Tactical Generator"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Tactical Generator"; - team = "0"; - locked = "true"; + needsObjectiveWaypoint = true; }; }; new SimGroup(Stations) { @@ -426,6 +394,7 @@ new SimGroup(MissionGroup) { homingCount = "0"; Target = "48"; locked = "true"; + needsObjectiveWaypoint = true; }; new InteriorInstance() { position = "210.961 -2.7616 219.719"; @@ -448,18 +417,7 @@ new SimGroup(MissionGroup) { locked = "true"; name = "Primary Generator"; scoreValue = "5"; - }; - new WayPoint() { - position = "268.3 20 219.8"; - rotation = "1 0 0 0"; - scale = "0.1 0.1 0.1"; - nameTag = "Primary Generator"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Primary Generator"; - team = "0"; - locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape() { position = "182.86 -5.01 219.7"; diff --git a/base/missions/Desiccator.mis b/base/missions/Desiccator.mis index ff3455e..d12d1f9 100644 --- a/base/missions/Desiccator.mis +++ b/base/missions/Desiccator.mis @@ -1657,7 +1657,7 @@ new SimGroup(MissionGroup) { position = "641.802 118.866 134.47"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/cicadas.wav"; + fileName = "fx/environment/crickets_drygrass.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; @@ -1679,7 +1679,7 @@ new SimGroup(MissionGroup) { position = "-201.563 -1.4155 139.489"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/cicadas.wav"; + fileName = "fx/environment/crickets_drygrass.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; diff --git a/base/missions/Gauntlet.mis b/base/missions/Gauntlet.mis index e9c873c..f78c140 100644 --- a/base/missions/Gauntlet.mis +++ b/base/missions/Gauntlet.mis @@ -132,41 +132,45 @@ new SimGroup(MissionGroup) { position = "114.695 -236.202 71.1529"; rotation = "0 0 1 89.5639"; scale = "1 1 1"; - nameTag = "Bunker 1"; + nameTag = "Bunker 1"; dataBlock = "GeneratorLarge"; lockCount = "0"; homingCount = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2generatorLarge2) { position = "201.307 -171.776 53.1292"; rotation = "0 0 -1 89.9544"; scale = "1 1 1"; - nameTag = "Bunker 2"; + nameTag = "Bunker 2"; dataBlock = "GeneratorLarge"; lockCount = "0"; homingCount = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2generatorLarge3) { position = "220.274 -75.7459 47.4929"; rotation = "0 0 -1 89.9544"; scale = "1 1 1"; - nameTag = "Bunker 3"; + nameTag = "Bunker 3"; dataBlock = "GeneratorLarge"; lockCount = "0"; homingCount = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2generatorLarge4) { position = "122.055 -68.2083 63.2656"; rotation = "0 0 1 89.5639"; scale = "1 1 1"; - nameTag = "Bunker 4"; + nameTag = "Bunker 4"; dataBlock = "GeneratorLarge"; lockCount = "0"; homingCount = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; new SimGroup(Bunker1) { @@ -418,61 +422,7 @@ new SimGroup(MissionGroup) { homingCount = "0"; scoreValue = "5"; locked = "true"; - }; - new WayPoint() { - position = "199.172 -171.42 96.1636"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Bunker 2"; - team = "0"; - locked = "true"; - }; - new WayPoint() { - position = "116.693 -235.964 113.659"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Bunker 1"; - team = "0"; - locked = "true"; - }; - new WayPoint() { - position = "218.486 -75.1646 90.4386"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Bunker 3"; - team = "0"; - locked = "true"; - }; - new WayPoint() { - position = "123.951 -67.938 106.075"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Bunker 4"; - team = "0"; - locked = "true"; - }; - new WayPoint() { - position = "187.809 11.6775 32.3547"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Main Switch"; - team = "0"; - locked = "true"; + needsObjectiveWaypoint = true; }; new SimGroup(AIObjectives) { diff --git a/base/missions/IceBound.mis b/base/missions/IceBound.mis index da3df0a..9a3b23b 100644 --- a/base/missions/IceBound.mis +++ b/base/missions/IceBound.mis @@ -187,6 +187,7 @@ new SimGroup(MissionGroup) { lockCount = "0"; homingCount = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2generatorLarge2) { position = "444.673 206.305 47.5003"; @@ -197,28 +198,7 @@ new SimGroup(MissionGroup) { lockCount = "0"; homingCount = "0"; locked = "true"; - }; - new WayPoint() { - position = "468.836 157.363 103.217"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Power Building"; - team = "0"; - locked = "true"; - }; - new WayPoint() { - position = "477.048 329.22 103.709"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Control Building"; - team = "0"; - locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2SensorLargePulse1) { position = "412.455 189.482 168.46"; @@ -242,6 +222,7 @@ new SimGroup(MissionGroup) { homingCount = "0"; scoreValue = "5"; locked = "true"; + needsObjectiveWaypoint = true; }; new ForceFieldBare() { position = "506.928 283.603 45.4741"; diff --git a/base/missions/Masada.mis b/base/missions/Masada.mis index 30bb50f..6d3615c 100644 --- a/base/missions/Masada.mis +++ b/base/missions/Masada.mis @@ -1024,28 +1024,6 @@ new SimGroup(MissionGroup) { new SimGroup(defense) { powerCount = "3"; - new WayPoint() { - position = "-5.4366 -45.1529 272.689"; - rotation = "-0 0 -1 42.9718"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Holdfast Generators"; - team = "2"; - locked = "true"; - }; - new WayPoint() { - position = "15.7295 83.0713 296.738"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Stronghold Generator"; - team = "2"; - locked = "true"; - }; new InteriorInstance() { position = "-15.5504 -20.6638 284.652"; rotation = "-0 0 -1 89.9543"; @@ -1092,7 +1070,7 @@ new SimGroup(MissionGroup) { Target = "42"; team = "2"; locked = "true"; - damageTimeMS = "694715"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2generatorLarge2) { position = "-6.7802 -43.0255 271.588"; @@ -1106,7 +1084,7 @@ new SimGroup(MissionGroup) { Target = "43"; team = "2"; locked = "true"; - damageTimeMS = "695007"; + needsObjectiveWaypoint = true; }; new Item() { position = "-14.7471 -32.7903 282.27"; @@ -1230,6 +1208,7 @@ new SimGroup(MissionGroup) { team = "2"; locked = "true"; damageTimeMS = "652863"; + needsObjectiveWaypoint = true; }; new Item() { position = "-11.0846 -30.0616 297.07"; @@ -1249,7 +1228,7 @@ new SimGroup(MissionGroup) { position = "-15.3318 -0.0208392 269.726"; rotation = "1 0 0 0"; scale = "1 1 1"; - nameTag = "Control Switch"; + nameTag = "Control"; dataBlock = "FlipFlop"; lockCount = "0"; homingCount = "0"; @@ -1257,6 +1236,7 @@ new SimGroup(MissionGroup) { team = "2"; locked = "true"; Projector = "0"; + needsObjectiveWaypoint = true; }; new ForceFieldBare() { position = "-15.6484 -12.6499 269.508"; diff --git a/base/missions/MyrkWood.mis b/base/missions/MyrkWood.mis index 6349a76..f900b9b 100644 --- a/base/missions/MyrkWood.mis +++ b/base/missions/MyrkWood.mis @@ -1469,7 +1469,7 @@ new SimGroup(MissionGroup) { position = "-123.276 28.4301 116.558"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/bird1.wav"; + fileName = "fx/environment/bird_echo2.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; @@ -1513,7 +1513,7 @@ new SimGroup(MissionGroup) { position = "-288.977 118.926 110.287"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/bird1.wav"; + fileName = "fx/environment/bird_echo3.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; @@ -1535,7 +1535,7 @@ new SimGroup(MissionGroup) { position = "-464.766 -25.1102 114.665"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/bird2.wav"; + fileName = "fx/environment/bird_echo4.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; @@ -1579,7 +1579,7 @@ new SimGroup(MissionGroup) { position = "-464.866 108.756 106.983"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/bird1.wav"; + fileName = "fx/environment/bird_echo1.wav"; useProfileDescription = "0"; outsideAmbient = "1"; volume = "1"; diff --git a/base/missions/Respite.mis b/base/missions/Respite.mis index a572e34..5e65542 100644 --- a/base/missions/Respite.mis +++ b/base/missions/Respite.mis @@ -410,7 +410,7 @@ new SimGroup(MissionGroup) { powerCount = "0"; new SimGroup(ObjAlpha) { - powerCount = "1"; + providesPower = true; new InteriorInstance() { position = "-202.509 -44.8018 107.6"; @@ -436,25 +436,11 @@ new SimGroup(MissionGroup) { team = "2"; locked = "true"; }; - new StaticShape(Team2generatorLarge1) { - position = "-208.471 -50.5374 91.9001"; - rotation = "0 0 -1 89.9544"; - scale = "1 1 1"; - nameTag = "East Stronghold"; - dataBlock = "GeneratorLarge"; - lockCount = "0"; - homingCount = "0"; - name = "East Bunker Generator"; - Target = "40"; - team = "2"; - scoreValue = "5"; - locked = "true"; - }; new StaticShape(Team2FlipFlop1) { position = "-202.729 -45.0803 97.5"; rotation = "1 0 0 0"; scale = "1 1 1"; - nameTag = "Control Switch"; + nameTag = "Control"; dataBlock = "FlipFlop"; lockCount = "0"; homingCount = "0"; @@ -462,6 +448,7 @@ new SimGroup(MissionGroup) { team = "2"; Projector = "0"; locked = "true"; + needsObjectiveWaypoint = true; }; }; new SimGroup(ObjBeta) { @@ -490,6 +477,7 @@ new SimGroup(MissionGroup) { team = "2"; scoreValue = "5"; locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2StationInventory1) { position = "-115.004 27.3879 132.533"; @@ -553,6 +541,7 @@ new SimGroup(MissionGroup) { team = "2"; scoreValue = "5"; locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape(Team2StationInventory3) { position = "-61.3169 -115.977 126.67"; @@ -590,39 +579,6 @@ new SimGroup(MissionGroup) { locked = "true"; }; }; - new WayPoint() { - position = "-64.5573 -106.805 125.669"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "South Base Generator"; - team = "2"; - locked = "true"; - }; - new WayPoint() { - position = "-104.34 26.2317 135.396"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "North Base Generator"; - team = "2"; - locked = "true"; - }; - new WayPoint() { - position = "-206.347 -48.8631 90.5829"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "West Tower"; - team = "2"; - locked = "true"; - }; }; new SimGroup(AIObjectives) { powerCount = "0"; diff --git a/base/missions/Training2.mis b/base/missions/Training2.mis index d7dd9a6..e7c9207 100644 --- a/base/missions/Training2.mis +++ b/base/missions/Training2.mis @@ -1387,7 +1387,7 @@ new SimGroup(MissionGroup) { position = "640.679 -507.778 104.063"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/sandpatter2. wav"; + fileName = "fx/environment/sandpatter1. wav"; useProfileDescription = "0"; outsideAmbient = "0"; volume = "1"; @@ -1408,7 +1408,7 @@ new SimGroup(MissionGroup) { position = "5.48026 2.36356 61.6817"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/sandpatter2.wav"; + fileName = "fx/environment/sandpatter1.wav"; useProfileDescription = "0"; outsideAmbient = "0"; volume = "1"; @@ -1450,7 +1450,7 @@ new SimGroup(MissionGroup) { position = "335.214 -315.084 70.6655"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/sandpatter2.wav"; + fileName = "fx/environment/sandpatter1.wav"; useProfileDescription = "0"; outsideAmbient = "0"; volume = "1"; @@ -1492,7 +1492,7 @@ new SimGroup(MissionGroup) { position = "904.258 -618.315 111.262"; rotation = "1 0 0 0"; scale = "1 1 1"; - fileName = "fx/environment/sandpatter2.wav"; + fileName = "fx/environment/sandpatter1.wav"; useProfileDescription = "0"; outsideAmbient = "0"; volume = "1"; diff --git a/base/missions/UltimaThule.mis b/base/missions/UltimaThule.mis index 1ad3674..cf19770 100644 --- a/base/missions/UltimaThule.mis +++ b/base/missions/UltimaThule.mis @@ -107,6 +107,7 @@ new SimGroup(MissionGroup) { name = "Sorth Entrance Generator"; Target = "33"; team = "1"; + needsObjectiveWaypoint = true; }; new StaticShape() { position = "40.62 -127.18 51.09"; @@ -120,6 +121,7 @@ new SimGroup(MissionGroup) { name = "East Generator"; Target = "34"; team = "1"; + needsObjectiveWaypoint = true; }; new Turret() { position = "-1.6 -288.306 120.594"; @@ -251,51 +253,20 @@ new SimGroup(MissionGroup) { name = "Great Hall Generator"; Target = "41"; team = "1"; - }; - new WayPoint() { - position = "34.89 -165.434 71.8233"; - rotation = "1 0 0 0"; - scale = "0.1 0.1 0.1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "Great Hall Generator"; - team = "1"; - locked = "true"; - }; - new WayPoint() { - position = "40.81 -129.263 50.1692"; - rotation = "1 0 0 0"; - scale = "0.1 0.1 0.1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "East Generator"; - team = "1"; - locked = "true"; - }; - new WayPoint() { - position = "40.03 -223.787 46.0142"; - rotation = "1 0 0 0"; - scale = "0.1 0.1 0.1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "South Entrance Generator"; - team = "1"; - locked = "true"; + needsObjectiveWaypoint = true; }; new StaticShape() { position = "31.6522 -165.653 51.15"; rotation = "1 0 0 0"; scale = "1 1 1"; - nameTag = "Control Switch"; + nameTag = "Control"; dataBlock = "FlipFlop"; lockCount = "0"; homingCount = "0"; locked = "true"; Target = "42"; team = "1"; + needsObjectiveWaypoint = true; }; new ForceFieldBare() { position = "25.7162 -158.946 50.9885"; @@ -493,6 +464,7 @@ new SimGroup(MissionGroup) { name = "NE Force Field Generator #1"; Target = "47"; team = "1"; + needsObjectiveWaypoint = true; }; new StaticShape() { position = "243.46 232.45 166.9"; @@ -506,6 +478,7 @@ new SimGroup(MissionGroup) { name = "NE Force Field Generator #2"; Target = "48"; team = "1"; + needsObjectiveWaypoint = true; }; new InteriorInstance() { position = "240.91 269.69 155.91"; @@ -543,17 +516,6 @@ new SimGroup(MissionGroup) { team = "1"; }; }; - new WayPoint() { - position = "239.74 221.29 169.23"; - rotation = "1 0 0 0"; - scale = "1 1 1"; - dataBlock = "WayPointMarker"; - lockCount = "0"; - homingCount = "0"; - name = "North Force Field Generator Bunker"; - team = "1"; - locked = "true"; - }; new Item() { position = "250.45 216.71 144.22"; rotation = "1 0 0 0"; diff --git a/base/scripts/ChatGui.cs b/base/scripts/ChatGui.cs index 8ec79e7..3f48bf9 100644 --- a/base/scripts/ChatGui.cs +++ b/base/scripts/ChatGui.cs @@ -41,7 +41,7 @@ $CHANNEL_NEW = 512; // Default messages (if gui is left blank) $DefaultChatAwayMessage = "Don't be alarmed. I'm going to step away from my computer."; $DefaultChatKickMessage = "Alright, you\'re outta here!"; -$DefaultChatBanMessage = "You, and three generations of your offspring, are banned from this channel."; +$DefaultChatBanMessage = "Get out. And stay out!"; //------------------------------------------------------------------------------ @@ -145,6 +145,7 @@ function ChatTabView::onSelect(%this,%obj,%name) if ($IRCClient::currentChannel == $IRCClient::attachedChannel) ChatGuiMessageVector.detach(); ChatGuiMessageVector.attach(%obj); + ChatGuiMessageVector.scrollToBottom(); $IRCClient::attachedChannel = %obj; } $IRCClient::currentChannel = %obj; @@ -786,7 +787,7 @@ function IRCClient::notify(%event) case IDIRC_SORT: %i = $IRCClient::currentChannel.findMember($IRCClient::people.getObject(0)); ChatEditChannelBtn.setVisible($IRCClient::currentChannel.getFlags(%i) & $PERSON_OPERATOR); - ChatRoomMemberList_rebuild($IRCClient::currentChannel); + ChatRoomMemberList_refresh($IRCClient::currentChannel); case IDIRC_PART: ChatRoomMemberList_refresh($IRCClient::currentChannel); case IDIRC_KICK: @@ -824,6 +825,7 @@ function IRCClient::notify(%event) //------------------------------------------------------------------------------ function IRCClient::statusMessage(%message) { + //error("IRCClient::statusMessage( "@%message@" )"); $IRCClient::channels.getObject(0).pushBackLine("[STATUS] " @ %message); } @@ -1370,6 +1372,9 @@ function IRCClient::relogin() //------------------------------------------------------------------------------ function IRCClient::send(%message) { + if($IRCEcho) + echo("IRC SEND:" @ %message); + $IRCClient::tcp.send(%message @ "\r\n"); } @@ -1377,7 +1382,7 @@ function IRCClient::send(%message) function IRCTCP::onLine(%this,%line) { if($IRCEcho) - echo("IRC " @ %line); + echo("IRC RECV:" @ %line); // HACK: Windows 2000 bug. We shouldn't need to do this! if ($IRCClient::state $= IDIRC_CONNECTING_SOCKET) IRCTCP::onConnected(%this); @@ -1614,6 +1619,7 @@ function IRCClient::onJoin(%prefix,%params) // this is a hack, the list isnt being rebuilt right away but it is if you give it a half second schedule(500, 0, chatRoomMemberList_rebuild); + //error("rebuilt by onJoin"); } IRCClient::connected(); } @@ -1942,7 +1948,7 @@ function IRCClient::onKick(%prefix,%params) } else { - IRCClient::newMessage($IRCClient::currentChannel,"Host " @ %host @ " kicks " @ IRCClient::taggedNick(%p) @ " out of the chat room, saying \"" @ %params @ "\""); + IRCClient::newMessage(%c, "Host " @ %host @ " kicks " @ IRCClient::taggedNick(%p) @ " out of the chat room, saying \"" @ %params @ "\""); IRCClient::notify(IDIRC_PART); } @@ -2199,7 +2205,7 @@ function IRCClient::censor(%str) //------------------------------------------------------------------------------ function IRCClient::onList(%prefix,%params) { -//error("IRCClient::onList( "@ %prefix @", "@ %params @")"); + //error("IRCClient::onList( "@ %prefix @", "@ %params @")"); //EXAMPLE: :StLouis.MO.US.UnderNet.org 322 homer128 #bmx 9 :BMX Rules! %params = nextToken(%params,nick," "); @@ -2309,6 +2315,7 @@ function IRCClient::onAway(%prefix,%params) //------------------------------------------------------------------------------ function IRCClient::onAction(%prefix,%params) { + //error("IRCClient::onAction( "@ %prefix @", "@ %params @")"); %msg = nextToken(%params,ch," :"); %c = IRCClient::findChannel(%ch,true); @@ -2436,7 +2443,8 @@ function IRCClient::onChannelBanned(%prefix,%params) nextToken(%channel,channel," "); IRCClient::connected(); - IRCClient::statusMessage("Cannot join " @ %channel @ ": you have been banned."); + //IRCClient::statusMessage("Cannot join " @ %channel @ ": you have been banned."); + MessageBoxOk("Banned", "Cannot join " @ IRCClient::displayChannel(%channel) @ ". You have been banned."); IRCClient::notify(IDIRC_BANNED_CH); } @@ -2446,6 +2454,7 @@ function IRCClient::onServerBanned(%prefix,%params) $IRCClient::state = $IDIRC_DISCONNECTED; IRCClient::statusMessage("You have been banned from this server."); + MessageBoxOk("Server Ban", "You have been banned from this server."); // IRCClient::notify(IDIRC_BANNED_SERVER); } @@ -2830,6 +2839,7 @@ function IRCClient::setSpectator(%nick) //------------------------------------------------------------------------------ function IRCClient::kick(%p,%msg) { + //error("IRCClient::kick( "@ %p @", "@ %msg@" )"); IRCClient::send("KICK" SPC $IRCClient::currentChannel.getName() SPC %p.displayName @ " :" @ %msg); } @@ -2968,19 +2978,29 @@ 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."); + + %me = $IRCClient::people.getObject(0); + if(%address $= %me.lastAddress) + return; + + %me.lastAddress = %address; + if (%address $= "") %msg = $pref::IRCClient::hostMsg; else %msg = "launched into " @ %desc @ "."; - IRCClient::away(%msg); + + //IRCClient::sendAction(%msg); + for (%i = 1; %i < $IRCClient::channels.getCount(); %i++) { %c = $IRCClient::channels.getObject(%i); if (!%c.private) - //IRCClient::send2(%msg,%c.getName()); - IRCClient::send("PRIVMSG " @ %c.getName() @ ":\x01ACTION " @ %msg @ "\x01"); + IRCClient::send("PRIVMSG " @ %c.getName() @ " :\x01ACTION " @ %msg @ "\x01"); } } diff --git a/base/scripts/ChooseFilterDlg.cs b/base/scripts/ChooseFilterDlg.cs index 34e26cc..ee44ad8 100644 --- a/base/scripts/ChooseFilterDlg.cs +++ b/base/scripts/ChooseFilterDlg.cs @@ -64,11 +64,28 @@ function ChooseFilterDlg::editFilter( %this ) %rowText = CF_FilterList.getRowTextById( %rowId ); %filterName = getField( %rowText, 0 ); %gameType = getField( %rowText, 1 ); + if ( %gameType $= "" ) + %gameType = "Any"; %misType = getField( %rowText, 2 ); + if ( %misType $= "" ) + %misType = "Any"; %minPlayers = getField( %rowText, 3 ); + if ( %minPlayers $= "" ) + %minPlayers = 0; %maxPlayers = getField( %rowText, 4 ); + if ( %maxPlayers $= "" ) + %maxPlayers = 255; %regionCode = getField( %rowText, 5 ); + if ( %regionCode $= "" ) + %regionCode = 4294967295; %maxPing = getField( %rowText, 6 ); + %maxBots = getField( %rowText, 7 ); + if ( %maxBots $= "" ) + %maxBots = 16; + %minCPU = getField( %rowText, 8 ); + if ( %minCPU $= "" ) + %minCPU = 0; + %flags = getField( %rowText, 9 ); FilterEditName.setValue( %filterName ); FilterEditMinPlayers.setValue( %minPlayers ); @@ -96,6 +113,12 @@ function ChooseFilterDlg::editFilter( %this ) FilterEditMaxPing.setVisible( true ); } + FilterEditMaxBots.setValue( %maxBots ); + FilterEditMinCPU.setValue( %minCPU ); + FilterEditDedicatedTgl.setValue( %flags & 1 ); + FilterEditNoPwdTgl.setValue( %flags & 2 ); + FilterEditCurVersionTgl.setValue( %flags & 128 ); + %this.editFilterIndex = %rowId; Canvas.pushDialog( FilterEditDlg ); } @@ -115,8 +138,14 @@ function ChooseFilterDlg::saveFilter( %this ) %regionCode |= ( 1 << %i ); } %maxPing = FilterEditUsePingTgl.getValue() ? FilterEditMaxPing.getValue() : 0; + %maxBots = FilterEditMaxBots.getValue(); + %minCPU = FilterEditMinCPU.getValue(); + %flags = FilterEditDedicatedTgl.getValue() + | ( FilterEditNoPwdTgl.getValue() << 1 ) + | ( FilterEditCurVersionTgl.getValue() << 7 ); %row = %filterName TAB %gameType TAB %misType - TAB %minPlayers TAB %maxPlayers TAB %regionCode TAB %maxPing; + TAB %minPlayers TAB %maxPlayers TAB %regionCode + TAB %maxPing TAB %maxBots TAB %minCPU TAB %flags; CF_FilterList.setRowById( %this.editFilterIndex, %row ); CF_FilterList.setSelectedById( %this.editFilterIndex ); @@ -209,7 +238,7 @@ function FilterEditDlg::setMaxPlayers( %this ) %newMax = 1; FilterEditMaxPlayers.setValue( %newMax ); } - if ( %newMax > 255 ) + else if ( %newMax > 255 ) { %newMax = 255; FilterEditMaxPlayers.setValue( %newMax ); @@ -223,6 +252,22 @@ function FilterEditDlg::setMaxPlayers( %this ) } } +//------------------------------------------------------------------------------ +function FilterEditDlg::setMaxBots( %this ) +{ + %newMax = FilterEditMaxBots.getValue(); + if ( %newMax < 0 ) + { + %newMax = 0; + FilterEditMaxBots.setValue( %newMax ); + } + else if ( %newMax > 16 ) + { + %newMax = 16; + FilterEditMaxBots.setValue( %newMax ); + } +} + //------------------------------------------------------------------------------ function FilterEditUsePingTgl::onAction( %this ) { @@ -240,6 +285,17 @@ function FilterEditDlg::setMaxPing( %this ) } } +//------------------------------------------------------------------------------ +function FilterEditDlg::setMinCPU( %this ) +{ + %newMin = FilterEditMinCPU.getValue(); + if ( %newMin < 0 ) + { + %newMin = 0; + FilterEditMinCPU.setValue( %newMin ); + } +} + //------------------------------------------------------------------------------ function clearGameTypes() { diff --git a/base/scripts/CnHGame.cs b/base/scripts/CnHGame.cs index 48953a5..632ff51 100644 --- a/base/scripts/CnHGame.cs +++ b/base/scripts/CnHGame.cs @@ -383,7 +383,7 @@ function CnHGame::genOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 Generator!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 Generator!', %repairman.name, %obj.nameTag); } } @@ -392,7 +392,7 @@ function CnHGame::stationOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 Inventory Station!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 Inventory Station!', %repairman.name, %obj.nameTag); } } @@ -401,16 +401,16 @@ function CnHGame::sensorOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 Pulse Sensor!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 Pulse Sensor!', %repairman.name, %obj.nameTag); } } function CnHGame::turretOnRepaired(%game, %obj, %objName) -{ +{ if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Turret!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Turret!', %repairman.name, %obj.nameTag); } } @@ -419,7 +419,7 @@ function CnHGame::vStationOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Vehicle Station!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 Vehicle Station!', %repairman.name, %obj.nameTag); } } diff --git a/base/scripts/GameGui.cs b/base/scripts/GameGui.cs index 7502b9f..4d05ec1 100644 --- a/base/scripts/GameGui.cs +++ b/base/scripts/GameGui.cs @@ -277,15 +277,34 @@ function GMJ_Browser::runQuery( %this ) { %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 - getField( %filter, 1 ), // Rules Set - getField( %filter, 2 ), // Mission Type + %rulesSet, // Rules Set + %missionType, // Mission Type getField( %filter, 3 ), // Min Players - getField( %filter, 4 ), // Max Players - getField( %filter, 5 ), // Region Mask - getField( %filter, 6 ) ); // Max Ping + %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 @@ -329,7 +348,7 @@ function GMJ_Browser::onDatabaseRow( %this, %row, %isLastRow, %key ) if ( %isLastRow ) { GMJ_StatusText.setValue( "Querying the master server..." ); - queryMasterServer( $JoinGamePort, 0, "Any", "Any", 0, 255, 0xFFFFFFFF, 0, %this.buddyList ); + queryMasterServer( $JoinGamePort, 0, "Any", "Any", 0, 255, 16, 0xFFFFFFFF, 0, 0, %this.buddyList ); GMJ_StopBtn.setActive( true ); %this.buddyList = ""; } diff --git a/base/scripts/OptionsDlg.cs b/base/scripts/OptionsDlg.cs index d7d9d05..dfdd888 100644 --- a/base/scripts/OptionsDlg.cs +++ b/base/scripts/OptionsDlg.cs @@ -115,6 +115,21 @@ function OptionsDlg::onWake( %this ) OP_AudioBitRateMenu.init(); OP_AudioChannelsMenu.init(); + // don't allow changing of of mixer settings while in a game... + %active = !isObject(ServerConnection); + OP_AudioFrequencyMenu.setActive(%active); + // Changing these audio settings doesn't help Linux performance + if ( $platform $= "linux" ) { + OP_AudioBitRateMenu.setActive(false); + OP_AudioChannelsMenu.setActive(false); + } else { + OP_AudioBitRateMenu.setActive(%active); + OP_AudioChannelsMenu.setActive(%active); + } + OP_AudioProviderMenu.setActive(%active); + OP_AudioEnvironmentTgl.setActive(%active); + OP_AudioSpeakerMenu.setActive(%active); + OP_MasterVolumeSlider.setValue( $pref::Audio::masterVolume ); OP_EffectsVolumeSlider.setValue( $pref::Audio::effectsVolume ); OP_VoiceBindVolumeSlider.setValue( $pref::Audio::radioVolume ); @@ -128,6 +143,7 @@ function OptionsDlg::onWake( %this ) OP_InputBoostSlider.setValue( $pref::Audio::captureGainScale ); OP_VoiceListenMenu.init(); OP_VoiceSendMenu.init(); + OP_VoiceCodecInfo.init(); updateInputBoost(); // Initialize the Control Options controls: @@ -272,6 +288,12 @@ function OptionsDlg::onSleep( %this ) audioSetDriver( "none" ); audioSetDriver( $pref::Audio::activeDriver ); %this.resetAudio = ""; + + // Play the shell hum: (all sources are gone) + if($HudHandle['shellScreen'] $= "") + alxStop($HudHandle['shellScreen']); + + $HudHandle['shellScreen'] = alxPlay(ShellScreenHumSound, 0, 0, 0); } if ( isObject( ServerConnection ) && isTextureFlushRequired() ) @@ -1127,13 +1149,16 @@ function localCaptureStop( %method ) function OP_VoiceListenMenu::init( %this ) { %this.clear(); - %this.add( "Low", 1 ); - %this.add( "Medium", 3 ); - %this.add( "High", 7 ); + %this.add( "", 0 ); + %this.add( ".v12", 1 ); + %this.add( ".v12 - .v24", 3 ); + %this.add( ".v12 - .v29", 7 ); +// %this.add( ".v12 - .gsm", 15 ); switch ( $pref::Audio::decodingMask ) { - case 3 or 7: +// case 0 or 3 or 7 or 15: + case 0 or 3 or 7: %this.setSelected( $pref::Audio::decodingMask ); default: %this.setSelected( 1 ); @@ -1144,17 +1169,31 @@ function OP_VoiceListenMenu::init( %this ) function OP_VoiceSendMenu::init( %this ) { %this.clear(); - %this.add( "Low", 0 ); - %this.add( "Medium", 1 ); - %this.add( "High", 2 ); + %this.add( ".v12", 0 ); + %this.add( ".v24", 1 ); + %this.add( ".v29", 2 ); +// %this.add( ".gsm", 3 ); - switch ( $pref::Audio::encodingLevel ) - { - case 1 or 2: - %this.setSelected( $pref::Audio::encodingLevel ); - default: - %this.setSelected( 0 ); - } + %this.setSelected($pref::Audio::encodingLevel); +} + +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 + "\n" @ + "" @ + "Setting your codec levels too high can have adverse" @ + " affects on network performance." @ + ""; + + %this.setText(%displayText); + %this.setActive(false); } //------------------------------------------------------------------------------ diff --git a/base/scripts/SiegeGame.cs b/base/scripts/SiegeGame.cs index 9ff12e2..da1df0a 100644 --- a/base/scripts/SiegeGame.cs +++ b/base/scripts/SiegeGame.cs @@ -67,6 +67,22 @@ function FlipFlop::playerTouch(%data, %flipflop, %player) Game.allObjectivesCompleted(); } +//-------------------------------------------------------------------------------- +function StaticShapeData::onDisabled(%data, %obj, %prevState) +{ + Parent::onDisabled(%data, %obj, %prevState); + + if(%obj.waypoint) + game.switchWaypoint(%obj.waypoint); +} + +//-------------------------------------------------------------------------------- +function StaticShapeData::onEnabled(%data, %obj, %prevState) +{ + if(%obj.waypoint) + game.switchWaypoint(%obj.waypoint); +} + }; //--------- Siege SCORING INIT ------------------ @@ -137,6 +153,9 @@ function SiegeGame::missionLoadDone(%game) // save off turret bases' original barrels %game.checkTurretBases(); + // add objective waypoints + %game.findObjectiveWaypoints(); + MissionGroup.setupPositionMarkers(true); } @@ -388,6 +407,9 @@ function SiegeGame::halftime(%game, %reason) // start the mission again (release players) %game.halfTimeCountDown($Host::warmupTime); + + //redo the objective waypoints + %game.findObjectiveWaypoints(); } else { @@ -658,6 +680,68 @@ function ForceFieldBare::objectRestore(%this) // avoid console error spam } +// ------------------------------------------------------------------------ +// Waypoint managing + +function siegeGame::findObjectiveWaypoints(%game, %group) +{ + if(!%group) + %group = nameToId("MissionGroup/Teams"); + + for (%i = 0; %i < %group.getCount(); %i++) + { + %obj = %group.getObject(%i); + if(%obj.getClassName() $= SimGroup) + { + %game.findObjectiveWaypoints(%obj); + } + else if(%obj.needsObjectiveWaypoint) + { + %game.initializeWaypointAtObjective(%obj); + } + } +} + +function siegeGame::initializeWaypointAtObjective(%game, %object) +{ + // out with the old...jic + if(%object.waypoint) + %object.waypoint.delete(); + + if(%object.team == %game.offenseTeam) + %team = %game.offenseTeam; + else + %team = (%game.offenseTeam == 1 ? 2 : 1); + + // to make the waypoint look a little prettier we are using the z from + // position and the x and y from worldBoxCenter + %posX = getWord(%object.getWorldBoxCenter(), 0); + %posY = getWord(%object.getWorldBoxCenter(), 1); + %posZ = getWord(%object.position, 2); + + %append = getTaggedString(%object.getDataBlock().targetTypeTag); + + %object.waypoint = new WayPoint() { + position = %posX SPC %posY SPC %posZ; + rotation = "1 0 0 0"; + scale = "1 1 1"; + dataBlock = "WayPointMarker"; + team = %team; + name = %object.nameTag SPC %append; + }; + MissionCleanup.add(%object.waypoint); +} + +function siegeGame::switchWaypoint(%game, %waypoint) +{ + %team = %waypoint.team; + %newTeam = (%team == 1 ? 2 : 1); + + %waypoint.team = %newTeam; +} + + + function SiegeGame::gameOver(%game) { //call the default @@ -866,8 +950,8 @@ function SiegeGame::genOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 generator!', %repairman.name, %objName); - } + messageTeam(%repairman.team, 'msgGenRepaired', '\c0%1 repaired the %2 generator!', %repairman.name, %obj.nameTag); + } } function SiegeGame::stationOnRepaired(%game, %obj, %objName) @@ -875,7 +959,7 @@ function SiegeGame::stationOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 inventory station!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgStationRepaired', '\c0%1 repaired the %2 inventory station!', %repairman.name, %obj.nameTag); } } @@ -884,7 +968,7 @@ function SiegeGame::sensorOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 pulse sensor!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgSensorRepaired', '\c0%1 repaired the %2 pulse sensor!', %repairman.name, %obj.nameTag); } } @@ -893,7 +977,7 @@ function SiegeGame::turretOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 turret!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 turret!', %repairman.name, %obj.nameTag); } } @@ -902,7 +986,7 @@ function SiegeGame::vStationOnRepaired(%game, %obj, %objName) if (%game.testValidRepair(%obj)) { %repairman = %obj.repairedBy; - messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 vehicle station!', %repairman.name, %objName); + messageTeam(%repairman.team, 'msgTurretRepaired', '\c0%1 repaired the %2 vehicle station!', %repairman.name, %obj.nameTag); } } diff --git a/base/scripts/SinglePlayerGame.cs b/base/scripts/SinglePlayerGame.cs index ce6072a..3f2e3a6 100644 --- a/base/scripts/SinglePlayerGame.cs +++ b/base/scripts/SinglePlayerGame.cs @@ -555,15 +555,7 @@ function singlePlayerGame::gameOver(%game) //disable the AI system AISystemEnabled(false); - //Deactivate packages...gotta catch'm all - //deactivatepackage(SinglePlayer); - deactivatepackage(Training1); - deactivatepackage(Training2); - deactivatepackage(Training3); - deactivatepackage(Training4); - deactivatepackage(Training5); - deactivatepackage(Training6); - deactivatePackage(singlePlayerMissionAreaEnforce); + game.deactivatePackages(); if(isObject( $player.currentWaypoint )) $player.currentWaypoint.delete(); @@ -579,6 +571,22 @@ function singlePlayerGame::gameOver(%game) DefaultGame::GameOver(%game); } +function singlePlayerGame::deactivatePackages(%game) +{ + error("singlePlayerGame packages deactivated"); + //Deactivate packages...gotta catch'm all + //deactivatepackage(SinglePlayer); + deactivatepackage(Training1); + deactivatepackage(Training2); + deactivatepackage(Training3); + deactivatepackage(Training4); + deactivatepackage(Training5); + deactivatepackage(Training6); + deactivatePackage(singlePlayerMissionAreaEnforce); +} +//------------------------------------------------------------------------------------ + + // Voice line, text, function and audio parsing //================================================================================= // this is how we handle ALL the voice distribition and playing diff --git a/base/scripts/Training1.cs b/base/scripts/Training1.cs index 74b6a80..6773de8 100644 --- a/base/scripts/Training1.cs +++ b/base/scripts/Training1.cs @@ -824,42 +824,42 @@ function flashObjective() } //------------------------------------------------------------------------------ -function playCinematicSound(%sound) -{ - switch$(%sound) - { - case "MissileLock": - %file = "fx/weapons/missile_launcher_lock.wav"; - %looping = true; - - case "Heartbeat": - %file = "fx/misc/heartbeat.wav"; - %looping = false; - } - - %audiosound = new AudioEmitter() { - filename = %flie; - position = $player.player; - volume = "1"; - isLooping = %looping; - is3D = false; - type = "EffectAudioType"; - }; - $player.currentSound = %audiosound; -} - -function playCinematicMissileLockSound() -{ - %audiosound = new AudioEmitter() { - filename = "fx/weapons/missile_launcher_lock.wav"; - position = $player.player; - volume = "1"; - isLooping = "1"; - is3D = false; - type = "EffectAudioType"; - }; - $player.missileSound = %audiosound; -} +// function playCinematicSound(%sound) +// { +// switch$(%sound) +// { +// case "MissileLock": +// %file = "fx/weapons/missile_launcher_lock.wav"; +// %looping = true; +// +// case "Heartbeat": +// %file = "fx/misc/heartbeat.wav"; +// %looping = false; +// } +// +// %audiosound = new AudioEmitter() { +// filename = %flie; +// position = $player.player; +// volume = "1"; +// isLooping = %looping; +// is3D = false; +// type = "EffectAudioType"; +// }; +// $player.currentSound = %audiosound; +// } +// +// function playCinematicMissileLockSound() +// { +// %audiosound = new AudioEmitter() { +// filename = "fx/weapons/missile_launcher_lock.wav"; +// position = $player.player; +// volume = "1"; +// isLooping = "1"; +// is3D = false; +// type = "EffectAudioType"; +// }; +// $player.missileSound = %audiosound; +// } //------------------------------------------------------------------------------ @@ -1079,7 +1079,7 @@ function AITraining1Pilot::monitor(%task, %client) if (VectorDist(%dest2D, %pos2D) < 20) { - if(%group.getCount() > %task.locationIndex) { + if(%group.getCount() > %task.locationIndex + 1) { %task.locationIndex++; cinematicEvent(%task.locationIndex); } @@ -1130,7 +1130,7 @@ function cinematicEvent(%num) moveMap.push(); TrainingPacifistMap.push(); hideHudHack(true); - playCinematicSound("MissileLock"); + // playCinematicSound("MissileLock"); schedule(5700, 0, forcedCinematicPlayerDismount); schedule( 6100, game, cleanUpFlyer); //schedule( 8000, game, trainingIntroFlightEnd); diff --git a/base/scripts/clientDefaults.cs b/base/scripts/clientDefaults.cs index 57cc00f..774dbc2 100644 --- a/base/scripts/clientDefaults.cs +++ b/base/scripts/clientDefaults.cs @@ -1,12 +1,16 @@ $JoinGamePort = 28000; $pref::Audio::activeDriver = "default"; -$pref::Audio::drivers = "Miles"; +if ( $platform $= "linux" ) { + $pref::Audio::drivers = "OpenAL"; +} else { + $pref::Audio::drivers = "Miles"; +} $pref::Audio::frequency = 22100; $pref::Audio::sampleBits = 16; $pref::Audio::channels = 2; $pref::Audio::enableVoiceCapture = 1; -$pref::Audio::voiceChannels = 2; -$pref::Audio::encodingLevel = 0; +$pref::Audio::voiceChannels = 1; +$pref::Audio::encodingLevel = 0; $pref::Audio::decodingMask = 1; $pref::Audio::forceMaxDistanceUpdate = 0; $pref::Audio::environmentEnabled = 0; @@ -77,7 +81,7 @@ $pref::Input::KeyboardTurnSpeed = 0.1; $pref::Interior::TexturedFog = 0; $pref::IRCClient::autoreconnect = 1; $pref::IRCClient::awaymsg = "Don't be alarmed. I'm going to step away from my computer."; -$pref::IRCClient::banmsg = "You, and three generations of your offspring, are banned from this channel."; +$pref::IRCClient::banmsg = "Get out. And stay out!"; $pref::IRCClient::kickmsg = "Alright, you're outta here!"; $pref::IRCClient::hostmsg = "left to host a game."; $pref::IRCClient::showJoin = true; diff --git a/base/scripts/creditsText.cs b/base/scripts/creditsText.cs index 553668f..16d8337 100644 --- a/base/scripts/creditsText.cs +++ b/base/scripts/creditsText.cs @@ -96,9 +96,16 @@ addCreditsLine("Motion Ca addCreditsLine("Technical Director: Troy McFarland"); addCreditsLine("Performer: Cosmo Hom"); addCreditsLine(""); +addCreditsLine("Digital Video Support Team"); +addCreditsLine("Director: Jim\"zootboy\" Carey"); +addCreditsLine("Sage \"3Dkid\" Freeman"); +addCreditsLine("Steve \"opticNerve\" Bradford"); +addCreditsLine("Tonya \"Agentmoody\" Stumphauzer"); +addCreditsLine("Troy \"cann n fodder\" McFarland"); +addCreditsLine("Kate \"reelBoss\" Alley"); +addCreditsLine(""); addCreditsLine("Movie Intro"); -addCreditsLine("Robert Borth"); -addCreditsLine("Mike Price"); +addCreditsLine("PBDigital, Inc."); addCreditsLine(""); addCreditsLine("Installer"); addCreditsLine("Chris Mahnken"); diff --git a/base/scripts/deployables.cs b/base/scripts/deployables.cs index ed799ae..bdaae84 100644 --- a/base/scripts/deployables.cs +++ b/base/scripts/deployables.cs @@ -752,7 +752,7 @@ function ShapeBaseImageData::testInvalidDeployConditions(%item, %plyr, %slot) %disqualified = $NotDeployableReason::TurretTooClose; else if (%item.testTurretSaturation()) %disqualified = $NotDeployableReason::TurretSaturation; - else + else if (%disqualified == $NotDeployableReason::None) { // Test that there are no objstructing objects that this object // will intersect with diff --git a/base/scripts/inventory.cs b/base/scripts/inventory.cs index 563c1f0..7396056 100644 --- a/base/scripts/inventory.cs +++ b/base/scripts/inventory.cs @@ -61,14 +61,14 @@ function serverCmdThrowPack(%client,%data) function serverCmdTogglePack(%client,%data) { - // this function is apparently never called - %client.getControlObject().togglePack(); + // this function is apparently never called + %client.getControlObject().togglePack(); } function serverCmdThrowFlag(%client) { - //Game.playerDroppedFlag(%client.player); - Game.dropFlag(%client.player); + //Game.playerDroppedFlag(%client.player); + Game.dropFlag(%client.player); } function serverCmdSelectWeaponSlot( %client, %data ) @@ -83,37 +83,37 @@ function serverCmdCycleWeapon( %client, %data ) function serverCmdStartThrowCount(%client, %data) { - %client.player.throwStart = getSimTime(); + %client.player.throwStart = getSimTime(); } function serverCmdEndThrowCount(%client, %data) { - if(%client.player.throwStart == 0) - return; + if(%client.player.throwStart == 0) + return; - // throwStrength will be how many seconds the key was held - %throwStrength = (getSimTime() - %client.player.throwStart) / 300; - // trim the time to fit between 0.5 and 1.5 - if(%throwStrength > 1.5) - %throwStrength = 1.5; - else if(%throwStrength < 0.5) - %throwStrength = 0.5; + // throwStrength will be how many seconds the key was held + %throwStrength = (getSimTime() - %client.player.throwStart) / 300; + // trim the time to fit between 0.5 and 1.5 + if(%throwStrength > 1.5) + %throwStrength = 1.5; + else if(%throwStrength < 0.5) + %throwStrength = 0.5; - %throwScale = %throwStrength / 2; - %client.player.throwStrength = %throwScale; + %throwScale = %throwStrength / 2; + %client.player.throwStrength = %throwScale; - %client.player.throwStart = 0; + %client.player.throwStart = 0; } //---------------------------------------------------------------------------- function ShapeBase::throwWeapon(%this) { - if(Game.shapeThrowWeapon(%this)) { - %image = %this.getMountedImage($WeaponSlot); - %this.throw(%image.item); - %this.client.setWeaponsHudItem(%image.item, 0, 0); - } + if(Game.shapeThrowWeapon(%this)) { + %image = %this.getMountedImage($WeaponSlot); + %this.throw(%image.item); + %this.client.setWeaponsHudItem(%image.item, 0, 0); + } } function ShapeBase::throwPack(%this) @@ -139,12 +139,12 @@ function ShapeBase::throw(%this,%data) function ShapeBase::use(%this, %data) { - //if(%data.class $= "Weapon") { - // error("ShapeBase::use " @ %data); - //} + //if(%data.class $= "Weapon") { + // error("ShapeBase::use " @ %data); + //} if(%data $= Grenade) { - // figure out which grenade type you're using + // figure out which grenade type you're using for(%x = 0; $InvGrenade[%x] !$= ""; %x++) { if(%this.inv[$NameToInv[$InvGrenade[%x]]] > 0) { @@ -153,23 +153,25 @@ function ShapeBase::use(%this, %data) } } } - else if(%data $= "Backpack") { - %pack = %this.getMountedImage($BackpackSlot); - // if you don't have a pack but have placed a satchel charge, detonate it - if(!%pack && (%this.thrownChargeId > 0) && %this.thrownChargeId.armed ) + else if(%data $= "Backpack") { + %pack = %this.getMountedImage($BackpackSlot); + // if you don't have a pack but have placed a satchel charge, detonate it + if(!%pack && (%this.thrownChargeId > 0) && %this.thrownChargeId.armed ) { %this.playAudio( 0, SatchelChargeExplosionSound ); schedule( 800, %this, "detonateSatchelCharge", %this ); - return true; - } - } - else if(%data $= Beacon) + return true; + } + return false; + } + else if(%data $= Beacon) { %data.onUse(%this); if (%this.inv[%data.getName()] > 0) return true; } - // default case + + // default case if (%this.inv[%data.getName()] > 0) { %data.onUse(%this); return true; @@ -188,7 +190,7 @@ function ShapeBase::pickup(%this,%obj,%amount) function ShapeBase::hasInventory(%this, %data) { - // changed because it was preventing weapons cycling correctly (MES) + // changed because it was preventing weapons cycling correctly (MES) return (%this.inv[%data] > 0); } @@ -230,12 +232,12 @@ function ShapeBase::decInventory(%this,%data,%amount) function SimObject::decCatagory(%this) { - //function was added to reduce console err msg spam + //function was added to reduce console err msg spam } function SimObject::incCatagory(%this) { - //function was added to reduce console err msg spam + //function was added to reduce console err msg spam } function ShapeBase::setInventory(%this,%data,%value,%force) @@ -320,7 +322,7 @@ function ShapeBase::hasAmmo( %this, %weapon ) case GrenadeLauncher: return( %this.getInventory( GrenadeLauncherAmmo ) > 0 ); case SniperRifle: - return( %this.getInventory( EnergyPack ) ); + return( %this.getInventory( EnergyPack ) ); case ELFGun: return( true ); case Mortar: @@ -340,7 +342,7 @@ function ShapeBase::hasAmmo( %this, %weapon ) function SimObject::onInventory(%this, %obj) { - //function was added to reduce console error msg spam + //function was added to reduce console error msg spam } function ShapeBase::throwItem(%this,%data) @@ -358,7 +360,7 @@ function ShapeBase::throwObject(%this,%obj) //if the object is being thrown by a corpse, use a random vector if (%this.getState() $= "Dead") { - %vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom(); + %vec = (-1.0 + getRandom() * 2.0) SPC (-1.0 + getRandom() * 2.0) SPC getRandom(); %vec = vectorScale(%vec, 10); } @@ -379,10 +381,10 @@ function ShapeBase::throwObject(%this,%obj) %vec = vectorAdd(%vec,%this.getVelocity()); %pos = getBoxCenter(%this.getWorldBox()); - //since flags have a huge mass (so when you shoot them, they don't bounce too far) - //we need to up the %vec so that you can still throw them... - if (%obj.getDataBlock().getName() $= "Flag") - %vec = vectorScale(%vec, 40); + //since flags have a huge mass (so when you shoot them, they don't bounce too far) + //we need to up the %vec so that you can still throw them... + if (%obj.getDataBlock().getName() $= "Flag") + %vec = vectorScale(%vec, 40); // %obj.setTransform(%pos); @@ -391,8 +393,8 @@ function ShapeBase::throwObject(%this,%obj) %data = %obj.getDatablock(); %data.onThrow(%obj,%this); - //call the AI hook - AIThrowObject(%obj); + //call the AI hook + AIThrowObject(%obj); } function ShapeBase::clearInventory(%this) @@ -408,7 +410,7 @@ function ShapeBase::clearInventory(%this) %this.setInventory(FlashGrenade,0); %this.setInventory(ConcussionGrenade,0); %this.setInventory(FlareGrenade,0); - %this.setInventory(CameraGrenade, 0); + %this.setInventory(CameraGrenade, 0); %this.setInventory(Blaster,0); %this.setInventory(Plasma,0); @@ -428,12 +430,12 @@ function ShapeBase::clearInventory(%this) %this.setInventory(GrenadeLauncherAmmo, 0); %this.setInventory(MissileLauncherAmmo, 0); %this.setInventory(MortarAmmo, 0); - %this.setInventory(Beacon, 0); + %this.setInventory(Beacon, 0); - // take away any pack the player has - %curPack = %this.getMountedImage($BackpackSlot); - if(%curPack > 0) - %this.setInventory(%curPack.item, 0); + // take away any pack the player has + %curPack = %this.getMountedImage($BackpackSlot); + if(%curPack > 0) + %this.setInventory(%curPack.item, 0); } @@ -488,7 +490,7 @@ function ShapeBase::cycleWeapon( %this, %data ) && %this.hasInventory( %this.weaponSlot[%i] ) && %this.hasAmmo( %this.weaponSlot[%i] ) ) { - // player has this weapon and it has ammo or doesn't need ammo + // player has this weapon and it has ammo or doesn't need ammo %newSlot = %i; break; } @@ -539,7 +541,7 @@ function serverCmdGiveAll(%client) %player.setInventory(FlashGrenade,999); %player.setInventory(FlareGrenade,999); %player.setInventory(ConcussionGrenade,999); - %player.setInventory(CameraGrenade, 999); + %player.setInventory(CameraGrenade, 999); %player.setInventory(Blaster,1); %player.setInventory(Plasma,1); %player.setInventory(Chaingun, 1); @@ -557,6 +559,6 @@ function serverCmdGiveAll(%client) %player.setInventory(PlasmaAmmo,999); %player.setInventory(ChaingunAmmo, 999); %player.setInventory(DiscAmmo, 999); - %player.setInventory(Beacon, 999); + %player.setInventory(Beacon, 999); } } \ No newline at end of file diff --git a/base/scripts/inventoryHud.cs b/base/scripts/inventoryHud.cs index 9fea250..3272b2c 100644 --- a/base/scripts/inventoryHud.cs +++ b/base/scripts/inventoryHud.cs @@ -788,7 +788,7 @@ function addQuickPackFavorite( %pack, %item ) if(%item $= "") %item = "Pack"; %packFailMsg = "You cannot use that equipment with your selected loadout."; - if ( $Hud['inventoryScreen'].staticData[1, 1].getValue() $= "" ) + if ( !isObject($Hud['inventoryScreen'].staticData[1, 1]) || $Hud['inventoryScreen'].staticData[1, 1].getValue() $= "" ) { //if the player hasnt brought up the inv screen we use his current fav %currentFav = $pref::Favorite[$pref::FavCurrentSelect]; diff --git a/base/scripts/packs/repairpack.cs b/base/scripts/packs/repairpack.cs index 6794794..1de9c21 100644 --- a/base/scripts/packs/repairpack.cs +++ b/base/scripts/packs/repairpack.cs @@ -179,7 +179,7 @@ function RepairPackImage::onActivate(%data, %obj, %slot) return; } - if(%obj.getMountedImage($WeaponSlot).getName() !$= "RepairGunImage") + if(!isObject(%obj.getMountedImage($WeaponSlot)) || %obj.getMountedImage($WeaponSlot).getName() !$= "RepairGunImage") { messageClient(%obj.client, 'MsgRepairPackOn', '\c2Repair pack activated.'); diff --git a/base/scripts/packs/satchelCharge.cs b/base/scripts/packs/satchelCharge.cs index 9c102d4..14158dd 100644 --- a/base/scripts/packs/satchelCharge.cs +++ b/base/scripts/packs/satchelCharge.cs @@ -11,7 +11,7 @@ datablock AudioProfile(SatchelChargeActivateSound) { filename = "fx/packs/satchel_pack_activate.wav"; description = AudioClose3d; - preload = true; + preload = true; }; datablock AudioProfile(SatchelChargeExplosionSound) @@ -21,6 +21,20 @@ datablock AudioProfile(SatchelChargeExplosionSound) preload = true; }; +datablock AudioProfile(SatchelChargePreExplosionSound) +{ + filename = "fx/explosions/explosion.xpl03.wav"; + description = AudioBIGExplosion3d; + preload = true; +}; + +datablock AudioProfile(UnderwaterSatchelChargeExplosionSound) +{ + filename = "fx/weapons/mortar_explode_UW.wav"; + description = AudioBIGExplosion3d; + preload = true; +}; + //---------------------------------------------------------------------------- // Satchel Debris @@ -80,6 +94,48 @@ datablock DebrisData( SatchelDebris ) lifetimeVariance = 0.02; }; +//---------------------------------------------------------------------------- +// Bubbles +//---------------------------------------------------------------------------- +datablock ParticleData(SatchelBubbleParticle) +{ + dragCoefficient = 0.0; + gravityCoefficient = -0.25; + inheritedVelFactor = 0.0; + constantAcceleration = 0.0; + lifetimeMS = 1500; + lifetimeVarianceMS = 600; + useInvAlpha = false; + textureName = "special/bubbles"; + + spinRandomMin = -100.0; + spinRandomMax = 100.0; + + colors[0] = "0.7 0.8 1.0 0.0"; + colors[1] = "0.7 0.8 1.0 0.4"; + colors[2] = "0.7 0.8 1.0 0.0"; + sizes[0] = 2.0; + sizes[1] = 2.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.8; + times[2] = 1.0; +}; +datablock ParticleEmitterData(SatchelBubbleEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + ejectionVelocity = 1.0; + ejectionOffset = 7.0; + velocityVariance = 0.5; + thetaMin = 0; + thetaMax = 80; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + particles = "MortarExplosionBubbleParticle"; +}; + //-------------------------------------------------------------------------- // Satchel Explosion Particle effects //-------------------------------------- @@ -128,6 +184,52 @@ datablock ParticleEmitterData(SatchelExplosionSmokeEmitter) particles = "SatchelExplosionSmoke"; }; +datablock ParticleData(UnderwaterSatchelExplosionSmoke) +{ + dragCoeffiecient = 105.0; + gravityCoefficient = -0.0; + inheritedVelFactor = 0.025; + + constantAcceleration = -1.0; + + lifetimeMS = 1500; + lifetimeVarianceMS = 0; + + textureName = "particleTest"; + + useInvAlpha = false; + spinRandomMin = -200.0; + spinRandomMax = 200.0; + + textureName = "special/Smoke/smoke_001"; + + colors[0] = "0.4 0.4 1.0 1.0"; + colors[1] = "0.4 0.4 1.0 0.5"; + colors[2] = "0.0 0.0 0.0 0.0"; + sizes[0] = 7.0; + sizes[1] = 17.0; + sizes[2] = 2.0; + times[0] = 0.0; + times[1] = 0.2; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterSatchelExplosionSmokeEmitter) +{ + ejectionPeriodMS = 10; + periodVarianceMS = 0; + + ejectionVelocity = 14.25; + velocityVariance = 2.25; + + thetaMin = 0.0; + thetaMax = 180.0; + + lifetimeMS = 200; + + particles = "UnderwaterSatchelExplosionSmoke"; +}; datablock ParticleData(SatchelSparks) @@ -168,6 +270,43 @@ datablock ParticleEmitterData(SatchelSparksEmitter) particles = "SatchelSparks"; }; +datablock ParticleData(UnderwaterSatchelSparks) +{ + dragCoefficient = 1; + gravityCoefficient = 0.0; + inheritedVelFactor = 0.2; + constantAcceleration = 0.0; + lifetimeMS = 500; + lifetimeVarianceMS = 350; + textureName = "special/underwaterSpark"; + colors[0] = "0.6 0.6 1.0 1.0"; + colors[1] = "0.6 0.6 1.0 1.0"; + colors[2] = "0.6 0.6 1.0 0.0"; + sizes[0] = 0.5; + sizes[1] = 0.5; + sizes[2] = 0.75; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; + +}; + +datablock ParticleEmitterData(UnderwaterSatchelSparksEmitter) +{ + ejectionPeriodMS = 2; + periodVarianceMS = 0; + ejectionVelocity = 30; + velocityVariance = 5.0; + ejectionOffset = 0.0; + thetaMin = 0; + thetaMax = 70; + phiReferenceVel = 0; + phiVariance = 360; + overrideAdvances = false; + orientParticles = true; + lifetimeMS = 100; + particles = "UnderwaterSatchelSparks"; +}; //--------------------------------------------------------------------------- @@ -263,11 +402,103 @@ datablock ExplosionData(SatchelSubExplosion3) datablock ExplosionData(SatchelMainExplosion) { + soundProfile = SatchelChargePreExplosionSound; + subExplosion[0] = SatchelSubExplosion; subExplosion[1] = SatchelSubExplosion2; subExplosion[2] = SatchelSubExplosion3; }; +//--------------------------------------------------------------------------- +// Underwater Explosion +//--------------------------------------------------------------------------- + +datablock ExplosionData(UnderwaterSatchelSubExplosion) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionScale = "0.5 0.5 0.5"; + + + lifetimeMS = 1000; + delayMS = 0; + + emitter[0] = UnderwaterSatchelExplosionSmokeEmitter; + emitter[1] = UnderwaterSatchelSparksEmitter; + emitter[2] = SatchelBubbleEmitter; + + offset = 0.0; + + playSpeed = 0.75; + + sizes[0] = "1.5 1.5 1.5"; + sizes[1] = "2.5 2.5 2.5"; + sizes[2] = "2.0 2.0 2.0"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ExplosionData(UnderwaterSatchelSubExplosion2) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionScale = "0.7 0.7 0.7"; + + + lifetimeMS = 1000; + delayMS = 50; + + emitter[0] = UnderwaterSatchelExplosionSmokeEmitter; + emitter[1] = UnderwaterSatchelSparksEmitter; + emitter[2] = SatchelBubbleEmitter; + + offset = 9.0; + + playSpeed = 0.75; + + sizes[0] = "1.5 1.5 1.5"; + sizes[1] = "1.0 1.0 1.0"; + sizes[2] = "0.75 0.75 0.75"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ExplosionData(UnderwaterSatchelSubExplosion3) +{ + explosionShape = "disc_explosion.dts"; + faceViewer = true; + explosionScale = "1.0 1.0 1.0"; + + + lifetimeMS = 2000; + delayMS = 100; + + emitter[0] = UnderwaterSatchelExplosionSmokeEmitter; + emitter[1] = UnderwaterSatchelSparksEmitter; + emitter[2] = SatchelBubbleEmitter; + + offset = 9.0; + + playSpeed = 1.25; + + sizes[0] = "1.0 1.0 1.0"; + sizes[1] = "1.0 1.0 1.0"; + sizes[2] = "0.5 0.5 0.5"; + times[0] = 0.0; + times[1] = 0.5; + times[2] = 1.0; +}; + +datablock ExplosionData(UnderwaterSatchelMainExplosion) +{ + soundProfile = UnderwaterSatchelChargeExplosionSound; + + subExplosion[0] = UnderwaterSatchelSubExplosion; + subExplosion[1] = UnderwaterSatchelSubExplosion2; + subExplosion[2] = UnderwaterSatchelSubExplosion3; +}; //-------------------------------------------------------------------------- @@ -295,7 +526,7 @@ datablock ItemData(SatchelCharge) friction = 0.6; pickupRadius = 2; rotate = true; - pickUpName = "a satchel charge pack"; + pickUpName = "a satchel charge pack"; computeCRC = true; }; @@ -304,13 +535,14 @@ datablock ItemData(SatchelChargeThrown) { shapeFile = "pack_upgrade_satchel.dts"; explosion = SatchelMainExplosion; + underwaterExplosion = UnderwaterSatchelMainExplosion; mass = 1.2; elasticity = 0.1; friction = 0.9; rotate = false; pickupRadius = 0; - noTimeout = true; - armDelay = 3000; + noTimeout = true; + armDelay = 3000; maxDamage = 0.6; kickBackStrength = 4000; @@ -327,45 +559,51 @@ function SatchelCharge::onUse(%this, %obj) rotation = "0 0 1 " @ (getRandom() * 360); }; MissionCleanup.add(%item); - // take pack out of inventory and unmount image - %obj.decInventory(SatchelCharge, 1); + // take pack out of inventory and unmount image + %obj.decInventory(SatchelCharge, 1); %obj.throwObject(%item); - //error("throwing satchel charge #" @ %item); + //error("throwing satchel charge #" @ %item); %obj.thrownChargeId = %item; %item.sourceObject = %obj; %item.armed = false; - %item.damaged = 0.0; - %item.thwart = false; - // arm itself 3 seconds after being thrown - schedule(%item.getDatablock().armDelay, %item, "armSatchelCharge", %item); + %item.damaged = 0.0; + %item.thwart = false; + // arm itself 3 seconds after being thrown + schedule(%item.getDatablock().armDelay, %item, "initArmSatchelCharge", %item); messageClient(%obj.client, 'MsgSatchelChargePlaced', "\c2Satchel charge deployed."); } +function initArmSatchelCharge(%satchel) +{ + // "deet deet deet" sound + %satchel.playAudio(1, SatchelChargeActivateSound); + // also need to play "antenna extending" animation + %satchel.playThread(0, "deploy"); + %satchel.playThread(1, "activate"); + + // delay the actual arming until after sound is done playing + schedule( 2200, 0, "armSatchelCharge", %satchel ); +} + function armSatchelCharge(%satchel) { - //error("satchel charge #" @ %satchel @ " armed!"); - %satchel.armed = true; - // "deet deet deet" sound - %satchel.playAudio(1, SatchelChargeActivateSound); - // also need to play "antenna extending" animation - %satchel.playThread(0, "deploy"); - %satchel.playThread(1, "activate"); + %satchel.armed = true; } function detonateSatchelCharge(%player) { - %satchelCharge = %player.thrownChargeId; - // can't detonate the satchel charge if it isn't armed - if(!%satchelCharge.armed) - return; + %satchelCharge = %player.thrownChargeId; + // can't detonate the satchel charge if it isn't armed + if(!%satchelCharge.armed) + return; - //error("Detonating satchel charge #" @ %satchelCharge @ " for player #" @ %player); + //error("Detonating satchel charge #" @ %satchelCharge @ " for player #" @ %player); if(%satchelCharge.getDamageState() !$= Destroyed) - %satchelCharge.setDamageState(Destroyed); + %satchelCharge.setDamageState(Destroyed); - if(isObject(%player)) - %player.thrownChargeId = 0; + if(isObject(%player)) + %player.thrownChargeId = 0; } function SatchelChargeThrown::onEnterLiquid(%data, %obj, %coverage, %type) @@ -391,7 +629,7 @@ function SatchelChargeThrown::onEnterLiquid(%data, %obj, %coverage, %type) function SatchelChargeImage::onMount(%data, %obj, %node) { - %obj.thrownChargeId = 0; + %obj.thrownChargeId = 0; } function SatchelChargeImage::onUnmount(%data, %obj, %node) @@ -400,34 +638,35 @@ function SatchelChargeImage::onUnmount(%data, %obj, %node) function SatchelChargeThrown::onDestroyed(%this, %object, %lastState) { - if(%object.kaboom) - return; - else - { - %object.kaboom = true; + if(%object.kaboom) + return; + else + { + %object.kaboom = true; - // the "thwart" flag is set if the charge is destroyed with weapons rather - // than detonated. A less damaging explosion, but visually the same scale. - if(%object.thwart) - { - %dmgRadius = 10; - %dmgMod = 0.3; - %expImpulse = 1000; - %dmgType = $DamageType::Explosion; - } - else - { - messageClient(%object.sourceObject.client, 'msgSatchelChargeDetonate', "\c2Satchel charge detonated!"); - %dmgRadius = 20; - %dmgMod = 1.0; - %expImpulse = 2500; - %dmgType = $DamageType::SatchelCharge; - } + // the "thwart" flag is set if the charge is destroyed with weapons rather + // than detonated. A less damaging explosion, but visually the same scale. + if(%object.thwart) + { + %dmgRadius = 10; + %dmgMod = 0.3; + %expImpulse = 1000; + %dmgType = $DamageType::Explosion; + } + else + { + messageClient(%object.sourceObject.client, 'msgSatchelChargeDetonate', "\c2Satchel charge detonated!"); + %dmgRadius = 20; + %dmgMod = 1.0; + %expImpulse = 2500; + %dmgType = $DamageType::SatchelCharge; + } - RadiusExplosion(%object, %object.getPosition(), %dmgRadius, %dmgMod, %expImpulse, %object.sourceObject, %dmgType); + %object.blowingUp = true; + RadiusExplosion(%object, %object.getPosition(), %dmgRadius, %dmgMod, %expImpulse, %object.sourceObject, %dmgType); - %object.schedule(500, "delete"); - } + %object.schedule(500, "delete"); + } } function SatchelChargeThrown::onCollision(%data,%obj,%col) @@ -436,17 +675,20 @@ function SatchelChargeThrown::onCollision(%data,%obj,%col) function SatchelChargeThrown::damageObject(%data, %targetObject, %sourceObject, %position, %amount, %damageType) { - %targetObject.damaged += %amount; - - if(%targetObject.damaged >= %targetObject.getDataBlock().maxDamage && - %satchelCharge.getDamageState() !$= Destroyed) + if (!%object.blowingUp) { - %targetObject.thwart = true; - %targetObject.setDamageState(Destroyed); - } + %targetObject.damaged += %amount; + + if(%targetObject.damaged >= %targetObject.getDataBlock().maxDamage && + %targetObject.getDamageState() !$= Destroyed) + { + %targetObject.thwart = true; + %targetObject.setDamageState(Destroyed); + } + } } function SatchelCharge::onPickup(%this, %obj, %shape, %amount) { - // created to prevent console errors + // created to prevent console errors } \ No newline at end of file diff --git a/base/scripts/projectiles.cs b/base/scripts/projectiles.cs index b6610f9..d4013c1 100644 --- a/base/scripts/projectiles.cs +++ b/base/scripts/projectiles.cs @@ -460,9 +460,7 @@ function RadiusExplosion(%explosionSource, %position, %radius, %damage, %impulse { InitContainerRadiusSearch(%position, %radius, $TypeMasks::PlayerObjectType | $TypeMasks::VehicleObjectType | - $TypeMasks::MoveableObjectType | $TypeMasks::StaticShapeObjectType | - $TypeMasks::ForceFieldObjectType | $TypeMasks::TurretObjectType | $TypeMasks::ItemObjectType); diff --git a/base/scripts/server.cs b/base/scripts/server.cs index 9b89e90..59ed47b 100644 --- a/base/scripts/server.cs +++ b/base/scripts/server.cs @@ -8,7 +8,7 @@ $SB::DFDec = 0.02; // damageFlash function VerifyCDCheck(%func) { if (!cdFileCheck()) - messageBoxOkCancel("Tribes 2 CD Check", "You must have the Tribes 2 CD in the CD-ROM drive while playing offline. Please insert the CD.", "schedule(0, 0, VerifyCDCheck, " @ %func @ ");", "quit();"); + messageBoxOkCancel("TRIBES 2 CD CHECK", "You must have the Tribes 2 CD in the CD-ROM drive while playing Tribes 2. Please insert the CD.", "schedule(0, 0, VerifyCDCheck, " @ %func @ ");", "quit();"); else call(%func); } @@ -165,11 +165,13 @@ function DestroyServer() $missionRunning = false; allowConnections(false); stopHeartbeat(); - %game = game.class; MissionGroup.delete(); MissionCleanup.delete(); - %game.deactivatePackages(); - %game.delete(); + if(isObject(game)) + { + game.deactivatePackages(); + game.delete(); + } if(isObject($ServerGroup)) $ServerGroup.delete(); @@ -1472,12 +1474,30 @@ function isOnSuperAdminList(%client) function addToAdminList( %client ) { + %count = getRecordCount( $Host::AdminList ); + for ( %i = 0; %i < %count; %i++ ) + { + %id = getRecord( $Host::AdminList, %i ); + if ( %id == %client.guid ) + return; // They're already there! + } + + $Host::AdminList = $Host::AdminList NL %client.guid; } function addToSuperAdminList( %client ) { - + %count = getRecordCount( $Host::SuperAdminList ); + + for ( %i = 0; %i < %count; %i++ ) + { + %id = getRecord( $Host::SuperAdminList, %i ); + if ( %id == %client.guid ) + return; // They're already there! + } + + $Host::SuperAdminList = $Host::SuperAdminList NL %client.guid; } function resetTournamentPlayers() diff --git a/base/scripts/serverDefaults.cs b/base/scripts/serverDefaults.cs index f0c3629..dce4a8b 100644 --- a/base/scripts/serverDefaults.cs +++ b/base/scripts/serverDefaults.cs @@ -54,6 +54,8 @@ $Host::MaxMessageLen = 120; $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::maxVoiceChannels = 2; diff --git a/base/scripts/station.cs b/base/scripts/station.cs index 71ae4fb..d72f73f 100644 --- a/base/scripts/station.cs +++ b/base/scripts/station.cs @@ -1226,7 +1226,7 @@ function checkSpawnPos(%MPB, %radius) %terrHeight = getTerrainHeight(%posX @ " " @ %posY); - if(abs(%terrHeight - %pPosZ) < %radius ) + if(mAbs(%terrHeight - %pPosZ) < %radius ) { %mask = $TypeMasks::VehicleObjectType | $TypeMasks::MoveableObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::StaticTSObjectType | diff --git a/base/scripts/vehicles/vehicle.cs b/base/scripts/vehicles/vehicle.cs index ad53435..f3bf68e 100644 --- a/base/scripts/vehicles/vehicle.cs +++ b/base/scripts/vehicles/vehicle.cs @@ -496,9 +496,12 @@ function MobileBaseVehicle::deleteAllMounted(%data, %obj) if(isObject(%obj.shield)) %obj.shield.delete(); - %obj.teleporter.setThreadDir($ActivateThread, FALSE); - %obj.teleporter.playThread($ActivateThread,"activate"); - %obj.teleporter.playAudio($ActivateSound, StationTeleportDeacitvateSound); + if (isObject(%obj.teleporter)) + { + %obj.teleporter.setThreadDir($ActivateThread, FALSE); + %obj.teleporter.playThread($ActivateThread,"activate"); + %obj.teleporter.playAudio($ActivateSound, StationTeleportDeacitvateSound); + } } //************************************************************** diff --git a/base/scripts/vehicles/vehicle_mpb.cs b/base/scripts/vehicles/vehicle_mpb.cs index d84e5c0..c519b8f 100644 --- a/base/scripts/vehicles/vehicle_mpb.cs +++ b/base/scripts/vehicles/vehicle_mpb.cs @@ -124,12 +124,12 @@ datablock WheeledVehicleData(MobileBaseVehicle) : MPBDamageProfile hardImpactSpeed = 25; // Play HardImpact Sound // Ground Impact Damage (uses DamageType::Ground) - minImpactSpeed = 25; - speedDamageScale = 0.220; + minImpactSpeed = 12; + speedDamageScale = 0.060; // Object Impact Damage (uses DamageType::Impact) - collDamageThresholdVel = 28; - collDamageMultiplier = 0.040; + collDamageThresholdVel = 12; + collDamageMultiplier = 0.080; // Engine engineTorque = 7.0 * 745; diff --git a/base/scripts/voiceChat.cs b/base/scripts/voiceChat.cs index 880946b..154f54c 100644 --- a/base/scripts/voiceChat.cs +++ b/base/scripts/voiceChat.cs @@ -5,7 +5,6 @@ $numTalking = 0; //------------------------------------------------------------------------------ function clientCmdPlayerStartTalking(%client, %success) { - //error("Client " @ %client @ " start talking, success = " @ %success); // if more people are talking than we can handle, don't bother with names if($numTalking > $voiceLines) return; @@ -45,8 +44,6 @@ function clientCmdPlayerStoppedTalking(%client, %success) } if(%doneLine != -1) %rmSuccess = removeVoiceLine(%doneLine); - //else - // error("Did not find voice line for client " @ %client); } //------------------------------------------------------------------------------ @@ -233,9 +230,10 @@ function voiceCapStart() { switch($Audio::serverEncodingLevel) { - case 0: %level = "Low"; - case 1: %level = "Medium"; - default: %level = "High"; + case 0: %level = "Codec .v12"; + case 1: %level = "Codec .v24"; + case 2: %level = "Codec .v29"; + default: %level = "Codec GSM"; } addMessageHudLine("\c2System:\cr server has voice level capped at [\c1" @ %level @ "\cr]."); diff --git a/base/scripts/webbrowser.cs b/base/scripts/webbrowser.cs index d29f76f..fd184fc 100644 --- a/base/scripts/webbrowser.cs +++ b/base/scripts/webbrowser.cs @@ -76,7 +76,7 @@ function BrowserStartSearch() //----------------------------------------------------------------------------- function ExecuteSearch(%id) { - DatabaseQueryArray(BrowserSearchPane.query,0,trim($BrowserSearchField) TAB 0 TAB 100 TAB 0, BrowserSearchPane, BrowserSearchPane.key); + DatabaseQueryArray(BrowserSearchPane.query,0,trim($BrowserSearchField) TAB 0 TAB 100 TAB 0, BrowserSearchPane, BrowserSearchPane.key, true); } //----------------------------------------------------------------------------- function getTribeMember(%tribeName) @@ -1372,12 +1372,12 @@ function TribePane::ButtonClick( %this, %senderid ) MemberList.addColumn( 0, "MEMBER", 92, 0, 100,"left"); MemberList.addColumn( 1, "TITLE", 90, 0, 100,"left"); MemberList.addColumn( 2, "RNK", 30, 0, 40, "numeric center" ); - TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,6,0,%tribeName,%this,%this.key); + TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,6,0,%tribeName,%this,%this.key, true); case 2: //NEWS BUTTON %this.key = LaunchGui.key++; %this.state = "getTribeNews"; %this.tstate = "NEWS"; - TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,10,20,%tribeName,%this,%this.key); + TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,10,20,%tribeName,%this,%this.key,true); case 3: //INVITE BUTTON MemberList.Clear(); MemberList.ClearColumns(); @@ -1388,7 +1388,7 @@ function TribePane::ButtonClick( %this, %senderid ) %this.tstate = "INVITES"; MemberList.addColumn( 0, "PLAYER", 100, 0, 350,"left" ); MemberList.addColumn( 1, "INVITED", 112, 0, 300, "left" ); - TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,11,0,%tribeName,%this,%this.key); + TribeAndWarriorBrowserGui.eid = schedule(500, 0, DatabaseQueryArray,11,0,%tribeName,%this,%this.key,true); case 4: //Admin Tribe if(trim(TWBText.getText()) !$= "") { @@ -1673,7 +1673,7 @@ function PlayerPane::ButtonClick( %this, %senderid ) %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); %callId = 3; - TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,12,0,%playerName,%this,%this.key); + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,12,0,%playerName,%this,%this.key,true); case 2: //TribeList W_MemberList.Clear(); W_MemberList.ClearColumns(); @@ -1684,7 +1684,7 @@ 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); + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,13,0,%playerName,%this,%this.key,true); case 3: //Player Buddylist W_MemberList.Clear(); W_MemberList.ClearColumns(); @@ -1695,14 +1695,14 @@ function PlayerPane::ButtonClick( %this, %senderid ) %this.key = LaunchGui.key++; %this.state = "getWarriorBuddyList"; %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); - TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,5,0,%playerName,%this,%this.key); + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQueryArray,5,0,%playerName,%this,%this.key,true); case 4: //Visitor Options W_Text.setValue(""); %this.state = "getVisitorOptions"; %owner = getField(getRecord(WonGetAuthInfo(),0),0); %playerName = TWBTabView.getTabText(TWBTabView.GetSelectedID()); TWBTitle.OldText = TWBTitle.name; - TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQuery,23,%playerName,%this,%this.key); + TribeAndWarriorBrowserGui.eid = schedule(500,0,DatabaseQuery,23,%playerName,%this,%this.key,true); case 5: //Admin Options if(trim(w_text.getText()) !$= "") { @@ -1828,8 +1828,6 @@ function WarriorPopup::onSelect( %this, %id, %text ) { case "T2 ADMINISTRATION": %tribe = "Game Feedback"; - case "T2 PRESSCORPS": - %tribe = "PRESSCORPS-Submissions"; } ForumsThreadPane.setVisible(false); ForumsTopicsPane.setVisible(true); diff --git a/base/scripts/webemail.cs b/base/scripts/webemail.cs index 714096d..deebe45 100644 --- a/base/scripts/webemail.cs +++ b/base/scripts/webemail.cs @@ -374,6 +374,8 @@ function CheckEmail(%calledFromSched) EmailGui.checkSchedule = ""; EMailGui.key = LaunchGui.key++; EmailGui.state = "getMail"; + EM_Browser.clear(); + EmailGui.LoadCache(); DatabaseQueryArray(1,0,$EmailNextSeq, EMailGui, EMailGui.key); EmailGui.checkingEmail = true; } @@ -765,7 +767,7 @@ function AddressDlg::GoSearch(%this) %this.key = LaunchGui.key++; %this.state = "goSearch"; %this.lbstate = "errorcheck"; - DatabaseQueryArray(3,100,trim(LC_Search.getValue()) TAB 0 TAB 100 TAB 1 ,%this, %this.key); + DatabaseQueryArray(3,100,trim(LC_Search.getValue()) TAB 0 TAB 100 TAB 1 ,%this, %this.key,true); LC_BuddyListBtn.direction = 0; LC_BuddyListBtn.text = "ADD TO BUDDYLIST"; LC_ListBox.setSelected(0); @@ -792,7 +794,7 @@ function AddressDlg::GoList(%this) else { %this.state = "getTribeMembers"; - DatabaseQueryArray(6,0,LC_ListBox.getValue(),%this,%this.key); + DatabaseQueryArray(6,0,LC_ListBox.getValue(),%this,%this.key,true); LC_BuddyListBtn.direction = 0; LC_BuddyListBtn.text = "ADD TO BUDDYLIST"; } @@ -932,7 +934,7 @@ function EmailGui::onWake(%this) if(!%this.cacheFile) { - %this.cacheFile = "email0"; + %this.cacheFile = "email1"; EmailGui.getCache(); } if ( !EmailGui.cacheLoaded || EM_Browser.rowCount() == 0 ) @@ -969,7 +971,7 @@ function EmailGui::ButtonClick(%this,%ord) EmailInboxBodyText.setText(""); EMailGui.state = "getDeletedMail"; EmailGui.key = LaunchGui.key++; - DatabaseQueryArray(14,100,EmailGui.state,EMailGui,EMailGui.key); + DatabaseQueryArray(14,100,EmailGui.state,EMailGui,EMailGui.key,true); } } //----------------------------------------------------------------------------- @@ -997,10 +999,8 @@ function EMailGui::onDatabaseQueryResult(%this, %status, %RowCount_Result, %key) EMailGui.getCache(); EMailGui.outputVector(); if(EMailGui.btnClicked) - { - MessageBoxOK("NOTICE","No New Mail"); EmailGui.btnClicked = false; - } + %this.checkingEmail = false; %this.checkSchedule = schedule(1000 * 60 * 5, 0, CheckEmail, true); // echo("scheduling Email check " @ %this.checkSchedule @ " in 5 minutes"); @@ -1121,7 +1121,7 @@ function EmailGui::getCache(%this) EM_Browser.clear(); EMailMessageVector.clear(); EmailInboxBodyText.setText(""); - %fileName = $EmailCachePath @ "email0"; + %fileName = $EmailCachePath @ "email1"; %file = new FileObject(); if ( %this.cacheFile $= "" ) { @@ -1131,7 +1131,7 @@ function EmailGui::getCache(%this) if ( %guid $= getField( WonGetAuthInfo(), 3 ) ) { // This is the right one! - %this.cacheFile = "email0"; + %this.cacheFile = "email1"; %this.messageCount = %file.readLine(); while( !%file.isEOF() ) { @@ -1176,7 +1176,7 @@ function EmailGui::loadCache( %this ) EM_Browser.clear(); EMailMessageVector.clear(); EMailInboxBodyText.setText(""); - %fileName = $EmailCachePath @ "email0"; + %fileName = $EmailCachePath @ "email1"; %file = new FileObject(); if ( %this.cacheFile $= "" ) { @@ -1186,7 +1186,7 @@ function EmailGui::loadCache( %this ) if ( %guid $= getField( WonGetAuthInfo(), 3 ) ) { // This is the right one! - %this.cacheFile = "email0"; + %this.cacheFile = "email1"; %this.messageCount = %file.readLine(); while( !%file.isEOF() ) { @@ -1219,7 +1219,7 @@ function EmailGui::loadCache( %this ) function EmailGui::dumpCache( %this ) { %guid = getField( WONGetAuthInfo(), 3 ); - if ( %this.cacheFile $= "" ) %this.cacheFile = "email0"; + if ( %this.cacheFile $= "" ) %this.cacheFile = "email1"; EmailMessageVector.dump( $EmailCachePath @ %this.cacheFile, %guid ); } //----------------------------------------------------------------------------- diff --git a/base/scripts/webforums.cs b/base/scripts/webforums.cs index b3e17c1..841796c 100644 --- a/base/scripts/webforums.cs +++ b/base/scripts/webforums.cs @@ -122,6 +122,17 @@ function DateStrCompare(%date1,%date2) return false; } //----------------------------------------------------------------------------- +function IsPostAuthor(%author) +{ +// %ai = wonGetAuthInfo(); +// %pid = getField(GetRecord(%ai,0), +// for(%east=0;%east ForumsMessageList.highestUpdate ) @@ -793,7 +800,9 @@ function ForumsGui::onDatabaseRow(%this,%row,%isLastRow,%key) if(ForumsMessageList.allRead && DateStrCompare(ForumsMessageList.lastDate,%date)) %text = setRecord( %text, 0, "1" ); - ForumsMessageVector.pushBackLine(%text, %postId); + if(!%isDeleted) + ForumsMessageVector.pushBackLine(%text, %postId); + if(%isLastRow) { ForumsMessageVector.tid = ForumsTopicsList.getSelectedID(); @@ -1381,4 +1390,4 @@ function ForumsMessagelist::onDatabaseQueryResult(%this,%status,%resultString,%k MessageBoxOK("ERROR",getFields(%status,1)); } canvas.SetCursor(DefaultCursor); -} +} \ No newline at end of file diff --git a/base/scripts/weblinks.cs b/base/scripts/weblinks.cs index c349a63..c0b3009 100644 --- a/base/scripts/weblinks.cs +++ b/base/scripts/weblinks.cs @@ -4,22 +4,27 @@ addWebLink( "5 Assed Monkey", "www.5assedmonkey.com" ); addWebLink( "BarrysWorld", "www.barrysworld.com" ); addWebLink( "Clan Happytyme", "www.happytyme.com" ); addWebLink( "ClanBase", "www.clanbase.com" ); +addWebLink( "ClanServ", "www.clanserv.com" ); addWebLink( "Dopplegangers", "www.dopplegangers.com" ); addWebLink( "Dutchbat Homeworld", "www.dutchbat-homeworld.com" ); addWebLink( "Euro Tribesplayers", "www.euro-tribesplayers.com" ); addWebLink( "eXtreme-Players", "www.eXtreme-players.de" ); +addWebLink( "IanStorm", "www.ianstorm.com" ); addWebLink( "Long Dongles", "www.longdongles.com" ); addWebLink( "MaxBaud.Net", "www.maxbaud.net" ); +addWebLink( "MoreGaming", "www.moregaming.com" ); addWebLink( "NetGames UK", "www.nguk.net" ); addWebLink( "PlanetTribes", "www.planettribes.com" ); 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( "TribalWar", "www.tribalwar.com" ); +addWebLink( "Tribes2 Database", "www.tribes2database.com" ); addWebLink( "TribesMaps", "www.tribesmaps.com" ); +addWebLink( "TribalWar", "www.tribalwar.com" ); addWebLink( "Tribes-Universe", "www.tribes-universe.com" ); addWebLink( "WirePlay", "www.wireplay.com.au" ); -addWebLink( "IanStorm", "www.ianstorm.com" ); -addWebLink( "Tribes2 Database", "www.tribes2database.com" ); -//addWebLink( "Z Free", "games13.clear.net.nz" ); \ No newline at end of file +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 e605ede..8ceb798 100644 --- a/base/scripts/webnews.cs +++ b/base/scripts/webnews.cs @@ -45,10 +45,16 @@ function NewsGui::rebuildText(%this) for(%i = 0; %i < %this.articleCount; %i++) { %article = %this.article[%i]; - if(getField(%article,0)==1 || %this.acl > 2) - %editable = 1; - else - %editable = 0; + + %ai = wonGetAuthInfo(); + %isMem = 0; + for(%east=0;%east