// -=- MyBind -=-
function myBind(%k, %m, %b)
{
if (%m=="") %m = "$x='';";
if (%b=="") %b = "$x='';";
%k[0] = getword(%k, 0);
%k[1] = getword(%k, 1);
%keys = "\"" @ %k[0] @ "\"";
if (%k[1] != "")
%keys = %keys @ ", \"" @ %k[1] @ "\"";
%dev = "keyboard0";
if (String::FindSubStr(%key, "button") != -1)
%dev = "mouse0";
eval("bindCommand(" @ %dev @ ", make, " @ %keys @ ", TO, \"" @ %m @ "\");");
eval("bindCommand(" @ %dev @ ", break, " @ %keys @ ", TO, \"" @ %b @ "\");");
}
// -=- Options -=-
$Jump::Delay = 0.009;
$Waypoint::Target = 1; //1=enemy, 2=friendly, 3=manual
$Zoom::DefaultZoom = 1; //1=2x, 2=5x, 3=10x, 4=20x
$pref::TerrainVisibleDistance = "850";
// -=- Prefs -=-
$pref::SkipIntro = true;
$pref::PlayerFOV = 90;
$pref::noEnterInvStation = true;
$pref::noIpx = true;
$pref::starDetail = 0;
$pref::skyDetail = 1;
$pref::filterBadWords = false;
$pref::NumDecals = 0;
$pref::maxNumSmokePuffs = 999;
$pref::PacketFrame = 32;
$pref::PacketRate = 15;
$pref::PacketSize = 400;
$pref::DefaultRecordDemo=true;
$net::interpolatetime = 0;
$Server::warmupTime = 5;
$Server::respawnTime = 0;
$badwords = "";
// -=- Binds -=-
editActionMap("playMap.sae");
MyBind("space", "Jump::Start();", "Jump::Stop();");
MyBind("1", "Waypoint::TargetFriendly();");
MyBind("2", "Waypoint::TargetEnemy();");
MyBind("m", "DropMines();");
MyBind("e", "Zoom::Zoom();", "Zoom::UnZoom();");
MyBind("z", "Zoom::Cycle();");
MyBind("n", "TV::On();", "TV::Off();");
MyBind("alt home", "$DemoDrop = true;EndGame();");//demodrop
MyBind("up", "DemoHUD(normal);");
MyBind("down", "DemoHUD(pause);");
MyBind("left", "DemoHUD(slower);");
MyBind("right", "DemoHUD(faster);");
bindCommand(mouse0, zaxis0, TO, "nextWeapon();");
bindCommand(mouse0, zaxis1, TO, "prevWeapon();");
MyBind("home", "remoteEval(2048, rememberPosition);");
MyBind("end", "remoteEval(2048, recallPosition);");
MyBind("g", "remoteEval(2048, throwItem, 41, 1000);");
MyBind("capslock", "remoteEval(2048, throwItem, 41, 1);");
MyBind("m", "remoteEval(2048, throwItem, 40, 1000);");
editActionMap("actionMap.sae");
MyBind("f1", "Fav::Set(1, 'HeavyO');");
MyBind("f2", "Fav::Set(2, 'HeavyD');");
MyBind("f3", "Fav::Set(3, 'Farmer');");
MyBind("f4", "Fav::Set(4, 'Capper');");
MyBind("f5", "Fav::Set(5, 'Sniper');");
NewActionMap("Favorite.sae");
EditActionMap("Favorite.sae");
MyBind("1", "Fav::Litter('Turret');");
MyBind("2", "Fav::Litter('Inventory Station');");
MyBind("3", "Fav::Litter('Pulse Sensor');");
MyBind("4", "Fav::Litter('repair pack');");
MyBind("5", "Fav::Litter('repair kit');");
MyBind("numpad1", "buy('ammo pack');");
MyBind("numpad2", "buy('shield pack');");
MyBind("numpad3", "buy('repair pack');");
// -=- Ewww -=-
function substr(%s, %p, %l){return String::GetSubStr(%s, %p, %l);}
function onClientMessage(%cl, %msg)
{
if (!%cl)
{
if ($PlayingDemo) if (String::FindSubStr(%msg, "You couldn't buy Flag") != -1) return false;
if (String::FindSubStr(%msg, "flag") != -1) Flag::Event(%msg);
else if (%msg == "Station Access On") Fav::Enter();
else if (%msg == "Station Access Off") Fav::Exit();
}
return true;
}
function onClientJoin(%cl)
{
$cl::Team[%cl] = Client::GetTeam(%cl);
$Team[$cl::Team[%cl]]++;
CTF::Update();
}
function onClientDrop(%cl)
{
$Team[$cl::Team[%cl]]--;
$cl::Team[%cl] = '';
CTF::Update();
}
function onClientChangeTeam(%cl, %team)
{
$Team[$cl::Team[%cl]]--;
$cl::Team[%cl] = %team;
$Team[%team]++;
CTF::Update();
}
function onMapReset()
{
$Fav::Favorite = 4;
$Flag::Score[0] = $Flag::Score[1] = 0;
$Flag::Status[0] = $Flag::Status[1] = "home";
CTF::Update();
}
function onJoinReset()
{
$Team[-1] = $Team[ 0] = $Team[ 1] = 0;
for (%i=2049; %i<2149; %i++)
if (Client::GetName(%i)!="")
onClientJoin(%i);
$Zoom::Zoom = 2;
Zoom::resetZoom();
$DemoDrop = false;
onMapReset();
}
function onConnection(%msg)
{
$dataFinished = false;
if(%msg == "Accepted")
{
onJoinReset();
resetSimTime();
if ($PCFG::Script != "")exec($PCFG::Script);
resetPlayDelegate();
remoteEval(2048, "SetCLInfo", $PCFG::SkinBase, $PCFG::RealName, $PCFG::EMail, $PCFG::Tribe, $PCFG::URL, 'TSI cheats', $pref::autoWaypoint, $pref::noEnterInvStation, $pref::messageMask);
cursorOn(MainWindow);
GuiLoadContentCtrl(MainWindow, "gui\\Loading.gui");
renderCanvas(MainWindow);
}
else
{
echo("Retry @ " @ timestamp());
schedule("connect($Server::Address);", 0.75);
}
}
function remoteMissionChangeNotify(%cl, %mission)
{
if(%cl == 2048)
{
flushTextureCache();
Schedule("purgeResources(true);", 3);
onMapReset();
}
}
function onExit()
{
Hud::onExit();
if(isObject(playGui))storeObject(playGui, "config\\play.gui");
saveActionMap("config\\config.cs", "actionMap.sae", "playMap.sae");
$pref::VideoFullScreen = isFullScreenMode(MainWindow);
export("Server::*", "config\\ServerPrefs.cs", False);
export("pref::lastMission", "config\\ServerPrefs.cs", True);
export("pref::*", "config\\ClientPrefs.cs", False);
}
function kill(){use('Repair Kit');remoteEval(2048,kill);}
function throwStart(){}
function throwRelease(%desc){remoteEval(2048, throwItem, getItemType(%desc), 1000);}
// -=- Jump -=-
function Jump::Start()
{
if ((Client::GetTeam(getmanagerid()) == -1))
postAction(2048, IDACTION_MOVEUP, 1);
else
{
function Jump::Jump()
{
postAction(2048, IDACTION_MOVEUP, 1);
schedule("Jump::Jump();", $Jump::Delay);
}
Jump::Jump();
}
}
function Jump::Stop(){ function Jump::Jump(){} }
// -=- Team -=-
function Team::Friendly()
{
%team = Client::getTeam(getManagerId());
if (%team == -1)
%team = 0;
return %team;
}
function Team::Enemy(){ return Team::Friendly() ^ 1; }
// -=- Flag -=-
function Flag::GetName(%msg, %search, %teamFlop)
{
if((%idx = String::FindSubStr(%msg, %search)) != -1)
{
%str = substr(%msg, 0, %idx);
if (%str == "You")
%str = Client::getName(getManagerId());
else if (%str == "Your Team")
return ($Flag::Event = false);
$Flag::Name = %str;
$Flag::ClientID = getClientByName(%str);
$Flag::Team = Client::GetTeam($Flag::ClientID) ^ %teamFlop;
return ($Flag::Event = true);
}
return ($Flag::Event = false);
}
function Flag::Event(%msg)
{
if (Flag::GetName(%msg, " took the", 1)) {$Flag::Status[$Flag::Team]=$Flag::ClientID; Waypoint::Event($Flag::Team, $Flag::ClientID);}
else if (Flag::GetName(%msg, " dropped the", 1)) {$Flag::Status[$Flag::Team]="field";$Flag::Timer[$Flag::Team]=476;$Flag::Tag[$Flag::Team]++;Flag::DropTimer($Flag::Team,$Flag::Tag[$Flag::Team]);}
else if (Flag::GetName(%msg, " returned the", 0)) {$Flag::Status[$Flag::Team]="home";}
else if (Flag::GetName(%msg, " captured the", 1)) {$Flag::Status[$Flag::Team]="home";$Flag::Score[$Flag::Team^1]++;}
else if (Flag::GetName(%msg, " left the mission", 1)) {$Flag::Status[$Flag::Team]="home";}
if ($flag::Event) CTF::Update();
}
function Flag::DropTimer(%team, %tag)
{
if (%tag!=$Flag::Tag[%team]) return CTF::Update();
if ($Flag::Status[%team] != "field") return CTF::Update();
$Flag::Tag[%team]++;
if($Flag::Timer[%team]-- <= 0)
{
$Flag::Status[%team] = "home";
CTF::Update();
return;
}
CTF::Update();
Schedule("Flag::DropTimer("@%team@","@$flag::tag[%team]@");", 0.1);
}
function Flag::Timer(%team)
{
%val=$Flag::Timer[%team];
if (%val < 10) %val="00"@%val;
else if (%val < 100) %val="0"@%val;
return (substr(%val, 0, 2) @ "." @ substr(%val, 2, 1));
}
// -=- Hud -=-
DeleteVariables("Hud::*");
$Hud::Count = 0;
function PlayGui::onOpen() {for (%i = 0; %i < $Hud::Count; %i++) { addToSet(playGui, $Hud::[%i]);Schedule($Hud::[%i, wake] @ "();", 0); }}
function PlayGui::onClose(){for (%i = 0; %i < $Hud::Count; %i++){ removeFromSet(playGui, $Hud::[%i]);Schedule($Hud::[%i, sleep] @ "();", 0); }}
function Hud::onExit(){ for (%i = 0; %i < $Hud::Count; %i++){removeFromSet(playGui, $Hud::[%i]);deleteObject($Hud::[%i]);} }
//%type = {FearGui::FearGuiMenu, SimGui::Control}
function Hud::New(%name, %x, %y, %w, %h, %wake, %sleep, %type)
{
if (!$Hud::[%name])
{
%i = ($Hud::Count++ -1);
$Hud::[%i] = newObject(%name, %type, %x, %y, %w, %h);
$Hud::[%i, wake] = %wake;
$Hud::[%i, sleep] = %sleep;
$Hud::[%name] = true;
Control::SetVisible(%name, true);
}
}
// -=- Waypoint -=-
function Waypoint::Event(%team, %client)
{
if ($Waypoint::Target == 3) return;
%friendlyCarrier = ( %team == Team::Enemy() );
%enemyCarrier = ( %team == Team::Friendly() );
if ( ($Waypoint::Target == 2) && (%friendlyCarrier) ) Waypoint::TargetFriendly();
else if ( ($Waypoint::Target == 1) && (%enemyCarrier) ) Waypoint::TargetEnemy();
}
function Waypoint::Target(%cl, %msg, %wav){ if ( %cl != "home" && %cl != "field" && %cl != getManagerId() ) remoteEval(2048, "IssueTargCommand", 0, %msg @ Client::GetName( %cl ) @ %wav, %cl - 2048, getManagerId()); }
function Waypoint::TargetFriendly(){Waypoint::Target($Flag::Status[Team::Enemy()], "Escort: ", "~wescfr");}
function Waypoint::TargetEnemy(){Waypoint::Target($Flag::Status[Team::Friendly()], "Attack: ", "~wattway");}
// -=- Flag Hud -=-
if (!$CTF::Loaded)
{
HUD::New("CTF::Box", 356, 684, 175, 40, CTF::Wake, CTF::Sleep, FearGui::FearGuiMenu);
newObject("CTF::Status0", FearGuiFormattedText, 5, 0, 180, 20);
newObject("CTF::Status1", FearGuiFormattedText, 5, 20, 180, 20);
addToSet("CTF::Box", "CTF::Status0");
addToSet("CTF::Box", "CTF::Status1");
$CTF::Loaded=true;
}
function CTF::SetTeamValue(%slot, %team)
{
%t = $Team[%team];
%s = $Flag::Score[%team];
%l = $Flag::Status[%team];
if (%l == "home") %l = "<f3>Home";
else if (%l == "field") %l = "<f3>Dropped-><f2>" @ Flag::Timer(%team);
else
{
%fixed="";
%l=Client::GetName(%l);
for (%i=0;(%ch=substr(%l, %i, 1)) != ""; %i++)
{
if (%ch=="<") %ch = "\xd7";
%fixed = %fixed @ %ch;
}
%l = "<f2>" @ %fixed;
}
Control::SetValue("CTF::Status" @ %slot, GetWord("F E", %slot)@"-"@%t@" <f3>(<f2>" @ %s @ "<f3>) " @ %l);
}
function CTF::Wake() {CTF::Update();}
function CTF::Sleep() {}
function CTF::Update() {CTF::SetTeamValue(0, Team::Friendly());CTF::SetTeamValue(1, Team::Enemy());}
// -=- Zoom -=-
function Zoom::Zoom(){postAction(2048, IDACTION_SNIPER_FOV, 1.000000);}
function Zoom::UnZoom(){postAction(2048, IDACTION_SNIPER_FOV, 0.000000);Zoom::resetZoom();}
function Zoom::resetZoom(){while($Zoom::Zoom != $Zoom::DefaultZoom) Zoom::Cycle();}
function Zoom::Cycle(){ postAction(2048, IDACTION_INC_SNIPER_FOV, 1.000000);if( $Zoom::Zoom++ > 4 ) $Zoom::Zoom = 1; }
// -=- Favorites -=-
function remoteITXT(%cl, %msg)
{
Control::setValue(EnergyDisplayText, %msg);
$Station = "Inventory";
if(String::findSubStr(%msg, "STATION ENERGY") != -1)
$Station = "RemoteInventory";
}
function Fav::Litter(%item)
{
%type = getItemType(%item);
for (%i = 0; %i < 4; %i++)
Schedule("remoteEval(2048,buyItem," @ %type @ "); remoteEval(2048,dropItem," @ %type @ ");", 0.1);
}
function Fav::Enter()
{
pushActionMap("Favorite.sae");
if ($Station == "Inventory")
{
%type = getItemType("Repair Kit");
for (%i = 0; %i < 8; %i++)
Schedule("remoteEval(2048,useItem," @ %type @ ");remoteEval(2048,buyItem," @ %type @ ");", 0);
}
Fav::Buy($Fav::Favorite);
}
function Fav::Exit(){ popActionMap("Favorite.sae"); $Station = ""; }
function Fav::Buy(%i){ if ($Station != "") schedule("CmdInventoryGui::buyFavorites("@%i@");", 0.1); }
function Fav::Set(%i, %desc){ $Fav::Favorite=%i; Fav::Buy(%i); remoteBP(2048,'<jc><f2>Favorite: <f3>'@%desc,2); }
// -=- TV.cs -=-
function TV::On()
{
%t = Team::Enemy();
%loc = $Flag::Status[%t];
if (%loc=="field"||%loc=="home") %loc=$TV::cl;
if (%loc=="") return;
$TV::cl = %loc;
if(isObject("CommandGui")) renameObject("CommandGui", "_CommandGui");
if(!isObject("PlayGui/ObsTV")) addToSet(PlayGui, newObject("ObsTV", FearGui::CMDObserve, 0, 0, 1, 1));
remoteEval(2048, CommandMode);
RemoteEval(2048, "scom", -1);
Schedule("CursorOff(mainwindow);", 0.3);
Client::ToggleCmdObserver("True");
Client::cmdObservePlayer(%loc);
remoteBP(2048, "<JC><F1>Observing: <F2>" @ Client::GetName(%loc), 999);
}
function TV::Off()
{
Client::ToggleCmdObserver("False");
remoteEval(2048, PlayMode);
if (isObject("PlayGui/ObsTV"))deleteObject("PlayGui/ObsTV");
if (isObject("_CommandGui"))renameObject("_CommandGui", "CommandGui");
remoteBP(2048, "", 0.1);
}
// -=- Demo -=-
function DemoHUD(%a)
{
if (!$PlayingDemo) return;
%t=$simgame::timescale;
if (%a=="faster")%t=%t*1.5;
else if (%a=="slower")%t=%t*0.75;
else if (%a=="pause")%t=0.0;
else if (%a=="normal")%t=1.0;
if (%t<52)$simgame::timescale = %t;
}
// -=- Basic Server Route stuff -=-
function remoteRememberPosition(%cl){ %cl.rememberPosition = GameBase::GetPosition(%cl); }
function remoteRecallPosition(%cl)
{
if (%cl.rememberPosition != "")
{
GameBase::SetPosition(%cl, %cl.rememberPosition);
GameBase::SetDamageLevel(Client::GetOwnedObject(%cl), 0);
Item::SetVelocity(Client::GetOwnedObject(%cl), "0 0 0");
Player::SetItemCount(%cl, DiscLauncher, 1);
Player::SetItemCount(%cl, getItemType("Disc"), 15);
Player::SetItemCount(%cl, RepairKit, 1);
Player::SetItemCount(%cl, 29, 1);
Player::mountItem(%cl, 29, $BackpackSlot);
}
}
// -=- Demo Drop -=-
function EndGame()
{
$ConnectedToServer = FALSE;
setCursor(MainWindow, "Cur_Arrow.bmp");
disconnect();
if ($SinglePlayer) TrainingEndGameCallback();
$recordDemo = FALSE;
$recorderFileName = "";
startMainMenuScreen();
deleteServer();
QuickStart();
deleteObject(ConsoleScheduler);
newObject(ConsoleScheduler, SimConsoleScheduler);
if ($DemoDrop)
{
$DemoDrop = false;
$recordDemo = true;
setupRecorderFile();
connect($Server::Address);
}
else if($quitOnDisconnect) schedule("quit();", 0);
}
// -=- AutoNamer -=-
function setupRecorderFile()
{
%str = timestamp();
%time = substr(%str, 0, 4)@ "-" @substr(%str, 5, 2) @ "-" @substr(%str, 8, 2) @ "-" @substr(%str, 11, 2) @ "." @substr(%str, 14, 2) @ "." @substr(%str, 17, 2);
if ($ServerName != "") %time = %time @ "-" @ $ServerName;
$recorderFileName = "recordings\\" @ %time @ ".rec";
echo("Recording to - " @ $recorderFileName);
}
// -=- DropMines -=-
function DropMines()
{
%m = getItemCount("Mine");
while ( %m>1 ) {drop("Mine");%m--; }
}
exec("norm.cs");