Oh yea, no doubt. I can appreciate that... heh.
Code: Select all
/* The War School Citadel */
private int count, group, temp;
private BASEOBJ viewerObj, targetObj, targetObj2;
private DROID cdroid,vdroid,bugdroid;
private int clusterID;
private TEMPLATE Vconstruct;
public RESEARCHSTAT autoRepair;
public STRUCTURESTAT citDef1,citDef2,citDef3,citDef4,citDef5,citDef6,citDef7,sensDef1;
public STRUCTURESTAT vtolPad,pad,Citadel,Key,aaDef1,aaDef2,aaDef3,decoy;
public int padX[20], padY[20], numPads, citPlayer,citnum;
private STRUCTURE CitadelObj,KeyObj;
private STRUCTURE pads[20];
public int numGroups;
private int VTOLsize[4], groupX[4], groupY[4];
private TEMPLATE Citplates[4];
private int targetObjType[4], startTime[4], everyTime[4];
private int numPrefStruc, prefStruc[3], numPrefDroid, prefDroid[2];
private GROUP citadelGroup[4];
private BASEOBJ citadelObj[4];
private int citadelCluster[4], countTime[4];
private int vanishX,vanishY;
public PROPULSION bug;
public BODY bugbody;
trigger nextTargetTrig(every, 80);
// declare events
event bonusPower;
event targetFound;
event clusterReset;
event bugFix;
event nextTarget;
event nextTargetTwo;
event stopVTOLs;
event addVTruck;
event addCitadel;
event addKey;
event start(CALL_GAMEINIT)
{
count = 0;
while (count < numPads)
{
pads[count] = addStructure(pad, citPlayer, padX[count], padY[count]);
count = count + 1;
}
addPower(20000, citPlayer);
completeResearch(autoRepair,citPlayer);
CitadelObj = addStructure(Citadel, citPlayer, 11200, 12096);
KeyObj = addStructure(Key, citPlayer, 13248, 12864);
addStructure(aaDef1, citPlayer, 13248, 11456);
addStructure(aaDef1, citPlayer, 12992, 11456);
addStructure(aaDef1, citPlayer, 12736, 11456);
addStructure(aaDef2, citPlayer, 11968, 13376);
addStructure(aaDef2, citPlayer, 15552, 12352);
addStructure(aaDef2, citPlayer, 11584, 11200);
addStructure(aaDef3, citPlayer, 11456, 10560);
addStructure(aaDef3, citPlayer, 13248, 15296);
addStructure(sensDef1, citPlayer, 9152, 14784);
addStructure(sensDef1, citPlayer, 10432, 8640);
addStructure(sensDef1, citPlayer, 15296, 10048);
addStructure(sensDef1, citPlayer, 16064, 15808);
addStructure(sensDef1, citPlayer, 12736, 9280);
addStructure(sensDef1, citPlayer, 12992, 11840);
addStructure(sensDef1, citPlayer, 16192, 13248);
addStructure(sensDef1, citPlayer, 12736, 16704);
addStructure(sensDef1, citPlayer, 9280, 12224);
addStructure(citDef7, citPlayer, 15040, 12736);
addStructure(citDef7, citPlayer, 15168, 11968);
addStructure(citDef7, citPlayer, 14912, 12352);
addStructure(aaDef3, citPlayer, 14912, 11840);
addStructure(aaDef3, citPlayer, 15936, 13248);
addStructure(aaDef3, citPlayer, 12352, 11328);
addStructure(aaDef3, citPlayer, 11584, 11328);
addStructure(aaDef3, citPlayer, 11840, 11328);
addStructure(citDef1, citPlayer, 11840, 12992);
addStructure(citDef1, citPlayer, 12608, 13632);
addStructure(citDef1, citPlayer, 12608, 12352);
addStructure(citDef2, citPlayer, 12608, 12608);
addStructure(citDef2, citPlayer, 12224, 12736);
addStructure(citDef7, citPlayer, 11968, 13632);
addStructure(citDef2, citPlayer, 11584, 11072);
addStructure(citDef2, citPlayer, 11840, 12736);
addStructure(citDef3, citPlayer, 11328, 12352);
addStructure(citDef3, citPlayer, 12992, 12096);
addStructure(citDef3, citPlayer, 11328, 12992);
addStructure(citDef4, citPlayer, 11840, 12352);
addStructure(citDef4, citPlayer, 12096, 11328);
addStructure(citDef5, citPlayer, 12864, 11712);
addStructure(citDef5, citPlayer, 13120, 11712);
addStructure(citDef5, citPlayer, 9792, 12352);
addStructure(citDef5, citPlayer, 11968, 10048);
addStructure(citDef5, citPlayer, 12736, 16448);
addStructure(citDef5, citPlayer, 15680, 13120);
addStructure(citDef6, citPlayer, 15808, 10944);
addStructure(citDef6, citPlayer, 12736, 8896);
addStructure(citDef6, citPlayer, 8512, 10816);
addStructure(citDef6, citPlayer, 12352, 17088);
addStructure(citDef6, citPlayer, 13120, 15296);
addStructure(citDef6, citPlayer, 13120, 14144);
addStructure(citDef6, citPlayer, 11712, 11328);
addStructure(citDef6, citPlayer, 11584, 12736);
addStructure(citDef6, citPlayer, 9664, 15552);
addStructure(citDef6, citPlayer, 10176, 8896);
addStructure(citDef6, citPlayer, 14912, 9792);
addStructure(citDef6, citPlayer, 15936, 15936);
addStructure(decoy, citPlayer, 12992, 11712);
initAllNoGoAreas();
setNoGoArea(20, 26, 177, 26, 1);
setNoGoArea(178, 26, 178, 172, 2);
setNoGoArea(21, 172, 177, 172, 3);
setNoGoArea(20, 27, 20, 172, 4);
vdroid = addDroid(Vconstruct, 11456, 12096, citPlayer);
orderDroid(vdroid,DORDER_REPAIR);
setVTOLReturnPos(citPlayer, vanishX,vanishY);
count = 0;
while (count < numGroups)
{
countTime[count] = startTime[count];
count = count + 1;
}
}
event bonusPower(every, 5000)
{
citnum=0;
while (citnum < 5)
{
if (not isHumanPlayer(citnum))
{
addPower(3000, citnum);
}
citnum = citnum+ 1;
}
}
event addVTOL(every, 107) //every 10secs
{
group = 0;
while (group < numGroups)
{
if((KeyObj != NULLOBJECT) or (CitadelObj != NULLOBJECT))
{
countTime[group] = countTime[group] - 1;
if(countTime[group] <= 0)
{
countTime[group] = everyTime[group]; //set back to every
temp = citadelGroup[group].members;
if(temp < VTOLsize[group])
{
count = 0;
temp = VTOLsize[group] - citadelGroup[group].members;
while (count < temp)
{
cdroid = addDroid(Citplates[group], groupX[group], groupY[group], citPlayer);
if (cdroid != NULLOBJECT)
{
groupAddDroid(citadelGroup[group], cdroid);
setDroidKills(cdroid, 256);
}
count = count + 1;
}
if (citadelObj[group] != NULLOBJECT)
{
orderGroupObj(citadelGroup[group], DORDER_ATTACK, citadelObj[group]);
}
}
}
group = group + 1;
}
}
}
event bugFix(every, 400)
{
if( (cdroid != NULLOBJECT) and (cdroid.droidType == DROID_COMMAND) )
{
vanishUnit(cdroid);
}
if(cdroid != NULLOBJECT)
{
group = 0;
while (group < numGroups)
{
initIterateGroup(citadelGroup[group]);
bugdroid = iterateGroup(citadelGroup[group]);
while (bugdroid != NULLOBJECT)
{
if (bugdroid.propulsion != bug)
{
vanishUnit(bugdroid);
}
bugdroid = iterateGroup(citadelGroup[group]);
}
group = group + 1;
}
}
if( (vdroid != NULLOBJECT) and (vdroid.body == bugbody) )
{
vanishUnit(vdroid);
}
}
event addCitadel(every, 2700)
{
CitadelObj = getStructure(Citadel, citPlayer);
if((vdroid != NULLOBJECT) and (CitadelObj == NULLOBJECT) and (KeyObj != NULLOBJECT))
{
orderDroidStatsLoc(vdroid, DORDER_BUILD, Citadel, 11200, 12096);
}
}
event addKey(every, 3000)
{
KeyObj = getStructure(Key, citPlayer);
if((vdroid != NULLOBJECT) and (CitadelObj != NULLOBJECT) and (KeyObj == NULLOBJECT))
{
orderDroidStatsLoc(vdroid, DORDER_BUILD, Key, 11328, 10560);
}
}
event addVTruck(every, 300)
{
if(vdroid == NULLOBJECT)
{
if( (KeyObj != NULLOBJECT) or (CitadelObj != NULLOBJECT) )
{
vdroid = addDroid(Vconstruct, 11456, 12096, citPlayer);
orderDroid(vdroid,DORDER_REPAIR);
if (getStructure(aaDef3,citPlayer) == NULLOBJECT)
{
orderDroidStatsLoc(vdroid, DORDER_BUILD,aaDef3, 11584,12096);
}
}
}
}
event targetFound(CALL_OBJ_SEEN, citPlayer, ref targetObj, ref viewerObj)
{
if( (targetObj != NULLOBJECT ) and (isHumanPlayer(targetObj.player)) )
{
group = 0;
if (targetObj.type == OBJ_DROID)
{
if (objToDroid(targetObj).droidType == DROID_REPAIR)
{
group = numGroups;
}
}
while(group < numGroups)
{
//clarify target type here!
if ( (targetObj.type == targetObjType[group]) and (targetObj.player != citPlayer) )
{
//store only if new one req'd
if ((citadelObj[group] == NULLOBJECT) and (citadelCluster[group] == 0) )
{
citadelCluster[group] = targetObj.clusterID;
// clusterID can be 0 for droids - especially near start
// when they havn't moved yet
if (citadelCluster[group] != 0)
{
targetObj2 = targetInCluster(targetObj.clusterID, citPlayer);
}
else
{
targetObj2 = NULLOBJECT;
}
// if we've found a target, store it
if (targetObj2 != NULLOBJECT)
{
citadelObj[group] = targetObj2;
citadelCluster[group] = targetObj2.clusterID;
}
}
}
group = group + 1;
}
}
}
event clusterReset(CALL_CLUSTER_EMPTY, ref clusterID)
{
group = 0;
while (group < numGroups)
{
if (citadelCluster[group] == clusterID)
{
citadelObj[group] = NULLOBJECT;
citadelCluster[group] = 0;
group = numGroups;
}
group = group + 1;
}
}
event nextTarget(every, 110)
{
resetStructTargets();
setStructTarIgnore(ST_WALL);
count = 0;
while (count < numPrefStruc)
{
setStructTarPref(prefStruc[count]);
count = count + 1;
}
resetDroidTargets();
count = 0;
while (count < numPrefDroid)
{
setDroidTarPref(prefDroid[count]);
count = count + 1;
}
group = 0;
while (group < numGroups)
{
// if the current target has died find the next in the cluster
if ((citadelObj[group] == NULLOBJECT) and (citadelCluster[group] != 0))
{
citadelObj[group] = targetInCluster(citadelCluster[group], citPlayer);
if (citadelObj[group] == NULLOBJECT)
{
citadelCluster[group] = 0;
}
}
group = group + 1;
}
}
event nextTargetTwo(every, 65)
{
group = 0;
while (group < numGroups)
{
if ( (citadelObj[group] != NULLOBJECT) and (idleGroup(citadelGroup[group]) > (citadelGroup[group].members / 2)) )
{
orderGroupObj(citadelGroup[group], DORDER_ATTACK, citadelObj[group]);
}
group = group + 1;
}
}
event stopVTOLs(every, 45)
{
KeyObj = getStructure(Key, citPlayer);
CitadelObj = getStructure(Citadel, citPlayer);
if((CitadelObj == NULLOBJECT) and (KeyObj == NULLOBJECT))
{
killStructsInArea(citPlayer, REF_REARM_PAD, 6720, 7104, 17344, 17984, TRUE, FALSE);
killDroidsInArea(0, 0, 25600, 25600, citPlayer);
}
}
.