/// <summary> /// Convert old libraries /// </summary> /// <param name="ccOld">CreatureCollection to be converted</param> public static CreatureCollection ConvertXml2Asb(CreatureCollectionOld ccOld, string libraryFilePath) { MessageBox.Show($"The library will be converted to the new format that supports all possible ARK-stats (e.g. the crafting speed for the Gacha).\n\nThe old library file is still available at \n{libraryFilePath}\nyou can keep it as a backup.", "Library will be converted", MessageBoxButtons.OK, MessageBoxIcon.Information); CreatureCollection ccNew = new CreatureCollection(); UpgradeFormatTo12Stats(ccOld, ccNew); TransferParameters(ccOld, ccNew); return(ccNew); }
/// <summary> /// Tries to converts the library from the 8-stats format to the 12-stats format and the species identification by the blueprintpath. /// </summary> public static void UpgradeFormatTo12Stats(CreatureCollectionOld ccOld, CreatureCollection ccNew) { if (ccOld == null) { return; } // if library has the old statMultiplier-indices, fix the order var newToOldIndices = new int[] { 0, 1, 7, 2, 3, -1, -1, 4, 5, 6, -1, -1 }; if (ccOld.multipliers != null && ccOld.multipliers.Length == 8) { /// old order was /// HP, Stam, Ox, Fo, We, Dm, Sp, To /// new order is // 0: Health // 1: Stamina / Charge Capacity // 2: Torpidity // 3: Oxygen / Charge Regeneration // 4: Food // 5: Water // 6: Temperature // 7: Weight // 8: MeleeDamageMultiplier / Charge Emission Range // 9: SpeedMultiplier // 10: TemperatureFortitude // 11: CraftingSpeedMultiplier // imprinting bonus factor default 0.2, 0, 0.2, 0, 0.2, 0.2, 0, 0.2, 0.2, 0.2, 0, 0 // i.e. stats without imprinting are by default: St, Ox, Te, TF, Cr // create new multiplierArray var newMultipliers = new double[Values.STATS_COUNT][]; for (int s = 0; s < Values.STATS_COUNT; s++) { newMultipliers[s] = new double[4]; if (newToOldIndices[s] >= 0) { for (int si = 0; si < 4; si++) { newMultipliers[s][si] = ccOld.multipliers[newToOldIndices[s]][si]; } } else { for (int si = 0; si < 4; si++) { newMultipliers[s][si] = 1; } } } ccOld.multipliers = newMultipliers; } ccNew.creatures = new List <Creature>(); foreach (CreatureOld c in ccOld.creatures) { Creature newC = new Creature() { addedToLibrary = c.addedToLibrary.Year < 2000 ? default(DateTime?) : c.addedToLibrary, ArkId = c.ArkId, ArkIdImported = c.ArkIdImported, colors = c.colors, cooldownUntil = c.cooldownUntil.Year < 2000 ? default(DateTime?) : c.cooldownUntil, domesticatedAt = c.domesticatedAt.Year < 2000 ? default(DateTime?) : c.domesticatedAt, fatherGuid = c.fatherGuid, flags = c.flags, generation = c.generation, growingLeft = c.growingLeft, growingPaused = c.growingPaused, growingUntil = c.growingUntil.Year < 2000 ? default(DateTime?) : c.growingUntil, guid = c.guid, imprinterName = c.imprinterName, imprintingBonus = c.imprintingBonus, isBred = c.isBred, motherGuid = c.motherGuid, mutationsMaternal = c.mutationsMaternal, mutationsPaternal = c.mutationsPaternal, name = c.name, note = c.note, owner = c.owner, server = c.server, sex = c.sex, Status = c.status, tags = c.tags, tamingEff = c.tamingEff, tribe = c.tribe }; ccNew.creatures.Add(newC); if (c.IsPlaceholder) { newC.flags |= CreatureFlags.Placeholder; } if (c.neutered) { newC.flags |= CreatureFlags.Neutered; } // set new species-id if (c.Species == null && !string.IsNullOrEmpty(c.speciesBlueprint)) { c.Species = Values.V.SpeciesByBlueprint(c.speciesBlueprint); } if (c.Species == null && Values.V.TryGetSpeciesByName(c.species, out Species speciesObject)) { c.Species = speciesObject; } newC.Species = c.Species; // fix statlevel-indices newC.levelsWild = Convert8To12(c.levelsWild); newC.levelsDom = Convert8To12(c.levelsDom); } ccNew.creaturesValues = new List <CreatureValues>(); foreach (var cvOld in ccOld.creaturesValues) { var cv = new CreatureValues() { ARKID = cvOld.ARKID, colorIDs = cvOld.colorIDs, cooldownUntil = cvOld.cooldownUntil.Year < 2000 ? default(DateTime?) : cvOld.cooldownUntil, domesticatedAt = cvOld.domesticatedAt.Year < 2000 ? default(DateTime?) : cvOld.domesticatedAt, fatherArkId = cvOld.fatherArkId, fatherGuid = cvOld.fatherGuid, growingUntil = cvOld.growingUntil.Year < 2000 ? default(DateTime?) : cvOld.growingUntil, guid = cvOld.guid, imprinterName = cvOld.imprinterName, imprintingBonus = cvOld.imprintingBonus, isBred = cvOld.isBred, isTamed = cvOld.isTamed, level = cvOld.level, levelsDom = cvOld.levelsDom, levelsWild = cvOld.levelsWild, motherArkId = cvOld.motherArkId, motherGuid = cvOld.motherGuid, mutationCounterFather = cvOld.mutationCounterFather, mutationCounterMother = cvOld.mutationCounterMother, name = cvOld.name, owner = cvOld.owner, server = cvOld.server, sex = cvOld.sex, speciesName = cvOld.species, statValues = cvOld.statValues, tamingEffMax = cvOld.tamingEffMax, tamingEffMin = cvOld.tamingEffMin, tribe = cvOld.tribe }; if (cvOld.neutered) { cv.flags |= CreatureFlags.Neutered; } if (Values.V.TryGetSpeciesByName(cvOld.species, out Species species)) { cv.Species = species; } ccNew.creaturesValues.Add(cv); // fix statlevel-indices cv.levelsWild = Convert8To12(cvOld.levelsWild); cv.levelsDom = Convert8To12(cvOld.levelsDom); cv.statValues = Convert8To12(cvOld.statValues); } }
public static void TransferParameters(CreatureCollectionOld ccOld, CreatureCollection ccNew) { ccNew.allowMoreThanHundredImprinting = ccOld.allowMoreThanHundredImprinting; ccNew.changeCreatureStatusOnSavegameImport = ccOld.changeCreatureStatusOnSavegameImport; ccNew.considerWildLevelSteps = ccOld.considerWildLevelSteps; ccNew.incubationListEntries = ccOld.incubationListEntries.Select(ile => new IncubationTimerEntry { fatherGuid = ile.fatherGuid, incubationDuration = ile.incubationDuration, incubationEnd = ile.incubationEnd, motherGuid = ile.motherGuid, timerIsRunning = ile.timerIsRunning, }).ToList(); ccNew.maxBreedingSuggestions = ccOld.maxBreedingSuggestions; ccNew.maxChartLevel = ccOld.maxChartLevel; ccNew.maxDomLevel = ccOld.maxDomLevel; ccNew.maxServerLevel = ccOld.maxServerLevel; ccNew.noteList = ccOld.noteList; ccNew.ownerList = ccOld.ownerList; ccNew.players = ccOld.players; ccNew.serverList = ccOld.serverList; ccNew.singlePlayerSettings = ccOld.singlePlayerSettings; ccNew.tags = ccOld.tags; ccNew.tagsExclude = ccOld.tagsExclude; ccNew.tagsInclude = ccOld.tagsInclude; ccNew.timerListEntries = ccOld.timerListEntries.Select(tle => new TimerListEntry { creatureGuid = tle.creatureGuid, group = tle.group, name = tle.name, sound = tle.sound, time = tle.time }).ToList(); ccNew.tribes = ccOld.tribes; ccNew.wildLevelStep = ccOld.wildLevelStep; // check if multiplier-conversion is possible if (ccOld?.multipliers == null) { return; } ccNew.serverMultipliers = new ServerMultipliers { BabyImprintingStatScaleMultiplier = ccOld.imprintingMultiplier, BabyCuddleIntervalMultiplier = ccOld.babyCuddleIntervalMultiplier, TamingSpeedMultiplier = ccOld.tamingSpeedMultiplier, DinoCharacterFoodDrainMultiplier = ccOld.tamingFoodRateMultiplier, MatingIntervalMultiplier = ccOld.MatingIntervalMultiplier, EggHatchSpeedMultiplier = ccOld.EggHatchSpeedMultiplier, BabyMatureSpeedMultiplier = ccOld.BabyMatureSpeedMultiplier, BabyFoodConsumptionSpeedMultiplier = ccOld.BabyFoodConsumptionSpeedMultiplier, statMultipliers = ccOld.multipliers // was converted to 12-stats before }; ccNew.serverMultipliersEvents = new ServerMultipliers { BabyImprintingStatScaleMultiplier = ccOld.imprintingMultiplier, // cannot be changed in events BabyCuddleIntervalMultiplier = ccOld.babyCuddleIntervalMultiplierEvent, TamingSpeedMultiplier = ccOld.tamingSpeedMultiplierEvent, DinoCharacterFoodDrainMultiplier = ccOld.tamingFoodRateMultiplierEvent, MatingIntervalMultiplier = ccOld.MatingIntervalMultiplierEvent, EggHatchSpeedMultiplier = ccOld.EggHatchSpeedMultiplierEvent, BabyMatureSpeedMultiplier = ccOld.BabyMatureSpeedMultiplierEvent, BabyFoodConsumptionSpeedMultiplier = ccOld.BabyFoodConsumptionSpeedMultiplierEvent }; }