189- (id) initWithInfo:(NSArray *)info
192 NSDictionary *extra =
nil;
193 NSArray *conditions =
nil;
194 NSString *condition_script =
nil;
195 NSArray *keydef =
nil;
198 if (
self ==
nil) OK = NO;
205 _techLevel = [
info oo_unsignedIntAtIndex:EQUIPMENT_TECH_LEVEL_INDEX];
206 _price = [
info oo_unsignedIntAtIndex:EQUIPMENT_PRICE_INDEX];
207 _name = [[
info oo_stringAtIndex:EQUIPMENT_SHORT_DESC_INDEX] retain];
208 _identifier = [[
info oo_stringAtIndex:EQUIPMENT_KEY_INDEX] retain];
209 _description = [[
info oo_stringAtIndex:EQUIPMENT_LONG_DESC_INDEX] retain];
211 if (_name ==
nil || _identifier ==
nil || _description ==
nil)
213 OOLog(
@"equipment.load",
@"***** ERROR: Invalid equipment.plist entry - missing name, identifier or description (\"%@\
", %@, \"%@\")", _name, _identifier, _description);
221 if ([_identifier hasSuffix:
@"_MISSILE"] || [_identifier hasSuffix:
@"_MINE"])
223 _isMissileOrMine = YES;
224 _requiresEmptyPylon = YES;
226 else if ([_identifier isEqualToString:
@"EQ_PASSENGER_BERTH_REMOVAL"])
228 _requiresFreePassengerBerth = YES;
230 else if ([_identifier isEqualToString:
@"EQ_FUEL"])
232 _requiresNonFullFuel = YES;
235 _isAvailableToPlayer = YES;
236 _isAvailableToNPCs = YES;
237 _damageProbability = 1.0;
244 extra = [
info oo_dictionaryAtIndex:EQUIPMENT_EXTRA_INFO_INDEX];
248 _isAvailableToAll = [
extra oo_boolForKey:@"available_to_all" defaultValue:_isAvailableToAll];
249 _isAvailableToPlayer = [
extra oo_boolForKey:@"available_to_player" defaultValue:_isAvailableToPlayer];
250 _isAvailableToNPCs = [
extra oo_boolForKey:@"available_to_NPCs" defaultValue:_isAvailableToNPCs];
252 _isMissileOrMine = [
extra oo_boolForKey:@"is_external_store" defaultValue:_isMissileOrMine];
253 _requiresEmptyPylon = [
extra oo_boolForKey:@"requires_empty_pylon" defaultValue:_requiresEmptyPylon];
254 _requiresMountedPylon = [
extra oo_boolForKey:@"requires_mounted_pylon" defaultValue:_requiresMountedPylon];
255 _requiresClean = [
extra oo_boolForKey:@"requires_clean" defaultValue:_requiresClean];
256 _requiresNotClean = [
extra oo_boolForKey:@"requires_not_clean" defaultValue:_requiresNotClean];
257 _portableBetweenShips = [
extra oo_boolForKey:@"portable_between_ships" defaultValue:_portableBetweenShips];
258 _requiresFreePassengerBerth = [
extra oo_boolForKey:@"requires_free_passenger_berth" defaultValue:_requiresFreePassengerBerth];
259 _requiresFullFuel = [
extra oo_boolForKey:@"requires_full_fuel" defaultValue:_requiresFullFuel];
260 _requiresNonFullFuel = [
extra oo_boolForKey:@"requires_non_full_fuel" defaultValue:_requiresNonFullFuel];
261 _isVisible = [
extra oo_boolForKey:@"visible" defaultValue:_isVisible];
262 _canCarryMultiple = [
extra oo_boolForKey:@"can_carry_multiple" defaultValue:NO];
263 _hideValues = [
extra oo_boolForKey:@"hide_values" defaultValue:NO];
265 _requiredCargoSpace = [
extra oo_unsignedIntForKey:@"requires_cargo_space" defaultValue:_requiredCargoSpace];
267 _installTime = [
extra oo_unsignedIntForKey:@"installation_time" defaultValue:0];
268 _repairTime = [
extra oo_unsignedIntForKey:@"repair_time" defaultValue:0];
269 _provides = [[
extra oo_arrayForKey:@"provides" defaultValue:[
NSArray array]] retain];
271 id dispColor = [
extra oo_objectForKey:@"display_color" defaultValue:nil];
274 _weaponInfo = [[
extra oo_dictionaryForKey:@"weapon_info" defaultValue:[
NSDictionary dictionary]] retain];
276 _damageProbability = [
extra oo_floatForKey:@"damage_probability" defaultValue:(_isMissileOrMine?0.0:1.0)];
278 id object = [
extra objectForKey:@"requires_equipment"];
279 if ([
object isKindOfClass:[NSString
class]]) _requiresEquipment = [[
NSSet setWithObject:object] retain];
280 else if ([
object isKindOfClass:[NSArray
class]]) _requiresEquipment = [[
NSSet setWithArray:object] retain];
281 else if (
object !=
nil)
283 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not a string or an array.",
@"requires_equipment", _identifier);
286 object = [
extra objectForKey:@"requires_any_equipment"];
287 if ([
object isKindOfClass:[NSString
class]]) _requiresAnyEquipment = [[
NSSet setWithObject:object] retain];
288 else if ([
object isKindOfClass:[NSArray
class]]) _requiresAnyEquipment = [[
NSSet setWithArray:object] retain];
289 else if (
object !=
nil)
291 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not a string or an array.",
@"requires_any_equipment", _identifier);
294 object = [
extra objectForKey:@"incompatible_with_equipment"];
295 if ([
object isKindOfClass:[NSString
class]]) _incompatibleEquipment = [[
NSSet setWithObject:object] retain];
296 else if ([
object isKindOfClass:[NSArray
class]]) _incompatibleEquipment = [[
NSSet setWithArray:object] retain];
297 else if (
object !=
nil)
299 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not a string or an array.",
@"incompatible_with_equipment", _identifier);
302 object = [
extra objectForKey:@"conditions"];
303 if ([
object isKindOfClass:[NSString
class]]) conditions = [
NSArray arrayWithObject:object];
304 else if ([
object isKindOfClass:[NSArray
class]]) conditions = object;
305 else if (
object !=
nil)
307 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not a string or an array.",
@"conditions", _identifier);
309 if (conditions !=
nil)
311 OOStandardsDeprecated([NSString stringWithFormat:
@"The conditions key is deprecated for equipment %@",_name]);
319 object = [
extra objectForKey:@"condition_script"];
320 if ([
object isKindOfClass:[NSString
class]])
322 condition_script = object;
324 else if (
object !=
nil)
326 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not a string.",
@"condition_script", _identifier);
328 if (condition_script !=
nil)
337 _scriptInfo = [
extra oo_dictionaryForKey:@"script_info"];
340 _script = [
extra oo_stringForKey:@"script"];
341 if (_script !=
nil && ![
OOScript jsScriptFromFileNamed:_script properties:
nil]) _script =
nil;
345 _fastAffinityA = !![
extra oo_boolForKey:@"fast_affinity_defensive"];
346 _fastAffinityB = !![
extra oo_boolForKey:@"fast_affinity_offensive"];
353 object = [
extra objectForKey:@"default_activate_key"];
354 if ([
object isKindOfClass:[NSArray
class]]) keydef = object;
355 else if (
object !=
nil)
357 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not an array.",
@"default_activate_key", _identifier);
364 _defaultActivateKey = [PLAYER processKeyCode:keydef];
365 checking = [PLAYER validateKey:[
NSString stringWithFormat:@"activate_%@", _identifier] checkKeys:_defaultActivateKey];
367 if (checking !=
nil) {
368 OOLog(
@"equipment.load",
@"***** Error: %@ for equipment item %@ is already in use for %@. Default not applied",
@"default_activate_key", _identifier, checking);
369 _defaultActivateKey =
nil;
373 object = [
extra objectForKey:@"default_mode_key"];
374 if ([
object isKindOfClass:[NSArray
class]]) keydef = object;
375 else if (
object !=
nil)
377 OOLog(
@"equipment.load",
@"***** ERROR: %@ for equipment item %@ is not an array.",
@"default_mode_key", _identifier);
384 _defaultModeKey = [PLAYER processKeyCode:keydef];
385 checking = [PLAYER validateKey:[
NSString stringWithFormat:@"mode_%@", _identifier] checkKeys:_defaultModeKey];
387 if (checking !=
nil) {
388 OOLog(
@"equipment.load",
@"***** Error: %@ for equipment item %@ is already in use for %@. Default not applied.",
@"default_mode_key", _identifier, checking);
389 _defaultModeKey =
nil;