def __init__(self, data=None): self.states = {} if IS_AIRPLANE_EDITOR: self.__data = data if data != None: params = (('id', 0), ('componentType', ''), ('componentTypeQuota', 1.0), ('componentXml', ''), ('repairDestructedAfter', -1.0), ('health', '20.0'), ('fireMountPoint', ''), ('componentPosition', 'Front')) if IS_AIRPLANE_EDITOR: self.__params = params readValues(self, data, params) if data.has_key('gunPartName'): readValue(self, data, 'gunPartName', '') if self.health.find('%') == -1: self.healthValue = float(self.health) self.healthPrc = 0.0 else: self.healthPrc = float(self.health[:-1]) / 100.0 self.healthValue = 0.0 self.componentXml = self.componentXml.lower() self.bboxes = BBoxes(findSection(data, 'bBoxes')) statesSection = findSection(data, 'states') if statesSection: for stateData in statesSection.values(): state = PartTypeStateSettings(stateData) self.states[int(state.id)] = state fireSection = findSection(data, 'fire') if fireSection: self.fire = FireStateSettings(fireSection) if not hasattr(self, 'fire'): self.fire = None return
def __init__(self, typeID, fileName, data): DBBaseClass.__init__(self, typeID, fileName) readValue(self, data, 'planeScheme', '') self.__parts = {} self._readPartsData(data) self.__groups = {} self._readGroupsData(data)
def readData(self, data): if data != None: readValue(self, data, 'scenario', '') excludeEvents = findSection(data, 'excludeEvents') if excludeEvents: for event in excludeEvents.values(): self.excludeEvents.append(event.asString) return
def readData(self, data): if data != None: readValue(self, data, 'detailTexture', '') decalSettingsData = findSection(data, 'decalsSettings') if self.decalsSettings: self.decalsSettings.readData(decalSettingsData) else: self.decalsSettings = DecalsSettings(decalSettingsData) return
def readData(self, data = None): if data != None: readValue(self, data, 'position', Math.Vector3(0, 0, 0)) readValue(self, data, 'direction', Math.Vector3(0, 0, 0)) else: self.position = Math.Vector3(0, 0, 0) self.direction = Math.Vector3(0, 0, 0) self.position *= AIRCRAFT_MODEL_SCALING return
def readData(self, data = None): if data != None: readValue(self, data, 'name', 'unknown') self.decals = {} decalsSection = findSection(data, 'decals') if decalsSection: for decalData in decalsSection.values(): decal = DecalSettings(decalData) self.decals[decal.id] = decal return
def __init__(self, data=None): if data is not None: readValue(self, data, 'duration', 0.0) distanceCurvePoints = self.readPoints( findSection(data, 'distanceCurve')) self.distanceCurvePoints = distanceCurvePoints['points'] self.minDeltaPosition = distanceCurvePoints['minValue'] self.maxDeltaPosition = distanceCurvePoints['maxValue'] heightCurvePoints = self.readPoints( findSection(data, 'heightCurve')) self.heightCurvePoints = heightCurvePoints['points'] self.minHeight = heightCurvePoints['minValue'] self.maxHeight = heightCurvePoints['maxValue'] return
def __init__(self, data=None): self.customSettings = {} if IS_AIRPLANE_EDITOR: self.__data = data if data != None: params = (('model', ''), ('mountPoint', ''), ('animatorName', '')) if IS_AIRPLANE_EDITOR: self.__params = params readValue(self, data, 'name', '') readValues(self, data, params) settings = CustomSettingsFactory.readSettings(data) if settings: self.customSettings[settings.name()] = settings return
def readData(self, data = None): if data != None: readValue(self, data, 'id', -1) readValue(self, data, 'texture', '') readValue(self, data, 'icoPath', '') if data.has_key('bottomColor'): setattr(self, 'bottomColor', data.readVector4('bottomColor', Math.Vector4(0, 0, 0, 0))) if data.has_key('reflectionColor'): setattr(self, 'reflectionColor', data.readVector4('reflectionColor', Math.Vector4(0, 0, 0, 0))) if data.has_key('glossinessOffset'): readValue(self, data, 'glossinessOffset', 0.0) if data.has_key('camouflageMask'): readValue(self, data, 'camouflageMask', '') if data.has_key('camouflageNeutral'): setattr(self, 'camouflageNeutral', data.readVector4('camouflageNeutral', Math.Vector4(0, 0, 0, 0))) if data.has_key('camouflageAllied'): setattr(self, 'camouflageAllied', data.readVector4('camouflageAllied', Math.Vector4(0, 0, 0, 0))) if data.has_key('camouflageHostile'): setattr(self, 'camouflageHostile', data.readVector4('camouflageHostile', Math.Vector4(0, 0, 0, 0))) return
def __init__(self, data = None): if data != None: readValue(self, data, 'direction', Math.Vector3(0, 0, 0)) readValue(self, data, 'angle', 360) readValue(self, data, 'range', 330) self.direction.normalise() return
def readData(self, data): if data != None: readValue(self, data, 'aileronMaxAngle', 45.0) readValue(self, data, 'elevatorMaxAngle', 45.0) readValue(self, data, 'rudderMaxAngle', 45.0) readValue(self, data, 'flapperMaxAngle', 45.0) readValue(self, data, 'brakeMaxAngle', 45.0) readValue(self, data, 'slateOffset', 0.0) readValue(self, data, 'slateOnAngle', 10.0) readValue(self, data, 'brakeOffset', 0.0) readValue(self, data, 'aileronSpeed', 45.0) readValue(self, data, 'elevatorSpeed', 45.0) readValue(self, data, 'rudderSpeed', 45.0) readValue(self, data, 'flapperSpeed', 45.0) readValue(self, data, 'brakeSpeed', 45.0) readValue(self, data, 'slateSpeed', 0.4) readValue(self, data, 'brakeOffsetSpeed', 45.0) readValue(self, data, 'rotorSpeedBroken', 1) readValue(self, data, 'rotorSpeedFalling', 2) readValue(self, data, 'rotorSpeedLow', 5) readValue(self, data, 'rotorSpeedNormal', 10) readValue(self, data, 'rotorSpeedFosage', 20) readValue(self, data, 'hangarConfig', NOT_AVAILABLE) readValue(self, data, 'hangarLandingPart', NOT_AVAILABLE) readValue(self, data, 'camera', '') readValue(self, data, 'cameraOffset', Math.Vector3(0, 0, 0)) readValue(self, data, 'hudPlaneScheme', '') readValue(self, data, 'speedwiseEngineEffect', 0.0) surfaceSettings = findSection(data, 'surfaceSettings') if surfaceSettings: if self.surfaceSettings: self.surfaceSettings.readData(surfaceSettings) else: self.surfaceSettings = SurfaceSettings(surfaceSettings) hangarScenario = findSection(data, 'hangarScenario') if hangarScenario: if self.hangarScenario: self.hangarScenario.readData(surfaceSettings) else: self.hangarScenario = HangarScenario(hangarScenario) damageEffects = findSection(data, 'damageEffects') if self.damageEffects: self.damageEffects.readData(damageEffects) else: self.damageEffects = DamageEffects(damageEffects) cameraEffectsData = findSection(data, 'cameraEffects') if self.cameraEffects: self.cameraEffects.readData(cameraEffectsData) else: self.cameraEffects = CameraEffects(cameraEffectsData) accelFovData = findSection(data, 'accelerationFov') if self.accelFovSettings: self.accelFovSettings.readData(accelFovData) else: self.accelFovSettings = AccelerationFovSettings(accelFovData) gunnerAnimatorSettingsSect = findSection(data, 'gunnerAnimatorSettings') if gunnerAnimatorSettingsSect is not None: for key, animatorSettingsSect in gunnerAnimatorSettingsSect.items(): id = animatorSettingsSect.readInt('partId', -1) settings = self.gunnerAnimatorSettings.get(id) if settings is not None: settings.readData(animatorSettingsSect) else: settings = GunnerHeadAnimatorSettings(animatorSettingsSect) self.gunnerAnimatorSettings[id] = settings if IS_EDITOR: self.__data = data return
def __init__(self, partData): readValue(self, partData, 'normalState', '') readValue(self, partData, 'damageState', '') readValue(self, partData, 'critState', '')
def readData(self, data = None): readValue(self, data, 'name', 'unknown') readValue(self, data, 'position', Math.Vector3(0, 0, 0)) readValue(self, data, 'direction', Math.Vector3(0, 0, 0)) self.position *= AIRCRAFT_MODEL_SCALING
def readData(self, data): if data: readValue(self, data, 'destroy', '') readValue(self, data, 'receive_damage_1', '') readValue(self, data, 'receive_damage_2', '') readValue(self, data, 'effectFire', '')
def readData(self, data): if data: readValue(self, data, 'name', '') readValue(self, data, 'turretName', '') readValue(self, data, 'maxHealth', 200.0) readValue(self, data, 'stealthFactor', 1.0) readValue(self, data, 'alignToGround', False) readValue(self, data, 'superiorityPoints', 0) for groupID in range(SUPERIORITY_POINTS_GROUPS_MAX): readValue(self, data, 'superiorityPointsGroup%d' % groupID, 0) readValue(self, data, 'mass', 100000.0) readValue(self, data, 'type', '') readValue(self, data, 'modelScaling', AIRCRAFT_MODEL_SCALING) self.type = TYPE_TEAM_OBJECT_STR_MAP.get(self.type, TYPE_TEAM_OBJECT.INVALID) if self.type == TYPE_TEAM_OBJECT.INVALID: LOG_ERROR('invalid object type for', self.typeID, self.typeName, self.name) visibilityData = findSection(data, 'visibility') self.visibility = visibilityData and VisibilityTunes( visibilityData) or None self.bboxes = BBoxes(findSection(data, 'bBoxes'), self.modelScaling) self.magnetPoints = () self.partsSettings = PartsTunes(findSection(data, 'parts')) self.checkPartsTunes() battleLevelsSettingsSection = findSection(data, 'battleLevelsSettings') if battleLevelsSettingsSection: self.battleLevelsSettings = BattleLevelsSettings( battleLevelsSettingsSection) elif not hasattr(self, 'battleLevelsSettings'): self.battleLevelsSettings = None damageEffectsSection = findSection(data, 'damageEffects') if damageEffectsSection: self.damageEffects = DamageEffects(damageEffectsSection) elif not hasattr(self, 'damageEffects'): self.damageEffects = None self.__calculateSuperiorityPoints() return
def readData(self, rootSection): for name, data in rootSection.items(): hint = _HudHint() readValue(hint, data, 'id', 0) if hint.id: readValue(hint, data, 'type', -1) readValue(hint, data, 'title', '') readValue(hint, data, 'icon', '') readValue(hint, data, 'lifeTime', -1) readValue(hint, data, 'priority', -1) readValue(hint, data, 'description', '') readValue(hint, data, 'coolDown', 0) readValue(hint, data, 'timer', -1) readValue(hint, data, 'addValue', -1) self._readSubItemList(hint, data, 'gameModes', 'mod') self._hints[hint.id] = hint LOG_DEBUG('readData - added battle notification:', hint.id, hint.__dict__) else: LOG_ERROR( 'readData - battle notification without ID. Check it!')
def readData(self, rootSection): for name, data in rootSection.items(): hint = _HudHint() readValue(hint, data, 'id', 0) if hint.id: readValue(hint, data, 'type', -1) readValue(hint, data, 'title', '') readValue(hint, data, 'icon', '') readValue(hint, data, 'lifeTime', -1) readValue(hint, data, 'priority', -1) readValue(hint, data, 'description', '') readValue(hint, data, 'coolDown', 0) self._readSubItemList(hint, data, 'consumableDependency', 'section') self._readSubItemList(hint, data, 'validPlanes', 'section') self._hints[hint.id] = hint LOG_DEBUG('readData - added battle alert:', hint.id, hint.__dict__) else: LOG_ERROR('readData - battle alert without ID. Check it!')
def __init__(self, groupID, data): self.groupID = groupID readValue(self, data, 'initialSpawnDelay', -1.0) readValue(self, data, 'bomberIndex', -1) readValue(self, data, 'bomberDelay', 0.0) readValue(self, data, 'objectsAreaIndex', -1) readValue(self, data, 'allTeamSpawn', False) readValue(self, data, 'customSpawn', False) self.destroyToSpawn = set() initOnSection = findSection(data, 'initOnDestruction') if initOnSection: self.destroyToSpawn = set( (sectionData.asString for sectionData in initOnSection.values()))
def readData(self, data): if not data: return else: for propName in ['exclusiveGameMods', 'excludeArenaType']: propData = findSection(data, propName) if propData: setattr( self, propName, set([ ARENA_TYPE.getValueByName(k) for k in propData.keys() ])) else: setattr(self, propName, set()) spawnGroupData = findSection(data, 'spawnGroup') if spawnGroupData: self.__spawnGroupDescription = DBSpawnGroup(spawnGroupData) readValue(self, data, 'gameType', 'SaD') gameModeEnum = GAME_MODE.NAME_TO_MODE.get(self.gameType, GAME_MODE.AREA_CONQUEST) self._readGameModeSettings(data) sectorData = findSection(data, 'sectors') if sectorData: self.sectors.fillSectorData( sectorData, GAME_MODE_PATH_NAMES.MODE_TO_PATH[gameModeEnum]) self.sectors.convertPoints(self.arenaObjects.getPointPosition) if IS_CLIENT: self._readHudSectorsSettings(data) readValue(self, data, 'camouflageArenaType', '') readValue(self, data, 'hudIcoPath', '') self.__parseBounds(self.geometry) self.__parseSpaceScripts(self.settings) readValue(self, data, 'minPlayersInTeam', 0) self.trainingRoomIcoPathSelected = data.readString( 'trainingRoomIcoPath/selected', '') self.trainingRoomIcoPathUnselected = data.readString( 'trainingRoomIcoPath/unselected', '') self.trainingRoomIcoPathPreview = data.readString( 'trainingRoomIcoPath/preview', '') self.trainingRoomIcoPathPreviewBig = data.readString( 'trainingRoomIcoPath/previewBig', '') readValue(self, data, 'trainingRoomDescription', '') if self.minPlayersInTeam < 0: self.__raiseWrongXml("wrong 'minPlayersInTeam' value") readValue(self, data, 'maxPlayersInTeam', 0) if self.maxPlayersInTeam < 0: self.__raiseWrongXml("wrong 'maxPlayersInTeam' value") if self.maxPlayersInTeam < self.minPlayersInTeam: self.__raiseWrongXml( "'maxPlayersInTeam' value < 'minPlayersInTeam' value") readValue(self, data, 'roundLength', 0) if self.roundLength < 0: self.__raiseWrongXml("wrong 'roundLength' value") bottomLeft = data.readVector2('boundingBox/bottomLeft') upperRight = data.readVector2('boundingBox/upperRight') if bottomLeft[0] >= upperRight[0] or bottomLeft[1] >= upperRight[1]: LOG_UNEXPECTED("wrong 'boundingBox' values", self.typeName) self.boundingBox = (bottomLeft, upperRight) readValue(self, data, 'isPvEReady', True) readValue(self, data, 'visibleEnable', 1) readValue(self, data, 'minPlayerCount', 0) readValue(self, data, 'selectionPriority', 0) readValue(self, data, 'minAircraftLevel', 1) readValue(self, data, 'maxAircraftLevel', 10) readValue(self, data, 'sunAngle', 70.0) readValue(self, data, 'daytime', 8.31) readValue(self, data, 'sunStealthFactor', Curve()) readValue(self, data, 'cloudStealthFactorDistance', 120.0) readValue(self, data, 'seaLevelForFlightMdel', 0.0) readValue(self, data, 'altitudeMap', 0.0) readValue(self, data, 'anyTeamObjectsCount', 5) readValue(self, data, 'randomObjectsCount', 5) visualScripts = findSection(data, 'visualScripts') if visualScripts: self.arenaScripts = visualScripts.readStrings('scripts') else: self.arenaScripts = () if IS_CLIENT: readValue(self, data, 'name', '') readValue(self, data, 'secondName', ' @ NEED LOCALE ') readValue(self, data, 'trainingRoomName', '') readValue(self, data, 'trainingRoomSecondName', '') readValue(self, data, 'description', '') readValue(self, data, 'outroScenario', '') readValue(self, data, 'outroTimeline', '') readValue(self, data, 'music', '') readValue(self, data, 'musicPrefix', '') readValue(self, data, 'ambientSound', '') readValue(self, data, 'umbraEnabled', 0) readValue(self, data, 'batchingEnabled', 0) stingersSection = findSection(data, 'stingers') self.stingers = SoundsStingers( stingersSection) if stingersSection else None self.waterTexScale = data.readFloat('water/texScale', 0.5) self.waterFreqX = data.readFloat('water/freqX', 1.0) self.waterFreqZ = data.readFloat('water/freqZ', 1.0) if IS_BASEAPP: readValue(self, data, 'kickAfterFinishWaitTime', 0) readValue(self, data, 'battleEntryPoint', '', True) if self.kickAfterFinishWaitTime < 0: self.__raiseWrongXml( "wrong 'kickAfterFinishWaitTime' value") readValue(self, data, 'arenaStartDelay', 0) if self.arenaStartDelay <= 0: self.__raiseWrongXml("wrong 'arenaStartDelay' value") groups = findSection(data, 'objectGroups') if groups: for groupID, groupData in groups.items(): self.objectGroups.addGroup(groupID, groupData) selectGroups = findSection(data, 'selectGroups') if selectGroups: self.objectGroups.readSpawnSequence(selectGroups) if IS_CLIENT: weatherPath = self.settings + '/weatherSettings/' weatherData = ResMgr.openSection(weatherPath) if weatherData: self.weatherWindSpeed = weatherData.readVector2( 'windSpeed') self.weatherWindGustiness = weatherData.readFloat( 'windGustiness', 0.0) ResMgr.purge(weatherPath) else: self.weatherWindSpeed = (0.0, 0.0) self.weatherWindGustiness = 0.0 groups = findSection(data, 'objectGroups') if groups: for groupID, groupData in groups.items(): self.offlineObjectGroups.addGroup(groupID, groupData) selectGroups = findSection(data, 'selectGroups') if selectGroups: self.offlineObjectGroups.readSpawnSequence(selectGroups) return
def __init__(self, data=None, baseFov=60.0): if data is not None: readValue(self, data, 'position', Math.Vector3(0, 0, 0)) readValue(self, data, 'minScrollPosition', Math.Vector3(0, 0, -12.0)) readValue(self, data, 'maxScrollPosition', Math.Vector3(0, 0, -34.0)) readValue(self, data, 'fovPercent', 60.0) readValue(self, data, 'angle', 0.0) readValue(self, data, 'hideModel', 0) self.position *= WORLD_SCALING if self.fovPercent > 5.0: self.fovPercent /= baseFov return
def __init__(self, data=None): if data is not None: readValue(self, data, 'stateInterpolationTime', 0.0) readValue(self, data, 'fov', 0.0) readValue(self, data, 'pitch', 0.0) readValue(self, data, 'pitchMin', 0.0) readValue(self, data, 'yaw', 0.0) readValue(self, data, 'rotationSpeed', 0.0) readValue(self, data, 'distance', 0.0) self.__postLoadTransform() return
def __init__(self, data=None): if data is not None: readValue(self, data, 'stateInterpolationTime', 0.0) readValue(self, data, 'animationNeedTime', 0.0) readValue(self, data, 'animationStartTime', 0.0) readValue(self, data, 'animationPitch', 0.0) readValue(self, data, 'animationYaw', 0.0) readValue(self, data, 'animationPitchClockwise', True) readValue(self, data, 'animationYawClockwise', True) readValue(self, data, 'animationDistance', 0.0) readValue(self, data, 'animationTime', 0.0) readValue(self, data, 'animationFov', 90.0) readValue(self, data, 'animationFadeInTime', 0.0) readValue(self, data, 'animationFadeOutTime', 0.0) readValue(self, data, 'animationGroundNeedTime', 0.0) readValue(self, data, 'animationGroundTime', 0.0) readValue(self, data, 'animationGroundFov', 0.0) readValue(self, data, 'animationGroundSpawnRadius', 0.0) readValue(self, data, 'animationGroundHeight', 0.0) self.__postLoadTransform() return
def readData(self, data): if data != None: readValue(self, data, 'minMouseCombatFov', 70.0) readValue(self, data, 'targetCamPos', Math.Vector3(0, 0, -34.0)) readValue(self, data, 'camSpeedYawPitch', 6.0) readValue(self, data, 'camSpeedRoll', 6.0) readValue(self, data, 'targetCamSpeed', 30.0) readValue(self, data, 'camSniperSpeedYawPitch', 6.0) readValue(self, data, 'camSniperSpeedRoll', 6.0) readValue(self, data, 'camSniperSpeedTarget', 30.0) readValue(self, data, 'defaultFov', 60.0) readValue(self, data, 'fovRampCurvature', 0.7) readValue(self, data, 'backCamPos', Math.Vector3(0, 3, -4.2)) readValue(self, data, 'backCamSpeed', 30.0) readValue(self, data, 'backTargetCamSpeed', 30.0) readValue(self, data, 'backCamFov', 90.0) readValue(self, data, 'rearViewCamPos', Math.Vector3(0, 4.8, -22.6)) readValue(self, data, 'rearViewCamDir', Math.Vector3(0, 22, -350)) readValue(self, data, 'rearViewCamFov', 60.0) readValue(self, data, 'leftCamPos', Math.Vector3(0, 0, 0)) readValue(self, data, 'leftCamDir', Math.Vector3(0, 0, 0)) readValue(self, data, 'rightCamPos', Math.Vector3(0, 0, 0)) readValue(self, data, 'rightCamDir', Math.Vector3(0, 0, 0)) readValue(self, data, 'topCamPos', Math.Vector3(0, 0, 0)) readValue(self, data, 'topCamDir', Math.Vector3(0, 0, 0)) readValue(self, data, 'bottomCamPos', Math.Vector3(0, 0, 0)) readValue(self, data, 'bottomCamDir', Math.Vector3(0, 0, 0)) readValue(self, data, 'pivotDistMax', 150.0) readValue(self, data, 'pivotDistMin', 5.4) readValue(self, data, 'freeCamDistHalflife', 0.0) readValue(self, data, 'freeCamFovNear', 65.0) readValue(self, data, 'freeCamFovFar', 65.0) readValue(self, data, 'normalCamInterpolationTime', 0.0) readValue(self, data, 'freeCamInterpolationTime', 0.0) readValue(self, data, 'freeCamFovInterpolationTime', 0.0) readValue(self, data, 'freeCamZoomFactor', 0.0) readValue(self, data, 'backCamInterpolationTime', 0.0) readValue(self, data, 'bombCamInterpolationTime', 0.0) readValue(self, data, 'sniperStateInterpolationTime', 0.01) readValue(self, data, 'sideCamInterpolationTime', 0.0) readValue(self, data, 'sideCamJInterpolationStartTime', 0.0) readValue(self, data, 'sideCamJInterpolationEndTime', 0.0) readValue(self, data, 'sideCamJInterpolationTimeTransitionTerm', 0.0) readValue(self, data, 'spectatorCamInterpolationTime', 0.0) readValue(self, data, 'targetCamInterpolationTime', 0.0) readValue(self, data, 'freeFixableCamInterpolationTime', 0.0) readValue(self, data, 'freeFixableCamSpeed', 0.0) readValue(self, data, 'vibrationAmplitudes', Math.Vector3(0, 0, 0)) zoomTable = findSection(data, 'zoomTable') if zoomTable is not None: self.zoomPresets = dict() for zoomPreset in zoomTable.values(): stateID = zoomPreset.readString('id', 'None') self.zoomPresets[stateID] = ZoomPreset( normal=ZoomData( findSection(zoomPreset, 'normalZoomData'), self.defaultFov), sniper=ZoomData( findSection(zoomPreset, 'sniperZoomData'), self.defaultFov)) gunnerStateSettingsData = findSection(data, 'gunnerStateData') if gunnerStateSettingsData is not None: self.gunnerStateSettings = GunnerStateSettings( gunnerStateSettingsData) vibrationTable = findSection(data, 'vibrationTable') if vibrationTable is not None: self.vibrationFrequencies = vibrationTable.readVector3s( 'frequency') destroyedFallStateData = findSection(data, 'destroyedFall') if destroyedFallStateData is not None: self.destroyedFall = DestroyedFallStateSettings( destroyedFallStateData) destroyedLandedStateData = findSection(data, 'destroyedLanded') if destroyedLandedStateData is not None: self.destroyedLanded = DestroyedLandedStateSettings( destroyedLandedStateData) self.__postLoadTransform() return
def readData(self, data): if data != None: readValue(self, data, 'textDescription', '') readValue(self, data, 'engineCapasityUnit', '') readValue(self, data, 'MARKET_AIRPLANE_ENGINE_CAPACITY', '') readValue(self, data, 'MARKET_AIRPLANE_WING_AREA', '') readValue(self, data, 'MARKET_AIRPLANE_GROUND_MAX_SPEED', '') readValue(self, data, 'MARKET_AIRPLANE_HEIGHT_MAX_SPEED', '') readValue(self, data, 'MARKET_AIRPLANE_RATE_OF_CLIMB', '') readValue(self, data, 'MARKET_AIRPLANE_FULL_TURN_TIME', '') readValue(self, data, 'MARKET_AIRPLANE_TURN_RADIUS', '') readValue(self, data, 'MARKET_AIRPLANE_WEIGHT_SECOND_VOLLEY', '') return