Air Units
Air Unit script to make AI move air units back to base — originally written by Dale.
The Script:
//--------------------------------------------------------------------------
// MoT Mod for CTP2 (Apolyton Edition) by BureauBert
// v1.1
// http://motmod.ctp2.info
//--------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////
// Based upon:
// Air Unit script to make AI move air units back to base.
// by Dale
// Version 1.1 14-May-2001
//
// 22-April-2006:
// - added !IsHumanPlayer check
// - added usage of MoT common functions:
// -- IsAircraft
// -- IsLandingLocation
// -- MoveArmyToTarget
////////////////////////////////////////////////////////////////////////////
///////////////////////////////////
// Common Functions
///////////////////////////////////
// IsAircraft(), IsLandingLocation() and MoveArmyToTarget() in main.slc
///////////////////////////////////
// Move Unit event
///////////////////////////////////
HandleEvent(MoveOrder) 'AirMove' pre {
int_t airPlayer;
int_t airCountA;
int_t airCountB;
int_t airCountC;
int_t airX;
int_t airY;
int_t airNumCities;
int_t airArmyCount;
int_t airTmpCityIdx;
city_t airTmpCity;
unit_t airTmpUnit;
army_t airTmpArmy;
army_t airTmpArmy1;
location_t airTmpLoc;
location_t airTmpLoc1;
location_t airTmpLoc3;
location_t airTmpLoc4;
location_t airArmyLoc;
airArmyCount = 0;
airTmpArmy = army[0];
airArmyLoc = airTmpArmy.location;
airTmpLoc3 = airArmyLoc;
airPlayer = army[0].owner;
if(!IsHumanPlayer(airPlayer)) {
for(airCountA = 0; airCountA < airTmpArmy.size; airCountA = airCountA + 1) {
if(GetUnitFromCell(airArmyLoc, airCountA, airTmpUnit)) {
if(IsAircraft(airTmpUnit)) {
airNumCities = PlayerCityCount(airPlayer);
airTmpCityIdx = GetCapital(airPlayer);
if(GetCityByIndex(airPlayer, airTmpCityIdx, airTmpCity)) {
airTmpLoc = airTmpCity.location;
}
for(airCountC = 0; airCountC < airNumCities; airCountC = airCountC + 1) {
if(GetCityByIndex(airPlayer, airCountC, airTmpCity)) {
airTmpLoc1 = airTmpCity.location;
}
if(Distance(airTmpUnit.location, airTmpLoc1) < Distance(airTmpUnit.location, airTmpLoc)) {
airTmpLoc = airTmpLoc1;
}
}
for(airCountB = 0; airCountB < 10; airCountB = airCountB + 1) {
if(GetNeighbor(airTmpLoc3, 3, airTmpLoc4)) {
airTmpLoc3 = airTmpLoc4;
}
}
if(IsLandingLocation(airTmpLoc3)) {
if(Distance(airTmpUnit.location, airTmpLoc3) < Distance(airTmpUnit.location, airTmpLoc)) {
airTmpLoc = airTmpLoc3;
}
}
for(airX = 0; airX < 10; airX = airX + 1) {
for(airY = 0; airY < 21; airY = airY + 1) {
if(GetNeighbor(airTmpLoc3, 2, airTmpLoc4)) {
airTmpLoc3 = airTmpLoc4;
if(IsLandingLocation(airTmpLoc3)) {
if(Distance(airTmpUnit.location, airTmpLoc3) < Distance(airTmpUnit.location, airTmpLoc)) {
airTmpLoc = airTmpLoc3;
}
}
}
}
if(GetNeighbor(airTmpLoc3, 7, airTmpLoc4)) {
airTmpLoc3 = airTmpLoc4;
if(IsLandingLocation(airTmpLoc3)) {
if(Distance(airTmpUnit.location, airTmpLoc3) < Distance(airTmpUnit.location, airTmpLoc)) {
airTmpLoc = airTmpLoc3;
}
}
for(airY = 0; airY < 21; airY = airY + 1) {
if(GetNeighbor(airTmpLoc3, 5, airTmpLoc4)) {
airTmpLoc3 = airTmpLoc4;
if(IsLandingLocation(airTmpLoc3)) {
if(Distance(airTmpUnit.location, airTmpLoc3) < Distance(airTmpUnit.location, airTmpLoc)) {
airTmpLoc = airTmpLoc3;
}
}
}
}
}
if(GetNeighbor(airTmpLoc3, 7, airTmpLoc4)) {
airTmpLoc3 = airTmpLoc4;
if(IsLandingLocation(airTmpLoc3)) {
if(Distance(airTmpUnit.location, airTmpLoc3) < Distance(airTmpUnit.location, airTmpLoc)) {
airTmpLoc = airTmpLoc3;
}
}
}
}
if(airArmyLoc != airTmpLoc) {
ClearOrders(airTmpUnit);
Event:UngroupOrder(airTmpArmy);
Event:AddUnitToArmy(airTmpUnit, airTmpArmy1, airArmyCount);
airArmyCount = airArmyCount + 1;
MoveArmyToTarget(airTmpArmy1, airTmpLoc);
}
}
}
}
}
return CONTINUE;
}