Did stuff.

This commit is contained in:
Robert MacGregor 2012-08-17 20:48:47 -04:00
parent 09f43122e6
commit 8c96cba3e1
132 changed files with 56515 additions and 1448 deletions

3564
T2ScriptFunctionList.txt Normal file

File diff suppressed because it is too large Load diff

View file

@ -88,9 +88,10 @@ exec("scripts/gameCanvas.cs");
exec("scripts/centerPrint.cs");
exec("scripts/CreditsGui.cs");
exec("serverControl.cs");
//Init Shared & Client scripts
exec("scripts/modScripts/shared/initialize.cs");
exec("scripts/modScripts/client/initialize.cs");
exec("scripts/modScripts/shared/initialise.cs");
exec("scripts/modScripts/client/initialise.cs");
if (isDemo())
exec("scripts/DemoEndGui.cs");
exec("scripts/ChatGui.cs");
@ -129,14 +130,14 @@ else if($LaunchMode $= "NavBuild")
}
else if($LaunchMode $= "SpnBuild")
{
enableWinConsole(true);
enableWinConsole(true);
$Host::Dedicated = true;
$ServerName = $Host::GameName;
$Host::MissionType = $missionType;
$Host::Map = $Mission;
setNetPort($Host::Port);
CreateServer($Mission, $missionType);
return;
$ServerName = $Host::GameName;
$Host::MissionType = $missionType;
$Host::Map = $Mission;
setNetPort($Host::Port);
CreateServer($Mission, $missionType);
return;
}
function recordMovie(%movieName, %fps)
@ -668,18 +669,18 @@ function DispatchLaunchMode()
if ($Host::Dedicated) //Server doesn't need to initialize client Startup
return;
//If we're offline, check if the user has a LAN account setup..
if (!$PlayingOnline && $Pref::LANAccount::Name $= "" || $Pref::LANAccount::PassWord $= "" && $Pref::FirstRan)
canvas.pushDialog(LANAccountCreationDLG);
//If we're offline, check if the user has a LAN account setup..
if (!$PlayingOnline && $Pref::LANAccount::Name $= "" || $Pref::LANAccount::PassWord $= "" && $Pref::FirstRan)
canvas.pushDialog(LANAccountCreationDLG);
if (!$Pref::FirstRan) //Technically the gameMode is included, but the BETA maps are not there
{
$Pref::FirstRan = true;
if (!$PlayingOnline && $Pref::LANAccount::Name $= "" || $Pref::LANAccount::PassWord $= "")
messageBoxOk("WARNING","This version of T2Bol ("@$ModVersionText@") does not include the RPG gamemode. If possible, please update the mod.",canvas.pushDialog(LANAccountCreationDLG));
else
messageBoxOk("WARNING","This version of T2Bol ("@$ModVersionText@") does not include the RPG gamemode. If possible, please update the mod.");
}
if (!$Pref::FirstRan) //Technically the gameMode is included, but the BETA maps are not there
{
$Pref::FirstRan = true;
if (!$PlayingOnline && $Pref::LANAccount::Name $= "" || $Pref::LANAccount::PassWord $= "")
messageBoxOk("WARNING","This version of T2Bol ("@$ModVersionText@") does not include the RPG gamemode. If possible, please update the mod.",canvas.pushDialog(LANAccountCreationDLG));
else
messageBoxOk("WARNING","This version of T2Bol ("@$ModVersionText@") does not include the RPG gamemode. If possible, please update the mod.");
}
}
// if($LaunchMode !$= "Demo")

8
data/Info.dat Normal file
View file

@ -0,0 +1,8 @@
Info.dat
Information about this version of BoL used by servers and clients (pretty much compatability checks and updates)
Copyright (c) 2012 The DarkDragonDX
[Version]
Major = 1;
Minor = 1;
Codename = Ragora;

View file

@ -2,6 +2,9 @@
keepCorpses = true;
maxCorpses = 6;
[PawsAreNice]
Indeed = true;
[Server]
SpaceServer = "192.168.1.5";
EarthServer = "192.168.1.5";

View file

@ -3,7 +3,9 @@ $Data::Ammo1836101295_0_Earth = "100";
$Data::Ammo1836101295_1_AlphaSector = "15";
$Data::Ammo1836101295_1_Earth = "15";
$Data::Ammo2003098_1_Earth = "15";
$Data::Ammo2003098_1_rpg_new = "17";
$Data::Ammo2003098_2_Earth = "100";
$Data::Ammo2003098_2_rpg_new = "100";
$Data::Ammo427694980_1_AlphaSector = "15";
$Data::Ammo427694980_1_Earth = "12";
$Data::Ammo427694980_2_AlphaSector = "100";
@ -11,13 +13,16 @@ $Data::Ammo427694980_2_Earth = "0";
$Data::Armor1836101295_AlphaSector = "Light";
$Data::Armor1836101295_Earth = "Light";
$Data::Armor2003098_Earth = "LIGHT";
$Data::Armor2003098_rpg_new = "LIGHT";
$Data::Armor427694980_AlphaSector = "LIGHT";
$Data::Armor427694980_Earth = "LIGHT";
$Data::Caps = 0;
$Data::Caps = 3;
$Data::Caps0 = 0;
$Data::Caps1682851961 = 0;
$Data::Caps1836101295 = 0;
$Data::Caps2003098 = 0;
$Data::Caps2003098 = 5;
$Data::Caps2485526 = 0;
$Data::Caps3738647 = 0;
$Data::Caps427694980 = 2;
$Data::Caps960691562 = 0;
$Data::ClanCount = 3;
@ -42,24 +47,37 @@ $Data::ClanTag0 = "|-{DRK}-|";
$Data::ClanTag1 = "|-{DRK}-|";
$Data::ClanTag2 = "-|{VPR}|-";
$Data::Client0 = "427694980";
$Data::ClientCount = 3;
$Data::ClientCount = 4;
$Data::ClientGUID1 = "2003098";
$Data::ClientGUID2 = "2485526";
$Data::ClientGUID3 = "0";
$Data::ClientName0 = "Dark Dragon DX";
$Data::ClientName1 = "DarkDragonDX";
$Data::ClientName2 = "Dayuppy";
$Data::ClientName3 = "DarkDragonDX";
$Data::DamageFlash1836101295_AlphaSector = "0";
$Data::DamageFlash1836101295_Earth = "0";
$Data::DamageFlash2003098_Earth = "0";
$Data::DamageFlash2003098_rpg_new = "0";
$Data::DamageFlash427694980_AlphaSector = "0";
$Data::DamageFlash427694980_Earth = "0";
$Data::Deaths = 371;
$Data::Deaths = 10262;
$Data::Deaths0 = 0;
$Data::Deaths1682851961 = 4;
$Data::Deaths1836101295 = 16;
$Data::Deaths2003098 = 3;
$Data::Deaths2003098 = 276;
$Data::Deaths2139104 = 1;
$Data::Deaths2450675 = 3;
$Data::Deaths2485526 = 4;
$Data::Deaths2544511 = 1;
$Data::Deaths3119044 = 5;
$Data::Deaths3392146 = 38;
$Data::Deaths3637691 = 4;
$Data::Deaths3738647 = 11;
$Data::Deaths3819266 = 9;
$Data::Deaths427694980 = 12;
$Data::Deaths960691562 = 1;
$Data::EMail::Contents0_1 = "Welcome to T2Bol, try not to die.";
$Data::EMail::Contents2003098_1 = "Welcome to T2Bol, try not to die.";
$Data::EMail::Contents2485526_1 = "Welcome to T2Bol, try not to die.";
$Data::Email::Contents427694980_ = "Hey.. does it work?";
@ -84,10 +102,13 @@ $Data::Email::Contents427694980_9 = "blah";
$Data::EMail::Contents_ = "Hey, this is awesome, right?";
$Data::EMail::Contents_1 = "Wootage Test. Fantastic email system ya\t got here.";
$Data::EMail::Contents_2 = "Works?";
$Data::EMail::Count = 3;
$Data::EMail::Contents_3 = "Free stuff! o-o";
$Data::EMail::Count = 4;
$Data::EMail::Count0 = 1;
$Data::EMail::Count2003098 = 1;
$Data::EMail::Count2485526 = 1;
$Data::Email::Count427694980 = 19;
$Data::EMail::Date0_1 = "Saturday, July 28, 2012 @ 08:32 PM";
$Data::EMail::Date2003098_1 = "Monday, March 29, 2010 @ 03:42 PM";
$Data::EMail::Date2485526_1 = "Tuesday, October 26, 2010 @ 03:25 AM";
$Data::Email::Date427694980_ = "Wednesday, March 24, 2010 amt 12:43 AM";
@ -112,6 +133,8 @@ $Data::Email::Date427694980_9 = "Wednesday, March 24, 2010 @ 10:50 PM";
$Data::EMail::Date_ = "Tuesday, October 26, 2010 @ 03:30 AM";
$Data::EMail::Date_1 = "Tuesday, October 26, 2010 @ 03:33 AM";
$Data::EMail::Date_2 = "Tuesday, October 26, 2010 @ 04:01 AM";
$Data::EMail::Date_3 = "Thursday, August 02, 2012 @ 10:08 PM";
$Data::EMail::Sender0_1 = "The Comittee";
$Data::EMail::Sender2003098_1 = "The Comittee";
$Data::EMail::Sender2485526_1 = "The Comittee";
$Data::Email::Sender427694980_ = "\x10\c7DRK\c6Dark Dragon DX\x11";
@ -136,113 +159,169 @@ $Data::Email::Sender427694980_9 = "\x10\c7|-{DRK}-|\c6Dark Dragon DX\x11";
$Data::EMail::Sender_ = "DarkDragonDX";
$Data::EMail::Sender_1 = "Dayuppy";
$Data::EMail::Sender_2 = "\x10\c7-|{VPR}|-\c6DarkDragonDX\x11";
$Data::EMail::Sender_3 = "\x10\c7-|{VPR}|-\c6DarkDragonDX\x11";
$Data::EMail::Title0_1 = "Welcome";
$Data::EMail::Title2003098_1 = "Welcome";
$Data::EMail::Title2485526_1 = "Welcome";
$Data::Email::Title427694980_ = "Test";
$Data::EMail::Title_ = "Hey";
$Data::EMail::Title_1 = "Woot";
$Data::EMail::Title_2 = "Test";
$Data::EMail::Title_3 = "Paws";
$Data::EMailCount427694980 = 10;
$Data::Energy1836101295_AlphaSector = "34.2759";
$Data::Energy1836101295_Earth = "60";
$Data::Energy2003098_Earth = "49.6121";
$Data::Energy2003098_Earth = "60";
$Data::Energy2003098_rpg_new = "46.552";
$Data::Energy427694980_AlphaSector = "60";
$Data::Energy427694980_Earth = "60";
$Data::FlagReturns = 19;
$Data::FlagReturns = 42;
$Data::FlagReturns0 = 0;
$Data::FlagReturns1682851961 = 0;
$Data::FlagReturns1836101295 = 0;
$Data::FlagReturns2003098 = 0;
$Data::FlagReturns2003098 = 5;
$Data::FlagReturns2485526 = 0;
$Data::FlagReturns3738647 = 0;
$Data::FlagReturns427694980 = 0;
$Data::FlagReturns960691562 = 0;
$Data::Headshots = 0;
$Data::Headshots0 = 0;
$Data::Headshots1682851961 = 0;
$Data::Headshots1836101295 = 0;
$Data::Headshots2003098 = 0;
$Data::Headshots2485526 = 0;
$Data::Headshots3738647 = 0;
$Data::Headshots427694980 = 0;
$Data::Headshots960691562 = 0;
$Data::Health1836101295_AlphaSector = "0";
$Data::Health1836101295_Earth = "0.0139489";
$Data::Health2003098_Earth = "0.133059";
$Data::Health2003098_Earth = "0.499071";
$Data::Health2003098_rpg_new = "0.617923";
$Data::Health427694980_AlphaSector = "0";
$Data::Health427694980_Earth = "0.645";
$Data::Hits = 13299;
$Data::Hits = 133656;
$Data::Hits0 = 0;
$Data::Hits1682851961 = 1122;
$Data::Hits1836101295 = 652;
$Data::Hits2003098 = 147;
$Data::Hits2003098 = 4572;
$Data::Hits2139104 = 23;
$Data::Hits2450675 = 30;
$Data::Hits2485526 = 327;
$Data::Hits2544511 = 227;
$Data::Hits2886178 = 13;
$Data::Hits3119044 = 271;
$Data::Hits3392146 = 395;
$Data::Hits3637691 = 112;
$Data::Hits3738647 = 75;
$Data::Hits3819266 = 63;
$Data::Hits427694980 = 867;
$Data::Hits960691562 = 33;
$Data::IsInClan1836101295 = 1;
$Data::IsInClan2003098 = 1;
$Data::IsInClan427694980 = 1;
$Data::IsRegistered = 1;
$Data::IsRegistered0 = 1;
$Data::IsRegistered1682851961 = 1;
$Data::IsRegistered1836101295 = 1;
$Data::IsRegistered2003098 = 1;
$Data::IsRegistered2485526 = 1;
$Data::IsRegistered3738647 = 1;
$Data::IsRegistered427694980 = 1;
$Data::IsRegistered960691562 = 1;
$Data::IsRPGReady0 = 1;
$Data::IsRPGReady1836101295 = 1;
$Data::IsRPGReady2003098 = 1;
$Data::IsRPGReady2485526 = 1;
$Data::IsRPGReady427694980 = 1;
$Data::Kills = 235;
$Data::Kills = 9706;
$Data::Kills0 = 0;
$Data::Kills1682851961 = 30;
$Data::Kills1836101295 = 54;
$Data::Kills2003098 = 23;
$Data::Kills2003098 = 636;
$Data::Kills2139104 = 1;
$Data::Kills2450675 = 1;
$Data::Kills2485526 = 18;
$Data::Kills2544511 = 13;
$Data::Kills3119044 = 84;
$Data::Kills3392146 = 32;
$Data::Kills3637691 = 12;
$Data::Kills3738647 = 5;
$Data::Kills3819266 = 5;
$Data::Kills427694980 = 76;
$Data::Kills960691562 = 13;
$Data::Lost = 0;
$Data::Lost0 = 0;
$Data::Lost1682851961 = 0;
$Data::Lost1836101295 = 1;
$Data::Lost2003098 = 0;
$Data::Lost2485526 = 0;
$Data::Lost3738647 = 0;
$Data::Lost427694980 = 0;
$Data::Lost960691562 = 0;
$Data::Misses = 0;
$Data::Misses0 = 0;
$Data::Misses1682851961 = 0;
$Data::Misses1836101295 = 0;
$Data::Misses2003098 = 0;
$Data::Misses2485526 = 0;
$Data::Misses3738647 = 0;
$Data::Misses427694980 = 0;
$Data::Misses960691562 = 0;
$Data::Money0_Earth = 0;
$Data::Money1836101295_AlphaSector = "800";
$Data::Money2003098_Earth = "0";
$Data::Money2485526_Earth = 0;
$Data::Money427694980_Earth = "0";
$Data::Pack1836101295_AlphaSector = "EnergyPack";
$Data::Pack1836101295_Earth = "MiningTool";
$Data::Pack2003098_Earth = "MiningTool";
$Data::Pack427694980_Earth = "MiningTool";
$Data::Race0 = "Draakan";
$Data::Race1836101295 = "Draakan";
$Data::Race2003098 = "Draakan";
$Data::Race2485526 = "Draakan";
$Data::Race427694980 = "Draakan";
$Data::RepairKits1836101295_AlphaSector = "1";
$Data::RepairKits1836101295_Earth = "1";
$Data::RepairKits2003098_Earth = "1";
$Data::RepairKits2003098_Earth = "0";
$Data::RepairKits2003098_rpg_new = "0";
$Data::RepairKits427694980_AlphaSector = "1";
$Data::RepairKits427694980_Earth = "0";
$Data::Rounds1682851961_SlapDashSV = 3;
$Data::Rounds1836101295_SlapDashSV = 1;
$Data::Rounds2003098_SlapDashSV = 3;
$Data::Rounds2003098_KatabaticSV = 6;
$Data::Rounds2003098_SlapDashSV = 6;
$Data::Rounds2485526_SlapDashSV = 3;
$Data::Rounds2544511_SlapDashSV = 3;
$Data::Rounds3119044_SlapDashSV = 3;
$Data::Rounds3392146_SlapDashSV = 1;
$Data::Rounds3637691_SlapDashSV = 4;
$Data::Rounds427694980_KatabaticSV = 1;
$Data::Rounds427694980_SlapdashSV = 2;
$Data::Rounds960691562_KatabaticSV = 1;
$Data::Rounds960691562_SlapDashSV = 2;
$Data::Rounds_KatabaticSV = 5;
$Data::Rounds_SlapDashSV = 1;
$Data::Sex0 = "A";
$Data::Sex1836101295 = "A";
$Data::Sex2003098 = "A";
$Data::Sex2485526 = "A";
$Data::Sex427694980 = "A";
$Data::Shots = 17476;
$Data::Shots = 167489;
$Data::Shots0 = 0;
$Data::Shots1682851961 = 1744;
$Data::Shots1836101295 = 780;
$Data::Shots2003098 = 161;
$Data::Shots2003098 = 5964;
$Data::Shots2139104 = 24;
$Data::Shots2450675 = 36;
$Data::Shots2485526 = 450;
$Data::Shots2544511 = 293;
$Data::Shots2886178 = 15;
$Data::Shots3119044 = 471;
$Data::Shots3392146 = 476;
$Data::Shots3637691 = 161;
$Data::Shots3738647 = 99;
$Data::Shots3819266 = 63;
$Data::Shots427694980 = 1258;
$Data::Shots960691562 = 37;
$Data::ShouldApply = 0;
@ -251,33 +330,47 @@ $Data::ShouldApply1836101295_AlphaSector = 1;
$Data::ShouldApply1836101295_Earth = 1;
$Data::ShouldApply2003098 = 0;
$Data::ShouldApply2003098_Earth = 1;
$Data::ShouldApply2003098_rpg_new = 1;
$Data::ShouldApply2485526 = 0;
$Data::ShouldApply2886178 = 0;
$Data::ShouldApply3119044 = 0;
$Data::ShouldApply3392146 = 0;
$Data::ShouldApply3434461 = 0;
$Data::ShouldApply427694980 = 0;
$Data::ShouldApply427694980_AlphaSector = 1;
$Data::ShouldApply427694980_Earth = 1;
$Data::Steel0_Earth = 0;
$Data::Steel1836101295_AlphaSector = "0.182";
$Data::Steel1836101295_Earth = "0.044";
$Data::Steel2485526_Earth = 0;
$Data::Suicides = 29;
$Data::Suicides = 1205;
$Data::Suicides0 = 0;
$Data::Suicides1682851961 = 0;
$Data::Suicides1836101295 = 1;
$Data::Suicides2003098 = 0;
$Data::Suicides2003098 = 27;
$Data::Suicides2450675 = 2;
$Data::Suicides2485526 = 1;
$Data::Suicides3119044 = 3;
$Data::Suicides3392146 = 9;
$Data::Suicides3738647 = 1;
$Data::Suicides427694980 = 8;
$Data::Suicides960691562 = 0;
$Data::Transform1836101295_AlphaSector = "-309.232 334.187 309.913 0 0 1 0.667341";
$Data::Transform1836101295_Earth = "-370.341 851.922 68.7601 0 0 1 1.14368";
$Data::Transform2003098_Earth = "-154.193 368.528 78.6733 0 0 -1 0.509952";
$Data::Transform2003098_Earth = "-1060.18 469.128 92.4371 0 0 -0.99993 0.0256617";
$Data::Transform2003098_rpg_new = "-32.9661 334.381 93.2455 0 0 1 3.65726";
$Data::Transform427694980_AlphaSector = "82.863 -653.983 186.762 0 0 -1 0.916839";
$Data::Transform427694980_Earth = "-1023.9 512.742 92.3865 0 0 1 2.39569";
$Data::Velocity1836101295_AlphaSector = "15.4637 13.9548 3.02164";
$Data::Velocity1836101295_Earth = "0 0 0";
$Data::Velocity2003098_Earth = "0 0 0";
$Data::Velocity2003098_rpg_new = "12.4202 -23.2183 1.94154";
$Data::Velocity427694980_AlphaSector = "0.82034 0.175601 -33.5394";
$Data::Velocity427694980_Earth = "0 0 0";
$Data::WasInVehicle1836101295_AlphaSector = 0;
$Data::WasInVehicle1836101295_Earth = 0;
$Data::WasInVehicle2003098_Earth = 0;
$Data::WasInVehicle2003098_rpg_new = 0;
$Data::WasInVehicle427694980_AlphaSector = 0;
$Data::WasInVehicle427694980_Earth = 0;
$Data::Weapon1836101295_0_AlphaSector = "Chaingun";
@ -290,9 +383,14 @@ $Data::Weapon1836101295_3_AlphaSector = "TargetingLaser";
$Data::Weapon1836101295_3_Earth = "TargetingLaser";
$Data::Weapon1836101295_4_AlphaSector = "TargetingLaser";
$Data::Weapon2003098_0_Earth = "Blaster";
$Data::Weapon2003098_0_rpg_new = "Blaster";
$Data::Weapon2003098_1_Earth = "Disc";
$Data::Weapon2003098_1_rpg_new = "Disc";
$Data::Weapon2003098_2_Earth = "Chaingun";
$Data::Weapon2003098_2_rpg_new = "Chaingun";
$Data::Weapon2003098_3_Earth = "TargetingLaser";
$Data::Weapon2003098_4_Earth = "TargetingLaser";
$Data::Weapon2003098_4_rpg_new = "TargetingLaser";
$Data::Weapon427694980_0_AlphaSector = "Blaster";
$Data::Weapon427694980_0_Earth = "Blaster";
$Data::Weapon427694980_1_AlphaSector = "Disc";
@ -304,12 +402,15 @@ $Data::Weapon427694980_4_Earth = "TargetingLaser";
$Data::Whiteout1836101295_AlphaSector = "0";
$Data::Whiteout1836101295_Earth = "0";
$Data::Whiteout2003098_Earth = "0";
$Data::Whiteout2003098_rpg_new = "0";
$Data::Whiteout427694980_AlphaSector = "0";
$Data::Whiteout427694980_Earth = "0";
$Data::Won = 0;
$Data::Won0 = 0;
$Data::Won1682851961 = 0;
$Data::Won1836101295 = 0;
$Data::Won2003098 = 0;
$Data::Won2485526 = 0;
$Data::Won3738647 = 0;
$Data::Won427694980 = 0;
$Data::Won960691562 = 0;

View file

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// Clan Management.cs
// The clan management system for BoL RPg Mod.
// Copyright (c) 2012 The DarkDragonDX
//==============================================================================
// Entry Point (called when the client first clicks it)
function EMailClient::main(%this, %client)
{
}
// action function, it's called when the client navigates.
function EMailClient::action(%this, %client, %page)
{
}

View file

@ -0,0 +1,8 @@
; Clan Management.dat
; Configuration file for the clan management application
; Copyright (c) 2012 The DarkDragonDX
[Application]
Name = "Clan Management";
ApplicationInstance = "ClanManagement"; Should not be duplicated; even if the mod could resolve duplication issues in realtime.
Description = "The clan management system for BoL RPg Mod.";

View file

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// EMail.cs
// An E-Mail client for the Birth of Legend RPG Mod.
// Copyright (c) 2012 The DarkDragonDX
//==============================================================================
// Entry Point (called when the client first clicks it)
function EMailClient::main(%this, %client)
{
}
// action function, it's called when the client navigates.
function EMailClient::action(%this, %client, %page)
{
}

View file

@ -0,0 +1,8 @@
; Email.dat
; Configuration file for the BoL E-Mail client
; Copyright (c) 2012 The DarkDragonDX
[Application]
Name = "E-Mail";
ApplicationInstance = "EMailClient"; Should not be duplicated; even if the mod could resolve duplication issues in realtime.
Description = "An E-Mail client for the Birth of Legend RPG Mod.";

View file

@ -0,0 +1,20 @@
//------------------------------------------------------------------------------
// Save.cs
// The PDA Save function for BoL RPG mod.
// Copyright (c) 2012 The DarkDragonDX
//==============================================================================
// Entry Point (called when the client first clicks it)
function EMailClient::main(%this, %client)
{
}
// action function, it's called when the client navigates.
function EMailClient::action(%this, %client, %page)
{
}
// exit function, it's called when the client exits (returns to PDAMain)
function EMailClient::exit(%this, %client, %page)
{
}

View file

@ -0,0 +1,9 @@
; Save.dat
; The PDA Save function for BoL RPG mod.
; Copyright (c) 2012 The DarkDragonDX
[Application]
Name = "Save";
ForceInstall = true; Determines if this is in the PDA by default and cannot be removed.
ApplicationInstance = "ClanManagement"; Should not be duplicated; even if the mod could resolve duplication issues in realtime.
Description = "The PDA Save function for BoL RPG mod.";

View file

@ -0,0 +1,33 @@
Tribes 2.dat
Tribes 2 Campaign Configuration
Copyright (c) 2012 The DarkDragonDX
[Campaign]
Training = Training;
Mission1 = Training1;
MissionText1 = Charybdis;
Mission2 = Training2;
MissionText2 = Sehrganda Prime;
Mission3 = Training3;
MissionText3 = Ymir;
Mission4 = Training4;
MissionText4 = Bloodjewel;
Mission5 = Training5;
MissionText5 = Shi-Draconis Alpha;
MissionCount = 5;
Name = Tribes 2;
[Settings]
Name = Lone Wolf;
TeamName = Star Wolf;
Race = Human;
Sex = Male;
Voice = Male1;
VoicePitch = 1;
Skin = SWolf;
EnemySkin = Horde;
EnemyName = Horde;
PlayerTeam = 1;
EnemyTeam = 2;
StartLives = 3;
EnemyRace = BioDerm;

View file

@ -0,0 +1,11 @@
Encyclopedia.conf
Configurations for the Encyclopedia
Copyright (c) 2012 The DarkDragonDX
[Config]
Entry0 = "Races";
Entry1 = "Vehicles";
Entry2 = "Packs";
Entry3 = "Factions";
Entry4 = "Weapons";
EncryCount = 5;

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Beast
<font:univers condensed:23>Race: <a:select-Races-BioDerm>BioDerm</a><spop>
<spush><font:Univers:15>
Beast supervises the BioDerm genetics engineering process.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1 @@
Hey.

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,5 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Character: Cobra
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
Alchaldes is considered the smartest being alive.
<spop>

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Alpha Viper
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Draakan>Draakan</a><spop>
<spush><font:Univers:15>
In the event of a close encounter: cook em'.
-- Alpha Viper saying
<spop>
<just:center><bitmap:drakelogo_full><sbreak>

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Blood Eagle
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Human>Human</a><spop>
<spush><font:Univers:15>
I got a plascannon that says no one's immortal.
-- Blood Eagle saying
<spop>
<just:center><bitmap:Flag_Beagle><sbreak>

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Diamond Sword
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Human>Human</a><spop>
<spush><font:Univers:15>
Be patient and the enemy shall consume himself.
-- Diamond Sword saying
<spop>
<just:center><bitmap:Flag_DSword><sbreak>

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Horde
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Bioderm>Bioderm</a><spop>
<spush><font:Univers:15>
I am of the Chainless. I am Strong. I show no mercy.
--BioDerm battle chant
<spop>
<just:center><bitmap:Flag_Bioderm><sbreak>

View file

@ -0,0 +1 @@
<just:center>This is the 'Military Branches' section. Any important military branches in T2Bol will be listed here.

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Phoenix
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Human>Human</a><spop>
<spush><font:Univers:15>
Fire only burns the faithless.
-- Harbingers of Phoenix saying
<spop>
<just:center><bitmap:Flag_Phoenix><sbreak>

View file

@ -0,0 +1,11 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Star Wolf
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Human>Human</a><spop>
<spush><font:Univers:15>
Silent as the mouths of the dead.
-- Starwolf saying
<spop>
<just:center><bitmap:Flag_StarWolf><sbreak>
In 3941 CE, the BioDerm Hordes crushed the Starwolf tribe at the star system of Ymir. Many Starwolf merceneries now serve in the armies of other tribes.

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Faction: Storm
<font:univers condensed:23>Specialty: Accuracy
<font:univers condensed:23>Race: <a:select-Races-Human>Human</a><spop>
<spush><font:Univers:15>
In the eye of your enemy, you look like an easy kill. Prove them wrong.
<spop>
<just:center><bitmap:Flag_T2><sbreak>

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Pack: Dampening Field<spop>
<spush><font:Univers:15>
Blind them.
<spop>
<just:center><bitmap:twb/twb_Fusionmortar><sbreak>
The dampening field comes as a base asset and a pack. When activated, the dampening field produces an electromagnetic field that prevents unauthorized signals from entering or exiting. Basically, it disables all sensor and radio activity. A special armor addon is required to detect dampening fields.

View file

@ -0,0 +1 @@
Energy pack.

View file

@ -0,0 +1 @@
Energy pack.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Pack: Mining Tool<spop>
<spush><font:Univers:15>
Warning: Aim away from face.
<spop>
<just:center><bitmap:twb/twb_Fusionmortar><sbreak>
Neutrons are fired at the rock to break it apart molecule by molecule, then a tractor beam brings the segments in.

View file

@ -0,0 +1,6 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Planet: Earth<spop>
<spush><font:Univers:15>
Considered the 'celestial' planet, Earth is great place for vacations.
<spop>
<just:center><bitmap:Earth><sbreak>

View file

@ -0,0 +1 @@
<just:center>This is the 'planets' section. All planets that can be visited in T2Bol will be listed here.

View file

@ -0,0 +1,6 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Planet: Xeron<spop>
<spush><font:Univers:15>
Xeron looks a lot hotter than it actually is from space.
<spop>
<just:center><bitmap:Xeron><sbreak>

View file

@ -0,0 +1,10 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Race: BioDerm<spop>
<spush><font:Univers:15>
These humans are hard to catch off-guard. Rrrh, so be it! Well crush them the old-fashioned way -- brute force!
-- from a Horde Maul tactical briefing
<spop>
<just:center><bitmap:twb/twb_bioderm_light><sbreak>
The Bioderms are an artificially created workrace. Sometimes used in combat, a great number of Derms rebelled against the Human race.
But in 3956 CE, six years after the turning point of the war, the BioDerms were given the right to be considered their own race.

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Race: Criollos<spop>
<spush><font:Univers:15>
Could we really rip a hole in the universe?
-- Hammurabi
<spop>
<just:center><bitmap:logo_small_storm><sbreak>
The Criollos are smart bastards, their leader Alchaldes beat the best Super Computer at Chess.

View file

@ -0,0 +1,24 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Race: Draakan<spop>
<spush><font:Univers:15>
What is the point of our existance?
-- Dolosus, after finding the truth
<spop>
<just:center><bitmap:draakan_full><sbreak>
The Draakans have the same origin as the Bioderms: Once a genetic experiment, early Draakans escaped from their testing facilities on Xeron. They were originially very basic lifeforms, but after many years of evolving and evading the <a:select-Races-Criollos>Criollos</a>, the Draakans became the sophisticated creatures they are today. The <a:select-Races-Criollos>Criollos</a> eventually left the Draakans alone after their most recent evolution; happy with how advanced their creations have become. Today, the <a:select-Races-Criollos>Criollos</a> are mindful to not let the Draakans know they created them.
The Draakans (or for short, "Drakes") are considered to be direct descendants of velociraptors. They resemble raptors in almost every way possible, except eye color. Most Draakans have yellow eyes that are described as "bright as the sun". However, in rare cases, a Draakan may be born with red eyes.
Draakans have an extraordinary ability to spew & resist fire. Said fire is produced in 'sacs' just below the lungs. The fire produced was meant to be an emergency backup for body heat. However, a simple surgery allows this fire to be diverted to the mouth, ready to be expelled at will.
There is a largely spread rumor that the Drakaans are of <a:select-Races-Criollos>Creole</a> creation. Once a genetic experiment, early Draakans escaped from their testing facility on Xeron and then on evolved into the sophisticated creatures that they are now.
Pros:
*Faster running speed
*Flame breath ability
*Advanced understanding of robotic technology (faster leveling on robotics)
*Fire & lava resistance
Cons:
*Takes less damage before death

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Race: Human<spop>
<spush><font:Univers:15>
One small step for man. One giant leap for mankind.
-- Louis Armstrong, the Moon Landing
<spop>
<just:center><bitmap:twb/twb_BE_MLight><sbreak>
The Humans have tried to find extraterrestial life since their Modern ages, but with no luck. However in 2578 CE, the song "Accross the Universe" that is broadcasted as far into space as possible by NASA was heard and interpreted as an SOS signal. A large battleShip then landed on Earth, carrying a large amount of <a:select-Races-Draakan>Draakan</a> footsoldiers. The misunderstanding was then worked out. Before the <a:select-Races-Draakan>Draakans</a> left, they helped the Humans upgrade their technology.

View file

@ -0,0 +1 @@
<just:center>This is the 'races' section. Any playable races in T2Bol will be listed here.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Vehicle: Shrike<spop>
<spush><font:Univers:15>
The Shrike is your basic turbograb fighter.
<spop>
<just:center><bitmap:twb/twb_shrike><sbreak>
With dual mounted blasters & 2000 CC engine, the Shrike is best for light air support & escort. A 280W shield protects the shrike from most damage, and recharages at 0.8W a second.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: ELF Projector<spop>
<spush><font:Univers:15>
Shoot em' down.
<spop>
<just:center><bitmap:twb/twb_Elfprojector><sbreak>
A heat seeking missile is fired from this launcher which can track both vehicles and infantry.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Grenade Launcher<spop>
<spush><font:Univers:15>
Shoot em' down.
<spop>
<just:center><bitmap:twb/twb_Grenadelauncher><sbreak>
Fires small explosive grenades.

View file

@ -0,0 +1 @@
<just:center>This is the 'weapons' section. Any weapons in T2Bol will be listed here.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Mortar<spop>
<spush><font:Univers:15>
Pop your enemys' head.
<spop>
<just:center><bitmap:twb/twb_Laserrifle><sbreak>
The Laser Rifle fires concentrated laser beams that reach it's target at lightspeed.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Mortar<spop>
<spush><font:Univers:15>
Shoot em' down.
<spop>
<just:center><bitmap:twb/twb_Missilelauncher><sbreak>
A heat seeking missile is fired from this launcher which can track both vehicles and infantry.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Mortar<spop>
<spush><font:Univers:15>
The mortar has been built to destroy.
<spop>
<just:center><bitmap:twb/twb_Fusionmortar><sbreak>
The fusion mortar fires small uranium rounds, creating a powerful explosion.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Mortar<spop>
<spush><font:Univers:15>
Aim away from face.
<spop>
<just:center><bitmap:twb/twb_Plasmarifle><sbreak>
Capable of melting flesh, the Plasmarifle fires balls of plasma.

View file

@ -0,0 +1,8 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Mortar<spop>
<spush><font:Univers:15>
Go shove 10,000 volts of electricity up your enemys' ass!
<spop>
<just:center><bitmap:twb/twb_Shocklance><sbreak>
The shocklance fires beams of concentrated electricity at close range.

View file

@ -0,0 +1,9 @@
<spush><just:center><color:00dc00><font:univers condensed:25>Weapon: Mortar<spop>
<spush><font:Univers:15>
The Spinfusor is your bread and butter weapon.
-- Lieutenant Kenzie
<spop>
<just:center><bitmap:twb/twb_Spinfusor><sbreak>
The Spinfusor fires small explosive discs.

View file

@ -0,0 +1,9 @@
<HTML>
<header>
<title>403 - Forbidden</title>
</header>
<body>
<h1>403 - Forbidden</h1>
VGS! You're not allowed here.
</body>
</HTML>

View file

@ -0,0 +1,9 @@
<HTML>
<header>
<title>404 - Not Found</title>
</header>
<body>
<h1>404 - Not Found</h1>
VGS! The requested document "#DOC#" was not found.
</body>
</HTML>

View file

@ -0,0 +1,9 @@
<HTML>
<header>
<title>405 - Not Allowed</title>
</header>
<body>
<h1>405 - Not Allowed</h1>
The method #METHOD# is not allowed for this document.
</body>
</HTML>

View file

@ -0,0 +1,10 @@
<HTML>
<header>
<title>Index of #DIR#</title>
</header>
<body>
<h1>Index of #DIR#</h1>
#CONTENT#
<address>#APPLICATION# #OS# Server at #HOSTNAME# Port #PORT#</address>
</body>
</HTML>

8
data/http/test.cs Normal file
View file

@ -0,0 +1,8 @@
function ServerApp::execute(%this,%data)
{
%data = strReplace(%data,"#TIME#",formatTimeString("hh:nn:ss A"));
%data = strReplace(%data,"#DATE#",formatTimeString("mm/dd/yy"));
return %data;
}

10
data/http/test.html Normal file
View file

@ -0,0 +1,10 @@
<HTML>
<header>
<title>Time</title>
</header>
<body bgcolor="#00FF00">
Time: #TIME#<br>
Date: #DATE#<br>
This is a test.
</body>
</HTML>

View file

@ -0,0 +1,6 @@
Modeler (Players, Items, interactible stuff)
Modeler (For interiors)
Texture Artist (Stuff used in GUI's)
Skin Artist (Person who makes textures for objects)
Animator (For the modelers)
Sound Artist (Maybe?)

8
doc/Dev Notes.txt Normal file
View file

@ -0,0 +1,8 @@
-Clan Listings-
Group: 1-5 Players
Clan: 5-10 Players
Guild: 10-15 players
Tribe: 15-20 players
Corperation: 20-25 Players

39
doc/Development Map.txt Normal file
View file

@ -0,0 +1,39 @@
T2Bol development roadmap.
MULTIPLAYER TODO-
Add News Browser
Add Auto Update
Add Economical System
Add Special Key Bindings
Make Sure Global Chat (In RPG) can be enabled/Disabled
Make sure Languages can be enabled/Disabled
Implement modified startup video
Modify Credits (Won't be completed untill mod is done)
Add Land Ownership
Add a system in which clan leaders can assign clan members jobs
Make Corpses Drop Baggies of Items
Make sure corpses can be eaten by Draakans (for health)
Implement 'Virtual Items' and combo system
Add an arena, or an area of land where players can fight without worrying of death
Add Adrupt disconnection messages
Implement jet malfunctions that are caused by electrical disturbances
MAKE SURE MOD HAS SMOOTH TRANSITIONS BETWEEN GAMEMODES
Make a little special loading icon for maps without one.
SINGLEPLAYER TODO-
Upgrade T2's AI system for certain circumstances
Completed Stuff (Multiplayer)--
Add Account Handling for Local Area Networks (Monday, January 4th, 2009)
Add Reference Center (Monday, January 4th, 2009)
Add Player Armors & Draakan Flamer (Monday, January 4th, 2009)
Add Blood Effects (Monday, January 4th, 2009)
Add Clan Handling (Tuesday, January 11th, 2009)
Implement .TXT Basic Language Processor (Saturday, July 3rd, 2010)
Implement PDA Basics (Saturday, July 3rd, 2010)
Completed Stuff (SinglePlayer)--
Add a Campaign Switch API (Saturday, July 3rd, 2010)

4
doc/HighLights.txt Normal file
View file

@ -0,0 +1,4 @@
1. Encyclopedia
2. Several New Gamemodes
3. LAN Account Handling (I should intergrate this to work with TC's LAN GUID system)
4. Multiple Campaign handling API

45546
doc/Manual.rtf Normal file

File diff suppressed because it is too large Load diff

136
doc/Manual.txt Normal file
View file

@ -0,0 +1,136 @@
Tribes 2: Birth Of Legend Version 'Development'
By Dark Dragon DX & Alviss ("EmperorsChamp")
--- Developing Team / Contributors ---
- Coders & Script Sources
Dark Dragon DX
Alviss (EmperorsChamp)
UberGuy
- Modelers & model Sources
Netmanx
Velo
Low Poly Cooperative
Iron Sphere Development Team
UrbanAssault
- Mappers
Blnukem
- Skinners
Numbuh 178
Blnukem
- Music/Audio Mixers & Music/Audio Sources
Blnukem
Josef Jahn
- General Support
Naosyth (special thanks for helping me get started on Torque scripting)
Castiger (Lyra)
DeathBorn (Tigr0nix)
Zaxxman
Mentulmhat
DS=DragonStalker
DeadSoldier
NiniN
The-Construct.net Forums
--- Weapons ---
- Draakan Flame Breath (A Draakan-only weapon)
All Draakans are born with the ability to 'breathe' fire.
The Draakans use this as a lethal weapon of firery doom.
--- AI Characters ---
- Dolosus (Do-Loh-Sus)
The fearless leader of the Draakan race.
- Diamond Back
Dolosus' "Right Hand Man", he is Dolosus'
- SharpTooth
One of Dolosus' guards, he loves to eliminate enemies in the bloodiest and most painful manner possible.
- Iguana
One of Dolosus' guards. His favorite pack is the Cloaking Pack, thus earning him the nickname "Iguana".
- Snake
One of Dolosus' soldiers.
- Raptor
The fastest, but also the weakest of all Draakans, earning him the nickname "Raptor".
- Rex
Though his intelligance only allows him to use grunts and roars as words, he is quite grusume in battle.
He is one of Dolosus' soldiers.
- Denier Of Soup
Blank
- Warg
Blank
--- PDA Help ---
The Score Menu (Default Bind is F2) has been replaced by a PDA that you will use in the mod.
It can download programs, run a self-statistics check, and save.
- Download Programs
You can use this to download programs to your PDA, your range from the transmitter will affect how long it will take to download.
If you're too far however, it won't download at all.
- Self-Statistics
Tells you your current stats, such as cash and your relationship with other races.
- Inventory
Shows your inventory.
- Clan Management
Use this to manage or create your own clan. You can edit your clan's name, tag, and short description at any time.
--- TroubleShooting ---
Q: Tribes 2 becomes a non-active window everytime I click something in the PDA, why?
A: Opening the mission editor appears to cause this.
S: The only solution that seems to work is restarting Tribes 2 or avoid use of the mission editor.
Q: My game crashes when I host non-dedicated servers.
A: Older versions of Structural Infinity (SI) cause crashes on non-dedicated servers.
S: Uninstall SI, attempt to host again.
Q: My game crashes when I run Tribes 2 in offline mode without an internet connection. OR my dedicated Offline or LAN server crashes on startup.
A: Tribes 2 has buggy TCPObjects and HTTPObjects that crash when there's no internet connection.
S: Uninstall all scripts that require an internet connection. (Including TribesNext's main VL2, tscsri.vl2)
Q: My game crahes when I run Tribes 2 on Linux via WINE.
A: The TCPObject code in older versions of the TribesNext patch is incompatible with WINE.
S: Upgrade TribesNext to the latest version.
Q: The game distorts my MP3 music by turning the pitch up or down.
A: I'm not sure what causes this, T2 has a buggy MP3 player.
S: None.
Q: My game crashes or screws up horribly when I spawn in RPG.
A: I'm not sure what causes this,
S: Delete data/savedData.cs and report the error to a developer.
Q: My dedicated server doesn't load the correct mod! And that mod doesn't even function properly.
A: Tribes 2 cannot function with multiple mods installed to gameData/.
S: Move all other mods (except classic) somewhere else.
Q: My game is all screwed up when I launch the mod.
A: Tribes 2 generates caches (.DSOs) of Tribes 2 scripts for faster loading. But these caches screw up the game.
S: Run JTLdelDSO (in the mod folder) to remove the cached files.
Q: My game crashes from none of the causes above. Why?
A: Tribes 2 sometimes conflicts with itself when there are multiple mods installed.
S: Remove all mods from Gamedata/ except T2Bol. (don't delete them)
Sierra On-Line, Inc. owns the copyright to Tribes2.
Dark Dragon DX, DEV Team, and any associates claim the copyright
to this Modification (the "mod"), and any derivative works of this mod.
By using this mod you must agree with the end user license agreement ("EULA.txt").

46
doc/RTS Notes.txt Normal file
View file

@ -0,0 +1,46 @@
If I can manage to make a 2D to 3D vector conversion on the RTS gameMode, this is what will happen:
Don't bother reading this right now; it's my file to jot down ideas.
Each race will have a trio of leaders each with their own special abilities and units.
The Leaders, Abilities, and Units
Dolosus (Draakan) -- Sterylization -- Pyromaniacs
Alchaldes (Criollos) -- Research happens in half the time -- Do This
Hammurabi (Criollos) --
Beast (BioDerm) -- Buildings Construct in half the time, Units Train in half the time -- None
Commander Jackson (Human) -- Bomber Strike -- Elite Drop Pods (Drops any sort of infantry anywhere on the map)
Cynthia Fisher (Human) -- Poison Gas Strike (Any infantry caught in the radius will die slowly, lasts longer than Pyro Strike) --
Corperal Jones (Human) -- Units have more training (More training, same build time) --
Each race will have a set of their own buildings (basically the same buildings for each, just different name and produces different units)
The Buildings, Upgrades, and Units (Infantry)
Cloning Center (Bioderm) -- None -- Bioderm Sniper (Light, Laser Rifle, Plasma Rifle, Grenade Launcher, Energy Pack), Bioderm Clone (Light Derm, Chaingun, Disc, Shocklance, Ammo), Bioderm Assault (Assault, Chaingun, Disc, Shocklance, Missile Launcher, Ammo), Bioderm Reaver (Juggie, Chaingun, Disc, Shocklance, Missile Launcher, Mortar)
Barracks (Human) -- Adreniline (Infantry moves faster) --
(Criollos)
Egg Nurtering Center (Draakan) -- Growth Hormones (Draakans grow in half the time), -- Draakan (Once produced, their tiny and feeble -- after a minute or two, they'll grow to be full size & given armor)
The Buildings, Upgrades, and Units (Factory)
Human --
Bioderm --
Draakan --
Criollos --
General Upgrades:
Reflex Training (Units in vehicles will survive vehicle explosion with half health)
General Pros and Cons of races:
Draakan (Cons) -- Infantry takes a minute to mature, Infantry takes more damage than any other (they do not have as much fat & muscle to protect them),
Draakan (Pros) -- All infantry can act as anti-infantry too (except Special units for Dolosus, their flame is better PERIOD),
Human (Cons) -- Burns,
Human (Pros) -- Can Train both Human & BioDerm Infantry (T2 fans better know the Humans created the Derms),
Criollos (Cons) -- Infantry is slightly weaker than the rest,
Criollos (Pros) -- Can Upgrade infantry with flame retardant armor, Can Train both Criollos and Draakan Units (They created the Drakes o_o),
Bioderm (Cons) -- Burns, Tribal (Derms start with lowest Tech, but once upgraded, they can do major damage),
Bioderm (Pros) -- ,
Special Unit Upgrades
Dolosus (Draakan, Pyromaniacs) -- Unstable Sacs (Lvl. 1, Pyromaniacs explode on Death, ignititing any nearby infantry),

161
doc/Updates.txt Normal file
View file

@ -0,0 +1,161 @@
This file contains technical data.
Try not to fry your brain.
*******************************************
[Dark Dragon DX]
Date: Tuesday, September 7th, 2010
Scripts: scripts/creditsGUI.cs, creditsText.cs, creditsText_default.cs, data/creditsText.txt
Changes:
-Tribes 2's original credits are now accessable at their original location
-Added a creditsText.txt for easy modifcation to the credits scroller for the BOL team
Description:
-You can now access both the mod's and game's credits. (For Tribes 2, go under "START". For BOL, it is currently under the browser)
-It is now easier to modify the credits for the BOL mod
[Dark Dragon DX]
Date: Monday, August 27th, 2010
Script: data/
Changes:
-Organized mod Data
-Fixed odd Encyclopedia Bug
Description:
-Modification data is now more ... organized
-The Encyclopedia and other interactive GUI's will not attempt to open internet Explorer for some users anymore (but breaks some mods)
[Dark Dragon DX]
Date: Tuesday, August 17th, 2010
Script: scripts/modScripts/
Changes:
-Organized custom mod scripts
Description:
-All custom mod script files are now located under scripts/modScripts/
[Dark Dragon DX]
Date: Wednesday, March 17th, 2010
Script: scripts/beginning.cs
Changes:
-Started "Dolosus' Memories"
Description:
-A lil' Campaign used to describe the origin of the Draakans
[Dark Dragon DX]
Date: Wednesday, March 3rd, 2010
Script: scripts/RPGGame.cs, defaultGame.cs
Changes:
-Condensed game code, removed CTF code from RPG
Description:
-Game Code is more organized.
[Dark Dragon DX]
Date: Friday, Feburary 26th, 2010
Script: scripts/SVGame.cs, defaultGame.cs, admin.cs, SNDGame.cs
Changes:
-Survival Game now has BETA progressive mode
Description:
-There are no rounds.. bots spawn every 30 seconds. It is VERY buggy at the time, it's best you don't use it.
[Dark Dragon DX]
Date: Saturday, Feburary 12h, 2010
Script: scripts/RPGBrowserGUI.cs
Changes:
-Browser now converts files properly.
Description:
-The browser has full functionality in file converting. Multiple <select> tags are handled properly now.
[Dark Dragon DX]
Date: Saturday, Feburary 11h, 2010
Script: scripts/SVGame.cs
Changes:
-Survival Game is now fully functional
Description:
-How long will you last against growing waves of bots?
[Dark Dragon DX]
Date: Saturday, Feburary 8h, 2010
Script: scripts/RPGBrowserGUI.cs
Changes:
-Upgraded Browser converter
-Modfied JTLDelDSO.bat
Description:
-The file converter for the browser now ignores blank lines and attempts to space out sentences.
-The DSO remover now removes files from editor/ and fonts/ to conserve space. (T2 is a bit old, so somebody may have a 1 gig HDD or something)
[Dark Dragon DX]
Date: Saturday, Feburary 7th, 2010
Script: scripts/SVGame.cs, scripts/aiSurvival.cs
Changes:
-Added onto Survival GameMode
Description:
-The Survival Gamemode now has a map and a semi-playable BETA
[Dark Dragon DX]
Date: Saturday, Feburary 6th, 2010
Script: scripts/server.cs, scripts/RPGGame.cs, scripts/weapons/drakeFlame.cs
Changes:
-Fixed Draakan flame breath not being given to Draakans at times
-Started the property script
-Modified the inventory station script
-Upgraded clan handling
-Upgraded Encyclopedia
Description:
-The player gets that special ability.
-The property script has been configured to work with bbunk2.dif.
(Beagle tower), but it does not take rotation into consideration yet.
-The inventory Station in RPG gamemodes now asks for money when you enter the trigger. Also updates your money count.
-The clan system now allows for short descriptions and there is a button to edit the clan now.
-The encyclopedia reference function is now dynamic.
[Dark Dragon DX]
Date: Thursday, January 29th, 2010
Script: scripts/server.cs
Changes:
-Fixed (hopefully) save File corruption bug
Description:
-A rare save file corruption bug seems to have been resolved.
[Dark Dragon DX]
Date: Thursday, January 28th, 2010
Scripts: scripts/RPGBrowserGUI.cs, scripts/lib/
Changes:
-Removed lib/ folder
-Encyclopedia is now Dynamic
-Organized code
Description:
-Removed the annoying lib/ folder
-The Encyclopedia now picks up all entries automatically for convenience.
-The code has been attached directly to the functions (originally was hooks in lib/client.cs)
[Dark Dragon DX]
Date: Monday, January 12th, 2010
Scripts: RPGGame.cs, lib/server.cs, inputDLG.gui, lib/client.cs
Changes:
-Started clan System
-Started location system
Description:
-Start a clan!
-ObjectiveHUD (bottom left corner in RPG Gamemode) now tells you the name of the territory you are in.
[Dark Dragon DX]
Date: Monday, January 11th, 2010
Scripts: SVGame.cs, safeMode.vl2
Changes:
-Started Survival Gamemode
-Added safeMode
-Started client Save system
Description:
-Survive against waves of bots.
-Disables use of HTTP and TCPObjects when totally running offline. (command arg: -safeMode)
-Save the game! Function: saveGame();
[Dark Dragon DX]
Date: Thursday, January 7th, 2009
Scripts: server.cs, lib/server.cs, lib/client.cs
Changes:
-Fixed client verification system
-Server & client share all files
-Stripped unused server options
Description:
-Client verification system now works in listen and dedicated servers.
-Server and client share all files in lib/
-Stripped lobby Menu options that the server does not use in RPG gamemodes.

View file

@ -340,8 +340,4 @@ new GuiChunkedBitmapCtrl(RPGBrowserGui) {
};
};
};
//--- OBJECT WRITE END ---
exec("scripts/RPGBrowserGui.cs");
//--- OBJECT WRITE END ---

BIN
interiors.7z Normal file

Binary file not shown.

View file

@ -1,5 +1,5 @@
// MissionTypes = RPG
// DisplayName = Earth
// MissionTypes = RPG
//--- OBJECT WRITE BEGIN ---
new SimGroup(MissionGroup) {

627
scripts/NSGame.cs Normal file
View file

@ -0,0 +1,627 @@
// DisplayName = Natural Selection
//--- GAME RULES BEGIN ---
// Destroy the other team.
//--- GAME RULES END ---
//exec the AI scripts
exec("scripts/aiNS.cs");
$RequiresClient[NS] = false;
$InvBanList[NS, "C4Charge"] = 1;
//-- tracking ---
function NSGame::initGameVars(%game)
{
//%game. = ""; //I guess I'll eventually set some, but most are loaded via BASIC files
}
package NSGame
{
function blah(){} //Eh..
};
function NSGame::setUpTeams(%game)
{
defaultGame::setUpTeams(%game);
%game.numTeams = 1;
setSensorGroupCount(4);
$TeamDamage = true; //Allow team Damage
}
function NSGame::getTeamSkin(%game, %team)
{
if($host::tournamentMode) // z0dd - ZOD, 9/29/02. Removed T2 demo code from here
{
return $teamSkin[%team];
}
else
{
//error("CTFGame::getTeamSkin");
if(!$host::useCustomSkins)
{
%terrain = MissionGroup.musicTrack;
//error("Terrain type is: " SPC %terrain);
switch$(%terrain)
{
case "lush":
if(%team == 1)
%skin = 'beagle';
else if(%team == 2)
%skin = 'dsword';
else %skin = 'base';
case "badlands":
if(%team == 1)
%skin = 'swolf';
else if(%team == 2)
%skin = 'dsword';
else %skin = 'base';
case "ice":
if(%team == 1)
%skin = 'swolf';
else if(%team == 2)
%skin = 'beagle';
else %skin = 'base';
case "desert":
if(%team == 1)
%skin = 'cotp';
else if(%team == 2)
%skin = 'beagle';
else %skin = 'base';
case "Volcanic":
if(%team == 1)
%skin = 'dsword';
else if(%team == 2)
%skin = 'cotp';
else %skin = 'base';
default:
if(%team == 2)
%skin = 'baseb';
else %skin = 'base';
}
}
else %skin = $teamSkin[%team];
//error("%skin = " SPC getTaggedString(%skin));
return %skin;
}
}
function NSGame::getTeamName(%game, %team)
{
// ---------------------------------------------------
// z0dd - ZOD 3/30/02. Only display default team names
//if ( isDemo() || $host::tournamentMode)
return $TeamName[%team];
// ---------------------------------------------------
}
//--------------------------------------------------------------------------
function NSGame::missionLoadDone(%game)
{
//default version sets up teams - must be called first...
DefaultGame::missionLoadDone(%game);
}
function NSGame::showStalemateTargets(%game)
{
cancel(%game.stalemateSchedule);
//show the targets
for (%i = 1; %i <= 2; %i++)
{
%flag = $TeamFlag[%i];
//find the object to scope/waypoint....
//render the target hud icon for slot 1 (a centermass flag)
//if we just set him as always sensor vis, it'll work fine.
if (isObject(%flag.carrier))
setTargetAlwaysVisMask(%flag.carrier.getTarget(), 0x7);
}
//schedule the targets to hide
%game.stalemateObjsVisible = true;
%game.stalemateSchedule = %game.schedule(%game.stalemateDurationMS, hideStalemateTargets);
}
function NSGame::timeLimitReached(%game)
{
logEcho("game over (timelimit)");
%game.gameOver();
cycleMissions();
}
function NSGame::scoreLimitReached(%game)
{
logEcho("game over (scorelimit)");
%game.gameOver();
cycleMissions();
}
function NSGame::gameOver(%game)
{
//call the default
DefaultGame::gameOver(%game);
messageAll('MsgClearObjHud', "");
}
function NSGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement, %damageLoc)
{
if(%clVictim.headshot && %damageType == $DamageType::Laser && %clVictim.team != %clAttacker.team)
{
%clAttacker.scoreHeadshot++;
if (%game.SCORE_PER_HEADSHOT != 0)
{
messageClient(%clAttacker, 'msgHeadshot', '\c0You received a %1 point bonus for a successful headshot.', %game.SCORE_PER_HEADSHOT);
messageTeamExcept(%clAttacker, 'msgHeadshot', '\c5%1 hit a sniper rifle headshot.', %clAttacker.name); // z0dd - ZOD, 8/15/02. Tell team
}
%game.recalcScore(%clAttacker);
}
// -----------------------------------------------
// z0dd - ZOD, 8/25/02. Rear Lance hits
if(%clVictim.rearshot && %damageType == $DamageType::ShockLance && %clVictim.team != %clAttacker.team)
{
%clAttacker.scoreRearshot++;
if (%game.SCORE_PER_REARSHOT != 0)
{
messageClient(%clAttacker, 'msgRearshot', '\c0You received a %1 point bonus for a successful rearshot.', %game.SCORE_PER_REARSHOT);
messageTeamExcept(%clAttacker, 'msgRearshot', '\c5%1 hit a shocklance rearshot.', %clAttacker.name);
}
%game.recalcScore(%clAttacker);
}
// -----------------------------------------------
//the DefaultGame will set some vars
DefaultGame::onClientDamaged(%game, %clVictim, %clAttacker, %damageType, %implement, %damageLoc);
//if victim is carrying a flag and is not on the attackers team, mark the attacker as a threat for x seconds(for scoring purposes)
if ((%clVictim.holdingFlag !$= "") && (%clVictim.team != %clAttacker.team))
{
%clAttacker.dmgdFlagCarrier = true;
cancel(%clAttacker.threatTimer); //restart timer
%clAttacker.threatTimer = schedule(%game.TIME_CONSIDERED_FLAGCARRIER_THREAT, %clAttacker.dmgdFlagCarrier = false);
}
}
////////////////////////////////////////////////////////////////////////////////////////
function NSGame::clientMissionDropReady(%game, %client)
{
messageClient(%client, 'MsgClientReady',"", "SinglePlayerGame"); //Force the SP game objective hud to setup
%game.resetScore(%client);
messageClient(%client, 'MsgMissionDropInfo', '\c0You are in mission %1 (%2).', $MissionDisplayName, $MissionTypeDisplayName, $ServerName );
DefaultGame::clientMissionDropReady(%game, %client);
//Force client Spawn since we're ready now
schedule(1000,0,"forceClientSpawn",%client,true);
%client.setControlObject(%client.player);
commandToClient(%client,'bottomPrint',"Try not to die.",3);
//Since this is an RPG gamemode, be sure some things are correct. (May have been a mission switch from CTF or some other gamemode)
commandToClient(%client,'SetScoreText',"PDA - Personal Data Assistant");
//Make sure the data hud is working.
messageClient(%client,'MsgSPCurrentObjective1',"",'Location: Unknown.');
messageClient(%client,'MsgSPCurrentObjective2',"",'Money: $%1.',%client.money);
}
function NSGame::assignClientTeam(%game, %client, %respawn)
{
DefaultGame::assignClientTeam(%game, %client, %respawn);
// if player's team is not on top of objective hud, switch lines
messageClient(%client, 'MsgCheckTeamLines', "", %client.team);
}
function NSGame::applyConcussion(%game, %player)
{
}
function NSGame::vehicleDestroyed(%game, %vehicle, %destroyer)
{
}
function NSGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLocation)
{
defaultGame::onClientKilled(%game, %clVictim, %clKiller, %damageType, %implement, %damageLocation);
commandToClient(%clVictim,'HandleScriptedCommand',2);
//commandToClient(%clVictim,'alxPlayMusic',"T2BOL/Music/TribesHymn.mp3"); //Add a little music that becomes audible if the player idles in death for a bit..
//No, play this epic audio:
schedule(2000,0,"messageClient",%clVictim,'MsgDeath',"~wfx/Lose.wav");
forceScoreScreenOpen(%clVictim,"DEATH");
$Data::ShouldApply[%clVictim.GUID] = false;
if (%clVictim.isAIControlled())
%clVictim.drop();
}
//...very very messy PDA code below!!
function NSGame::updateScoreHud(%game, %client, %tag) //This is just here for when the PDA is first opened.
{
if (%client.PDAPage $= "")
{
messageClient( %client, 'ClearHud', "", 'scoreScreen', 0 );
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Main Page');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Please select a command.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center>Command List:");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tSLFSTS\t1>-Self Statistics</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tEMAIL\t1>-Electronic Mail</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tINVENTORY\t1>-View Inventory</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tCLNMG\t1>-Clan Management</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tSAVE\t1>-Save Game</a>");
%client.PDAPage = "MAIN";
}
}
function NSGame::createPlayer(%game, %client, %spawnLoc, %respawn)
{
DefaultGame::createPlayer(%game, %client, %spawnLoc, %respawn);
commandToClient(%client,'HandleScriptedCommand',9,formatTimeString("HHnn") SPC "Hrs.");
}
function NSGame::processGameLink(%game, %client, %arg1, %arg2, %arg3, %arg4, %arg5)
{
messageClient( %client, 'ClearHud', "", 'scoreScreen', 0 );
//Special handles here..
if (getSubStr(%arg1,0,5) $= "EMAIL" && getSubStr(%arg1,5,1) !$= "" && isNumber(getSubStr(%arg1,5,1)))
{
%id = getSubStr(%arg1,5,strLen(%arg1));
%client.email = %id;
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Electronic Mail<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:left><a:gamelink\tDELETE\t1>Delete E-Mail</a> "@$Data::EMail::Date[%client.GUID,%i]@"<just:right><a:gamelink\tREPLY\t1>Reply</a>");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>From %1:',$Data::EMail::Sender[%client.GUID,%i]);
%index++;
%count = getSubStrOccurance($Data::EMail::Content[%client.GUID,%id],"\t");
echo(%count);
if (%count != 0)
for (%i = 0; %i < %count; %i++)
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>%1',getField($Data::EMail::Contents[%client.GUID,%id],%i));
%index++;
}
else
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>%1',$Data::EMail::Contents[%client.GUID,%id]);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tEMAIL\t1>Back To Listing</a>");
return;
}
else if (getSubStr(%arg1,0,7) $= "EMAILID" && isNumber(getSubStr(%arg1,7,strLen(%arg1))))
{
%id = getSubStr(%arg1,7,strLen(%arg1));
%guid = $Data::Client[%id];
%count = $Data::EMail::Count[%guid];
%name = $Data::ClientName[%id];
%clid = plNameToCid(%name);
if (checkEmails(%guid,%client.emailTitle))
return;
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Electronic Mail<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", '<just:center>E-Mail sent to %1.',%name);
messageClient( %client, 'SetLineHud', "", 'scoreScreen', 1, '<just:center><a:gamelink\tEMAIL\t1>Back to Listing</a>');
$Data::EMail::Title[%guid,%count] = %client.emailTitle;
$Data::EMail::Sender[%guid,%count] = %client.namebase;
$Data::EMail::Contents[%guid,%count] = %client.emailCont;
$Data::EMail::Date[%guid,%count] = formatTimeString("DD, MM dd, yy @ hh:nn A");
$Data::EMail::Count[%guid]++;
if (IsObject(%clid))
messageClient(%clid,'msgClient','\c3Received an E-Mail from %1. ~wfx/misc/warning_beep.wav',%client.namebase);
return;
}
switch$ (%arg1)
{
case "CLOSE":
closeScoreScreen(%client);
case "BACK": //Resets you to the main menu
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Main Page<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Please select a command.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center>Command List:");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tSLFSTS\t1>-Self Statistics</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tEMAIL\t1>-Electronic Mail</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tINVENTORY\t1>-View Inventory</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tCLNMG\t1>-Clan Management</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tSAVE\t1>-Save Game</a>");
%client.PDAPage = "MAIN";
case "CLNSTP":
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Clan Management<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing clan setup.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Clan Name: %1 <a:input\tClanN\tClan Name\tClan Name>[Change]</a>',%client.clanN);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Clan Tag: %1 <a:input\tClanT\tClan Tag\tClan Tag>[Change]</a>',%client.clanT);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Short Description: %1 <a:input\tDesc\tShort Description\tDescription>[Change]</a>',%client.description);
%index++;
if (%client.clanN !$= "" && %client.clanT !$= "")
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tCLNFN>Done</a>');
%index++;
%client.PDAPage = "CLNSTP";
case "EMAIL":
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Electronic Mail<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing E-Mails in sequential order.");
%index = 0;
%count = $Data::EMail::Count[%client.GUID];
for (%i = 0; %i <= %count; %i++)
{
if ($Data::EMail::Title[%client.GUID,%i] !$= "")
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tEMAIL%1\t1>%2 - %3</a>',%i,$Data::EMail::Sender[%client.GUID,%i],$Data::EMail::Title[%client.GUID,%i]);
%index++;
}
}
if (%index == 0)
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center>There are no E-Mails to show.");
%index++;
}
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tEMAILSEND\t1>[Compose an E-Mail]</a>");
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tBACK\t1>Back To Main Menu</a>");
%index++;
case "EMAILSEND":
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Electronic Mail<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>New E-Mail");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Title: %1 <a:input\temailTitle\tTitle\tE-Mail Title>[Change]</a>',%client.emailTitle);
%index++;
%count = getSubStrOccurance(%client.emailCont,"\t");
if (%count != 0)
for (%i = 0; %i < %count; %i++)
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Contents: %1 <a:input\temailCont\tContents\tContents>[Change]</a>',%client.emailCont);
}
else
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Contents: %1 <a:input\temailCont\tContents\tContents>[Change]</a>',%client.emailCont);
%index++;
if (%client.emailTitle !$= "" && %client.emailcont !$= "")
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tRECPT>Select Receptiant</a>');
case "RECPT":
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Electronic Mail<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Select Receptiant");
%count = $Data::ClientCount;
%index = 0;
for (%i = 0; %i < %count; %i++)
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tEMAILID%1\t1>%2</a>',%i,$Data::ClientName[%i]);
%index++;
}
case "CLNFN":
if ($Data::IsInClan[%client.GUID])
{
%ID = $Data::ClanID[%client.GUID];
if ($Data::ClanLeaderGUID[%ID] == %client.GUID)
{
$Data::ClanName[%ID] = %client.clanN;
$Data::ClanTag[%ID] = %client.clanT;
$Data::ClanDesc[%ID] = %client.description;
forceScoreScreenOpen(%client,"CLNMG");
}
}
else
{
$Data::IsInCLan[%client.GUID] = true;
if ($Data::ClanCount $= "")
$Data::ClanCount = 0;
$Data::ClanName[$Data::ClanCount] = %client.clanN;
$Data::ClanTag[$Data::ClanCount] = %client.clanT;
$Data::ClanDesc[$Data::ClanCount] = %client.desc;
$Data::ClanLeader[$Data::ClanCount] = %client.namebase;
$Data::ClanLeaderGUID[$Data::ClanCount] = %client.GUID;
$Data::ClanMember[$Data::ClanCount, 0] = %client.GUID;
$Data::ClanID[%client.GUID] = $Data::ClanCount;
$Data::ClanCount++;
setName(%client,"\cp\c7" @ %client.clanT @ "\c6" @ %client.namebase @ "\co");
saveGame();
forceScoreScreenOpen(%client,"CLNMG");
}
%client.PDAPage = "MAIN";
case "CLNMG":
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Clan Management<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing clan management.");
%index = 0;
if (!$Data::IsInClan[%client.GUID])
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>You are not in a clan. Try creating a <a:gamelink\tCLNSTP>[New Clan]</a>.');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Or view the <a:gamelink\tCLNLST>[List]</a> of clans.');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tBACK\t1>Back To Main Menu</a>");
}
else
{
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Clan Name: %1',$Data::ClanName[$Data::ClanID[%client.GUID]]);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Clan Tag: %1', $Data::ClanTag[$Data::ClanID[%client.GUID]]);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Short Description: %1',%client.description);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tCLNMBR>[View]</a> member list.');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tCLNLST>[View]</a> other clans.');
if ($Data::IsInClan[%client.GUID] && $Data::ClanLeaderGUID[$Data::ClanID[%client.GUID]] == %client.GUID)
{
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tCLNSTP>[Edit]</a> Clan.');
}
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tBACK\t1>Back To Main Menu</a>");
}
%client.PDAPage = "CLNMG";
case "CLNMBR":
%client.PDAPage = "CLNMBR";
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Clan Management<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing member list.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Name: %1',%client.namebase);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tBACK\t1>Back To Previous Page</a>');
%index++;
case "SLFSTS": //Self Statistics
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Self Statistics<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing your stats.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Name: %1',%client.namebase);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Race: %1',%client.race);
%index++;
if (%client.money $= "")
%client.money = 0; //You got zilch.
%trans = %client.player.getTransform();
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Cash: $%1',%client.money);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>GPS Coordinates: %1 %2 %3',getWord(%trans,0),getWord(%trans,1),getWord(%trans,2));
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tSLFSTS\t1>Refresh</a>');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tBACK\t1>Back To Main Menu</a>");
%client.PDAPage = "SLFSTS";
case "INVENTORY": //View Inventory
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Show Inventory<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing your inventory.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, 'Minerals--');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, 'Steel: %1 units.', %client.units["Steel"]);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tBACK\t1>Back To Main Menu</a>");
%client.PDAPage = "INVENTORY";
case "DEATH":
if (isObject(%client.player) && %client.player.getState() $= "Move")
return;
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Death<just:right>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>You have died.");
messageClient( %client, 'SetLineHud', "", 'scoreScreen', 0, "<just:center><a:gamelink\tRESPAWN\t1>Respawn</a>");
%client.PDAPage = "DEATH";
case "DELETE":
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Electronic Mail<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>E-Mail deleted.");
messageClient( %client, 'SetLineHud', "", 'scoreScreen', 0, '<just:center><a:gamelink\tEMAIL\t1>Back to Listing</a>');
$Data::EMail::Title[%client.GUID,%client.email] = "";
case "SAVE":
saveGame();
closeScoreScreen(%client);
messageClient(%client,'msgSaveSuccess',"\c3Game successfully saved.");
case "RESPAWN":
if (isObject(%client.player) && %client.player.getState() $= "Move")
return;
%client.PDAPage = "MAIN";
forceClientSpawn(%client);
case "SLFSTS": //Self Statistics
messageClient( %client, 'SetScoreHudHeader', "", '<just:center>Self Statistics<just:right><a:gamelink\tCLOSE\t1>Close</a>');
messageClient( %client, 'SetScoreHudSubheader', "", "<just:center>Showing your stats.");
%index = 0;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Name: %1',%client.namebase);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Race: %1',%client.race);
%index++;
if (%client.race $= "Draakan")
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Type: %1',%client.sex);
else
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Sex: %1',%client.sex);
%index++;
if (%client.money $= "")
%client.money = 0; //You got zilch.
%trans = %client.player.getTransform();
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>Cash: $%1',%client.money);
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center>GPS Coordinates: %1 %2 %3',getWord(%trans,0),getWord(%trans,1),getWord(%trans,2));
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, '<just:center><a:gamelink\tSLFSTS\t1>Refresh</a>');
%index++;
messageClient( %client, 'SetLineHud', "", 'scoreScreen', %index, "<just:center><a:gamelink\tBACK\t1>Back To Main Menu</a>");
%client.PDAPage = "SLFSTS";
default: //If something fails, return to the main menu.
serverCmdProcessGameLink(%client,"BACK");
}
}
function serverCmdShowHud(%client, %tag)
{
%tagName = getWord(%tag, 1);
%tag = getWord(%tag, 0);
if (%tag $= 'scoreScreen')
serverCmdProcessGameLink(%client,%client.PDAPage);
messageClient(%client, 'OpenHud', "", %tag);
switch$ (%tagname)
{
case "vehicleHud":
vehicleHud::updateHud(1,%client,%tag);
case "scoreScreen":
updateScoreHudThread(%client, %tag);
}
}

File diff suppressed because it is too large Load diff

View file

@ -20,9 +20,9 @@ function TrainingGui::onWake( %this )
TrainingMissionList.clear();
if ($Pref::Campaign !$= "")
TrainingSelectMenu.onSelect(TrainingSelectMenu.findText($Pref::Campaign),$Pref::Campaign);
TrainingSelectMenu.onSelect(TrainingSelectMenu.findText($Pref::Campaign),$Pref::Campaign);
else
TrainingSelectMenu.onSelect(0,TrainingSelectMenu.getText(0));
TrainingSelectMenu.onSelect(0,TrainingSelectMenu.getText());
TrainingMissionList.sort( 1 );
TrainingMissionList.setSelectedRow( 0 );
if ( $pref::TrainingDifficulty > 0 && $pref::TrainingDifficulty < 4 )
@ -42,64 +42,53 @@ function TrainingGui::onSleep( %this )
//------------------------------------------------------------------------------
function TrainingGui::updateList( %this )
{
%cam = $Pref::Campaign;
%dir = "Data/Campaigns/";
%file = %dir @ %cam @ ".txt";
%cam = $Pref::Campaign;
%dir = "Data/Campaigns/";
%file = %dir @ %cam @ ".txt";
if (!IsFile(%file))
return false;
if (!IsFile(%file))
return false;
TrainingMissionList.clear();
TrainingBriefingText.setValue( "" );
TrainingPic.setBitmap( "" );
TrainingPicFrame.setVisible( false );
%count = getBlockData(%file,"Campaign",1,"MissionCount");
TrainingMissionList.clear();
TrainingBriefingText.setValue( "" );
TrainingPic.setBitmap( "" );
TrainingPicFrame.setVisible( false );
if (!IsObject(CampaignLoader))
new ScriptObject(CampaignLoader) { class = "BasicDataParser"; };
CampaignLoader.empty();
CampaignLoader.load(%file);
%campaign = CampainLoader.get("Campaign",0);
%count = %campaign.element("MissionCount");
//Before we do the loopy stuff, we should check if there's a specific training mission first
%mission = getBlockData(%file,"Campaign",1,"Practice");
%text = getBlockData(%file,"Campaign",1,"PracticeText");
//Before we do the loopy stuff, we should check if there's a specific training mission first
%mission = %campaign.element("Practice");
%text = %campaign.element("PracticeText");
if (%text != -1 && %mission != -1)
TrainingMissionList.addRow( 0, %text TAB %mission );
if (%text != -1 && %mission != -1)
TrainingMissionList.addRow( 0, %text TAB %mission );
for (%i = 1; %i <= %count; %i++)
{
%mission = getBlockData(%file,"Campaign",1,"Mission" @ %i);
%text = getBlockData(%file,"Campaign",1,"MissionText" @ %i);
TrainingMissionList.addRow( %i, %text TAB %mission );
//Now the mission list is where we need it, find the player settings..
if (getBlockCount(%file,%mission) != 0)
{
$Training::Name[%Mission] = getBlockData(%file,%mission,1,"Name");
$Training::Race[%Mission] = getBlockData(%file,%mission,1,"Race");
$Training::Sex[%Mission] = getBlockData(%file,%mission,1,"Sex");
$Training::Voice[%Mission] = getBlockData(%file,%mission,1,"Voice");
$Training::VoicePitch[%Mission] = getBlockData(%file,%mission,1,"VoicePitch");
$Training::Skin[%Mission] = getBlockData(%file,%mission,1,"Skin");
$Training::EnemySkin[%Mission] = getBlockData(%file,%mission,1,"EnemySkin");
$Training::EnemyName[%Mission] = getBlockData(%file,%mission,1,"EnemyName");
$Training::EnemyTeam[%Mission] = getBlockData(%file,%mission,1,"EnemyTeam");
$Training::PlayerTeam[%Mission] = getBlockData(%file,%mission,1,"PlayerTeam");
$Training::StartLives[%Mission] = getBlockData(%file,%mission,1,"StartLives");
$Training::EnemyRace[%Mission] = getBlockData(%file,%mission,1,"EnemyRace");
}
else
{
$Training::Name[%Mission] = getBlockData(%file,"Settings",1,"Name");
$Training::Race[%Mission] = getBlockData(%file,"Settings",1,"Race");
$Training::Sex[%Mission] = getBlockData(%file,"Settings",1,"Sex");
$Training::Voice[%Mission] = getBlockData(%file,"Settings",1,"Voice");
$Training::VoicePitch[%Mission] = getBlockData(%file,"Settings",1,"VoicePitch");
$Training::Skin[%Mission] = getBlockData(%file,"Settings",1,"Skin");
$Training::EnemySkin[%Mission] = getBlockData(%file,"Settings",1,"EnemySkin");
$Training::EnemyName[%Mission] = getBlockData(%file,"Settings",1,"EnemyName");
$Training::EnemyTeam[%Mission] = getBlockData(%file,"Settings",1,"EnemyTeam");
$Training::PlayerTeam[%Mission] = getBlockData(%file,"Settings",1,"PlayerTeam");
$Training::StartLives[%Mission] = getBlockData(%file,"Settings",1,"StartLives");
$Training::EnemyRace[%Mission] = getBlockData(%file,"Settings",1,"EnemyRace");
}
}
%settings = CampainLoader.get("Settings",0);
for (%i = 1; %i <= %count; %i++)
{
%mission = %campain.element("Mission" @ %i);
%text = %campaign.element("MissionText" @ %i);
TrainingMissionList.addRow( %i, %text TAB %mission );
//Now the mission list is where we need it, find the player settings..
$Training::Name[%Mission] = %settings.element("Name");
$Training::Race[%Mission] = %settings.element("Race");
$Training::Sex[%Mission] = %settings.element("Sex");
$Training::Voice[%Mission] = %settings.element("Voice");
$Training::VoicePitch[%Mission] = %settings.element("VoicePitch");
$Training::Skin[%Mission] = %settings.element("Skin");
$Training::EnemySkin[%Mission] = %settings.element("EnemySkin");
$Training::EnemyName[%Mission] = %settings.element("EnemyName");
$Training::EnemyTeam[%Mission] = %settings.element("EnemyTeam");
$Training::PlayerTeam[%Mission] = %settings.element("PlayerTeam");
$Training::StartLives[%Mission] = %settings.element("StartLives");
$Training::EnemyRace[%Mission] = %settings.element("EnemyRace");
}
}
//------------------------------------------------------------------------------
@ -115,9 +104,9 @@ function TrainingGui::onClose( %this )
//------------------------------------------------------------------------------
function TrainingDifficultyMenu::onAdd( %this )
{
%this.add( "Easy", 1 );
%this.add( "Medium", 2 );
%this.add( "Hard", 3 );
%this.add( "Easy", 1 );
%this.add( "Medium", 2 );
%this.add( "Hard", 3 );
}
//------------------------------------------------------------------------------
@ -130,83 +119,88 @@ function TrainingDifficultyMenu::onSelect( %this, %id, %text )
function TrainingSelectMenu::onAdd( %this )
{
//Uber Dynamic Campaign Listing :)
%path = "Data/Campaigns/*.txt";
%count = 0;
for( %file = findFirstFile( %path ); %file !$= ""; %file = findNextFile( %path ) )
{
%this.add( getBlockData(%file,"Campaign",1,"Name"), %count);
%count++;
}
//Uber Dynamic Campaign Listing :)
%path = "Data/Campaigns/*.dat";
%count = 0;
if (!IsObject(CampaignLoader))
new ScriptObject(CampaignLoader) { class = "BasicDataParser"; };
CampaignLoader.empty();
CampaignLoader.load(%file);
for( %file = findFirstFile( %path ); %file !$= ""; %file = findNextFile( %path ) )
{
CampaignLoader.load(%file);
%this.add( CampaignLoader.get("Campaign",%count).element("Name"), %count);
%count++;
}
}
//------------------------------------------------------------------------------
function TrainingSelectMenu::onSelect( %this, %id, %text )
{
$Pref::Campaign = %text;
$Pref::Campaign = %text;
%row = TrainingMissionList.getSelectedID() - 1;
TrainingGui.updateList();
TrainingGui.stopBriefing();
TrainingSelectMenu.setText(%text); //Make sure our text is assigned..
%row = TrainingMissionList.getSelectedID() - 1;
TrainingGui.updateList();
TrainingGui.stopBriefing();
TrainingSelectMenu.setText(%text); //Make sure our text is assigned..
if ($Pref::Campaign $= %text)
TrainingMissionList.setSelectedRow(%row);
else
TrainingMissionList.setSelectedRow(0);
if ($Pref::Campaign $= %text)
TrainingMissionList.setSelectedRow(%row);
else
TrainingMissionList.setSelectedRow(0);
}
//------------------------------------------------------------------------------
function TrainingMissionList::onSelect( %this, %id, %text )
{
TrainingGui.stopBriefing();
%fileName = "missions/" @ getField( %text, 1 ) @ ".mis";
%file = new FileObject();
%state = 0;
if ( %file.openForRead( %fileName ) )
{
%fileName = "missions/" @ getField( %text, 1 ) @ ".mis";
%file = new FileObject();
%state = 0;
if ( %file.openForRead( %fileName ) )
{
// Get the mission briefing text:
while ( !%file.isEOF() )
{
%line = %file.readLine();
if ( %state == 0 && %line $= "//--- MISSION BRIEFING BEGIN ---" )
%state = 1;
else if ( %state > 0 && %line $= "//--- MISSION BRIEFING END ---" )
break;
else if ( %state == 1 )
while ( !%file.isEOF() )
{
%line = %file.readLine();
if ( %state == 0 && %line $= "//--- MISSION BRIEFING BEGIN ---" )
%state = 1;
else if ( %state > 0 && %line $= "//--- MISSION BRIEFING END ---" )
break;
else if ( %state == 1 )
{
%briefText = %briefText @ getSubStr( %line, 2, 1000 );
%briefText = %briefText @ getSubStr( %line, 2, 1000 );
%state = 2;
}
else if ( %state == 2 )
%briefText = %briefText NL getSubStr( %line, 2, 1000 );
}
else if ( %state == 2 )
%briefText = %briefText NL getSubStr( %line, 2, 1000 );
}
// Get the mission briefing WAV file:
while ( !%file.isEOF() )
{
%line = %file.readLine();
%line = %file.readLine();
if ( getSubStr( %line, 0, 17 ) $= "// BriefingWAV = " )
{
{
%briefWAV = getSubStr( %line, 17, 1000 );
break;
}
break;
}
}
// Get the bitmap name:
while ( !%file.isEOF() )
{
%line = %file.readLine();
%line = %file.readLine();
if ( getSubStr( %line, 0, 12 ) $= "// Bitmap = " )
{
{
%briefPic = getSubStr( %line, 12, 1000 );
break;
}
break;
}
}
%file.close();
}
}
else
error( "Failed to open Single Player mission file " @ %fileName @ "!" );
@ -227,14 +221,12 @@ function TrainingMissionList::onSelect( %this, %id, %text )
}
TrainingPlayBtn.setActive( %briefWAV !$= "" );
TrainingBriefingText.setValue( %briefText );
TrainingBriefingText.setValue( %briefText );
TrainingBriefingScroll.scrollToTop();
TrainingGui.WAVBase = firstWord( %briefWAV );
TrainingGui.WAVCount = restWords( %briefWAV );
%file.delete();
//if ( TrainingPlayTgl.getValue() )
// TrainingGui.startBriefing();
%file.delete();
return true;
}
//------------------------------------------------------------------------------

View file

@ -472,8 +472,10 @@ function AIConnection::onAIConnect(%client, %name, %team, %skill, %offense, %voi
echo(%client.name);
echo("CADD: " @ %client @ " " @ %client.getAddress());
if ($CurrentMissionType !$= "RPG") //If it's RPG, don't increment the count
$HostGamePlayerCount++;
// DDDX: Don't increment player count in RPG/Survival Games
if ($CurrentMissionType !$= "RPG" && $CurrentMissionType !$= "SV")
$HostGamePlayerCount++;
//set the initial team - Game.assignClientTeam() should be called later on...
%client.team = %team;
@ -908,5 +910,3 @@ function AIPilotVehicle(%client)
{
//this is not very well supported, but someone will find a use for this function...
}

View file

@ -16,11 +16,13 @@ function aiConnectByIndex(%index, %team)
if ($BotProfile[%index, Voice] $= "")
$BotProfile[%index, Voice] = "Bot1";
%skin[0] = 'BaseBot';
%skin[1] = 'BaseBBot';
%skin[0] = "BaseBot";
%skin[1] = "BaseBBot";
if ($BotProfile[%index, Skin] $= '')
$BotProfile[%index, Skin] = %skin[getRandom(0,1)];
$BotProfile[%index, Skin] = addTaggedString($BotProfile[%index, Skin]);
//$BotProfile[%index, Voice] = addTaggedString($BotProfile[%index, Voice]);
%client = aiConnect($BotProfile[%index, name], %team, $BotProfile[%index, skill], $BotProfile[%index, offense], $BotProfile[%index, voice], $BotProfile[%index, voicePitch]);
%client.skin = $BotProfile[%index, skin];
@ -251,304 +253,27 @@ function aiConnectMultiple(%numToConnect, %minSkill, %maxSkill, %team)
}
}
//Notes:
//Ai Bot profiles: Balance out difficulties and settings.
//Draakans and Derms make up most of the AI list
//Human
$BotProfile[0, name] = "Dalaila Hayes";
$BotProfile[0, skill] = 0.95;
$BotProfile[0, offense] = true;
$BotProfile[0, voicePitch] = 0.875;
$BotProfile[0, race] = "Human";
$BotProfile[0, skin] = 'Swolf';
$BotProfile[0, voice] = "Fem3";
$BotProfile[0, sex] = "Female";
$BotProfile[1, name] = "Cynthia Fisher";
$BotProfile[1, skill] = 0.95;
$BotProfile[1, offense] = true;
$BotProfile[1, voicePitch] = 0.875;
$BotProfile[1, race] = "Human";
$BotProfile[1, skin] = "Swolf";
$BotProfile[1, voice] = "Fem3";
$BotProfile[1, sex] = "Female";
$BotProfile[2, name] = "Commander Jackson";
$BotProfile[2, skill] = 0.95;
$BotProfile[2, offense] = true;
$BotProfile[2, voicePitch] = 0.875;
$BotProfile[2, race] = "Human";
$BotProfile[2, skin] = 'Beagle';
$BotProfile[2, voice] = "Male5";
$BotProfile[2, sex] = "Male";
$BotProfile[3, name] = "Corperal Jones";
$BotProfile[3, skill] = 0.95;
$BotProfile[3, offense] = true;
$BotProfile[3, voicePitch] = 0.875;
$BotProfile[3, race] = "Human";
$BotProfile[3, skin] = 'Beagle';
$BotProfile[3, voice] = "Male5";
$BotProfile[3, sex] = "Male";
//BioDerm
$BotProfile[4, name] = "Beast";
$BotProfile[4, skill] = 0.95;
$BotProfile[4, offense] = true;
$BotProfile[4, voicePitch] = 0.875;
$BotProfile[4, race] = "Bioderm";
$BotProfile[4, skin] = 'Horde';
$BotProfile[4, voice] = "Derm3";
$BotProfile[4, sex] = "Male";
$BotProfile[5, name] = "Retch";
$BotProfile[5, skill] = 0.78;
$BotProfile[5, offense] = false;
$BotProfile[5, voicePitch] = 0.789;
$BotProfile[5, race] = "Bioderm";
$BotProfile[5, skin] = 'Horde';
$BotProfile[5, voice] = "Derm2";
$BotProfile[6, name] = "Hagstomper";
$BotProfile[6, skill] = 0.78;
$BotProfile[6, offense] = false;
$BotProfile[6, voicePitch] = 0.789;
$BotProfile[6, race] = "Bioderm";
$BotProfile[6, skin] = 'Horde';
$BotProfile[6, voice] = "Derm2";
$BotProfile[6, name] = "Doormat";
$BotProfile[6, skill] = 0.78;
$BotProfile[6, offense] = false;
$BotProfile[6, voicePitch] = 0.789;
$BotProfile[6, race] = "Bioderm";
$BotProfile[6, skin] = 'Horde';
$BotProfile[6, voice] = "Derm2";
$BotProfile[7, name] = "Evenkill";
$BotProfile[7, skill] = 0.78;
$BotProfile[7, offense] = false;
$BotProfile[7, voicePitch] = 0.789;
$BotProfile[7, race] = "Bioderm";
$BotProfile[7, skin] = 'Horde';
$BotProfile[7, voice] = "Derm2";
$BotProfile[8, name] = "Heart Eater";
$BotProfile[8, skill] = 0.78;
$BotProfile[8, offense] = false;
$BotProfile[8, voicePitch] = 0.789;
$BotProfile[8, race] = "Bioderm";
$BotProfile[8, skin] = 'Horde';
$BotProfile[8, voice] = "Derm2";
$BotProfile[9, name] = "Torox the Backbreaker";
$BotProfile[9, skill] = 0.78;
$BotProfile[9, offense] = false;
$BotProfile[9, voicePitch] = 0.789;
$BotProfile[9, race] = "Bioderm";
$BotProfile[9, skin] = 'Horde';
$BotProfile[9, voice] = "Derm2";
$BotProfile[10, name] = "Face Breaker";
$BotProfile[10, skill] = 0.78;
$BotProfile[10, offense] = false;
$BotProfile[10, voicePitch] = 0.789;
$BotProfile[10, race] = "Bioderm";
$BotProfile[10, skin] = 'Horde';
$BotProfile[10, voice] = "Derm2";
$BotProfile[11, name] = "Monkey Bones";
$BotProfile[11, skill] = 0.78;
$BotProfile[11, offense] = false;
$BotProfile[11, voicePitch] = 0.789;
$BotProfile[11, race] = "Bioderm";
$BotProfile[11, skin] = 'Horde';
$BotProfile[11, voice] = "Derm2";
$BotProfile[12, name] = "Breath of Fear";
$BotProfile[12, skill] = 0.78;
$BotProfile[12, offense] = false;
$BotProfile[12, voicePitch] = 0.789;
$BotProfile[12, race] = "Bioderm";
$BotProfile[12, skin] = 'Horde';
$BotProfile[12, voice] = "Derm2";
$BotProfile[13, name] = "Devours-All";
$BotProfile[13, skill] = 0.78;
$BotProfile[13, offense] = false;
$BotProfile[13, voicePitch] = 0.789;
$BotProfile[13, race] = "Bioderm";
$BotProfile[13, skin] = 'Horde';
$BotProfile[13, voice] = "Derm2";
$BotProfile[14, name] = "Skullcrusher";
$BotProfile[14, skill] = 0.78;
$BotProfile[14, offense] = false;
$BotProfile[15, voicePitch] = 0.789;
$BotProfile[16, race] = "Bioderm";
$BotProfile[17, skin] = 'Horde';
$BotProfile[18, voice] = "Derm2";
//Draakan (Eh.. their real names use the derms' from SPDialog.cs) -- Most have their own backStory, but some are just here to take up room
//My personal picks: Dolosus (duh?), Sharp Tooth, and Iguana
$BotProfile[19, name] = "Dolosus"; //Dolosus Irokhirr Zhor
$BotProfile[19, skill] = 0.95;
$BotProfile[19, offense] = true;
$BotProfile[19, voicePitch] = 0.875;
$BotProfile[19, race] = "Draakan";
$BotProfile[19, skin] = 'Gecko';
$BotProfile[19, voice] = "Derm3";
$BotProfile[19, sex] = "A";
$BotProfile[20, name] = "Rex"; //#367378 (Genetic failure)
$BotProfile[20, skill] = 0.89;
$BotProfile[20, offense] = true;
$BotProfile[20, voicePitch] = 0.781;
$BotProfile[20, race] = "Draakan";
$BotProfile[20, skin] = 'Gecko';
$BotProfile[20, voice] = "Derm2";
$BotProfile[20, sex] = "A";
$BotProfile[21, name] = "Raptor"; //Hrreshig "Raptor" Kolkhris
$BotProfile[21, skill] = 0.88;
$BotProfile[21, offense] = true;
$BotProfile[21, voicePitch] = 0.972;
$BotProfile[21, race] = "Draakan";
$BotProfile[21, skin] = 'Gecko';
$BotProfile[21, voice] = "Derm2";
$BotProfile[21, sex] = "A";
$BotProfile[22, name] = "Iguana"; //Marakh "Iguana" Azarok
$BotProfile[22, skill] = 0.45;
$BotProfile[22, offense] = false;
$BotProfile[22, voicePitch] = 0.673;
$BotProfile[22, race] = "Draakan";
$BotProfile[22, skin] = 'Gecko';
$BotProfile[22, voice] = "Derm1";
$BotProfile[22, sex] = "A";
$BotProfile[23, name] = "Sharp Tooth"; //Murkhofud "Sharp Tooth" Khel
$BotProfile[23, skill] = 0.89;
$BotProfile[23, offense] = true;
$BotProfile[23, voicePitch] = 0.875;
$BotProfile[23, race] = "Draakan";
$BotProfile[23, skin] = 'Gecko';
$BotProfile[23, voice] = "Derm1";
$BotProfile[23, sex] = "A";
$BotProfile[24, name] = "Snake"; //Morax "Snake" Serexhar
$BotProfile[24, skill] = 0.78;
$BotProfile[24, offense] = false;
$BotProfile[24, voicePitch] = 1;
$BotProfile[24, race] = "Draakan";
$BotProfile[24, skin] = 'Gecko';
$BotProfile[24, voice] = "Derm2";
$BotProfile[24, sex] = "A";
$BotProfile[25, name] = "Gila"; //Gorog "Gila" Jok
$BotProfile[25, skill] = 0.80;
$BotProfile[25, offense] = true;
$BotProfile[25, voicePitch] = 0.578;
$BotProfile[25, race] = "Draakan";
$BotProfile[25, skin] = 'Gecko';
$BotProfile[25, voice] = "Derm1";
$BotProfile[25, sex] = "B";
$BotProfile[26, name] = "Cobra"; //Karghaz "Cobra" Tumoz
$BotProfile[26, skill] = 0.80;
$BotProfile[26, offense] = true;
$BotProfile[26, voicePitch] = 0.578;
$BotProfile[26, race] = "Draakan";
$BotProfile[26, skin] = 'Gecko';
$BotProfile[26, voice] = "Derm1";
$BotProfile[26, sex] = "C";
$BotProfile[27, name] = "Viper"; //Malevolox "Viper" Zon
$BotProfile[27, skill] = 0.80;
$BotProfile[27, offense] = true;
$BotProfile[27, voicePitch] = 0.578;
$BotProfile[27, race] = "Draakan";
$BotProfile[27, skin] = 'Gecko';
$BotProfile[27, voice] = "Derm1";
$BotProfile[27, sex] = "A";
$BotProfile[27, name] = "Komodo Dragon";
$BotProfile[27, skill] = 0.80;
$BotProfile[27, offense] = true;
$BotProfile[27, voicePitch] = 0.578;
$BotProfile[27, race] = "Draakan";
$BotProfile[27, skin] = 'Gecko';
$BotProfile[27, voice] = "Derm1";
$BotProfile[27, sex] = "C";
$BotProfile[27, name] = "Red Dragon";
$BotProfile[27, skill] = 0.78;
$BotProfile[27, offense] = false;
$BotProfile[27, voicePitch] = 0.789;
$BotProfile[27, race] = "Draakan";
$BotProfile[27, skin] = 'Gecko';
$BotProfile[27, voice] = "Derm2";
$BotProfile[27, sex] = "A";
$BotProfile[29, name] = "Torus";
$BotProfile[29, skill] = 0.78;
$BotProfile[29, offense] = false;
$BotProfile[29, voicePitch] = 0.789;
$BotProfile[29, race] = "Draakan";
$BotProfile[29, skin] = 'Gecko';
$BotProfile[29, voice] = "Derm2";
$BotProfile[29, sex] = "A";
$BotProfile[30, name] = "Slicer";
$BotProfile[30, skill] = 0.78;
$BotProfile[30, offense] = false;
$BotProfile[30, voicePitch] = 0.789;
$BotProfile[30, race] = "Draakan";
$BotProfile[30, skin] = 'Gecko';
$BotProfile[30, voice] = "Derm3";
$BotProfile[30, sex] = "C";
$BotProfile[31, name] = "Achilles";
$BotProfile[31, skill] = 0.78;
$BotProfile[31, offense] = false;
$BotProfile[31, voicePitch] = 0.789;
$BotProfile[31, race] = "Criollos";
$BotProfile[31, skin] = 'HALO_SKIN';
$BotProfile[31, voice] = "Derm2";
$BotProfile[32, name] = "King Snake";
$BotProfile[32, skill] = 0.78;
$BotProfile[32, offense] = false;
$BotProfile[32, voicePitch] = 0.789;
$BotProfile[32, race] = "Draakan";
$BotProfile[32, skin] = 'Gecko';
$BotProfile[32, voice] = "Derm2";
$BotProfile[32, sex] = "A";
$BotProfile[33, name] = "Troglodyte";
$BotProfile[33, skill] = 0.78;
$BotProfile[33, offense] = false;
$BotProfile[33, voicePitch] = 0.789;
$BotProfile[33, race] = "Draakan";
$BotProfile[33, skin] = 'Gecko';
$BotProfile[33, voice] = "Derm2";
$BotProfile[33, sex] = "A";
//Criollos (Wow.. only two of them)
$BotProfile[34, name] = "Alchaldes";
$BotProfile[34, skill] = 0.78;
$BotProfile[34, offense] = false;
$BotProfile[34, voicePitch] = 0.789;
$BotProfile[34, race] = "Criollos";
$BotProfile[34, skin] = 'HALO_SKIN';
$BotProfile[34, voice] = "Derm2";
$BotProfile[35, name] = "Hammurabi";
$BotProfile[35, skill] = 0.78;
$BotProfile[35, offense] = false;
$BotProfile[35, voicePitch] = 0.789;
$BotProfile[35, race] = "Criollos";
$BotProfile[35, skin] = 'HALO_SKIN';
$BotProfile[35, voice] = "Derm2";
$BotProfile::Count = 35;
function aiReloadProfiles()
{
if (!IsObject(BotProfiles))
new ScriptObject(BotProfiles) { class = "BasicDataParser"; };
BotProfiles.empty();
BotProfiles.load("prefs/Bot Profiles.conf");
%count = BotProfiles.count("Bot");
for (%i = 0; %i < %count; %i++)
{
%Entry = BotProfiles.get("Bot",%i);
$BotProfile[%i, name] = %Entry.element("Name");
$BotProfile[%i, skill] = %Entry.element("skill");
$BotProfile[%i, offense] = %Entry.element("offense");
$BotProfile[%i, voicePitch] = %Entry.element("voicePitch");
$BotProfile[%i, race] = %Entry.element("race");
$BotProfile[%i, skin] = %Entry.element("skin");
$BotProfile[%i, voice] = %Entry.element("voice");
$BotProfile[%i, sex] = %Entry.element("sex");
}
$BotProfile::Count = %count;
warn("scripts/aiBotProfiles.cs: Loaded" SPC %count SPC "bot profiles.");
return true;
}
aiReloadProfiles();

26
scripts/aiNS.cs Normal file
View file

@ -0,0 +1,26 @@
function BOLGame::AIInit(%game)
{
//call the default AIInit() function
AIInit();
}
function BOLGame::onAIRespawn(%game, %client)
{
//add the default task
if (! %client.defaultTasksAdded)
{
%client.defaultTasksAdded = true;
%client.addTask(AIEngageTask);
%client.addTask(AIPickupItemTask);
// %client.addTask(AIUseInventoryTask); They spawn with the stuff they need
%client.addTask(AITauntCorpseTask);
%client.addTask(AIEngageTurretTask);
%client.addtask(AIDetectMineTask);
// %client.addTask(AIPatrolTask); They don't move unless told to
}
//set the inv flag
%client.spawnUseInv = true;
}

View file

@ -338,9 +338,11 @@ function AIUnassignClient(%client)
%client.objective.clientLevel[%client.objectiveLevel] = "";
}
}
%client.objective.unassignClient(%client);
%client.objective = "";
%client.objectiveWeight = 0;
// DDDX: Fixes some console spamming is all
if (isObject(%client.objective))
%client.objective.unassignClient(%client);
%client.objective = "";
%client.objectiveWeight = 0;
}
//debuging - refresh aidebugq() if required

View file

@ -1,50 +1,44 @@
// --------------------------------------------------------
// aiSurvival.cs
// AI scripts for bots in the Survival gamemode
// Copyright (c) 2012 The DarkDragonDX
// ========================================================
function SVGame::AIInit(%game)
{
//call the default AIInit() function
AIInit();
//call the default AIInit() function
AIInit();
return true;
}
function SVGame::onAIRespawn(%game, %client)
{
//add the default task
//add the default task
if (! %client.defaultTasksAdded)
{
%client.defaultTasksAdded = true;
%client.addTask(AIEngageTask);
%client.addTask(AIPickupItemTask);
%client.addTask(AITauntCorpseTask);
%client.addTask(AIEngageTask);
%client.addTask(AIPickupItemTask);
// %client.addTask(AITauntCorpseTask);
%client.addTask(AIEngageTurretTask);
%client.addtask(AIDetectMineTask);
%client.addTask(AIPatrolTask);
// %client.addtask(AIDetectMineTask);
%client.addTask(AIPatrolTask);
}
%client.setSkillLevel(99);
%client.hide();
%client.hideClientInList();
//Now, force the bot to choose a player
%count = clientGroup.getCount();
%rnd = getRandom(0,%count);
%rndcl = clientGroup.getObject(%rnd);
%newObjective = new AIObjective(AIOAttackPlayer)
{
dataBlock = "AIObjectiveMarker";
weightLevel1 = 10000;
description = "Attack Player";
targetClient = %rndcl;
offense = true;
};
//echo(%newObjective);
MissionCleanup.add(%newObjective);
$ObjectiveQ[%client.team].add(%newObjective);
%client.objectiveTask = %newObjective;
%client.addTask(AIAttackPlayer);
%client.bountyTask = %client.addTask(AIBountyEngageTask);
Game.aiCount++;
//set the inv flag
%client.spawnUseInv = true;
}
//Now, force the bot to choose a player
%count = clientGroup.getCount();
%rnd = getRandom(0,%count);
%rndcl = clientGroup.getObject(%rnd);
%client.stepEngage(%rndcl);
Game.aiCount++;
//set the inv flag
%client.spawnUseInv = true;
return true;
}

View file

@ -0,0 +1,30 @@
// #autoload
// #name = GUIML Workaround
// #version = 2.0
// #date = March 1st, 2010
// #category = Fix
// #author = Dark Dragon DX
// #warrior = DarkDragonDX
// #email = DarkDragonDX@Hotmail.com
// #description = Adds a failSafe for the <a:command> tag. Mainly for players that use mods with interactive GUIML elements.
package GUIMLPackage
{
function toggleEditor(%make)
{
parent::toggleEditor(%make); //Call parent function
if (!isActivePackage(GUIMLWorkaround))
activatePackage(GUIMLWorkaround);
}
};
activatePackage(GUIMLPackage);
//Seperate package to activate our new code
package GUIMLWorkaround
{
function GuiMLTextCtrl::onURL(%this, %url)
{
//parent::onURL(%this, %url);
commandToServer('ProcessGameLink',getField(%url,1));
}
};

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
// #autoload
// #name = Terrain UE Prevent
// #version = 1.0
// #date = Saturday, July 25, 2009
// #category = Fix
// #author = Dark Dragon DX
// #warrior = DarkDragonDX
// #email = DarkDragonDX@Hotmail.com
// #description = A "prevention" for when you open the command Circuit on a map without terrain and UE. (Like ANTS)
package TerrainFix
{
function toggleCommanderMap(%val)
{
%count = ServerConnection.getCount();
for (%i = 0; %i < %count; %i++) //Search for my terrain..
{
%obj = ServerConnection.getObject(%i); //Get the object
if (%obj != -1) //No console spam
if (%obj.getClassName() $= "TerrainBlock") //Is it terrain?
{
parent::toggleCommanderMap(%val); //Win
return true;
}
}
messageBoxOk("Error","Unable to open command circuit, no terrain exists."); //Tell me
return false;
}
};
activatePackage(TerrainFix);

View file

@ -0,0 +1,67 @@
// #autoload
// #name = Debug Log
// #version = 1.0
// #category = Utility
// #warrior = DarkDragonDX
// #description = Adds a debug log.
package debugLog
{
function echo(%arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10)
{
if (!IsObject(DebugLogger))
{
new FileObject(DebugLogger);
DebugLogger.lineCount = 0;
DebugLogger.openForWrite("debugLog.txt");
}
if (DebugLogger.lineCount >= 10)
{
DebugLogger.close();
DebugLogger.openForAppend("debugLog.txt");
}
DebugLogger.writeLine(%arg1 @ %arg2 @ %arg3 @ %arg4 @ %arg5 @ %arg6 @ %arg7 @ %arg8 @ %arg9 @ %arg10);
DebugLogger.lineCount++;
parent::echo(%arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10);
return true;
}
function error(%arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10)
{
if (!IsObject(DebugLogger))
{
new FileObject(DebugLogger);
DebugLogger.lineCount = 0;
DebugLogger.openForWrite("debugLog.txt");
}
if (DebugLogger.lineCount >= 10)
{
DebugLogger.close();
DebugLogger.openForAppend("debugLog.txt");
}
DebugLogger.writeLine("Error: " @ %arg1 @ %arg2 @ %arg3 @ %arg4 @ %arg5 @ %arg6 @ %arg7 @ %arg8 @ %arg9 @ %arg10);
DebugLogger.lineCount++;
parent::error(%arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10);
return true;
}
function warning(%arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10)
{
if (!IsObject(DebugLogger))
{
new FileObject(DebugLogger);
DebugLogger.lineCount = 0;
DebugLogger.openForWrite("debugLog.txt");
}
if (DebugLogger.lineCount >= 10)
{
DebugLogger.close();
DebugLogger.openForAppend("debugLog.txt");
}
DebugLogger.writeLine("Warning: " @ %arg1 @ %arg2 @ %arg3 @ %arg4 @ %arg5 @ %arg6 @ %arg7 @ %arg8 @ %arg9 @ %arg10);
DebugLogger.lineCount++;
parent::warning(%arg1, %arg2, %arg3, %arg4, %arg5, %arg6, %arg7, %arg8, %arg9, %arg10);
return true;
}
};
activatePackage(debugLog);

View file

@ -9,24 +9,45 @@
// #description = Adds a new command-line to Tribes 2 for shortcuts: -safeMode
// #status = Release
package SafeMode{
function DispatchLaunchMode()
package SafeModeOverrides
{
parent::DispatchLaunchMode();
function TCPObject::onLine(){ return true;}
function TCPObject::connect(){ return true; }
function TCPObject::disconnect(){ return true; }
function TCPObject::listen(){ return true; }
function TCPObject::send(){ return true; }
// check T2 command line arguments
for(%i = 1; %i < $Game::argc ; %i++)
{
%arg = $Game::argv[%i];
%nextArg = $Game::argv[%i+1];
%hasNextArg = $Game::argc - %i > 1;
function HTTPObject::onLine(){ return true; }
function HTTPObject::connect(){ return true; }
function HTTPObject::disconnect(){ return true; }
function HTTPObject::listen(){ return true; }
function HTTPObject::send(){ return true;}
function HTTPObject::post(){ return true; }
if( !stricmp(%arg, "-Safemode")) //If enabled, cuts off all TCP & HTTP object connections, preventing UE's when running T2 without internet
{
exec("scripts/Safemode.cs");
}
}
}
function SecureHTTPObject::onLine(){ return true; }
function SecureHTTPObject::connect(){ return true; }
function SecureHTTPObject::disconnect(){ return true; }
function SecureHTTPObject::listen(){ return true; }
function SecureHTTPObject::send(){ return true; }
function SecureHTTPObject::post(){ return true; }
};
activatePackage(SafeMode);
package SafeMode
{
function DispatchLaunchMode()
{
parent::DispatchLaunchMode();
// check T2 command line arguments
for(%i = 1; %i < $Game::argc ; %i++)
{
%arg = $Game::argv[%i];
%nextArg = $Game::argv[%i+1];
%hasNextArg = $Game::argc - %i > 1;
if( !stricmp(%arg, "-Safemode")) //If enabled, cuts off all TCP & HTTP object connections, preventing UE's when running T2 without internet
activatePackage(SafeModeOverrides);
}
}
};
activatePackage(SafeMode);

View file

@ -2178,5 +2178,5 @@ function SiegeHalftimeHeaderText::onResize( %this, %width, %height )
//Was moved to client.cs from console_end.cs because alxPlayMusic didn't want to work from console_end.cs for some odd reason ...
if ($pref::Audio::musicEnabled)
alxPlayMusic("T2BOL/Music/Menu.mp3");
alxPlayMusic("T2BOL/Music/Menu.mp3");

View file

@ -1,17 +1,15 @@
//Parse our file blahha!
// Replacement code for the original T2 credits?
if (!isFile("data/creditsText.txt"))
{
exec("scripts/creditsText_default.cs");
}
exec("scripts/creditsText_default.cs");
else
{
%read = new fileObject();
%read.openForRead("data/creditsText.txt");
%read = new fileObject();
%read.openForRead("data/creditsText.txt");
while (!%read.isEOF())
{
%line = %read.readline();
addCreditsLine(%line);
}
%read.detach();
}
while (!%read.isEOF())
{
%line = %read.readline();
addCreditsLine(%line);
}
%read.detach();
}

View file

@ -14,8 +14,9 @@ $DeathMessageCampingCount = 1;
$DeathMessageCamping[0] = '\c0%1 was killed for camping near the Nexus.';
//Out of Bounds deaths
$DeathMessageOOBCount = 1;
$DeathMessageOOBCount = 2;
$DeathMessageOOB[0] = '\c0%1 was killed for loitering outside the mission area.';
$DeathMessageOOB[1] = '\c0%1 was eaten by a Grue.';
$DeathMessageLavaCount = 4;
$DeathMessageLava[0] = '\c0%1\'s last thought before falling into the lava : \'Oops\'.';

View file

@ -1118,6 +1118,9 @@ function DefaultGame::forceObserver( %game, %client, %reason )
}
case "spawnTimeout":
// DDDX: Fix for AI's derping this up
if (!IsObject(%client))
return;
%client.camera.getDataBlock().setMode( %client.camera, "observerTimeout" );
messageClient(%client, 'MsgClientJoinTeam', '\c2You have been placed in observer mode due to delay in respawning.', %client.name, %game.getTeamName(0), %client, 0 );
logEcho(%client.nameBase@" (cl "@%client@") was placed in observer mode due to spawn delay");
@ -1158,8 +1161,13 @@ function DefaultGame::displayDeathMessages(%game, %clVictim, %clKiller, %damageT
// z0dd - ZOD, 6/18/02. From Panama Jack, send the damageTypeText as the last varible
// in each death message so client knows what weapon it was that killed them.
%victimGender = (%clVictim.sex $= "Male" ? 'him' : 'her');
%victimPoss = (%clVictim.sex $= "Male" ? 'his' : 'her');
// Handle Draakan genders
%victimSex = %clVictim.sex;
if (%victimSex $= "A" || %victimSex $= "B" || %victimSex $= "C")
%victimSex = "Male";
%victimGender = (%victimSex $= "Male" ? 'him' : 'her');
%victimPoss = (%victimSex $= "Male" ? 'his' : 'her');
%killerGender = (%clKiller.sex $= "Male" ? 'him' : 'her');
%killerPoss = (%clKiller.sex $= "Male" ? 'his' : 'her');
%victimGenderPoss = (%clVictim.sex $= "Male" ? 'he' : 'she');
@ -3429,7 +3437,8 @@ function DefaultGame::processGameLink(%game, %client, %arg1, %arg2, %arg3, %arg4
{
messageClient( %client, 'ClearHud', "", 'scoreScreen', 0 );
%client.isViewingStatistics = false;
CTFGame::updateScoreHud(%game,%client,'scoreHud');
//CTFGame:updateScoreHud:(%game,%client,'scoreHud');
Game.updateScoreHud(%game,%client,'scoreHud');
}
}

View file

@ -0,0 +1,2 @@
These scripts are the internal functioning of the T2BoL mod. It is recommended you don't touch these and just use the BASIC API
to make your changes to the game.

View file

@ -0,0 +1,334 @@
//------------------------------------------------------------------------------
// Scripts/RPGBrowserGUI.cs
// One of the highlights of T2Bol.
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPGBrowserGui::onWake(%this)
{
if (RPGBrowserGui.pane $= "")
RPG_NewsPane.onActivate();
LaunchTabView.viewTab( "MOD BROWSER", RPGBrowserGui, 0 );
Canvas.pushDialog( LaunchToolbarDlg );
// This is essentially an "isInitialized" flag...
if ( RPG_TabView.tabCount() == 0 )
{
RPG_TabView.addSet(1, "gui/shll_horztabbuttonB", "5 5 5", "50 50 0", "5 5 5" );
RPG_TabView.addTab(1,"NEWS",1);
RPG_TabView.setSelected( 1 );
RPG_TabView.addTab(2,"ENCYCLOPEDIA");
RPG_TabView.addTab(3,"DOWNLOADS");
RPG_TabView.setTabActive(3,0);
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPGBrowserGui::onSleep(%this)
{
%ctrl = "RPG_" @ %this.pane @ "Pane";
if ( isObject( %ctrl ) )
%ctrl.onDeactivate();
}
//------------------------------------------------------------------------------
function BrowserDoSave() //A good ol' converter for browser files. Should work on ANY browser file. Including ones that you insert yourself.
{
%file = new fileObject();
%item = RPG_ItemList.getValue();
%category = RPG_Category.getValue();
%file.openForWrite("savedDocs/" @ %item @ ".txt");
%read = new fileObject();
%read.openForRead("Data/Browser/" @ %category @ "/" @ %item @ ".txt");
%skip = false;
while (!%read.isEOF())
{
%line = %read.readLine();
%lineTest = strLwr(strReplace(%line," ","")); //strip spaces to test for tags to skip
%spush = getSubStr(%lineTest,0,7);
%just = getSubStr(%lineTest,0,6);
//Ok.. we need to cipher out some useless information before we're through
if (%just !$= "<just:")
{
if (%spush $= "<spush>")
%skip = true;
if (%skip == true) //Try to find our <spop> tag
{
%search = strStr(%lineTest,"<spop>");
if (%search != -1)
%skip = false; //We found our <spop> tag, set %skip to false for the next turn
}
else //Otherwise the data is safe -- but we still got to look for my special <a:select> tag
{
%select = strStr(%lineTest,"<a:select");
if (%select != -1) //It exists -- we must convert it
{
%line = strReplace(%line,"-","\t"); //Apparently special tags don't work when read from a file, so the negative sign represents \t
%tag = strStr(%line,"<a:select"); //Find the position of my select tag
if (%tag != -1) //Ok, it exists. We need to grab our entire tag as a string
{
%start = strStr(%line,"<");
for (%i = 0; %i < strLen(%line); %i++)
{
%testC = getSubStr(%line, %i + %start, 3);
if (%testC $= "</a")
{
%end = %i;
break;
}
}
}
}
if (%line !$= "") //If the line is totally blank, don't do shit. Otherwise, attempt to space out the file (for easier read)
{
for (%i = 0; %i < strLen(%line); %i++) //Was up a little higher in the function; figured it should be moved down here
{
%test = getSubStr(%line,%i,9);
if (%test $= "<a:select") //We found a select tag.
{
%start = %i;
%end = strLen(%line) - strStr(%line,"</a>") - 3;
%test = getSubStr(%line,%start,%end);
%str = getWord(%test,0);
%line = strReplace(%line,%str,getNameFromSelectTag(%str));
}
}
for (%i = 0; %i < strLen(%line); %i++)
{
%sub = getSubStr(%line, %i, 1);
if (%sub $= ".") //Ok, we found a period. %i is where we are in the string. So we grab everything up until this period and move on
{
%file.writeLine(getSubStr(%line, 0, %i+1));
%line = getSubStr(%line, %i+1, strLen(%line));
}
}
}
}
}
}
//Detach our file objects (scripts/fileProcessing.cs)
%file.detach();
%read.detach();
messageBoxOk("SUCCESS","The contents of item "@%item@" in category "@%category@" have been saved. Check your mod Directory's sub-dir, /savedDocs for "@%item@".txt."); //YES! After all that the file should be good.
return true;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function getNameFromSelectTag(%string) //Since the tag should be directly inserted, there is no start.
{
%len = strLen(%string);
%start = strStr(%string,">");
%end = strStr(%string,"</a>");
%sub = getSubStr(%string,%start,%end);
%sub = stripTrailingSpaces(stripChars(strReplace(%sub,"</a>",""),">"));
return %sub;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPGBrowserGui::setKey( %this, %key )
{
// To avoid console error
}
//------------------------------------------------------------------------------
function RPGBrowserGui::onClose( %this, %key )
{
// To avoid console error
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// News pane:
//------------------------------------------------------------------------------
function RPG_NewsPane::onActivate(%this)
{
RPGBrowserGui.pane = "News";
}
//------------------------------------------------------------------------------
function RPG_NewsPane::onDeactivate(%this)
{
//RPGBrowserGui.pane = "News";
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Browser pane:
//------------------------------------------------------------------------------
function RPG_BrowserPane::onActivate(%this)
{
RPGBrowserGui.pane = "Browser";
RPG_Category.PopulateList();
//Make sure our DL button is properly placed (resolution may have changed)
RPG_DownloadButton.setPosition("5", getWord(Canvas.getExtent(), 1) - 163);
RPG_BrowserPane.refresh();
}
//------------------------------------------------------------------------------
function RPG_BrowserPane::Refresh(%this,%val)
{
//Ok, we must make the browser dynamic for convenience.
%text = RPG_Category.getText();
if (%text $= "Select Category" || %text $= "")
return RPG_Text.readFromFile("Data/Browser/Introduction.txt");
RPG_ItemList.clear();
%path = "Data/Game/" @ %text @ "/*.des";
%count = 0;
for( %file = findFirstFile( %path ); %file !$= ""; %file = findNextFile( %path ) )
{
%name = getFileNameFromString(strReplace(%file,".des","")); //Get the fileName from our string (used in the item List)
if (%name !$= "Introduction")
{
RPG_ItemList.addRow(%count, %name);
%count++;
}
}
RPG_ItemList.sortNumerical(0,0); //Sort the items from A-Z
//RPG_ItemList.setSelectedRow(RPG_ItemList.findTextIndex($Browser::SelectedText));
RPG_ItemList.setSelectedRow(RPGBrowserGUI.selectedID[%text]);
}
//------------------------------------------------------------------------------
function RPG_BrowserPane::onDeactivate(%this)
{
//RPGBrowserGui.pane = "Browser";
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Downloads pane:
//------------------------------------------------------------------------------
function RPG_DownloadsPane::onActivate(%this)
{
RPGBrowserGui.pane = "Downloads";
}
//------------------------------------------------------------------------------
function RPG_DownloadsPane::onDeactivate(%this)
{
//RPGBrowserGui.pane = "Downloads";
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPG_TabView::onSelect( %this, %id, %text )
{
RPG_BrowserPane.setVisible( %id == 2 );
RPG_NewsPane.setVisible( %id == 1 );
%ctrl = "RPG_" @ RPGBrowserGui.pane @ "Pane";
if ( isObject( %ctrl ) )
%ctrl.onDeactivate();
switch ( %id )
{
case 1: // News
RPG_NewsPane.onActivate();
case 2: // Encyclopedia
RPG_BrowserPane.onActivate();
case 3: // Downloads
RPG_DownloadsPane.onActivate();
}
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPG_Category::PopulateList() //Listing is now alphabatized
{
RPG_Category.clear();
%file = "Data/Game/encyclopediaData.txt";
%count = getBlockData(%file,"Encyclopedia",1,"categoryCount");
RPG_Category.count = %count;
for (%i = 0; %i < %count; %i++)
{
%category = getBlockData(%file,"Encyclopedia",1,"category" @ %i);
RPG_Category.add(%category,%i);
}
if (RPG_Category.selected !$= "") //Fixes the category dropdown resetting
RPG_Category.setSelected(RPG_Category.selected);
else
RPG_Category.setValue("Select Category");
//Force the browser to have an introduction.
RPG_Text.readFromFile("Data/Game/Encyclopedia_Intro.des");
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPG_Category::onSelect(%this, %id, %text)
{
RPG_ItemList.clear();
RPG_Text.setValue("");
RPG_Category.selected = %id;
RPG_Text.readFromFile("Data/Game/" @ %text @ "/Introduction.des"); //Display the intro for the category we selected
RPG_BrowserPane.refresh();
if (RPG_ItemList.getSelectedID() == -1) //Does our button really need to be inactive?
RPG_DownloadButton.setActive(false); //YES!
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPG_ItemList::onSelect(%this, %id, %text)
{
$Browser::SelectedText = %text;
RPG_DownloadButton.setActive(true);
%category = RPG_Category.getvalue();
RPGBrowserGUI.selectedID[%category] = %id;
RPG_Text.readFromFile("Data/Game/" @ %category @ "/" @ %text @ ".des");
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
function RPG_Text::readFromFile(%this,%file)
{
RPG_Text.setValue(""); //Clear the info, for some odd reason .clear() won't work..
if (!IsFile(%file))
return -1;
%fileobj = new FileObject();
%fileobj.openForRead(%file);
while (!%fileobj.isEOF())
{
%line = %fileobj.readLine() @ "\n";
RPG_Text.addText(%line,1);
}
%fileobj.detach();
}
//------------------------------------------------------------------------------
RPG_DownloadButton.setActive(false); //Eh.. for some reason setting isActive in the GUI file isn't working

Some files were not shown because too many files have changed in this diff Show more