2017-07-18 02:51:48 +00:00
|
|
|
// don't want this executing when building graphs
|
|
|
|
|
if($OFFLINE_NAV_BUILD)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
echo("Running Mission 4 Script");
|
|
|
|
|
activatePackage(Training4);
|
|
|
|
|
activatePackage(singlePlayerMissionAreaEnforce);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//special sound
|
|
|
|
|
datablock AudioProfile(HudFlashSound)
|
|
|
|
|
{
|
|
|
|
|
filename = "gui/buttonover.wav";
|
|
|
|
|
description = AudioDefault3d;
|
|
|
|
|
preload = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
$numberOfEnemies[1] = 0;
|
|
|
|
|
$numberOfEnemies[2] = 0;
|
|
|
|
|
$numberOfEnemies[3] = 0;
|
|
|
|
|
|
|
|
|
|
// Mission Variables
|
|
|
|
|
$numberOfWaves[1] = 3;
|
|
|
|
|
$numberOfWaves[2] = 5;
|
|
|
|
|
$numberOfWaves[3] = 7;
|
|
|
|
|
|
|
|
|
|
$numberInWave[1] = 3;
|
|
|
|
|
$numberInWave[2] = 5;
|
|
|
|
|
$numberInWave[3] = 7;
|
|
|
|
|
|
|
|
|
|
$delayBeforeFirstWave[1] = 300000;
|
|
|
|
|
$delayBeforeFirstWave[2] = 200000;
|
|
|
|
|
$delayBeforeFirstWave[3] = 20000;
|
|
|
|
|
|
|
|
|
|
$missionBotSkill[1] = 0.0;
|
|
|
|
|
$missionBotSkill[2] = 0.5;
|
|
|
|
|
$missionBotSkill[3] = 0.8;
|
|
|
|
|
|
|
|
|
|
$numberOfTeammates = 2;
|
|
|
|
|
|
|
|
|
|
package training4 {
|
|
|
|
|
//===============================================begin the training 4 package stuff====
|
|
|
|
|
function getTeammateGlobals()
|
|
|
|
|
{
|
|
|
|
|
$TeammateWarnom0 = "Firecrow";
|
|
|
|
|
$teammateskill0 = 0.5;
|
|
|
|
|
$teammateVoice0 = Fem3;
|
|
|
|
|
$teammateEquipment0 = 0;
|
|
|
|
|
$teammateGender0 = Female;
|
|
|
|
|
|
|
|
|
|
$TeammateWarnom1 = "Proteus";
|
|
|
|
|
$teammateSkill1 = 0.5;
|
|
|
|
|
$teammateVoice1 = Male4;
|
|
|
|
|
$teammateEquipment1 = 0;
|
|
|
|
|
$teammateGender1 = Male;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function MP3Audio::play(%this)
|
|
|
|
|
{
|
|
|
|
|
//too bad...no mp3 in training
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function ClientCmdSetHudMode(%mode, %type, %node)
|
|
|
|
|
{
|
|
|
|
|
parent::ClientCmdSetHudMode(%mode, %type, %node);
|
2017-07-18 02:55:25 +00:00
|
|
|
//TrainingMap.push();
|
2017-07-18 02:51:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// get the ball rolling
|
|
|
|
|
function startCurrentMission(%game)
|
|
|
|
|
{
|
|
|
|
|
game.equip($player.player);
|
|
|
|
|
|
|
|
|
|
if($pref::TrainingDifficulty == 3)
|
|
|
|
|
updateTrainingObjectiveHud(obj10);
|
|
|
|
|
else{
|
|
|
|
|
schedule(5000, game, repairSensorTower);
|
|
|
|
|
updateTrainingObjectiveHud(obj1);
|
|
|
|
|
}
|
|
|
|
|
$player.beginSpawn = schedule($delayBeforeFirstWave[$pref::TrainingDifficulty], %game, spawnWave, 1);
|
|
|
|
|
$AIDisableChat = true;
|
|
|
|
|
game.missionTime = getSimTime();
|
|
|
|
|
activateskillSpecificTrainingSettings();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function activateskillSpecificTrainingSettings()
|
|
|
|
|
{
|
|
|
|
|
%skill = $pref::TrainingDifficulty;
|
|
|
|
|
|
|
|
|
|
// all
|
|
|
|
|
nameToId("Team1SensorLargePulse1").setDamageLevel(1.5);
|
|
|
|
|
nameToId("Team1SensorLargePulse2").setDamageLevel(1.5);
|
|
|
|
|
|
|
|
|
|
//skill 2 & 3 :
|
|
|
|
|
//no forcefield, no upstairs Inventory deploy, aaturret(in the mis file)
|
|
|
|
|
if(%skill > 1) {
|
|
|
|
|
|
|
|
|
|
%invDepObj = findObjByDescription("Deploy Upstairs Station", 1);
|
|
|
|
|
removeDescribedObj(%invDepObj, 1);
|
|
|
|
|
}
|
|
|
|
|
// skill 3: no turret, no destroy turret or upstairs gen objectives
|
|
|
|
|
if(%skill > 2) {
|
|
|
|
|
nameToId(Team1TurretBaseLarge1).hide(true);
|
2017-07-18 03:05:21 +00:00
|
|
|
freeTarget(nameToId(Team1TurretBaseLarge1).getTarget());
|
2017-07-18 02:51:48 +00:00
|
|
|
nameToId(GenForceField).delete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function countTurretsAllowed(%type)
|
|
|
|
|
{
|
|
|
|
|
return $TeamDeployableMax[%type];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function giveall()
|
|
|
|
|
{
|
|
|
|
|
error("When the going gets tough...wussies like you start cheating!");
|
|
|
|
|
messageClient($player, 0, "Cheating eh? What\'s next? Camping?");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function kobayashi_maru()
|
|
|
|
|
{
|
|
|
|
|
$testcheats = true;
|
|
|
|
|
commandToServer('giveAll');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function pickEquipment()
|
|
|
|
|
{
|
|
|
|
|
return getRandom(10);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function AIEngageTask::assume(%task, %client)
|
|
|
|
|
{
|
|
|
|
|
Parent::assume(%task, %client);
|
|
|
|
|
|
|
|
|
|
if(%client.team != $playerTeam)
|
|
|
|
|
game.biodermAssume(%client);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function toggleScoreScreen(%val)
|
|
|
|
|
{
|
|
|
|
|
if ( %val )
|
|
|
|
|
messageClient($player, 0, $player.miscMsg[noScoreScreen]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function singlePlayerGame::pickTeamSpawn(%game, %client)
|
|
|
|
|
{
|
|
|
|
|
if(%client.team == $player.team)
|
|
|
|
|
return parent::pickTeamSpawn(%game, %client);
|
|
|
|
|
%dp = game.pickRandomDropPoint(%client);
|
|
|
|
|
InitContainerRadiusSearch(%dp.position, 2, $TypeMasks::PlayerObjectType);
|
|
|
|
|
if( containerSearchNext() ) {
|
|
|
|
|
//echo("Too close object, picking again?");
|
|
|
|
|
if(game.DPRetries++ > 100)
|
|
|
|
|
return "0 0 300";
|
|
|
|
|
else return game.pickTeamSpawn(%client);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
game.DPRetries = 0;
|
|
|
|
|
return %dp.getTransform();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function singlePlayerGame::pickRandomDropPoint(%game, %client)
|
|
|
|
|
{
|
|
|
|
|
error("picking random point for "@%client);
|
|
|
|
|
%group = nameToID("MissionGroup/Teams/team" @ %client.team @ "/DropPoints");
|
|
|
|
|
%num = %group.getCount();
|
|
|
|
|
%random = getRandom(1,%num);
|
|
|
|
|
%dp = %group.getObject( %random );
|
|
|
|
|
|
|
|
|
|
return %dp;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function spawnSinglePlayer()
|
|
|
|
|
{
|
|
|
|
|
$player.lives--;
|
|
|
|
|
|
|
|
|
|
%spawn = DefaultGame::pickTeamSpawn(game, $playerTeam);
|
|
|
|
|
game.createPlayer($player, %spawn);
|
|
|
|
|
$player.setControlObject($player.player);
|
|
|
|
|
//messageClient($player, 0, "Respawns Remaining: "@$player.lives);
|
|
|
|
|
game.equip($player.player, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Generator::onDisabled(%data, %obj, %prevState)
|
|
|
|
|
{
|
|
|
|
|
Parent::onDisabled(%data, %obj, %prevState);
|
|
|
|
|
if(%obj == nameToId(BaseGen)) //its our primary gen
|
|
|
|
|
{
|
|
|
|
|
doText(T4_Warning02);
|
|
|
|
|
game.MissionCounter = schedule(60000, 0, MissionFailedTimer);
|
|
|
|
|
setWaypointAt(%obj.position, "Repair Generator");
|
|
|
|
|
clockHud.setTime(1);
|
|
|
|
|
updateTrainingObjectiveHud(obj5);
|
|
|
|
|
}
|
|
|
|
|
else if($pref::trainingDifficulty < 2)
|
|
|
|
|
{
|
|
|
|
|
if (getRandom() < 0.5 )
|
|
|
|
|
doText(T4_ForceFields01);
|
|
|
|
|
else doText(T4_FFGenDown01);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Generator::onEnabled(%data, %obj, %prevState)
|
|
|
|
|
{
|
|
|
|
|
Parent::onEnabled(%data, %obj, %prevState);
|
|
|
|
|
//error("Gen up somewhere");
|
|
|
|
|
if(%obj == nameToId(BaseGen)) {
|
|
|
|
|
cancel(game.MissionCounter);
|
|
|
|
|
objectiveHud.trainingTimer.setVisible(false);
|
|
|
|
|
updateTrainingObjectiveHud(obj10);
|
|
|
|
|
$player.currentWaypoint.delete();
|
|
|
|
|
cancel($player.player.trainingTimerHide);
|
|
|
|
|
doText(T4_GenUp);
|
|
|
|
|
checkForWin();
|
|
|
|
|
//error("its the main gen");
|
|
|
|
|
|
|
|
|
|
//restore the clock
|
|
|
|
|
%time = getSimTime() - game.missionTime;
|
|
|
|
|
%dif = %time /60000;
|
|
|
|
|
clockHud.setTime(%dif * -1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// mortar mount
|
|
|
|
|
function playerMountWeapon(%tag, %text, %image, %player, %slot)
|
|
|
|
|
{
|
|
|
|
|
if( game.firstTime++ < 2)
|
|
|
|
|
return; // initial weapon mount doesnt count
|
|
|
|
|
if(%image.getName() $= "MortarImage" && !game.msgMortar) {
|
|
|
|
|
game.msgMortar = true;
|
|
|
|
|
doText(T4_TipMortar);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// station use
|
|
|
|
|
function StationInvEnter(%a1, %a2, %data, %obj, %colObj)
|
|
|
|
|
{
|
|
|
|
|
if(%colObj != $player.player)
|
|
|
|
|
return;
|
|
|
|
|
//clearQueue();
|
|
|
|
|
//if(!game.blowoff)
|
|
|
|
|
//blowoff();
|
|
|
|
|
if(game.msgEnterInv++ == 1){
|
|
|
|
|
doText(T4_tipDefense05);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function stationTrigger::onEnterTrigger(%data, %obj, %colObj)
|
|
|
|
|
{
|
|
|
|
|
Parent::onEnterTrigger(%data, %obj, %colObj);
|
|
|
|
|
messageClient(%colObj.client, 'msgEnterInvStation', "", %data, %obj, %colObj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function serverCmdBuildClientTask(%client, %task, %team)
|
|
|
|
|
{
|
|
|
|
|
parent::serverCmdBuildClientTask(%client, %task, %team);
|
|
|
|
|
error("serverCmdBuildClientTask(" @%client@", "@%task@", "@%team@")");
|
|
|
|
|
|
|
|
|
|
if($pref::trainingDifficulty > 2)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//hack: we have to get %objective from the parent function
|
|
|
|
|
// this seems to work
|
|
|
|
|
%objective = %client.currentAIObjective;
|
|
|
|
|
error(%client.currentAIObjective SPC %objective.getName());
|
|
|
|
|
|
|
|
|
|
if ((%objective.getName() $= "AIORepairObject") &&
|
|
|
|
|
(%objective.targetObjectId.getDataBlock().getName() $= "SensorLargePulse")) {
|
|
|
|
|
|
|
|
|
|
//error("repair order issued and forced");
|
|
|
|
|
// force the ai
|
|
|
|
|
%objective.weightLevel1 = 10000;
|
|
|
|
|
|
|
|
|
|
if(!game.issueRepairOrder && game.expectingRepairOrder) {
|
|
|
|
|
game.issueRepairOrder = true;
|
|
|
|
|
doText(Any_good, 2000);
|
|
|
|
|
cameraSpiel();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CommanderMapGui::onWake(%this)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
parent::onWake(%this);
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
//error("Waking the command map.");
|
|
|
|
|
messageClient($player, 'commandMapWake', "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CommanderTree::onCategoryOpen(%this, %category, %open)
|
|
|
|
|
{
|
|
|
|
|
//error("commander tree button pressed");
|
|
|
|
|
parent::onCategoryOpen(%this, %category, %open);
|
|
|
|
|
|
|
|
|
|
if(%category $= "Support" && game.ExpectiongSupportButton) {
|
|
|
|
|
game.ExpectiongSupportButton = false;
|
|
|
|
|
doText(ANY_check01);
|
|
|
|
|
doText(T4_03i, 1000);
|
|
|
|
|
doText(T4_03j);
|
|
|
|
|
}
|
|
|
|
|
if(%category $= "Tactical" && game.ExpectiongTacticalButton) {
|
|
|
|
|
game.ExpectiongTacticalButton = false;
|
|
|
|
|
doText(ANY_check02);
|
|
|
|
|
messageClient($player, 0, "Click on the control box after the turrets name to control the turret.");
|
|
|
|
|
game.CheckingTurretControl = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// control turret/camera
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
function serverCmdControlObject(%client, %targetId)
|
|
|
|
|
{
|
|
|
|
|
parent::serverCmdControlObject(%client, %targetId);
|
|
|
|
|
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
error("Training 4 serverCmdControlObject");
|
|
|
|
|
%obj = getTargetObject(%targetId);
|
|
|
|
|
echo("what do we get back from the parent funtion ? "@%obj);
|
|
|
|
|
%objType = %obj.getDataBlock().getName();
|
|
|
|
|
echo("it is a "@%objType);
|
|
|
|
|
|
|
|
|
|
if(game.CheckingTurretControl) {
|
|
|
|
|
if(%objType $= "TurretBaseLarge") {
|
|
|
|
|
game.CheckingTurretControl = false;
|
|
|
|
|
schedule(3000, game, turretSpielEnd);
|
|
|
|
|
//error("Debug: You are controlling a turret f00!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// if(game.CheckingCameraControl) {
|
|
|
|
|
// if(%objType $= "TurretDeployedCamera") {
|
|
|
|
|
// game.CheckingCameraControl = false;
|
|
|
|
|
// schedule(3000, $player.player, cameraSpielEnd);
|
|
|
|
|
// //error("Debug: You are controlling a camera, w00t!");
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function singlePlayerGame::sensorOnRepaired(%obj, %objName)
|
|
|
|
|
{
|
|
|
|
|
//error("singlePlayerGame::sensorOnRepaired called");
|
|
|
|
|
Parent::sensorOnRepaired(%obj, %objName);
|
|
|
|
|
if(game.expectingTowerRepair && !game.playedOpening && !game.firstSpawn)
|
|
|
|
|
openingSpiel();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function cameraSpiel()
|
|
|
|
|
{
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
doText(T4_tipCamera01);
|
|
|
|
|
updateTrainingObjectiveHud(obj3);
|
|
|
|
|
$player.player.setInventory(CameraGrenade , 8); // cheating just in case the player is a dufas
|
|
|
|
|
game.CheckingCameraControl = true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function CameraGrenadeThrown::onThrow(%this, %camGren)
|
|
|
|
|
{
|
|
|
|
|
Parent::onThrow(%this, %camGren);
|
|
|
|
|
if(game.CheckingCameraControl && !game.firstSpawn) {
|
|
|
|
|
messageClient($player, 0, "Go back to the command map to access camera view.");
|
|
|
|
|
game.CheckingCameraControl = false;
|
|
|
|
|
game.wakeExpectingCamera = true;
|
|
|
|
|
updateTrainingObjectiveHud(obj2);
|
|
|
|
|
doText(T4_tipCamera02);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//like mission 1 and 2 there is a spiel at the begining
|
|
|
|
|
function repairSensorTower()
|
|
|
|
|
{
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
setWaypointAt(nameToId(Team1SensorLargePulse2).position, "Repair Sensor");
|
|
|
|
|
game.expectingTowerRepair = true;
|
|
|
|
|
doText(T4_01);
|
|
|
|
|
doText(T4_01b);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function openingSpiel()
|
|
|
|
|
{
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
$player.currentWaypoint.delete();
|
|
|
|
|
updateTrainingObjectiveHud(obj7);
|
|
|
|
|
|
|
|
|
|
game.playedOpening = true;
|
|
|
|
|
//doText(T4_01c);
|
|
|
|
|
doText(T4_02a);
|
|
|
|
|
doText(T4_03);
|
|
|
|
|
doText(T4_02);
|
|
|
|
|
//doText(T4_02b);
|
|
|
|
|
doText(T4_03a);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function ThreeAEval()
|
|
|
|
|
{
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
game.wakeExpectingSquadOrder = true;
|
|
|
|
|
updateTrainingObjectiveHud(obj2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function missionSpawnedAI()
|
|
|
|
|
{
|
|
|
|
|
if(!game.firstSpawn) {
|
|
|
|
|
game.firstspawn = true;
|
|
|
|
|
doText(ANY_warning05);
|
|
|
|
|
doText(ANY_warning03); // does a playgui check
|
|
|
|
|
|
|
|
|
|
//updateTrainingObjectiveHud(obj5);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function singlePlayerPlayGuiCheck()
|
|
|
|
|
{
|
|
|
|
|
if(CommanderMapGui.open)
|
|
|
|
|
CommanderMapGui.close();
|
|
|
|
|
|
|
|
|
|
updateTrainingObjectiveHud(obj10);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function missionWaveDestroyed(%wave)
|
|
|
|
|
{
|
|
|
|
|
if(%wave == 1) {
|
|
|
|
|
doText(T4_06);
|
|
|
|
|
doText(T4_tipDefense02);
|
|
|
|
|
}
|
|
|
|
|
else if(%wave == 2)
|
|
|
|
|
doText(T4_08);
|
|
|
|
|
|
|
|
|
|
else if( %wave == $numberOfWaves[$pref::TrainingDifficulty] ) {
|
|
|
|
|
//MessageAll(0, "The last wave is destroyed. This mission would end.");
|
|
|
|
|
game.allEnemiesKilled = true;
|
|
|
|
|
checkForWin();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function checkForWin()
|
|
|
|
|
{
|
|
|
|
|
if(game.allEnemiesKilled && nameToId(BaseGen).isEnabled()) {
|
|
|
|
|
clearQueue();
|
|
|
|
|
doText(T4_10);
|
|
|
|
|
doText(T4_11);
|
|
|
|
|
schedule(4000, game, missionComplete, $player.miscMsg[training4win]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function cameraSpielEnd()
|
|
|
|
|
{
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
doText(T4_tipCamera03);
|
|
|
|
|
doText(T4_tipCamera04, 2000);
|
|
|
|
|
doText(T4_controlTurret);
|
|
|
|
|
game.CheckingTurretControl = true;
|
|
|
|
|
game.wakeExpectingTurret = true;
|
|
|
|
|
updateTrainingObjectiveHud(obj4);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function turretSpielEnd()
|
|
|
|
|
{
|
|
|
|
|
if(game.firstSpawn)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
doText(T4_tipObjects);
|
|
|
|
|
doText(T4_CCend, 4000);
|
|
|
|
|
|
|
|
|
|
doText(T4_TipGenerator01, 2000);
|
|
|
|
|
doText(T4_TipGenerator01a);
|
|
|
|
|
doText(T4_TipGenerator01b);
|
|
|
|
|
doText(T4_TipGenerator02, 2000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
doText(T4_tipDefense01);
|
|
|
|
|
// doText(T4_tipDefense06);
|
|
|
|
|
// doText(T4_tipDefense07);
|
|
|
|
|
// doText(T4_tipDefense08);
|
|
|
|
|
// doText(T4_tipDefense09);
|
|
|
|
|
updateTrainingObjectiveHud(obj9);
|
|
|
|
|
//game.blowOff = true; //feel free to use the inventory stations
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// turret deployment advice and messages
|
|
|
|
|
function singlePlayerFailDeploy(%tag, %message)
|
|
|
|
|
{
|
|
|
|
|
%text = detag(%message);
|
|
|
|
|
%phrase = getWord(%text, 0) SPC getWord(%text, 1);
|
|
|
|
|
//echo(%phrase);
|
|
|
|
|
|
|
|
|
|
switch$(%phrase) {
|
|
|
|
|
case "\c2Item must":
|
|
|
|
|
if(!game.tipDep1) {
|
|
|
|
|
game.tipDep1 = true;
|
|
|
|
|
doText(T4_tipDeploy01);
|
|
|
|
|
}
|
|
|
|
|
case "\c2You cannot":
|
|
|
|
|
if(!game.tipDep2) {
|
|
|
|
|
game.tipDep2 = true;
|
|
|
|
|
doText(T4_tipDeploy02);
|
|
|
|
|
}
|
|
|
|
|
case "\c2Interference from":
|
|
|
|
|
if(!game.tipDepT) {
|
|
|
|
|
game.tipDepT = true;
|
|
|
|
|
doText(T4_tipDepTurret);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// not really a callback but this prolly goes here
|
|
|
|
|
function cloakingUnitAdded()
|
|
|
|
|
{
|
|
|
|
|
if(game.addedCloak++ < 2) {
|
|
|
|
|
doText(T4_TipDefense03);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function RepairingObj(%tag, %text, %name, %obj)
|
|
|
|
|
{
|
|
|
|
|
if(%obj.getDataBlock().getName() $= "SensorLargePulse" && !game.repairingSensor) {
|
|
|
|
|
game.repairingSensor = true;
|
|
|
|
|
schedule(2000, $player.player, doText, T4_01c);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// equipment =======================================================================
|
|
|
|
|
//===================================================================================
|
|
|
|
|
|
|
|
|
|
//there are a plethora of configs in this mission
|
|
|
|
|
|
|
|
|
|
function SinglePlayerGame::equip(%game, %player, %set)
|
|
|
|
|
{
|
|
|
|
|
if(!isObject(%player))
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
//ya start with nothing...NOTHING!
|
|
|
|
|
%player.clearInventory();
|
|
|
|
|
|
|
|
|
|
for(%i =0; %i<$InventoryHudCount; %i++)
|
|
|
|
|
%player.client.setInventoryHudItem($InventoryHudData[%i, itemDataName], 0, 1);
|
|
|
|
|
|
|
|
|
|
//error("equping Player "@%player@" with set"@%set);
|
|
|
|
|
switch (%set)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
//echo("player Heavy");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Heavy");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(CameraGrenade,8);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Chaingun, 1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo, 200);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Mortar, 1);
|
|
|
|
|
%player.setInventory(MortarAmmo, 10);
|
|
|
|
|
%player.setInventory(Blaster,1);
|
|
|
|
|
%player.setInventory(GrenadeLauncher,1);
|
|
|
|
|
%player.setInventory(GrenadeLauncherAmmo,15);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Disc");
|
|
|
|
|
%player.weaponCount = 5;
|
|
|
|
|
|
|
|
|
|
case 1:
|
|
|
|
|
//echo("Light Skirmisher");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Light");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(EnergyPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(ConcussionGrenade,5);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Blaster,1);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Chaingun, 1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo, 100);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Chaingun");
|
|
|
|
|
%player.weaponCount = 3;
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
//script hook in our equip stuff also
|
|
|
|
|
cloakingUnitAdded();
|
|
|
|
|
|
|
|
|
|
//echo("Light Assassin Config");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Light");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(CloakingPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(FlashGrenade,5);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Plasma, 1);
|
|
|
|
|
%player.setInventory(PlasmaAmmo, 20);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(ShockLance,1);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Disc");
|
|
|
|
|
%player.weaponCount = 3;
|
|
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
//echo("Light Sniper");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Light");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(EnergyPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(ConcussionGrenade,5);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Chaingun,1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo,100);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(SniperRifle, 1);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("SniperRifle");
|
|
|
|
|
%player.weaponCount = 3;
|
|
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
|
echo("Medium Base Rape");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Medium");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(ShieldPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(Grenade,6);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Plasma, 1);
|
|
|
|
|
%player.setInventory(PlasmaAmmo, 40);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(ElfGun, 1);
|
|
|
|
|
%player.setInventory(GrenadeLauncher,1);
|
|
|
|
|
%player.setInventory(GrenadeLauncherAmmo, 10);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("GrenadeLauncher");
|
|
|
|
|
%player.weaponCount = 4;
|
|
|
|
|
|
|
|
|
|
case 5:
|
|
|
|
|
//echo("Medium Killing Machine");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Medium");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(AmmoPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(Grenade,6);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Plasma, 1);
|
|
|
|
|
%player.setInventory(PlasmaAmmo, 40);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(GrenadeLauncher, 1);
|
|
|
|
|
%player.setInventory(GrenadeLauncherAmmo, 10);
|
|
|
|
|
%player.setInventory(MissileLauncher,1);
|
|
|
|
|
%player.setInventory(MissileLauncherAmmo, 10);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Plasma");
|
|
|
|
|
%player.weaponCount = 4;
|
|
|
|
|
|
|
|
|
|
case 6:
|
|
|
|
|
//echo("Medium Wuss");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Medium");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(EnergyPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(ConcussionGrenade,6);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Blaster, 1);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Elf, 1);
|
|
|
|
|
%player.setInventory(Chaingun,1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo, 150);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Disc");
|
|
|
|
|
%player.weaponCount = 4;
|
|
|
|
|
|
|
|
|
|
case 7:
|
|
|
|
|
//echo("Heavy Long Range");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Heavy");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(EnergyPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(Grenade,8);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Plasma, 1);
|
|
|
|
|
%player.setInventory(PlasmaAmmo, 50);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Mortar, 1);
|
|
|
|
|
%player.setInventory(MortarAmmo, 10);
|
|
|
|
|
%player.setInventory(MissileLauncher,1);
|
|
|
|
|
%player.setInventory(MissileLauncherAmmo, 15);
|
|
|
|
|
%player.setInventory(GrenadeLauncher,1);
|
|
|
|
|
%player.setInventory(GrenadeLauncherAmmo,15);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Mortar");
|
|
|
|
|
%player.weaponCount = 5;
|
|
|
|
|
|
|
|
|
|
case 8:
|
|
|
|
|
//echo("Default Config");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Light");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Blaster,1);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Chaingun, 1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo, 100);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Blaster");
|
|
|
|
|
%player.weaponCount = 3;
|
|
|
|
|
|
|
|
|
|
case 9:
|
|
|
|
|
//echo("Heavy Rate of Fire");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Heavy");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(AmmoPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(Grenade,8);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Chaingun, 1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo, 200);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Mortar, 1);
|
|
|
|
|
%player.setInventory(MortarAmmo, 10);
|
|
|
|
|
%player.setInventory(Plasma,1);
|
|
|
|
|
%player.setInventory(PlasmaAmmo, 50);
|
|
|
|
|
%player.setInventory(GrenadeLauncher,1);
|
|
|
|
|
%player.setInventory(GrenadeLauncherAmmo,15);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Mortar");
|
|
|
|
|
%player.weaponCount = 5;
|
|
|
|
|
|
|
|
|
|
case 10:
|
|
|
|
|
//echo("Heavy Inside Attacker");
|
|
|
|
|
|
|
|
|
|
%player.setArmor("Heavy");
|
|
|
|
|
|
|
|
|
|
%player.setInventory(ShieldPack, 1);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(RepairKit,1);
|
|
|
|
|
%player.setInventory(ConcussionGrenade,8);
|
|
|
|
|
%player.setInventory(Mine,3);
|
|
|
|
|
|
|
|
|
|
%player.setInventory(Plasma, 1);
|
|
|
|
|
%player.setInventory(PlasmaAmmo, 50);
|
|
|
|
|
%player.setInventory(Disc,1);
|
|
|
|
|
%player.setInventory(DiscAmmo, 15);
|
|
|
|
|
%player.setInventory(Mortar, 1);
|
|
|
|
|
%player.setInventory(MortarAmmo, 10);
|
|
|
|
|
%player.setInventory(ShockLance,1);
|
|
|
|
|
%player.setInventory(Chaingun,1);
|
|
|
|
|
%player.setInventory(ChaingunAmmo,200);
|
|
|
|
|
%player.setInventory(TargetingLaser, 1);
|
|
|
|
|
|
|
|
|
|
%player.use("Mortar");
|
|
|
|
|
%player.weaponCount = 5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// silly littly functions
|
|
|
|
|
function flashButton(%buttonName)
|
|
|
|
|
{
|
|
|
|
|
%time = 800;
|
|
|
|
|
%num = 6;
|
|
|
|
|
for(%i=0; %i<%num; %i++) {
|
|
|
|
|
schedule( %time*%i, $player.player, "eval", %buttonName@".setVisible(false);");
|
|
|
|
|
|
|
|
|
|
schedule(%time*%i + %time/2, $player.player, "eval", %buttonName@".setVisible(true);");
|
|
|
|
|
schedule(%time*%i, $player.player, serverPlay2d, HudFlashSound);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showCommandPulldown(%button)
|
|
|
|
|
{
|
|
|
|
|
//this is what I hacked in to make pretty with the showing off of the command tree
|
|
|
|
|
commanderTree.openCategory(%button, true);
|
|
|
|
|
mentionPulldown(%button);
|
|
|
|
|
commanderTree.schedule(3000, openCategory, %button, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function affectAllCommandPulldown(%open)
|
|
|
|
|
{
|
|
|
|
|
commanderTree.openCategory(Clients, %open);
|
|
|
|
|
commanderTree.openCategory(Tactical, %open);
|
|
|
|
|
commanderTree.openCategory(Support, %open);
|
|
|
|
|
commanderTree.openCategory(Waypoints, %open);
|
|
|
|
|
commanderTree.openCategory(Objectives, %open);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function mentionPulldown(%button)
|
|
|
|
|
{
|
|
|
|
|
switch$(%button)
|
|
|
|
|
{
|
|
|
|
|
case "Clients":
|
|
|
|
|
doText(T4_03b);
|
|
|
|
|
|
|
|
|
|
case "Tactical":
|
|
|
|
|
doText(T4_03c);
|
|
|
|
|
|
|
|
|
|
case "Support":
|
|
|
|
|
doText(T4_03d);
|
|
|
|
|
|
|
|
|
|
case "Waypoints":
|
|
|
|
|
doText(T4_03e);
|
|
|
|
|
|
|
|
|
|
case "Objectives":
|
|
|
|
|
doText(T4_03f);
|
|
|
|
|
doText(T4_03g);
|
|
|
|
|
doText(t4_03h);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function training4CommandMapWake()
|
|
|
|
|
{
|
|
|
|
|
error("training4CommandMapWake Called");
|
|
|
|
|
if(game.wakeExpectingSquadOrder && !game.firstSpawn) {
|
|
|
|
|
game.wakeExpectingSquadOrder = false;
|
|
|
|
|
|
|
|
|
|
// commander map waypoint
|
|
|
|
|
%pos = nameToId(Base).position;
|
|
|
|
|
%obj = createClientTarget(-1, %pos);
|
|
|
|
|
%obj.createWaypoint("Nagakhun Base");
|
|
|
|
|
|
|
|
|
|
// cmap objective
|
|
|
|
|
commanderTree.registerEntryType("Objectives", getTag('Base'), false, "commander/MiniIcons/com_flag_grey", "255 255 255");
|
|
|
|
|
createTarget(%id, 'Defend', "", "", 'Base', $player.getSensorGroup());
|
|
|
|
|
|
|
|
|
|
affectAllCommandPulldown(false);
|
|
|
|
|
|
|
|
|
|
//here we go...drop down the thingies
|
|
|
|
|
schedule( 2500, $player.player, showCommandPulldown, Clients);
|
|
|
|
|
schedule( 6000, $player.player, showCommandPulldown, Tactical);
|
|
|
|
|
schedule(10000, $player.player, showCommandPulldown, Support);
|
|
|
|
|
schedule(14000, $player.player, showCommandPulldown, Waypoints);
|
|
|
|
|
schedule(18000, $player.player, showCommandPulldown, Objectives);
|
|
|
|
|
|
|
|
|
|
//schedule(24000, $player.player, affectAllCommandPulldown, true);
|
|
|
|
|
}
|
|
|
|
|
else if(game.wakeExpectingTurret && !game.firstSpawn) {
|
|
|
|
|
messageClient($player, 0, "Click on \"Tactical Assets\" to view turrets.");
|
|
|
|
|
//flashButton(CMDTacticalButton);
|
|
|
|
|
game.ExpectiongTacticalButton = true;
|
|
|
|
|
game.wakeExpectingTurret = false;
|
|
|
|
|
}
|
|
|
|
|
else if(game.wakeExpectingCamera && !game.firstSpawn) {
|
|
|
|
|
messageClient($player, 0, "Click on the control box to the right of the camera\'s name to control the camera.");
|
|
|
|
|
cameraSpielEnd();
|
|
|
|
|
game.wakeExpectingCamera = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Objectives ==================================================================
|
|
|
|
|
//================================================================================
|
|
|
|
|
function missionFailedTimer()
|
|
|
|
|
{
|
|
|
|
|
missionFailed($player.miscMsg[training4GenLoss]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function blowoff()
|
|
|
|
|
{
|
|
|
|
|
game.blowoff = true;
|
|
|
|
|
clearQueue();
|
|
|
|
|
doText(Any_Blowoff02, 2000, 1);
|
|
|
|
|
|
|
|
|
|
// okay, the player wants to play huh?
|
|
|
|
|
// if we are still waiting for the enemies to spawn at this point
|
|
|
|
|
// cancel that and spawn them now...well, soon
|
|
|
|
|
if($player.beginSpawn){
|
|
|
|
|
cancel($player.beginSpawn);
|
|
|
|
|
%time = getRandom(1, 20);
|
|
|
|
|
//error("Blowing off the training: spawning enemies in "@ %time * 1000 @" seconds.");
|
|
|
|
|
schedule(%time*1000, game, beginTraining4Enemies);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function findObjbyDescription(%desc, %team)
|
|
|
|
|
{
|
|
|
|
|
%q = $objectiveQ[%team];
|
|
|
|
|
for(%i = 0; %i < %q.getCount(); %i++)
|
|
|
|
|
{
|
|
|
|
|
%objective = %q.getObject(%i);
|
|
|
|
|
if(%objective.description $= %desc)
|
|
|
|
|
return %objective;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function removeDescribedObj( %obj )
|
|
|
|
|
{
|
|
|
|
|
%invDepObj.weightLevel1 = 0;
|
|
|
|
|
%invDepObj.weightLevel2 = 0;
|
|
|
|
|
%invDepObj.weightLevel3 = 0;
|
|
|
|
|
%invDepObj.weightLevel4 = 0;
|
|
|
|
|
$ObjectiveQ[1].remove(%invDepObj);
|
|
|
|
|
// clear it in case anyone has picked it up
|
|
|
|
|
AIClearObjective(%invDepObj);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//===============================================END the training 4 package stuff====
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Dialog stuff ===================================================================
|
|
|
|
|
//=================================================================================
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Callbacks //==================================================================
|
|
|
|
|
//================================================================================
|
|
|
|
|
|
|
|
|
|
//add callbacks
|
|
|
|
|
addMessageCallback('MsgDeployFailed', singlePlayerFailDeploy);
|
|
|
|
|
addMessageCallback('MsgWeaponMount', playerMountWeapon);
|
|
|
|
|
addMessageCallback('msgEnterInvStation', StationInvEnter);
|
|
|
|
|
addMessageCallback('MsgRepairPackRepairingObj', RepairingObj);
|
|
|
|
|
addMessageCallback('commandMapWake', training4CommandMapWake);
|
|
|
|
|
|