protected override void _ActionPerform() { NewDroidType = new DroidDesign(); ResultUnit.TypeBase = NewDroidType; NewDroidType.CopyDesign(OldDroidType); NewDroidType.UpdateAttachments(); }
protected override void ActionCondition() { base.ActionCondition(); if ( Unit.TypeBase.Type == UnitType.PlayerDroid ) { OldDroidType = (DroidDesign)Unit.TypeBase; ActionPerformed = !OldDroidType.IsTemplate; } else { OldDroidType = null; ActionPerformed = false; } }
public void CopyDesign(DroidDesign DroidTypeToCopy) { TemplateDroidType = DroidTypeToCopy.TemplateDroidType; Body = DroidTypeToCopy.Body; Propulsion = DroidTypeToCopy.Propulsion; TurretCount = DroidTypeToCopy.TurretCount; Turret1 = DroidTypeToCopy.Turret1; Turret2 = DroidTypeToCopy.Turret2; Turret3 = DroidTypeToCopy.Turret3; }
protected clsResult createWZObjects(List<WZBJOUnit> bjoUnits, List<IniStructure> iniStructures, List<IniDroid> iniDroids, List<IniFeature> iniFeatures) { var ReturnResult = new clsResult("Creating objects", false); logger.Info("Creating objects"); var newUnit = default(clsUnit); UInt32 availableID = 0; var unitAdd = new clsUnitAdd(); var a = 0; var b = 0; unitAdd.Map = map; availableID = 1U; foreach ( var bjoUnit in bjoUnits ) { if ( bjoUnit.ID >= availableID ) { availableID = bjoUnit.ID + 1U; } } if ( iniStructures.Count > 0) { var structMaxId = iniStructures.Max(w => w.ID) + 10; if ( structMaxId > availableID ) { availableID = structMaxId; } } if ( iniFeatures.Count > 0 ) { var featuresMaxId = iniFeatures.Max(w => w.ID) + 10; if ( featuresMaxId > availableID ) { availableID = featuresMaxId; } } if ( iniDroids.Count > 0 ) { var droidsMaxId = iniDroids.Max(w => w.ID) + 10; if ( droidsMaxId > availableID ) { availableID += droidsMaxId; } } foreach ( var bjoUnit in bjoUnits ) { newUnit = new clsUnit(); newUnit.ID = bjoUnit.ID; newUnit.TypeBase = App.ObjectData.FindOrCreateUnitType(bjoUnit.Code, bjoUnit.ObjectType, -1); if ( newUnit.TypeBase == null ) { ReturnResult.ProblemAdd("Unable to create object type."); return ReturnResult; } if ( bjoUnit.Player >= Constants.PlayerCountMax ) { newUnit.UnitGroup = map.ScavengerUnitGroup; } else { newUnit.UnitGroup = map.UnitGroups[Convert.ToInt32(bjoUnit.Player)]; } newUnit.Pos = bjoUnit.Pos; newUnit.Rotation = (int)(Math.Min(bjoUnit.Rotation, 359U)); if ( bjoUnit.ID == 0U ) { bjoUnit.ID = availableID; App.ZeroIDWarning(newUnit, bjoUnit.ID, ReturnResult); } unitAdd.NewUnit = newUnit; unitAdd.ID = bjoUnit.ID; unitAdd.Perform(); App.ErrorIDChange(bjoUnit.ID, newUnit, "CreateWZObjects"); if ( availableID == bjoUnit.ID ) { availableID = newUnit.ID + 1U; } } var structureTypeBase = default(StructureTypeBase); var droidType = default(DroidDesign); var featureTypeBase = default(FeatureTypeBase); var loadPartsArgs = new DroidDesign.sLoadPartsArgs(); UnitTypeBase unitTypeBase = null; var errorCount = 0; var unknownDroidComponentCount = 0; var unknownDroidTypeCount = 0; var droidBadPositionCount = 0; var structureBadPositionCount = 0; var structureBadModulesCount = 0; var featureBadPositionCount = 0; var moduleLimit = 0; var zeroPos = new XYInt(0, 0); var moduleTypeBase = default(StructureTypeBase); var newModule = default(clsUnit); var factoryModule = App.ObjectData.FindFirstStructureType(StructureTypeBase.enumStructureType.FactoryModule); var researchModule = App.ObjectData.FindFirstStructureType(StructureTypeBase.enumStructureType.ResearchModule); var powerModule = App.ObjectData.FindFirstStructureType(StructureTypeBase.enumStructureType.PowerModule); if ( factoryModule == null ) { ReturnResult.WarningAdd("No factory module loaded."); } if ( researchModule == null ) { ReturnResult.WarningAdd("No research module loaded."); } if ( powerModule == null ) { ReturnResult.WarningAdd("No power module loaded."); } foreach ( var iniStructure in iniStructures ) { if ( iniStructure.Pos == null ) { logger.Debug("{0} pos was null", iniStructure.Code); structureBadPositionCount++; } else if ( !App.PosIsWithinTileArea(iniStructure.Pos, zeroPos, map.Terrain.TileSize) ) { logger.Debug("{0} structure pos x{1} y{2}, is wrong.", iniStructure.Code, iniStructure.Pos.X, iniStructure.Pos.Y); structureBadPositionCount++; } else { unitTypeBase = App.ObjectData.FindOrCreateUnitType(Convert.ToString(iniStructure.Code), UnitType.PlayerStructure, iniStructure.WallType); if ( unitTypeBase.Type == UnitType.PlayerStructure ) { structureTypeBase = (StructureTypeBase)unitTypeBase; } else { structureTypeBase = null; } if ( structureTypeBase == null ) { errorCount++; } else { newUnit = new clsUnit(); newUnit.TypeBase = structureTypeBase; if ( iniStructure.UnitGroup == null ) { newUnit.UnitGroup = map.ScavengerUnitGroup; } else { newUnit.UnitGroup = iniStructure.UnitGroup; } newUnit.Pos = new WorldPos(iniStructure.Pos, iniStructure.Pos.Z); newUnit.Rotation = Convert.ToInt32(iniStructure.Rotation.Direction * 360.0D / Constants.INIRotationMax); if ( newUnit.Rotation == 360 ) { newUnit.Rotation = 0; } if ( iniStructure.HealthPercent >= 0 ) { newUnit.Health = MathUtil.Clamp_dbl(iniStructure.HealthPercent / 100.0D, 0.01D, 1.0D); } if ( iniStructure.ID == 0U ) { iniStructure.ID = availableID; App.ZeroIDWarning(newUnit, iniStructure.ID, ReturnResult); } unitAdd.NewUnit = newUnit; unitAdd.ID = iniStructure.ID; unitAdd.Perform(); App.ErrorIDChange(iniStructure.ID, newUnit, "Load_WZ->INIStructures"); if ( availableID == iniStructure.ID ) { availableID = newUnit.ID + 1U; } //create modules switch ( structureTypeBase.StructureType ) { case StructureTypeBase.enumStructureType.Factory: moduleLimit = 2; moduleTypeBase = factoryModule; break; case StructureTypeBase.enumStructureType.VTOLFactory: moduleLimit = 2; moduleTypeBase = factoryModule; break; case StructureTypeBase.enumStructureType.PowerGenerator: moduleLimit = 1; moduleTypeBase = powerModule; break; case StructureTypeBase.enumStructureType.Research: moduleLimit = 1; moduleTypeBase = researchModule; break; default: moduleLimit = 0; moduleTypeBase = null; break; } if ( iniStructure.ModuleCount > moduleLimit ) { iniStructure.ModuleCount = moduleLimit; structureBadModulesCount++; } else if ( iniStructure.ModuleCount < 0 ) { iniStructure.ModuleCount = 0; structureBadModulesCount++; } if ( moduleTypeBase != null ) { for ( b = 0; b <= iniStructure.ModuleCount - 1; b++ ) { newModule = new clsUnit(); newModule.TypeBase = moduleTypeBase; newModule.UnitGroup = newUnit.UnitGroup; newModule.Pos = newUnit.Pos; newModule.Rotation = newUnit.Rotation; unitAdd.NewUnit = newModule; unitAdd.ID = availableID; unitAdd.Perform(); availableID = newModule.ID + 1U; } } } } } if ( structureBadPositionCount > 0 ) { ReturnResult.WarningAdd(structureBadPositionCount + " structures had an invalid position and were removed."); } if ( structureBadModulesCount > 0 ) { ReturnResult.WarningAdd(structureBadModulesCount + " structures had an invalid number of modules."); } foreach ( var iniFeature in iniFeatures ) { if ( iniFeature.Pos == null ) { featureBadPositionCount++; } else if ( !App.PosIsWithinTileArea(iniFeature.Pos, zeroPos, map.Terrain.TileSize) ) { featureBadPositionCount++; } else { unitTypeBase = App.ObjectData.FindOrCreateUnitType(Convert.ToString(iniFeature.Code), UnitType.Feature, -1); if ( unitTypeBase.Type == UnitType.Feature ) { featureTypeBase = (FeatureTypeBase)unitTypeBase; } else { featureTypeBase = null; } if ( featureTypeBase == null ) { errorCount++; } else { newUnit = new clsUnit(); newUnit.TypeBase = featureTypeBase; newUnit.UnitGroup = map.ScavengerUnitGroup; newUnit.Pos = new WorldPos(iniFeature.Pos, iniFeature.Pos.Z); newUnit.Rotation = Convert.ToInt32(iniFeature.Rotation.Direction * 360.0D / Constants.INIRotationMax); if ( newUnit.Rotation == 360 ) { newUnit.Rotation = 0; } if ( iniFeature.HealthPercent >= 0 ) { newUnit.Health = MathUtil.Clamp_dbl(iniFeature.HealthPercent / 100.0D, 0.01D, 1.0D); } if ( iniFeature.ID == 0U ) { iniFeature.ID = availableID; App.ZeroIDWarning(newUnit, iniFeature.ID, ReturnResult); } unitAdd.NewUnit = newUnit; unitAdd.ID = iniFeature.ID; unitAdd.Perform(); App.ErrorIDChange(iniFeature.ID, newUnit, "Load_WZ->INIFeatures"); if ( availableID == iniFeature.ID ) { availableID = newUnit.ID + 1U; } } } } if ( featureBadPositionCount > 0 ) { ReturnResult.WarningAdd(featureBadPositionCount + " features had an invalid position and were removed."); } foreach ( var iniDroid in iniDroids ) { if ( iniDroid.Pos == null ) { droidBadPositionCount++; } else if ( !App.PosIsWithinTileArea(iniDroid.Pos, zeroPos, map.Terrain.TileSize) ) { droidBadPositionCount++; } else { if ( iniDroid.Template == null || iniDroid.Template == "" ) { droidType = new DroidDesign(); if ( !droidType.SetDroidType((enumDroidType)(iniDroid.DroidType)) ) { unknownDroidTypeCount++; } loadPartsArgs.Body = App.ObjectData.FindOrCreateBody(iniDroid.Body); if ( loadPartsArgs.Body == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Body.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Propulsion = App.ObjectData.FindOrCreatePropulsion(Convert.ToString(iniDroid.Propulsion)); if ( loadPartsArgs.Propulsion == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Propulsion.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Construct = App.ObjectData.FindOrCreateConstruct(Convert.ToString(iniDroid.Construct)); if ( loadPartsArgs.Construct == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Construct.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Repair = App.ObjectData.FindOrCreateRepair(iniDroid.Repair); if ( loadPartsArgs.Repair == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Repair.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Sensor = App.ObjectData.FindOrCreateSensor(iniDroid.Sensor); if ( loadPartsArgs.Sensor == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Sensor.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Brain = App.ObjectData.FindOrCreateBrain(iniDroid.Brain); if ( loadPartsArgs.Brain == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Brain.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.ECM = App.ObjectData.FindOrCreateECM(Convert.ToString(iniDroid.ECM)); if ( loadPartsArgs.ECM == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.ECM.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Weapon1 = App.ObjectData.FindOrCreateWeapon(Convert.ToString(iniDroid.Weapons[0])); if ( loadPartsArgs.Weapon1 == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Weapon1.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Weapon2 = App.ObjectData.FindOrCreateWeapon(Convert.ToString(iniDroid.Weapons[1])); if ( loadPartsArgs.Weapon2 == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Weapon2.IsUnknown ) { unknownDroidComponentCount++; } } loadPartsArgs.Weapon3 = App.ObjectData.FindOrCreateWeapon(Convert.ToString(iniDroid.Weapons[2])); if ( loadPartsArgs.Weapon3 == null ) { unknownDroidComponentCount++; } else { if ( loadPartsArgs.Weapon3.IsUnknown ) { unknownDroidComponentCount++; } } droidType.LoadParts(loadPartsArgs); } else { unitTypeBase = App.ObjectData.FindOrCreateUnitType(iniDroid.Template, UnitType.PlayerDroid, -1); if ( unitTypeBase == null ) { droidType = null; } else { if ( unitTypeBase.Type == UnitType.PlayerDroid ) { droidType = (DroidDesign)unitTypeBase; } else { droidType = null; } } } if ( droidType == null ) { errorCount++; } else { newUnit = new clsUnit(); newUnit.TypeBase = droidType; if ( iniDroid.UnitGroup == null ) { newUnit.UnitGroup = map.ScavengerUnitGroup; } else { newUnit.UnitGroup = iniDroid.UnitGroup; } newUnit.Pos = new WorldPos(iniDroid.Pos, iniDroid.Pos.Z); newUnit.Rotation = Convert.ToInt32(iniDroid.Rotation.Direction * 360.0D / Constants.INIRotationMax); if ( newUnit.Rotation == 360 ) { newUnit.Rotation = 0; } if ( iniDroid.HealthPercent >= 0 ) { newUnit.Health = MathUtil.Clamp_dbl(iniDroid.HealthPercent / 100.0D, 0.01D, 1.0D); } if ( iniDroid.ID == 0U ) { iniDroid.ID = availableID; App.ZeroIDWarning(newUnit, iniDroid.ID, ReturnResult); } unitAdd.NewUnit = newUnit; unitAdd.ID = iniDroid.ID; unitAdd.Perform(); App.ErrorIDChange(iniDroid.ID, newUnit, "Load_WZ->INIDroids"); if ( availableID == iniDroid.ID ) { availableID = newUnit.ID + 1U; } } } } if ( droidBadPositionCount > 0 ) { ReturnResult.WarningAdd(droidBadPositionCount + " droids had an invalid position and were removed."); } if ( unknownDroidTypeCount > 0 ) { ReturnResult.WarningAdd(unknownDroidTypeCount + " droid designs had an unrecognised droidType and were removed."); } if ( unknownDroidComponentCount > 0 ) { ReturnResult.WarningAdd(unknownDroidComponentCount + " droid designs had components that are not loaded."); } if ( errorCount > 0 ) { ReturnResult.WarningAdd("Object Create Error."); } return ReturnResult; }
public static int TemplateDroidType_Add(DroidDesign.clsTemplateDroidType NewDroidType) { var ReturnResult = 0; Array.Resize(ref TemplateDroidTypes, TemplateDroidTypeCount + 1); TemplateDroidTypes[TemplateDroidTypeCount] = NewDroidType; ReturnResult = TemplateDroidTypeCount; TemplateDroidTypeCount++; return ReturnResult; }
private clsResult read_FMap_Objects(string text) { var returnResult = new clsResult("Reading objects", false); logger.Info("Reading objects"); var objectsINI = IniReader.ReadString(text); var droidComponentUnknownCount = 0; var objectTypeMissingCount = 0; var objectPlayerNumInvalidCount = 0; var objectPosInvalidCount = 0; var designTypeUnspecifiedCount = 0; var unknownUnitTypeCount = 0; var maxUnknownUnitTypeWarningCount = 16; var droidDesign = default(DroidDesign); var newObject = default(clsUnit); var unitAdd = new clsUnitAdd(); var unitTypeBase = default(UnitTypeBase); var isDesign = default(bool); var unitGroup = default(clsUnitGroup); var zeroPos = new XYInt(0, 0); UInt32 availableID = 0; unitAdd.Map = map; INIObject iniObject = default(INIObject); var invalid = true; var iniObjects = new List<INIObject> (); foreach (var iniSection in objectsINI) { iniObject = new INIObject (); iniObject.Type = UnitType.Unspecified; iniObject.Health = 1.0D; iniObject.WallType = -1; iniObject.TurretCodes = new string[Constants.MaxDroidWeapons]; iniObject.TurretTypes = new enumTurretType[Constants.MaxDroidWeapons]; for (var i = 0; i < Constants.MaxDroidWeapons; i++) { iniObject.TurretTypes [i] = enumTurretType.Unknown; iniObject.TurretCodes [i] = ""; } invalid = false; foreach (var iniToken in iniSection.Data) { if (invalid) { break; } try { switch (iniToken.Name.ToLower()) { case "type": var typeTokens = iniToken.Data.Split (new string[] { ", " }, StringSplitOptions.None); if (typeTokens.Length < 1) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} type \"{1}\" is not valid.", iniSection.Name, iniToken.Data)); logger.Warn ("#{0} type \"{1}\" is not valid.", iniSection.Name, iniToken.Data); continue; } switch (typeTokens [0].ToLower ()) { case "feature": iniObject.Type = UnitType.Feature; iniObject.Code = typeTokens [1]; break; case "structure": iniObject.Type = UnitType.PlayerStructure; iniObject.Code = typeTokens [1]; break; case "droidtemplate": iniObject.Type = UnitType.PlayerDroid; iniObject.IsTemplate = true; iniObject.Code = typeTokens [1]; break; case "droiddesign": iniObject.Type = UnitType.PlayerDroid; break; default: invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } break; case "droidtype": var droidType = App.GetTemplateDroidTypeFromTemplateCode (iniToken.Data); if (droidType == null) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } break; case "body": iniObject.BodyCode = iniToken.Data; break; case "propulsion": iniObject.PropulsionCode = iniToken.Data; break; case "turrentcount": iniObject.TurretCount = int.Parse(iniToken.Data); if (iniObject.TurretCount < 0 || iniObject.TurretCount > Constants.MaxDroidWeapons) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } break; case "turret1": var turret1Tokens = iniToken.Data.Split (new string[] { ", " }, StringSplitOptions.None); if (turret1Tokens.Length < 2) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } iniObject.TurretTypes[0] = App.GetTurretTypeFromName(turret1Tokens[0]); iniObject.TurretCodes[1] = turret1Tokens[1]; break; case "turret2": var turret2Tokens = iniToken.Data.Split (new string[] { ", " }, StringSplitOptions.None); if (turret2Tokens.Length < 2) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } iniObject.TurretTypes[0] = App.GetTurretTypeFromName(turret2Tokens[0]); iniObject.TurretCodes[1] = turret2Tokens[1]; break; case "turret3": var turret3Tokens = iniToken.Data.Split (new string[] { ", " }, StringSplitOptions.None); if (turret3Tokens.Length < 2) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } iniObject.TurretTypes[0] = App.GetTurretTypeFromName(turret3Tokens[0]); iniObject.TurretCodes[1] = turret3Tokens[1]; break; case "id": iniObject.ID = uint.Parse(iniToken.Data); break; case "priority": iniObject.Priority = int.Parse(iniToken.Data); break; case "pos": iniObject.Pos = XYInt.FromString(iniToken.Data); break; case "heading": if ( !IOUtil.InvariantParse(iniToken.Data, ref iniObject.Heading) ) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } break; case "unitgroup": iniObject.UnitGroup = iniToken.Data; break; case "health": if ( !IOUtil.InvariantParse(iniToken.Data, ref iniObject.Health) ) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } break; case "walltype": if ( !IOUtil.InvariantParse(iniToken.Data, ref iniObject.WallType) ) { invalid = true; returnResult.WarningAdd (string.Format ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data)); logger.Warn ("#{0} {1} \"{2}\" is not valid.", iniSection.Name, iniToken.Name, iniToken.Data); continue; } if (iniObject.WallType < 0 || iniObject.WallType > 3) { iniObject.WallType = -1; } break; case "scriptlabel": iniObject.Label = iniToken.Data; break; default: returnResult.WarningAdd(string.Format("Found an invalid key: {0} = {1}", iniToken.Name, iniToken.Data), false); logger.Warn("Found an invalid key: {0} = {1}", iniToken.Name, iniToken.Data); break; } } catch (Exception ex) { invalid = true; returnResult.WarningAdd( string.Format("#{0} invalid {2}: \"{3}\", got exception: {2}", iniSection.Name, iniToken.Name, iniToken.Data, ex.Message), false); logger.WarnException(string.Format("#{0} invalid {2} \"{1}\"", iniSection.Name, iniToken.Name, iniToken.Data), ex); } } if (!invalid) { iniObjects.Add (iniObject); } } try { availableID = iniObjects.Max (w => w.ID) + 10; foreach (var iniObject2 in iniObjects) { if ( iniObject2.Pos == null ) { objectPosInvalidCount++; continue; } else if ( !App.PosIsWithinTileArea(iniObject2.Pos, zeroPos, map.Terrain.TileSize) ) { objectPosInvalidCount++; continue; } unitTypeBase = null; if ( iniObject2.Type != UnitType.Unspecified ) { isDesign = false; if ( iniObject2.Type == UnitType.PlayerDroid ) { if ( !iniObject2.IsTemplate ) { isDesign = true; } } if ( isDesign ) { droidDesign = new DroidDesign(); droidDesign.TemplateDroidType = iniObject2.TemplateDroidType; if ( droidDesign.TemplateDroidType == null ) { droidDesign.TemplateDroidType = App.TemplateDroidType_Droid; designTypeUnspecifiedCount++; } if ( iniObject2.BodyCode != null ) { droidDesign.Body = App.ObjectData.FindOrCreateBody(Convert.ToString(iniObject2.BodyCode)); if ( droidDesign.Body.IsUnknown ) { droidComponentUnknownCount++; } } if ( iniObject2.PropulsionCode != null ) { droidDesign.Propulsion = App.ObjectData.FindOrCreatePropulsion(iniObject2.PropulsionCode); if ( droidDesign.Propulsion.IsUnknown ) { droidComponentUnknownCount++; } } droidDesign.TurretCount = (byte)(iniObject2.TurretCount); if ( iniObject2.TurretCodes[0] != "" ) { droidDesign.Turret1 = App.ObjectData.FindOrCreateTurret(iniObject2.TurretTypes[0], Convert.ToString(iniObject2.TurretCodes[0])); if ( droidDesign.Turret1.IsUnknown ) { droidComponentUnknownCount++; } } if ( iniObject2.TurretCodes[1] != "" ) { droidDesign.Turret2 = App.ObjectData.FindOrCreateTurret(iniObject2.TurretTypes[1], Convert.ToString(iniObject2.TurretCodes[1])); if ( droidDesign.Turret2.IsUnknown ) { droidComponentUnknownCount++; } } if ( iniObject2.TurretCodes[2] != "" ) { droidDesign.Turret3 = App.ObjectData.FindOrCreateTurret(iniObject2.TurretTypes[2], Convert.ToString(iniObject2.TurretCodes[2])); if ( droidDesign.Turret3.IsUnknown ) { droidComponentUnknownCount++; } } droidDesign.UpdateAttachments(); unitTypeBase = droidDesign; } else { unitTypeBase = App.ObjectData.FindOrCreateUnitType(iniObject2.Code, iniObject2.Type, iniObject2.WallType); if ( unitTypeBase.IsUnknown ) { if ( unknownUnitTypeCount < maxUnknownUnitTypeWarningCount ) { returnResult.WarningAdd("\"{0}\" is not a loaded object.".Format2(iniObject2.Code)); } unknownUnitTypeCount++; } } } if ( unitTypeBase == null ) { objectTypeMissingCount++; continue; } newObject = new clsUnit(); newObject.TypeBase = unitTypeBase; newObject.Pos.Horizontal.X = iniObject2.Pos.X; newObject.Pos.Horizontal.Y = iniObject2.Pos.Y; newObject.Health = iniObject2.Health; newObject.SavePriority = iniObject2.Priority; newObject.Rotation = (int)(iniObject2.Heading); if ( newObject.Rotation >= 360 ) { newObject.Rotation -= 360; } if ( iniObject2.UnitGroup == null || iniObject2.UnitGroup == "" ) { if ( iniObject2.Type != UnitType.Feature ) { objectPlayerNumInvalidCount++; } newObject.UnitGroup = map.ScavengerUnitGroup; } else { if ( iniObject2.UnitGroup.ToLower() == "scavenger" ) { newObject.UnitGroup = map.ScavengerUnitGroup; } else { UInt32 PlayerNum = 0; try { if ( !IOUtil.InvariantParse(iniObject2.UnitGroup, ref PlayerNum) ) { throw (new Exception()); } if ( PlayerNum < Constants.PlayerCountMax ) { unitGroup = map.UnitGroups[Convert.ToInt32(PlayerNum)]; } else { unitGroup = map.ScavengerUnitGroup; objectPlayerNumInvalidCount++; } } catch ( Exception ) { objectPlayerNumInvalidCount++; unitGroup = map.ScavengerUnitGroup; } newObject.UnitGroup = unitGroup; } } if ( iniObject2.ID == 0U ) { // iniObject2.ID = availableID; App.ZeroIDWarning(newObject, iniObject2.ID, returnResult); } unitAdd.NewUnit = newObject; unitAdd.ID = iniObject2.ID; unitAdd.Label = iniObject2.Label; unitAdd.Perform(); App.ErrorIDChange(iniObject2.ID, newObject, "Read_FMap_Objects"); if ( availableID == iniObject2.ID ) { availableID = newObject.ID + 1U; } } if ( unknownUnitTypeCount > maxUnknownUnitTypeWarningCount ) { returnResult.WarningAdd (string.Format ("{0} objects were not in the loaded object data.", unknownUnitTypeCount)); } if ( objectTypeMissingCount > 0 ) { returnResult.WarningAdd (string.Format ("{0} objects did not specify a type and were ignored.", objectTypeMissingCount)); } if ( droidComponentUnknownCount > 0 ) { returnResult.WarningAdd (string.Format ("{0} components used by droids were loaded as unknowns.", droidComponentUnknownCount)); } if ( objectPlayerNumInvalidCount > 0 ) { returnResult.WarningAdd (string.Format ("{0} objects had an invalid player number and were set to player 0.", objectPlayerNumInvalidCount)); } if ( objectPosInvalidCount > 0 ) { returnResult.WarningAdd (string.Format ("{0} objects had a position that was off-map and were ignored.", objectPosInvalidCount)); } if ( designTypeUnspecifiedCount > 0 ) { returnResult.WarningAdd (string.Format ("{0} designed droids did not specify a template droid type and were set to droid.", designTypeUnspecifiedCount)); } } catch (Exception ex) { Debugger.Break (); returnResult.ProblemAdd (string.Format("Got a exeption: {0}", ex.Message)); logger.ErrorException ("Got exception", ex); } return returnResult; }