Ahruman,
Just to let you know that your added messages for Cloaking in 1.71 work well. On my computer I now altered the pirateAI.plist in the next way.:
In all states that have an "ATTACKED" messages I added also a message:
Code: Select all
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
This way the pirates are no more sitting ducks when attacked by a cloaked player but they flee. Not the normal flee, but still keeping scanning so when the player de-cloakes the pirate can immediately proceed attack against a player that drained his own energy banks by cloaking.
Code: Select all
"FLEE_FOR_CLOAKED" = {
ENTER = ("setDesiredRangeTo: 25600", performFlee);
"DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: LURK");
"INCOMING_MISSILE" = (fightOrFleeMissile);
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 10.0");
"TARGET_FOUND" = (setTargetToFoundTarget, checkGroupOddsVersusTarget);
"ODDS_GOOD" = (groupAttackTarget);
"ODDS_LEVEL" = (groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
UPDATE = (scanForRandomMerchantmen, "pauseAI: 5.0");
EXIT = ();
};
In the "ATTACK" state I added the line
Code: Select all
"TARGET_CLOAKED" = ("setStateTo: LURK");
This way the pirate is not defaulting to collect loot, but immediately turns to the scanning mode for faster reaction on de-cloacking of the player.
I will add it to the ups_pirates in the next version of UPS. After some better testing it could be used as the default "pirateAI.plist".
When others want to test it: create a folder with name "AIs" in the "AddOns" folder. Put a copy of the original "pirateAI.plist" in this folder. As last, replace the current content with the one listed below. Oolite will now default to the changed copy.
Code: Select all
{
"ATTACK_SHIP" = {
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
"ENERGY_LOW" = ("setStateTo: FLEE");
"TARGET_CLOAKED" = ("setStateTo: LURK");
ENTER = (performAttack);
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_DESTROYED" = ("setStateTo: COLLECT_LOOT");
"TARGET_LOST" = ("setStateTo: COLLECT_LOOT");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
UPDATE = ();
};
"COLLECT_LOOT" = {
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
ENTER = ("setSpeedTo: 0.0", performIdle);
EXIT = ();
"HOLD_FULL" = ("setStateTo: EXIT_SYSTEM");
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_FOUND" = (setTargetToFoundTarget, "setStateTo: LOOT");
"NOTHING_FOUND" = ("setStateTo: CONSIDER_DOCKING");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
UPDATE = (scanForLoot, "pauseAI: 5.0");
};
"EXIT_SYSTEM" = {
ENTER = ();
EXIT = ();
UPDATE = (performHyperSpaceExit);
"WITCHSPACE OKAY" = (wormholeEscorts, wormholeGroup);
"WITCHSPACE BLOCKED" = (setTargetToFoundTarget, setDestinationWithinTarget, "setDesiredRangeTo: 10000.0", performFlyToRangeFromDestination);
"WITCHSPACE UNAVAILABLE" = ("setStateTo: DOCK_WITH_STATION");
};
FLEE = {
ENTER = ("setDesiredRangeTo: 25600", performFlee);
"ENERGY_FULL" = (performIdle, "setStateTo: LURK");
"TARGET_LOST" = (performIdle, "setStateTo: LURK");
"DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: LURK");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 10.0");
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: FLEE");
UPDATE = ();
EXIT = ();
};
"FLEE_FOR_CLOAKED" = {
ENTER = ("setDesiredRangeTo: 25600", performFlee);
"DESIRED_RANGE_ACHIEVED" = (performIdle, "setStateTo: LURK");
"INCOMING_MISSILE" = (fightOrFleeMissile);
"REACHED_SAFETY" = ("setSpeedTo: 0.0", performIdle, "pauseAI: 10.0");
"TARGET_FOUND" = (setTargetToFoundTarget, checkGroupOddsVersusTarget);
"ODDS_GOOD" = (groupAttackTarget);
"ODDS_LEVEL" = (groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
UPDATE = (scanForRandomMerchantmen, "pauseAI: 5.0");
EXIT = ();
};
GLOBAL = {ENTER = ("setStateTo: TRAVEL_TO_LURK_AREA"); EXIT = (); UPDATE = (); };
LOOT = {
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
"CARGO_SCOOPED" = (checkForFullHold, "setStateTo: COLLECT_LOOT");
ENTER = (performCollect);
EXIT = ();
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"HOLD_FULL" = ("setStateTo: CONSIDER_DOCKING");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"TARGET_LOST" = ("setStateTo: COLLECT_LOOT");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
UPDATE = ();
};
LURK = {
ENTER = ("setSpeedTo: 0.0", performIdle);
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"NOTHING_FOUND" = ("setStateTo: COLLECT_LOOT");
"TARGET_FOUND" = (setTargetToFoundTarget, checkGroupOddsVersusTarget);
"ODDS_GOOD" = (groupAttackTarget);
"ODDS_LEVEL" = (groupAttackTarget);
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
UPDATE = (scanForRandomMerchantmen, "pauseAI: 5.0");
};
"TRAVEL_TO_LURK_AREA" = {
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
"DESIRED_RANGE_ACHIEVED" = ("setStateTo: LURK");
ENTER = (
setDestinationToCurrentLocation,
"setDesiredRangeTo: 1500.0",
performFlyToRangeFromDestination
);
EXIT = ();
"GROUP_ATTACK_TARGET" = (setTargetToFoundTarget, "setStateTo: ATTACK_SHIP");
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
"ENTER WORMHOLE" = ("setStateTo: ENTER_WORMHOLE");
"EXITED WITCHSPACE" = ("switchAITo: enteringPirateAI.plist");
UPDATE = ();
};
"CONSIDER_DOCKING" = {
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
ENTER = (checkForMotherStation);
"NOTHING_FOUND" = ("setStateTo: LURK");
"STATION_FOUND" = ("setAITo: dockingAI.plist");
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
"DOCK_WITH_STATION" = {
ATTACKED = (setTargetToPrimaryAggressor, "setStateTo: ATTACK_SHIP");
"ATTACKED_BY_CLOAKED" = ("setStateTo: FLEE_FOR_CLOAKED");
ENTER = (checkForMotherStation);
"NOTHING_FOUND" = ("setAITo: route1traderAI.plist");
"STATION_FOUND" = ("setAITo: dockingAI.plist");
EXIT = ();
"INCOMING_MISSILE" = (fightOrFleeMissile, "setStateTo: FLEE");
UPDATE = ();
};
"ENTER_WORMHOLE" = {
ENTER = (setDestinationToTarget, "setDesiredRangeTo: 1.0", "setSpeedFactorTo: 1.0", performFlyToRangeFromDestination);
"PLAYER WITCHSPACE" = (enterTargetWormhole);
UPDATE = ();
EXIT = ();
};
}