mirror of
https://github.com/Jusctsch5/ironsphererpg.git
synced 2026-01-19 19:44:45 +00:00
Taking everything obtained from http://ironsphererpg2.webs.com/ and dumping it in a git repo
1054 lines
30 KiB
C#
1054 lines
30 KiB
C#
//------------------------------
|
|
//AI Debugging functions
|
|
|
|
function aics()
|
|
{
|
|
aidebug(-1);
|
|
exec("scripts/ai.cs");
|
|
}
|
|
|
|
function ga(%pack)
|
|
{
|
|
$testcheats = 1;
|
|
giveall();
|
|
switch$ (%pack)
|
|
{
|
|
case "repair":
|
|
LocalClientConnection.player.setInventory(RepairPack, 1);
|
|
case "charge":
|
|
LocalClientConnection.player.setInventory(SatchelCharge, 1);
|
|
case "energy":
|
|
LocalClientConnection.player.setInventory(EnergyPack, 1);
|
|
case "cloak":
|
|
LocalClientConnection.player.setInventory(CloakingPack, 1);
|
|
case "shield":
|
|
LocalClientConnection.player.setInventory(ShieldPack, 1);
|
|
case "jammer":
|
|
LocalClientConnection.player.setInventory(SensorJammerPack, 1);
|
|
}
|
|
}
|
|
|
|
function aiga(%client)
|
|
{
|
|
$TestCheats = 1;
|
|
%player = %client.player;
|
|
%player.setInventory(RepairKit,999);
|
|
%player.setInventory(Mine,999);
|
|
%player.setInventory(MineAir,999);
|
|
%player.setInventory(MineLand,999);
|
|
%player.setInventory(MineSticky,999);
|
|
%player.setInventory(Grenade,999);
|
|
%player.setInventory(FlashGrenade,999);
|
|
%player.setInventory(FlareGrenade,999);
|
|
%player.setInventory(ConcussionGrenade,999);
|
|
%player.setInventory(CameraGrenade, 999);
|
|
%player.setInventory(Blaster,1);
|
|
%player.setInventory(Plasma,1);
|
|
%player.setInventory(Disc,1);
|
|
%player.setInventory(Chaingun, 1);
|
|
%player.setInventory(GrenadeLauncher, 1);
|
|
%player.setInventory(MissileLauncher, 1);
|
|
%player.setInventory(Mortar, 1);
|
|
%player.setInventory(MissileLauncherAmmo, 999);
|
|
%player.setInventory(GrenadeLauncherAmmo, 999);
|
|
%player.setInventory(MortarAmmo, 999);
|
|
%player.setInventory(PlasmaAmmo,999);
|
|
%player.setInventory(ChaingunAmmo, 999);
|
|
%player.setInventory(DiscAmmo, 999);
|
|
%player.setInventory(TargetingLaser, 1);
|
|
%player.setInventory(ELFGun, 1);
|
|
%player.setInventory(SniperRifle, 1);
|
|
%player.setInventory(ShockLance, 1);
|
|
}
|
|
|
|
function aiCome(%from, %to)
|
|
{
|
|
if (%to $= "")
|
|
%to = 2;
|
|
%from.player.setTransform(%to.player.getTransform());
|
|
}
|
|
|
|
function findBotWithInv(%item)
|
|
{
|
|
for (%i = 0; %i < ClientGroup.getCount(); %i++)
|
|
{
|
|
%cl = ClientGroup.getObject(%i);
|
|
if (isObject(%cl.player) && %cl.player.getInventory(%item))
|
|
echo(%cl @ ":" SPC getTaggedString(%cl.name) SPC "has item" SPC %item);
|
|
}
|
|
}
|
|
|
|
function listInv(%client)
|
|
{
|
|
%player = %client.player;
|
|
%count = %player.getInventory(RepairKit);
|
|
if (%count > 0)
|
|
echo("RepairKit: " @ %count);
|
|
%count = %player.getInventory(Mine);
|
|
if (%count > 0)
|
|
echo("Mine: " @ %count);
|
|
%count = %player.getInventory(MineAir);
|
|
if (%count > 0)
|
|
echo("MineAir: " @ %count);
|
|
%count = %player.getInventory(MineLand);
|
|
if (%count > 0)
|
|
echo("MineLand: " @ %count);
|
|
%count = %player.getInventory(MineSticky);
|
|
if (%count > 0)
|
|
echo("MineSticky: " @ %count);
|
|
%count = %player.getInventory(Grenade);
|
|
if (%count > 0)
|
|
echo("Grenade: " @ %count);
|
|
%count = %player.getInventory(FlashGrenade);
|
|
if (%count > 0)
|
|
echo("FlashGrenade: " @ %count);
|
|
%count = %player.getInventory(FlareGrenade);
|
|
if (%count > 0)
|
|
echo("FlareGrenade: " @ %count);
|
|
%count = %player.getInventory(ConcussionGrenade);
|
|
if (%count > 0)
|
|
echo("ConcussionGrenade: " @ %count);
|
|
%count = %player.getInventory(CameraGrenade);
|
|
if (%count > 0)
|
|
echo("CameraGrenade: " @ %count);
|
|
%count = %player.getInventory(Blaster);
|
|
if (%count > 0)
|
|
echo("Blaster: " @ %count);
|
|
%count = %player.getInventory(Plasma);
|
|
if (%count > 0)
|
|
echo("Plasma: " @ %count);
|
|
%count = %player.getInventory(Disc);
|
|
if (%count > 0)
|
|
echo("Disc: " @ %count);
|
|
%count = %player.getInventory(Chaingun);
|
|
if (%count > 0)
|
|
echo("Chaingun: " @ %count);
|
|
%count = %player.getInventory(GrenadeLauncher);
|
|
if (%count > 0)
|
|
echo("GrenadeLauncher: " @ %count);
|
|
%count = %player.getInventory(MissileLauncher);
|
|
if (%count > 0)
|
|
echo("MissileLauncher: " @ %count);
|
|
%count = %player.getInventory(Mortar);
|
|
if (%count > 0)
|
|
echo("Mortar: " @ %count);
|
|
%count = %player.getInventory(MissileLauncherAmmo);
|
|
if (%count > 0)
|
|
echo("MissileLauncherAmmo: " @ %count);
|
|
%count = %player.getInventory(GrenadeLauncherAmmo);
|
|
if (%count > 0)
|
|
echo("GrenadeLauncherAmmo: " @ %count);
|
|
%count = %player.getInventory(MortarAmmo);
|
|
if (%count > 0)
|
|
echo("MortarAmmo: " @ %count);
|
|
%count = %player.getInventory(PlasmaAmmo);
|
|
if (%count > 0)
|
|
echo("PlasmaAmmo: " @ %count);
|
|
%count = %player.getInventory(ChaingunAmmo);
|
|
if (%count > 0)
|
|
echo("ChaingunAmmo: " @ %count);
|
|
%count = %player.getInventory(DiscAmmo);
|
|
if (%count > 0)
|
|
echo("DiscAmmo: " @ %count);
|
|
%count = %player.getInventory(TargetingLaser);
|
|
if (%count > 0)
|
|
echo("TargetingLaser: " @ %count);
|
|
%count = %player.getInventory(ELFGun);
|
|
if (%count > 0)
|
|
echo("ELFGun: " @ %count);
|
|
%count = %player.getInventory(SniperRifle);
|
|
if (%count > 0)
|
|
echo("SniperRifle: " @ %count);
|
|
%count = %player.getInventory(ShockLance);
|
|
if (%count > 0)
|
|
echo("ShockLance: " @ %count);
|
|
%count = %player.getInventory(RepairPack);
|
|
if (%count > 0)
|
|
echo("RepairPack: " @ %count);
|
|
%count = %player.getInventory(EnergyPack);
|
|
if (%count > 0)
|
|
echo("EnergyPack: " @ %count);
|
|
%count = %player.getInventory(ShieldPack);
|
|
if (%count > 0)
|
|
echo("ShieldPack: " @ %count);
|
|
%count = %player.getInventory(CloakingPack);
|
|
if (%count > 0)
|
|
echo("CloakingPack: " @ %count);
|
|
%count = %player.getInventory(SensorJammerPack);
|
|
if (%count > 0)
|
|
echo("SensorJammerPack: " @ %count);
|
|
}
|
|
|
|
function createAIDebugDlg()
|
|
{
|
|
if (!isObject("AIDebugViewProfile"))
|
|
{
|
|
new GuiControlProfile("AIDebugViewProfile")
|
|
{
|
|
fontType = "Arial Bold";
|
|
fontSize = 12;
|
|
fontColor = "255 0 255";
|
|
autoSizeWidth = false;
|
|
autoSizeHeight = false;
|
|
modal = "false";
|
|
};
|
|
|
|
new GuiControl(aiDebugDlg)
|
|
{
|
|
profile = "GuiDefaultProfile";
|
|
horizSizing = "width";
|
|
vertSizing = "height";
|
|
position = "0 0";
|
|
extent = "640 480";
|
|
minExtent = "8 8";
|
|
visible = "True";
|
|
setFirstResponder = "True";
|
|
helpTag = "0";
|
|
bypassHideCursor = "1";
|
|
|
|
new DebugView(aiDebug)
|
|
{
|
|
profile = "AIDebugViewProfile";
|
|
horizSizing = "width";
|
|
vertSizing = "height";
|
|
position = "8 8";
|
|
extent = "624 464";
|
|
minExtent = "8 8";
|
|
visible = "True";
|
|
setFirstResponder = "False";
|
|
helpTag = "0";
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
function ToggleAIDebug(%make)
|
|
{
|
|
if (%make)
|
|
{
|
|
if ($AIDebugActive)
|
|
{
|
|
Canvas.popDialog(aiDebugDlg);
|
|
$AIDebugActive = false;
|
|
}
|
|
else
|
|
{
|
|
createAIDebugDlg();
|
|
Canvas.pushDialog(aiDebugDlg, 70);
|
|
$AIDebugActive = true;
|
|
|
|
//make sure we're debuging the correct client
|
|
if (LocalClientConnection.getControlObject() == LocalClientConnection.camera)
|
|
{
|
|
if (isObject(LocalClientConnection.observeClient))
|
|
aidebug(LocalClientConnection.observeClient);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
GlobalActionMap.bind(keyboard, "ctrl tilde", "ToggleAIDebug");
|
|
|
|
//function showFPS()
|
|
//{
|
|
// if (isObject(aiDebug))
|
|
// aiDebug.setText(0, "FPS:" SPC $fps::real SPC " $patch1Avg" SPC $Patch1Avg);
|
|
// schedule(1000, 0, "ShowFPS");
|
|
//}
|
|
|
|
function aiDebug(%client)
|
|
{
|
|
if ($AIDebugTeam < 0 && $AIDebugClient < 0)
|
|
{
|
|
createAIDebugDlg();
|
|
Canvas.pushDialog(aiDebugDlg, 70);
|
|
}
|
|
|
|
$AIDebugClient = %client;
|
|
$AIDebugTeam = -1;
|
|
|
|
if (%client > 0)
|
|
{
|
|
createAIDebugDlg();
|
|
Canvas.pushDialog(aiDebugDlg, 70);
|
|
aiDebug.clearText();
|
|
$AIDebugActive = true;
|
|
}
|
|
else
|
|
{
|
|
$AIDebugActive = false;
|
|
Canvas.popDialog(aiDebugDlg);
|
|
}
|
|
}
|
|
|
|
function aiDebugText(%client, %line, %text)
|
|
{
|
|
if (%client != $AIDebugClient)
|
|
return;
|
|
|
|
aiDebug.setText(%line, %text);
|
|
}
|
|
|
|
function aiDebugLine(%client, %startPt, %endPt, %color)
|
|
{
|
|
if (%client != $AIDebugClient)
|
|
return;
|
|
|
|
aiDebug.addLine(%startPt, %endPt, %color);
|
|
}
|
|
|
|
function aiDebugClearLines(%client)
|
|
{
|
|
if (%client != $AIDebugClient)
|
|
return;
|
|
|
|
aiDebug.clearLines();
|
|
}
|
|
|
|
function aiGetTaskDesc(%client)
|
|
{
|
|
if (!%client.isAIControlled())
|
|
%returnStr = getTaggedString(%client.name) @ ": " @ "HUMAN";
|
|
|
|
else if (%client.objective > 0)
|
|
{
|
|
if (%client.objective.description !$= "")
|
|
%returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %client.objective.description;
|
|
else
|
|
%returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %client.objective @ " NO DESC";
|
|
}
|
|
else
|
|
{
|
|
%curTask = %client.getTaskName();
|
|
%curStep = %client.getStepName();
|
|
if (%curTask !$= "")
|
|
%returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %curTask;
|
|
else if (%curStep !$= "")
|
|
%returnStr = %client @ " " @ getTaggedString(%client.name) @ ": " @ %curStep;
|
|
else
|
|
%returnStr = getTaggedString(%client.name) @ ": " @ "UNKNOWN";
|
|
}
|
|
|
|
//add in some color info
|
|
if (Game.numTeams != 2)
|
|
%color = "E";
|
|
else if (%client.team == LocalClientConnection.team)
|
|
%color = "F";
|
|
else
|
|
%color = "E";
|
|
|
|
return %color @ ":" @ %returnStr;
|
|
}
|
|
|
|
$AIDebugTeam = -1;
|
|
$AIDebugClient = -1;
|
|
$AIDebugTasks = true;
|
|
Canvas.popDialog(aiDebugDlg);
|
|
$AIDebugActive = false;
|
|
|
|
function aiEchoObjective(%objective, %lineNum, %group)
|
|
{
|
|
%clientAssigned = false;
|
|
%indent = " ";
|
|
if (%group > 0)
|
|
{
|
|
%indent = " ";
|
|
if (%group.clientLevel[1] > 0 && %group.clientLevel[1].objective == %objective)
|
|
{
|
|
%assigned1 = getTaggedString(%group.clientLevel[1].name) @ ":" @ %group.clientLevel[1].objectiveWeight;
|
|
%clientAssigned = true;
|
|
}
|
|
else
|
|
%assigned1 = " ";
|
|
if (%group.clientLevel[2] > 0 && %group.clientLevel[2].objective == %objective)
|
|
{
|
|
%assigned2 = getTaggedString(%group.clientLevel[2].name);
|
|
%clientAssigned = true;
|
|
}
|
|
else
|
|
%assigned2 = " ";
|
|
}
|
|
else
|
|
{
|
|
if (%objective.clientLevel[1] > 0)
|
|
{
|
|
%assigned1 = getTaggedString(%objective.clientLevel[1].name) @ ":" @ %objective.clientLevel[1].objectiveWeight;
|
|
%clientAssigned = true;
|
|
}
|
|
else
|
|
%assigned1 = " ";
|
|
if (%objective.clientLevel[2] > 0)
|
|
{
|
|
%assigned2 = getTaggedString(%objective.clientLevel[2].name);
|
|
%clientAssigned = true;
|
|
}
|
|
else
|
|
%assigned2 = " ";
|
|
}
|
|
|
|
%text = %indent @ %objective @ " " @ %objective.weightLevel1 @ " " @ %assigned1 @ " " @ %assigned2 @ " " @ %objective.description;
|
|
if (%clientAssigned)
|
|
%color = "0 0 1";
|
|
else
|
|
%color = "1 0 1";
|
|
aiDebug.setText(%lineNum, %text, %color);
|
|
}
|
|
|
|
function aiDebugQ(%team, %showTasks)
|
|
{
|
|
if ($AIDebugTeam < 0 && $AIDebugClient < 0)
|
|
{
|
|
createAIDebugDlg();
|
|
Canvas.pushDialog(aiDebugDlg, 70);
|
|
$AIDebugActive = true;
|
|
}
|
|
|
|
$AIDebugTeam = %team;
|
|
$AIDebugClient = -1;
|
|
|
|
if ($AIDebugTeam < 0)
|
|
{
|
|
Canvas.popDialog(aiDebugDlg);
|
|
$AIDebugActive = false;
|
|
return;
|
|
}
|
|
|
|
if (%showTasks $= "")
|
|
%showTasks = $AIDebugTasks;
|
|
else
|
|
$AIDebugTasks = %showTasks;
|
|
|
|
aiDebug.clearText();
|
|
|
|
if (! %showTasks)
|
|
return;
|
|
|
|
//make sure we have a valid objectiveQ
|
|
if (!isObject($ObjectiveQ[%team]))
|
|
return;
|
|
|
|
%timeStamp = getSimTime();
|
|
%lineNum = 1;
|
|
%count = $ObjectiveQ[%team].getCount();
|
|
|
|
//clear the time stamps from all groups
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
%objective = $ObjectiveQ[%team].getObject(%i);
|
|
if (%objective.group > 0)
|
|
%objective.group.debugStamp = 0;
|
|
}
|
|
|
|
//now loop through and echo out all the objectives...
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
%objective = $ObjectiveQ[%team].getObject(%i);
|
|
|
|
//if the objective is part of a group, echo out the entire group first
|
|
if (%objective.group > 0)
|
|
{
|
|
%group = %objective.group;
|
|
if (%group.debugStamp != %timeStamp)
|
|
{
|
|
%group.debugStamp = %timeStamp;
|
|
%grpCount = %group.getCount();
|
|
|
|
//first print out the group label
|
|
%text = %group @ " GROUP: " @ %group.getName();
|
|
aiDebug.setText(%lineNum, %text);
|
|
%lineNum++;
|
|
|
|
//now loop through and print out the grouped objectives in the order they appear in the main list
|
|
for (%j = 0; %j < %count; %j++)
|
|
{
|
|
//print them in the order they appear in the main list
|
|
%obj = $ObjectiveQ[%team].getObject(%j);
|
|
if (%obj.group == %group)
|
|
{
|
|
aiEchoObjective(%obj, %lineNum, %group);
|
|
%lineNum++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
else
|
|
{
|
|
aiEchoObjective(%objective, %lineNum, 0);
|
|
%lineNum++;
|
|
}
|
|
}
|
|
}
|
|
|
|
//------------------------------
|
|
|
|
function aioTest()
|
|
{
|
|
//clear out the objective Q's
|
|
$ObjectiveQ[0].clear();
|
|
$ObjectiveQ[1].clear();
|
|
$ObjectiveQ[2].clear();
|
|
|
|
///////////////////////////////
|
|
// team 1 objectives //
|
|
///////////////////////////////
|
|
// %newObjective = new AIObjective(AIORepairObject) {
|
|
// position = "0 0 0";
|
|
// rotation = "1 0 0 0";
|
|
// scale = "1 1 1";
|
|
// description = "Repair the generator";
|
|
// targetObject = "Team0GeneratorLarge1";
|
|
// targetClientId = "-1";
|
|
// targetObjectId = nameToId("Team0GeneratorLarge1");
|
|
// location = "0 0 0";
|
|
// weightLevel1 = "3200";
|
|
// weightLevel2 = "1600";
|
|
// weightLevel3 = "0";
|
|
// weightLevel4 = "0";
|
|
// offense = "0";
|
|
// defense = "1";
|
|
// equipment = "RepairPack";
|
|
// buyEquipmentSet = "HeavyRepairSet";
|
|
// issuedByHuman = "0";
|
|
// issuingClientId = "-1";
|
|
// forceClientId = "-1";
|
|
// locked = "0";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIODefendLocation) {
|
|
// position = "-178 -156 120";
|
|
// rotation = "1 0 0 0";
|
|
// scale = "1 1 1";
|
|
// description = "Defend our generator";
|
|
// targetObject = "Team0GeneratorLarge1";
|
|
// targetClientId = "-1";
|
|
// targetObjectId = "-1";
|
|
// location = "-178 -156 120";
|
|
// weightLevel1 = "3900";
|
|
// weightLevel2 = "2000";
|
|
// weightLevel3 = "0";
|
|
// weightLevel4 = "0";
|
|
// offense = "0";
|
|
// defense = "1";
|
|
// desiredEquipment = "ShieldPack Plasma PlasmaAmmo";
|
|
// buyEquipmentSet = "MediumShieldSet LightShieldSet HeavyShieldSet";
|
|
// chat = "";
|
|
// issuedByHuman = "0";
|
|
// issuingClientId = "-1";
|
|
// forceClientId = "-1";
|
|
// locked = "1";
|
|
// radius = "0";
|
|
// team = "0";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
|
|
// %newObjective = new AIObjective(AIODefendLocation) {
|
|
// position = "0 0 0";
|
|
// rotation = "1 0 0 0";
|
|
// scale = "1 1 1";
|
|
// description = "Defend the generator";
|
|
// targetObject = "Team0GeneratorLarge1";
|
|
// targetClientId = "-1";
|
|
// targetObjectId = nameToId("Team0GeneratorLarge1");
|
|
// location = "0 0 0";
|
|
// weightLevel1 = "3100";
|
|
// weightLevel2 = "1500";
|
|
// weightLevel3 = "0";
|
|
// weightLevel4 = "0";
|
|
// offense = "0";
|
|
// defense = "1";
|
|
// desiredEquipment = "ShieldPack Plasma PlasmaAmmo";
|
|
// buyEquipmentSet = "HeavyShieldSet";
|
|
// issuedByHuman = "0";
|
|
// issuingClientId = "-1";
|
|
// forceClientId = "-1";
|
|
// locked = "0";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIOAttackLocation)
|
|
// {
|
|
// weightLevel1 = 2000;
|
|
// description = "Sniper";
|
|
// location = "50 218 95";
|
|
// offense = true;
|
|
// defense = false;
|
|
// equipment = "SniperRifle EnergyPack";
|
|
// buyEquipmentSet = "LightEnergySniper";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIOLazeObject)
|
|
// {
|
|
// weightLevel1 = 10000;
|
|
// description = "Laze the enemy turret";
|
|
// targetObject = NameToId("Team1Turret");
|
|
// targetClient = %client; //note, used to store the task requester
|
|
// offense = true;
|
|
// equipment = "TargetingLaser";
|
|
// buyEquipmentSet = "LightEnergySniper";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIOMortarObject)
|
|
// {
|
|
// weightLevel1 = $AIWeightMortarTurret[1];
|
|
// weightLevel2 = $AIWeightMortarTurret[2];
|
|
// description = "Mortar the enemy turret";
|
|
// targetObject = "Team1TurretBaseLarge1";
|
|
// targetObjectId = nameToId("Team1TurretBaseLarge1");
|
|
// location = "";
|
|
// offense = true;
|
|
// defense = false;
|
|
// equipment = "Mortar MortarAmmo";
|
|
// buyEquipmentSet = "HeavyShieldSet";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIORepairObject)
|
|
// {
|
|
// weightLevel1 = $AIWeightRepairTurret[1];
|
|
// weightLevel2 = $AIWeightRepairTurret[2];
|
|
// description = "Repair the turret";
|
|
// targetObject = NameToId("Team0Turret");
|
|
// location = "";
|
|
// offense = false;
|
|
// defense = true;
|
|
// equipment = "RepairPack";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIOAttackObject)
|
|
// {
|
|
// weightLevel1 = $AIWeightAttackGenerator[1];
|
|
// weightLevel2 = $AIWeightAttackGenerator[2];
|
|
// description = "Attack the enemy generator";
|
|
// targetObject = NameToId("Team1Generator");
|
|
// location = "";
|
|
// offense = true;
|
|
// defense = false;
|
|
// equipment = "plasma plasmaAmmo";
|
|
// buyEquipmentSet = "HeavyShieldSet";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIORepairObject)
|
|
// {
|
|
// //weightLevel1 = $AIWeightRepairGenerator[1];
|
|
// weightLevel1 = 10000;
|
|
// weightLevel2 = $AIWeightRepairGenerator[2];
|
|
// description = "Repair the generator";
|
|
// targetObject = NameToId("Team0Generator");
|
|
// location = "";
|
|
// offense = false;
|
|
// defense = true;
|
|
// equipment = "RepairPack";
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIODefendLocation)
|
|
// {
|
|
// weightLevel1 = $AIWeightDefendGenerator[1];
|
|
// weightLevel2 = $AIWeightDefendGenerator[2];
|
|
// description = "Defend our generator";
|
|
// //targetObject = NameToId("Team0Generator");
|
|
// location = "-20 -292 46";
|
|
// offense = false;
|
|
// defense = true;
|
|
// };
|
|
// $ObjectiveQ[0].add(%newObjective);
|
|
// %newObjective = new AIObjective(AIOEscortPlayer)
|
|
// {
|
|
// weightLevel1 = $AIWeightEscortOffense[1];
|
|
// weightLevel2 = $AIWeightEscortOffense[2];
|
|
// targetClientId = 2;
|
|
// description = "Escort " @ getTaggedString(LocalClientConnection.name);
|
|
// offense = true;
|
|
// desiredEquipment = "EnergyPack";
|
|
// buyEquipmentSet = "LightEnergyELF";
|
|
// };
|
|
// $ObjectiveQ[1].add(%newObjective);
|
|
|
|
///////////////////////////////
|
|
// team 2 objectives //
|
|
///////////////////////////////
|
|
// %newObjective = new AIObjective(AIODefendLocation) {
|
|
// position = "196 461 181";
|
|
// rotation = "1 0 0 0";
|
|
// scale = "1 1 1";
|
|
// description = "Missile defense";
|
|
// targetObject = "";
|
|
// targetClientId = "-1";
|
|
// targetObjectId = "-1";
|
|
// location = "196 461 181";
|
|
// weightLevel1 = "3900";
|
|
// weightLevel2 = "2000";
|
|
// weightLevel3 = "0";
|
|
// weightLevel4 = "0";
|
|
// offense = "0";
|
|
// defense = "1";
|
|
// equipment = "MissileLauncher";
|
|
// buyEquipmentSet = "MediumMissileSet HeavyMissileSet";
|
|
// chat = "";
|
|
// issuedByHuman = "0";
|
|
// issuingClientId = "-1";
|
|
// forceClientId = "-1";
|
|
// locked = "1";
|
|
// radius = "0";
|
|
// team = "0";
|
|
// };
|
|
// $ObjectiveQ[2].add(%newObjective);
|
|
//
|
|
// %newObjective = new AIObjective(AIOAttackLocation)
|
|
// {
|
|
// weightLevel1 = 12000;
|
|
// description = "Sniper";
|
|
// location = "-164 381 134";
|
|
// offense = true;
|
|
// defense = false;
|
|
// equipment = "SniperRifle EnergyPack";
|
|
// buyEquipmentSet = "LightEnergySniper";
|
|
// };
|
|
// $ObjectiveQ[2].add(%newObjective);
|
|
}
|
|
|
|
function aiGo(%count)
|
|
{
|
|
%offense = true;
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
aiConnect(friendly @ %i, 1, 0.5, %offense);
|
|
aiConnect(enemy @ %i, 2, 0.5, %offense);
|
|
%offense = !%offense;
|
|
}
|
|
}
|
|
|
|
function addBots(%count)
|
|
{
|
|
if(%count > 0)
|
|
{
|
|
%count++;
|
|
while(%count--)
|
|
aiConnect("dude " @ %count);
|
|
}
|
|
}
|
|
|
|
function aiGoTest(%count, %team)
|
|
{
|
|
if (%team <= 0)
|
|
%team = 1;
|
|
|
|
%offense = false;
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
if (%offense)
|
|
aiConnect(Offense @ %i, %team, 0.5, true);
|
|
else
|
|
aiConnect(Defense @ %i, %team, 0.5, false);
|
|
|
|
%offense = !%offense;
|
|
}
|
|
}
|
|
|
|
//------------------------------
|
|
|
|
function aiTest()
|
|
{
|
|
//find/create an enemy
|
|
%count = ClientGroup.getCount();
|
|
if (%count <= 1)
|
|
{
|
|
%enemyCl = aiConnect(test, 1, 0.5, false);
|
|
}
|
|
else
|
|
%enemyCl = ClientGroup.getObject(1);
|
|
|
|
//create the objective
|
|
if (! $testObjective)
|
|
{
|
|
$testObjective = new AIObjective(AIOAttackPlayer)
|
|
{
|
|
weightLevel1 = 10000;
|
|
description = "Attack the human!";
|
|
targetClient = nameToId(LocalClientConnection);
|
|
location = "";
|
|
offense = true;
|
|
defense = true;
|
|
};
|
|
MissionCleanup.add($testObjective);
|
|
}
|
|
|
|
//set the enemy inventory
|
|
%enemyPl = %enemyCl.player;
|
|
%enemyPl.setInventory(RepairKit,1);
|
|
%enemyPl.setInventory(Grenade,5);
|
|
//%enemyPl.setInventory(Blaster,1);
|
|
//%enemyPl.setInventory(Plasma,1);
|
|
%enemyPl.setInventory(Disc,1);
|
|
%enemyPl.setInventory(Chaingun, 1);
|
|
%enemyPl.setInventory(GrenadeLauncher, 1);
|
|
//%enemyPl.setInventory(Mortar, 1);
|
|
%enemyPl.setInventory(ChaingunAmmo, 100);
|
|
%enemyPl.setInventory(DiscAmmo, 15);
|
|
%enemyPl.setInventory(PlasmaAmmo,20);
|
|
%enemyPl.setInventory(GrenadeLauncherAmmo, 10);
|
|
%enemyPl.setInventory(MortarAmmo, 10);
|
|
|
|
%enemyPl.setDamageLevel(0.0);
|
|
|
|
//set the target inventory
|
|
%targetCl = 2;
|
|
%targetPl = %targetCl.player;
|
|
%targetPl.setInventory(RepairKit,1);
|
|
%targetPl.setInventory(Grenade,5);
|
|
//%targetPl.setInventory(Blaster,1);
|
|
//%targetPl.setInventory(Plasma,1);
|
|
%targetPl.setInventory(Disc,1);
|
|
%targetPl.setInventory(Chaingun, 1);
|
|
%targetPl.setInventory(GrenadeLauncher, 1);
|
|
//%targetPl.setInventory(Mortar, 1);
|
|
%targetPl.setInventory(ChaingunAmmo, 100);
|
|
%targetPl.setInventory(DiscAmmo, 15);
|
|
%targetPl.setInventory(PlasmaAmmo,20);
|
|
%targetPl.setInventory(GrenadeLauncherAmmo, 10);
|
|
%targetPl.setInventory(MortarAmmo, 10);
|
|
%targetPl.setDamageLevel(0.0);
|
|
|
|
//now force the attack objective
|
|
AIForceObjective(%enemyCl, $testObjective);
|
|
%enemyCl.stepEngage(2);
|
|
}
|
|
|
|
function aibump()
|
|
{
|
|
%t1 = "-348 -470 142 0 0 1 0";
|
|
%t2 = "-347 -453 142 0 0 1 3.14";
|
|
|
|
%t3 = "-348 -462 142 0 0 1 0";
|
|
2.player.setTransform(%t3);
|
|
|
|
3.player.setTransform(%t1);
|
|
4.player.setTransform(%t2);
|
|
|
|
3.stepMove(%t2, 0.1);
|
|
4.stepMove(%t1, 0.1);
|
|
}
|
|
|
|
function aibump2()
|
|
{
|
|
%t1 = "-345.082 -464.229 142 0 0 1 0";
|
|
%t2 = "-347 -453 142 0 0 1 3.14";
|
|
%t3 = "-347.22 -463.439 142 0 0 1 1.89";
|
|
2.player.setTransform(%t3);
|
|
|
|
3.player.setTransform(%t1);
|
|
3.stepMove(%t2, 0.1);
|
|
}
|
|
|
|
function aiTestDeploys(%client, %objective)
|
|
{
|
|
//if we're just starting the test, unassign the client
|
|
if (!isObject(%objective))
|
|
{
|
|
error("DEBUG begin testing deploy objectives!");
|
|
$AITestDeployObjective = -1;
|
|
aiUnassignClient(%client);
|
|
}
|
|
|
|
//if the client isn't still on the test objective, choose the next one
|
|
if (%client.objective != $AITestDeployObjective)
|
|
{
|
|
//if there's a corresponding "repairObjective" for the deploy, then the deploy succeeded
|
|
if (isobject($AITestDeployObjective))
|
|
{
|
|
if (!isObject($AITestDeployObjective.repairObjective))
|
|
$AITestDeployObjective.isInvalid = true;
|
|
}
|
|
|
|
//loop through all the objectives, looking for next deploy ones...
|
|
%foundCurrent = !isObject($AITestDeployObjective);
|
|
%nextObjective = -1;
|
|
%found = false;
|
|
%count = $ObjectiveQ[%client.team].getCount();
|
|
for (%i = 0; %i < %count && !%found; %i++)
|
|
{
|
|
%obj = $ObjectiveQ[%client.team].getObject(%i);
|
|
|
|
//see if the objective is a group...
|
|
if (%obj.getClassName() !$= "AIObjective")
|
|
{
|
|
%grpCount = %obj.getCount();
|
|
for (%j = 0; %j < %grpCount && !%found; %j++)
|
|
{
|
|
%grpObj = %obj.getObject(%j);
|
|
if (%grpObj.getName() $= "AIODeployEquipment")
|
|
{
|
|
if (%foundCurrent)
|
|
{
|
|
%nextObjective = %grpObj;
|
|
%found = true;
|
|
}
|
|
else if (%grpObj == $AITestDeployObjective)
|
|
%foundCurrent = true;
|
|
}
|
|
}
|
|
}
|
|
else if (%obj.getName() $= "AIODeployEquipment")
|
|
{
|
|
//see if this is the next one
|
|
if (%foundCurrent)
|
|
{
|
|
%nextObjective = %obj;
|
|
%found = true;
|
|
}
|
|
else if (%obj == $AITestDeployObjective)
|
|
%foundCurrent = true;
|
|
}
|
|
}
|
|
|
|
if (isObject(%nextObjective))
|
|
{
|
|
//kill all the turrets for your team...
|
|
while (isObject($AIRemoteTurretSet.getObject(0)))
|
|
$AIRemoteTurretSet.getObject(0).delete();
|
|
|
|
//remove any associated repairobjective from this deploy
|
|
if (isObject(%nextObjective.repairObjective))
|
|
{
|
|
AIClearObjective(%nextObjective.repairObjective);
|
|
%nextObjective.repairObjective.delete();
|
|
%nextObjective.repairObjective = "";
|
|
}
|
|
|
|
//assign the bot to the objective...
|
|
error("DEBUG testing objective:" SPC %nextObjective);
|
|
$AITestDeployObjective = %nextObjective;
|
|
AIUnassignClient(%client);
|
|
AIForceObjective(%client, $AITestDeployObjective, 10000);
|
|
}
|
|
else
|
|
{
|
|
error("DEBUG testing of deploy objectives is complete:");
|
|
%count = $ObjectiveQ[%client.team].getCount();
|
|
for (%i = 0; %i < %count && !%found; %i++)
|
|
{
|
|
%obj = $ObjectiveQ[%client.team].getObject(%i);
|
|
|
|
//see if the objective is a group...
|
|
if (%obj.getClassName() !$= "AIObjective")
|
|
{
|
|
%grpCount = %obj.getCount();
|
|
for (%j = 0; %j < %grpCount && !%found; %j++)
|
|
{
|
|
%grpObj = %obj.getObject(%j);
|
|
if (%grpObj.getName() $= "AIODeployEquipment")
|
|
{
|
|
if (%grpObj.isInvalid)
|
|
error(%grpObj SPC "is invalid.");
|
|
else
|
|
error(%grpObj SPC "passed.");
|
|
}
|
|
}
|
|
}
|
|
else if (%obj.getName() $= "AIODeployEquipment")
|
|
{
|
|
if (%obj.isInvalid)
|
|
error(%obj SPC "is invalid.");
|
|
else
|
|
error(%obj SPC "passed.");
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
//schedule the next call to see if we're still deploying...
|
|
schedule(2000, %client.player, "aiTestDeploys", %client, $AITestDeployObjective);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//AI test pilot task
|
|
$TestPilotHeadings[0] = "203 -59 120";
|
|
$TestPilotHeadings[1] = "52 10 120";
|
|
$TestPilotHeadings[2] = "-112 125 120";
|
|
$TestPilotHeadings[3] = "-195 219 120";
|
|
$TestPilotHeadings[4] = "-198 323 120";
|
|
$TestPilotHeadings[5] = "-38 423 120";
|
|
$TestPilotHeadings[6] = "84 445 120";
|
|
$TestPilotHeadings[7] = "290 382 120";
|
|
$TestPilotHeadings[8] = "385 259 120";
|
|
$TestPilotHeadings[9] = "255 6 120";
|
|
$TestPilotHeadings[10] = "219 -49 120";
|
|
$TestPilotHeadings[11] = "222 -168 120";
|
|
|
|
function AITestPilot::assume(%task, %client)
|
|
{
|
|
%task.setWeightFreq(30);
|
|
%task.setMonitorFreq(10);
|
|
|
|
//first, make sure the pilot is in light, and doesn't have an backpacks...
|
|
%client.player.throwPack();
|
|
%client.player.setArmor(Light);
|
|
|
|
//next, start the pilot on his way to mounting the vehicle
|
|
%client.pilotVehicle = true;
|
|
%client.stepMove(%task.vehicle.position, 0.25, $AIModeMountVehicle);
|
|
|
|
%task.locationIndex = -1;
|
|
}
|
|
|
|
function AITestPilot::weight(%task, %client)
|
|
{
|
|
%task.setWeight(10000);
|
|
}
|
|
|
|
function AITestPilot::monitor(%task, %client)
|
|
{
|
|
//see if we've mounted yet
|
|
if (%task.locationIndex == -1)
|
|
{
|
|
//mount the vehicle
|
|
%client.pilotVehicle = true;
|
|
%client.stepMove(%task.vehicle.position, 0.25, $AIModeMountVehicle);
|
|
|
|
if (isObject(%client.vehicleMounted))
|
|
{
|
|
%task.locationIndex++;
|
|
%client.setPilotDestination($TestPilotHeadings[%task.locationIndex]);
|
|
}
|
|
}
|
|
|
|
//else see if we're close enough to the current destination to choose the next
|
|
else
|
|
{
|
|
%pos = %client.vehicleMounted.position;
|
|
%pos2D = getWord(%pos, 0) SPC getWord(%pos, 1) SPC "0";
|
|
%dest = $TestPilotHeadings[%task.locationIndex];
|
|
%dest2D = getWord(%dest, 0) SPC getWord(%dest, 1) SPC "0";
|
|
|
|
if (VectorDist(%dest2D, %pos2D) < 20)
|
|
{
|
|
if ($TestPilotHeadings[%task.locationIndex + 1] !$= "")
|
|
{
|
|
%task.locationIndex++;
|
|
%client.setPilotDestination($TestPilotHeadings[%task.locationIndex]);
|
|
}
|
|
else
|
|
%client.setPilotAim($TestPilotHeadings[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
function testPilot(%client, %vehicle)
|
|
{
|
|
%client.clearTasks();
|
|
|
|
if (%vehicle $= "")
|
|
%vehicle = LocalClientConnection.vehicleMounted;
|
|
|
|
%client.pilotTask = %client.addTask(AITestPilot);
|
|
%client.pilotTask.vehicle = %vehicle;
|
|
}
|
|
|