Page 1 of 1

Convoy! OXP WIP

Posted: Thu Mar 15, 2007 9:17 pm
by Arexack_Heretic
Going to use this to introduce the PPC_A2,
as well as having fun problemsolving the script and AI.

Okay the basic plan:


Placement:
1 a single role is called (depending on desired size of convoy)
2 each ship setup-spawns the ship it is intended to follow:
role3(spawn: role2), role2(spawn:role1), role1(spawn:leader)

AI: ships locate and follow each other in a line, towards the Eagis.
(or outbound)
-If a ship is lost or when the statemachine is (re)started,
ships scan for the next in line, preventing all following the leader
or all going their seperate ways.

todo list:
-teamster shiplist: for now only PPC_A2s are used, but more variety is intended.
-expand on : teamster CB hails.
-To expand on: script to add convoys to systems
taking into account economytype and prosperity, population and productivity. As well as dangerlevel (govt<5)

next post: current bottlenecks

Current Bottlenecks:

Posted: Thu Mar 15, 2007 9:28 pm
by Arexack_Heretic
using spawn or spawnShip in setup_actions does not work as expexted.
MacLane has suggested this may be due to the spawnees being spawned INSIDE the spawner. :?:

Possible avenues of investigation:
-I'll go back to the less elegant method of using x setupConvoyAIs, but the basic problem with spawnmethod may remain.
-Addships oneship plus an escort, then use escort as a target for ScriptActionOnTarget: addShipsInRadius.
(Maybe scanForShipsWithRole: self could work too? targetting self probably not.)
-Doing AddShips in script is unelegant, but proven.


Next post: input!

INPUT!

Posted: Thu Mar 15, 2007 9:34 pm
by Arexack_Heretic
Where I explain what areas could benefit from YOUR Input.

-Teamster slang, callsigns and CB talk.
I may be a fan of the truckermovies Convoy and Smokey and the Bandit, but my slang is horrible.
Anyone supplying nice gabble will earn his forum-name as a teamster-handle! ;)


-Conditions determining size and number of convoys in a system

a bit confusing all of this.


Next up: Current progress of WIP

Posted: Thu Mar 15, 2007 9:46 pm
by Arexack_Heretic
Current Code:

ConvoyAI.plist:

Code: Select all

{	GLOBAL = {
		ENTER = ("pauseAI: 5",	setUpEscorts, "pauseAI: 5"	);
		EXIT = (		);
		UPDATE = (	"setStateTo: LOOK_FOR_5"	);
	};
	LOOK_FOR_5 = {
		ENTER = (	"setDesiredRangeTo: 100000", "scanForNearestShipWithRole: convoy5", "pauseAI: 5.0","commsMessage: <klick> [teamster_look] <klick>"	);
		"TARGET_FOUND" = (	"setTargetToFoundTarget", setDestinationWithinTarget, "commsMessage: <klick> I am number last in line, over. <klick>", "setStateTo: FOLLOW_5"	);
		"NOTHING_FOUND" = (	"setStateTo: LOOK_FOR_4"	);
		EXIT = (		);
		UPDATE = (		);
	};
	LOOK_FOR_4 = {
		ENTER = (	"setDesiredRangeTo: 100000", "scanForNearestShipWithRole: convoy4", "pauseAI: 5.0","commsMessage: <klick> [teamster_look] <klick>"	);
		"TARGET_FOUND" = (	"setTargetToFoundTarget", setDestinationWithinTarget, "commsMessage: <klick> I am number 6, over. <klick>", "setStateTo: FOLLOW_4"	);
		"NOTHING_FOUND" = (	"setStateTo: LOOK_FOR_3"	);
		EXIT = (		);
		UPDATE = (		);
	};
	LOOK_FOR_3 = {
		ENTER = (	"setDesiredRangeTo: 100000", "scanForNearestShipWithRole: convoy3", "pauseAI: 5.0","commsMessage: <klick> [teamster_look] <klick>"	);
		"TARGET_FOUND" = (	"setTargetToFoundTarget", setDestinationWithinTarget, "commsMessage: <klick> I am number 5, over. <klick>", "setStateTo: FOLLOW_3"	);
		"NOTHING_FOUND" = (	"setStateTo: LOOK_FOR_2"	);
		EXIT = (		);
		UPDATE = (		);
	};
	LOOK_FOR_2 = {
		ENTER = (	"setDesiredRangeTo: 100000", "scanForNearestShipWithRole: convoy2", "pauseAI: 5.0","commsMessage: <klick> [teamster_look] <klick>"	);
		"TARGET_FOUND" = (	"setTargetToFoundTarget", setDestinationWithinTarget, "commsMessage: <klick> I am number 4, over. <klick>", "setStateTo: FOLLOW_2"	);
		"NOTHING_FOUND" = (	"setStateTo: LOOK_FOR_1"	);
		EXIT = (		);
		UPDATE = (		);
	};
	LOOK_FOR_1 = {
		ENTER = (	"setDesiredRangeTo: 100000", "scanForNearestShipWithRole: convoy1", "pauseAI: 4.0","commsMessage: <klick> [teamster_look] <klick>"	);
		"TARGET_FOUND" = (	"setTargetToFoundTarget", setDestinationWithinTarget, "commsMessage: <klick> I am number 3, over. <klick>", "setStateTo: FOLLOW_1"	);
		"NOTHING_FOUND" = (	"setStateTo: LOOK_FOR_DUCK", "commsMessage: <klick> Duck, were y'at bubba? <klick> "	);
		EXIT = (		);
		UPDATE = (		);
	};
	LOOK_FOR_DUCK = {
		ENTER = (	"setDesiredRangeTo: 100000", "scanForNearestShipWithRole: rubberduck", "pauseAI: 4.0","commsMessage: <klick> [teamster_look] <klick>"	);
		"TARGET_FOUND" = ("commsMessage: <klick> I am number 2, over. <klick>",	"setStateTo: FOLLOW_DUCK"	);
		"NOTHING_FOUND" = ("commsMessage: <klick> Guess I'll be the duck today. ten-four.<klick>", "switchAITo: enteringTraderAI.plist"	);
		EXIT = (		);
		UPDATE = (		);
	};
/* The above states check for members in the convoy */
/* Starting backwards, ensures eventual gaps are closed up. */
/* If no followers are detected, the ship becomes Rubberduck. IE the convoy leader. */
	FOLLOW_5 = {
		ENTER = (	"setDesiredRangeTo: 250"	);
		EXIT = (	"commsMessage: Breaker. breaker. [teamster] Signing off"	);
		UPDATE = (	"setSpeedTo: 1.0", performFlyToRangeFromDestination, "pauseAI: 5.0"	);
		ATTACKED = (	fightOrFleeHostiles,	"commsMessage: <klick> [teamster_attacked] <klick>");
		"INCOMING_MISSILE" = (	fireECM	);
		"ENERGY_LOW" = (	performFlee, "commsMessage: Breaker. breaker. [teamster_callsign] Outta here!", "pauseAI: 10.0", performHyperSpaceExit	);
		FLEEING = (	broadcastDistressMessage	);
		FIGHTING = (	setTargetToPrimaryAggressor, "setAITo: interceptAI.plist"	);
		"TARGET_LOST" = (	"setStateTo: LOOK_FOR_5"	);
		"TARGET_DESTROYED" = (	"setStateTo: LOOK_FOR_5"	);
		RESTARTED = (	"setStateTo: LOOK_FOR_5"	);
		"DESIRED_RANGE_ACHIEVED" = (	"setSpeedFactorTo: 0.5", "pauseAI: 5.0"	);
	};
	FOLLOW_4 = {
		ENTER = (	"setDesiredRangeTo: 250"	);
		EXIT = (	"commsMessage: Breaker. breaker. Signing off"	);
		UPDATE = (	"setSpeedTo: 1.0", performFlyToRangeFromDestination, "pauseAI: 5.0"	);
		ATTACKED = (	fightOrFleeHostiles,	"commsMessage: <klick> [teamster_attacked] <klick>");
		"INCOMING_MISSILE" = (	fireECM	);
		"ENERGY_LOW" = (	performFlee, "pauseAI: 10.0", performHyperSpaceExit	);
		FLEEING = (	broadcastDistressMessage	);
		FIGHTING = (	setTargetToPrimaryAggressor, "setAITo: interceptAI.plist"	);
		"TARGET_LOST" = (	"setStateTo: LOOK_FOR_4"	);
		"TARGET_DESTROYED" = (	"setStateTo: LOOK_FOR_4"	);
		RESTARTED = (	"setStateTo: LOOK_FOR_4"	);
		"DESIRED_RANGE_ACHIEVED" = (	"setSpeedFactorTo: 0.5", "pauseAI: 5.0"	);
	};
	FOLLOW_3 = {
		ENTER = (	"setDesiredRangeTo: 250"	);
		EXIT = (	"commsMessage: Breaker. breaker. Signing off"	);
		UPDATE = (	"setSpeedTo: 1.0", performFlyToRangeFromDestination, "pauseAI: 5.0"	);
		ATTACKED = (	fightOrFleeHostiles,	"commsMessage: <klick> [teamster_attacked] <klick>"	);
		"INCOMING_MISSILE" = (	fireECM	);
		"ENERGY_LOW" = (	performFlee, "pauseAI: 10.0", performHyperSpaceExit	);
		FLEEING = (	broadcastDistressMessage	);
		FIGHTING = (	setTargetToPrimaryAggressor, "setAITo: interceptAI.plist"	);
		"TARGET_LOST" = (	"setStateTo: LOOK_FOR_3"	);
		"TARGET_DESTROYED" = (	"setStateTo: LOOK_FOR_3"	);
		RESTARTED = (	"setStateTo: LOOK_FOR_3"	);
		"DESIRED_RANGE_ACHIEVED" = (	"setSpeedFactorTo: 0.5", "pauseAI: 5.0"	);
	};
	FOLLOW_2 = {
		ENTER = (	"setDesiredRangeTo: 250"	);
		EXIT = (	"commsMessage: Breaker. breaker. Signing off"	);
		UPDATE = (	"setSpeedTo: 1.0", performFlyToRangeFromDestination, "pauseAI: 5.0"	);
		ATTACKED = (	fightOrFleeHostiles,	"commsMessage: <klick> [teamster_attacked] <klick>"	);
		"INCOMING_MISSILE" = (	fireECM	);
		"ENERGY_LOW" = (	performFlee, "pauseAI: 10.0", performHyperSpaceExit	);
		FLEEING = (	broadcastDistressMessage	);
		FIGHTING = (	setTargetToPrimaryAggressor, "setAITo: interceptAI.plist"	);
		"TARGET_LOST" = (	"setStateTo: LOOK_FOR_2"	);
		"TARGET_DESTROYED" = (	"setStateTo: LOOK_FOR_2"	);
		RESTARTED = (	"setStateTo: LOOK_FOR_2"	);
		"DESIRED_RANGE_ACHIEVED" = (	"setSpeedFactorTo: 0.5", "pauseAI: 5.0"	);
	};
	FOLLOW_1 = {
		ENTER = (	"setDesiredRangeTo: 250"	);
		EXIT = (	"commsMessage: Breaker. breaker. Signing off"	);
		UPDATE = (	"setSpeedTo: 1.0", performFlyToRangeFromDestination, "pauseAI: 5.0"	);
		ATTACKED = (	fightOrFleeHostiles,	"commsMessage: <klick> [teamster_attacked] <klick>"	);
		"INCOMING_MISSILE" = (	fireECM	);
		"ENERGY_LOW" = (	performFlee, "pauseAI: 10.0", performHyperSpaceExit	);
		FLEEING = (	broadcastDistressMessage	);
		FIGHTING = (	setTargetToPrimaryAggressor, "setAITo: interceptAI.plist"	);
		"TARGET_LOST" = (	"setStateTo: LOOK_FOR_1"	);
		"TARGET_DESTROYED" = (	"setStateTo: LOOK_FOR_1"	);
		RESTARTED = (	"setStateTo: LOOK_FOR_1"	);
		"DESIRED_RANGE_ACHIEVED" = (	"setSpeedFactorTo: 0.5", "pauseAI: 5.0"	);
	};
	FOLLOW_RUBBERDUCK = {
		ENTER = (	"setDesiredRangeTo: 250"	);
		EXIT = (	"commsMessage: Breaker. breaker. Signing off"	);
		UPDATE = (	"setSpeedTo: 1.0", performFlyToRangeFromDestination, "pauseAI: 5.0"	);
		ATTACKED = (	fightOrFleeHostiles,	"commsMessage: <klick> [teamster_attacked] <klick>"	);
		"INCOMING_MISSILE" = (	fireECM	);
		"ENERGY_LOW" = (	performFlee, "pauseAI: 10.0", performHyperSpaceExit	);
		FLEEING = (	broadcastDistressMessage	);
		FIGHTING = (	setTargetToPrimaryAggressor, "setAITo: interceptAI.plist"	);
		"TARGET_LOST" = (	"setStateTo: LOOK_FOR_RUBBERDUCK"	);
		"TARGET_DESTROYED" = (	"setStateTo: LOOK_FOR_RUBBERDUCK"	);
		RESTARTED = (	"setStateTo: LOOK_FOR_RUBBERDUCK"	);
		"DESIRED_RANGE_ACHIEVED" = (	"setSpeedFactorTo: 0.5", "pauseAI: 5.0"	);
	}
}
/* These dictate follower behaviour */
/* When convoy reaches station, leader will dock. Then next in line will become leader and dock.*/
/* Now I need to make a list of trader like_ships with custom roles. */
-Look_for script-section works.
-contains rudimentary commschatter (toomuch?)
for testing purposes mainly.
(Suggestions welcome, see descriptions for more expanded comms)
-Todo: find a way to make spawning ships work.
-Todo: complete list to convoy7.
-Todo: addShips: all # at once to test follower section.

descriptions.plist:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

	<key>teamster_callsign</key>
	<array>
		<string>Makkay</string>
		<string>Bandit</string>
		<string>Mouse</string>
		<string>Astroboy</string>
		<string>Strangler</string>
		<string>Rubberduckie</string>
		<string>Redneck</string>
		<string>Commiestar</string>
		<string>Fanboy</string>
		<string>BigMike</string>
		<string>Greyhound</string>
		<string>Bodger</string>
		<string>NerdyChick</string>
		<string>Desiree</string>
		<string>Wolffe</string>
		<string>MacCarrot</string>
	</array>
	<key>teamster_look</key>
	<array>
		<string> Hey [teamster_callsign], Where yous at? </string>
	</array>
	<key>teamster_found</key>
	<array>
		<string> Roger, we've got a convoy! </string>
		<string> [teamster_callsign] here. The reactor's runnin' hot and I am ready to go. </string>
	</array>
	<key>teamster_attacked</key>
	<array>
		<string> Incoming! </string>
		<string> Bacon at six. </string>
		<string> There's a bear in the sky, ten-four. </string>
		<string> Look at me fuzzz! </string>
		<string> There's a bandit at my henhouse. </string>
	</array>
</dict>
</plist>
Shipdata.plist:

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>python-cruiser-alt2</key>
	<dict>
		<key>ai_type</key>
		<string>traderAI.plist</string>
		<key>bounty</key>
		<integer>0</integer>
		<key>cargo_type</key>
		<string>CARGO_NOT_CARGO</string>
		<key>energy_recharge_rate</key>
		<real>3.5</real>
		<key>exhaust</key>
		<array>
			<string>-6 0.0 -64.0 3.8 3.8 10.0</string>
			<string>0.0 0 -64.0 4 12 25.0</string>
			<string>6 0.0 -64.0 3.8 3.8 10.0</string>
		</array>
		<key>forward_weapon_type</key>
		<string>WEAPON_NONE</string>
		<key>fuel</key>
		<real>20</real>
		<key>has_ecm</key>
		<real>0.85</real>
		<key>has_escape_pod</key>
		<real>0.85</real>
		<key>has_scoop</key>
		<real>1.0</real>
		<key>has_fuel_injection</key>
		<real>0.125</real>
		<key>has_shield_booster</key>
		<real>0.125</real>
		<key>likely_cargo</key>
		<integer>10</integer>
		<key>max_cargo</key>
		<integer>145</integer>
		<key>max_energy</key>
		<real>450</real>
		<key>max_flight_pitch</key>
		<real>0.8</real>
		<key>max_flight_roll</key>
		<real>2</real>
		<key>max_flight_speed</key>
		<real>350</real>
		<key>max_missiles</key>
		<integer>4</integer>
		<key>missiles</key>
		<integer>4</integer>
		<key>model</key>
		<string>ppc_ah_hull.dat</string>
		<key>name</key>
		<string>Python Class Cruiser Alternate2</string>
		<key>roles</key>
		<string>pirate hunter trader ppc_alt2</string>
		<key>thrust</key>
		<real>36</real>
		<key>weapon_energy</key>
		<real>20</real>
		<key>subentities</key>
		<array>
			<string>ppc_ah_scoop 0 -20.77641 -16.190566 1 0 0 0</string>
			<string>ppc_ah_scoop_lip 0 -20.77641 -16.190566 1 0 0 0</string>
			<string>ppc_ah_gun -13.4 -4.5 16 0.414 0 0 1</string>
			<string>ppc_ah_gun 13.4 -4.5 16 1 0 0 0.414</string>
			<string>ppc_ah_gun -8.5 -8.5 20 0.414 0 0 1</string>
			<string>ppc_ah_gun 8.5 -8.5 20 1 0 0 0.414</string>
		</array>
	<!-- view positions -->
		<key>view_position_aft</key>
		<string>0.0 22.5 -80.0</string>
		<key>view_position_forward</key>
		<string>0.0 9.50 86.30</string>
		<key>view_position_port</key>
		<string>-25.0 18.75 0.0</string>
		<key>view_position_starboard</key>
		<string>25.0 18.75 0.0</string>
	<!-- hatches etc. -->
		<key>weapon_position_aft</key>
		<string>0.0 -22.5 -80.0</string>
		<key>weapon_position_forward</key>
		<string>0.0 -3.5 108.0</string>
		<key>weapon_position_port</key>
		<string>-20.5 5.0 31.0</string>
		<key>weapon_position_starboard</key>
		<string>20.5 5.0 31.0</string>
		<key>missile_launch_position</key>
		<string>0.0 -20.5 60.0</string>
		<key>aft_eject_position</key>
		<string>0.0 -20.0 -64</string>
		<key>frangible</key>
		<false/>
		<key>smooth</key>
		<false/>
	</dict>
	<key>python-cruiser-alt2-player</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>forward_weapon_type</key>
		<string>WEAPON_BEAM_LASER</string>
		<key>max_cargo</key>
		<integer>145</integer>
		<key>max_energy</key>
		<real>450</real>
		<key>max_flight_speed</key>
		<real>350</real>
		<key>max_missiles</key>
		<integer>4</integer>
		<key>missiles</key>
		<integer>3</integer>
		<key>roles</key>
		<string>player</string>
		<key>custom_views</key>
		<array>
			<dict>
				<key>view_description</key>
				<string>External View - Aft</string>
				<key>view_position</key>
				<string>0.0 100.0 -173.21</string>
				<key>view_orientation</key>
				<string>0.966 -0.259 0.0 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
			<dict>
				<key>view_description</key>
				<string>External View - Starboard</string>
				<key>view_position</key>
				<string>100.0 0.0 -173.21</string>
				<key>view_orientation</key>
				<string>0.966 0.0 0.259 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
			<dict>
				<key>view_description</key>
				<string>External View - Port</string>
				<key>view_position</key>
				<string>-100.0 0.0 -173.21</string>
				<key>view_orientation</key>
				<string>0.966 0.0 -0.259 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
			<dict>
				<key>view_description</key>
				<string>Scoop camera</string>
				<key>view_position</key>
				<string>0.0 -38.3333 1.6666</string>
				<key>view_orientation</key>
				<string>1.0 0.0 0.0 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
			<dict>
				<key>view_description</key>
				<string>External View - Front</string>
				<key>view_position</key>
				<string>0.0 20.0 250.0</string>
				<key>view_orientation</key>
				<string>0.0 0.0 1.0 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
			<dict>
				<key>view_description</key>
				<string>External View - Above</string>
				<key>view_position</key>
				<string>0.0 300.0 0.0</string>
				<key>view_orientation</key>
				<string>0.7071 -0.7071 0.0 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
			<dict>
				<key>view_description</key>
				<string>External View - Below</string>
				<key>view_position</key>
				<string>0.0 -300.0 0.0</string>
				<key>view_orientation</key>
				<string>0.7071 0.7071 0.0 0.0</string>
				<key>weapon_facing</key>
				<string>FORWARD</string>
			</dict>
		</array>
	</dict>
	<key>ppc_ah_scoop</key>
	<dict>
		<key>ai_type</key>
		<string>nullAI.plist</string>
		<key>name</key>
		<string>Component: Fuelscoop</string>
		<key>max_energy</key>
		<real>100</real>
		<key>model</key>
		<string>ppc_ah_scoop.dat</string>
		<key>roles</key>
		<string>ppc_ah_scoop</string>
		<key>thrust</key>
		<real>0</real>
		<key>smooth</key>
		<true/>
	</dict>
	<key>ppc_ah_scoop_lip</key>
	<dict>
		<key>ai_type</key>
		<string>nullAI.plist</string>
		<key>name</key>
		<string>Component: Fuelscoop_Guard</string>
		<key>max_energy</key>
		<real>30</real>
		<key>model</key>
		<string>ppc_ah_scoop_lip.dat</string>
		<key>roles</key>
		<string>ppc_ah_scoop_lip</string>
		<key>thrust</key>
		<real>0</real>
		<key>smooth</key>
		<false/>
	</dict>
	<key>ppc_ah_gun</key>
	<dict>
		<key>ai_type</key>
		<string>nullAI.plist</string>
		<key>energy_recharge_rate</key>
		<real>3</real>
		<key>forward_weapon_type</key>
		<string>WEAPON_BEAM_LASER</string>
		<key>laser_color</key>
		<string>redColor</string>
		<key>max_energy</key>
		<real>50</real>
		<key>max_flight_pitch</key>
		<real>0</real>
		<key>max_flight_roll</key>
		<real>0</real>
		<key>max_flight_speed</key>
		<real>0</real>
		<key>max_missiles</key>
		<integer>0</integer>
		<key>missiles</key>
		<integer>0</integer>
		<key>model</key>
		<string>ppc_ah_gun.dat</string>
		<key>name</key>
		<string>Component: Gunmounting</string>
		<key>roles</key>
		<string>ppc_ah_gun</string>
		<key>thrust</key>
		<real>0</real>
		<key>weapon_energy</key>
		<real>5</real>
		<key>weapon_position_forward</key>
		<string>-1.21 0.0 4.0</string>
	</dict>
	<key>python-cruiser-alt2RP</key>
	<dict>
	<key>like_ship</key>
	<string>python-cruiser-alt2</string>
	<key>bounty</key>
	<integer>50</integer>
	<key>model</key>
	<string>ppc_ah_hull_rp.dat</string>
	<key>name</key>
	<string>PPC_A2: RatPack Mobster</string>
	<key>roles</key>
	<string>pirate ppc_alt2</string>
	</dict>
	<!-- convoy stuff -->
	<key>convoy5</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>ai_type</key>
		<string>convoysetup5AI.plist</string>
		<key>roles</key>
		<string>convoy trader(0.05) convoy5</string>
		<key>name</key>
		<string>PPC_A2</string>
		<key>setup_actions</key>
		<array>
			<string>debugOn</string>
			<string>spawnShip: convoy4</string>
			<string>debugOff</string>
		</array>
	</dict>
	<key>convoy4</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>ai_type</key>
		<string>convoyAI.plist</string>
		<key>roles</key>
		<string>convoy trader(0.05) convoy4</string>
		<key>name</key>
		<string>PPC_A2</string>
		<key>setup_actions</key>
		<array>
			<string>debugOn</string>
			<string>spawnShip: convoy3</string>
			<string>debugOff</string>
		</array>
	</dict>
	<key>convoy3</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>ai_type</key>
		<string>convoyAI.plist</string>
		<key>roles</key>
		<string>convoy trader(0.05) convoy3</string>
		<key>name</key>
		<string>PPC_A2</string>
		<key>setup_actions</key>
		<array>
			<string>debugOn</string>
			<string>spawnShip: convoy2</string>
			<string>debugOff</string>
		</array>
	</dict>
	<key>convoy2</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>ai_type</key>
		<string>convoyAI.plist</string>
		<key>roles</key>
		<string>convoy trader(0.05) convoy2</string>
		<key>name</key>
		<string>PPC_A2</string>
		<key>setup_actions</key>
		<array>
		<string>debugOn</string>
		<string>spawnShip: convoy1</string>
		<string>debugOff</string>
		</array>
	</dict>
	<key>convoy1</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>ai_type</key>
		<string>convoyAI.plist</string>
		<key>cargo_carried</key>
		<string>computers</string>
		<key>roles</key>
		<string>convoy trader(0.05) convoy1</string>
		<key>name</key>
		<string>PPC_A2</string>
		<key>setup_actions</key>
		<array>
			<string>spawnShip: rubberduck</string>
		</array>
	</dict>
	<key>rubberduck</key>
	<dict>
		<key>like_ship</key>
		<string>python-cruiser-alt2</string>
		<key>ai_type</key>
		<string>enteringTraderAI.plist</string>
		<key>cargo_carried</key>
		<string>food</string>
		<key>roles</key>
		<string>rubberduck convoy trader(0.05)</string>
		<key>name</key>
		<string>PPC_A2 [Rubberduck]</string>
		<key>escort_ship</key>
		<string>escortviper</string>
		<key>escorts</key>
		<integer>1</integer>
		<key>subentities</key>
		<array>
			<string>ppc_ah_scoop 0 -20.77641 -16.190566 1 0 0 0</string>
			<string>ppc_ah_scoop_lip 0 -20.77641 -16.190566 1 0 0 0</string>
			<string>ah_turret1 -13.4 -4.5 16 0.414 0 0 1</string>
			<string>ah_turret1 13.4 -4.5 16 1 0 0 0.414</string>
		</array>
	</dict>
</dict>
</plist>
-this version has SpawnShip as setup_action, does not work.
-Eventually convoy7 will be the highest I think.
-todo: check cargocarried is working,
-todo: rubberducky turrets working?
-todo: repair broken scoop modelUVmap.
-todo: mirror texture on righthand side turrets.
-todo: add entries for variant traderships.

script.plist:

Code: Select all

{
	"minimal_agrarian_convoy" = (
		{
			conditions = (
				"status_string equal STATUS_EXITING_WITCHSPACE",
				"systemGovernment_number lessthan 3",
				"systemEconomy_number lessthan 4"
			);
			do = (
				{
					conditions = (systemPopulation_number lessthan 100000);
					do = (
						{
							conditions = ("d100number lessthan 26");
							do = ("addSystemShips:  convoy2 1 0.05");
							else = ("addSystemShips: convoy3 1 0.05");
						}
					);
					else = (
						{
							conditions = (systemPopulation_number morethan 5000000);
							do = (
								{
									conditions = ("d100number lessthan 26");
									do = ("addSystemShips:  convoy4 1 0.05");
									else = (
										{
											conditions = ("d100number morethan 74");
											do = ("addSystemShips: convoy8 1 0.05");
											else = ("addSystemShips: convoy6 1 0.05");
										}
									);
								}
							);
							else = (
								{
									conditions = ("d100number lessthan 26");
									do = ("addSystemShips:  convoy2 1 0.05");
									else = (
										{
											conditions = ("d100number morethan 74");
											do = ("addSystemShips: convoy6 1 0.05");
											else = ("addSystemShips: convoy4 1 0.05");
										}
									);
								}
							);
						}
					);
				}
			);
		}
	);
} */
/* minimal script to introduce variable number of convoy ships to the more dangerous agrarian systems. */
This script is not currently in use, using a basic addsystemships near eagis script for testing. Not even sure if it is valid...most likely not.

PPC_A2:
http://home.tiscali.nl/arexack/arexack/WIP/PPC_AH/
Image