Equipment.plist
using equipment
Player buyable equipment is stored in a file named equipment.plist that resides in the Config folder of a OXP. You can add equipment by adding arrays to this plist file. Every equipment array is build of an array of entries.
equipment structure
The following equipment data are read in by Oolite.
( ( 1, 300, Missile, "EQ_MISSILE", "Faulcon de Lacy HM3 homing missile, fast and accurate when used in conjunction with standard targetting scanners.", { "available_to_all" = YES; } ) )
1) The first entry is an integer that determines the technical level from which the equipment can be bought. A level of 99 has a special meaning. Only this value can be changed by script. Please note that the number displayed on the system data screen is one higher than the system's tech level, so to make equipment available at a displayed TL:10 and above in game, enter 9 here.
Repairs can take place at tech levels one lower than the purchase level, and occasionally equipment will be offered at systems of a slightly lower tech level than the number given here.
2) The second entry is the costs of the equipment in tenths of a credit.
3) This is a string that shows the name of the equipment as seen by the player.
4) This is a string that shows the name of the equipment that is used by scripting. Must start with EQ_ and endings like _MISSILE or _MINE give it a special handling.
5) This string gives a short description of the item.
6) This is a dictionary that can contain several special features like:
{ "available_to_all" = yes; "available_to_NPCs" = yes; "available_to_player" = no; conditions = ( "systemGovernment_number morethan 3" ); "condition_script" = "myoxp_conditions.js"; "damage_probability" = 1.0; "incompatible_with_equipment" = "EQ_FUEL_SCOOPS"; "is_external_store" = no; // is missile or mine and added to pylon. "portable_between_ships" = yes; "requires_any_equipment" = ( "EQ_FUEL_SCOOPS", "EQ_ECM ); "requires_cargo_space" = 5; "requires_clean" = yes; "requires_empty_pylon" = yes; "requires_equipment" = "EQ_FUEL_SCOOPS"; "requires_free_passenger_berth" = no; "requires_full_fuel" = no; "requires_mounted_pylon" = yes; "requires_not_clean" = yes; "requires_non_full_fuel" = no; "script" = "myCustomScript.js"; "script_info" = { myCustomProperty = 0; }; "strict_mode_only" = no; "strict_mode_compatible" = yes; "visible" = yes; // listed on the F5F5 screen. }
Most names will explain themselves. For detailed explanation look at the corresponding values in EquipmentInfo.scriptInfo. In this list the empty/mounted pylons are not necessary when the equipment ends on MINE or MISSILE.
Conditions can contain a single string with one condition or an array of condition strings. Conditions are only checked when the equipment would be available by the other criteria. The condition_script option, available from Oolite 1.77 onwards, specifies a Javascript file which controls the conditions for this equipment. The allowAwardEquipment
function in that condition script will then be tested before the equipment is allowed.
available_to_all means all ships can buy the item. When not set it is only buyable when the equipment is defined in the shipyard.plist under optional_equipment.
NOTE: requires_cargo_space is only used to determine a condition to show an item on the list. Until Oolite 1.76 it uses no cargo space when bought, and except for the core game's passenger cabins has a bug which will sometimes cause equipment to mysteriously vanish when reloading a saved game. Starting with Oolite 1.77, this key will use cargo space for user defined equipment.
NOTE2: "script_info" is added with test release 1.74. It contains a directory of custom entries that become properties of EquipmentInfo.scriptInfo
NOTE3: "script" is added with test release 1.75. It contains a name of a script file used by the equipment. Equipment that contains a script is put on a special list. The player than can cycle through that list by pressing "shift-N". (similar as selecting a missile). The primed script is than the active script. Whenever a player now presses "n", the "this.activated()" event handler of the primed equipment is executed.
this.activated = function() { // your code }
NOTE4: requires_equipment, requires_any_equipment, incompatible_with_equipment can be a single string or an array of strings.
NOTE5: "damage_probability" will be added in test release 1.77. It is the relative probability that this equipment will be damaged. It is ignored (and always zero) for missiles and mines, and defaults to 1.0 for all other equipment.