From ca72b279c5db129e7c2112bf0e612d44250f7e81 Mon Sep 17 00:00:00 2001 From: Richard Haddad Date: Tue, 25 Aug 2026 02:53:07 +0200 Subject: [PATCH] fix: convert from g7b --- .../PkmConvertService/PK7Converter.cs | 30 +++++++++++++++---- .../PkmConvertService/PKMConverterUtils.cs | 5 ---- .../PkmConvertService/PkmConvertService.cs | 5 ++++ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/PKVault.Backend/storage/services/PkmConvertService/PK7Converter.cs b/PKVault.Backend/storage/services/PkmConvertService/PK7Converter.cs index c83a22ed9..418a9562c 100644 --- a/PKVault.Backend/storage/services/PkmConvertService/PK7Converter.cs +++ b/PKVault.Backend/storage/services/PkmConvertService/PK7Converter.cs @@ -197,6 +197,24 @@ public PK7 ConvertToPK7(PB7 pb7, PKMRndValues? rndValues) { byte convertAVToEV(float value) => (byte)(value * EffortValues.Max252 / 200); + byte[] evs = [ + convertAVToEV(pb7.AV_HP), + convertAVToEV(pb7.AV_ATK), + convertAVToEV(pb7.AV_DEF), + convertAVToEV(pb7.AV_SPA), + convertAVToEV(pb7.AV_SPD), + convertAVToEV(pb7.AV_SPE), + ]; + + var ratio = (float)EffortValues.Max510 / evs.Sum(q => q); + if (ratio < 1) + { + for(var i = 0; i < evs.Length; i++) + { + evs[i] = (byte)(evs[i] * ratio); + } + } + var pk7 = new PK7() { Version = GameVersion.SN, @@ -207,12 +225,12 @@ public PK7 ConvertToPK7(PB7 pb7, PKMRndValues? rndValues) // EggLocation = Locations.LinkTrade6, // EggMetDate = pk7.MetDate ?? EncounterDate.GetDateSwitch(), - EV_HP = convertAVToEV(pb7.AV_HP), - EV_ATK = convertAVToEV(pb7.AV_ATK), - EV_DEF = convertAVToEV(pb7.AV_DEF), - EV_SPA = convertAVToEV(pb7.AV_SPA), - EV_SPD = convertAVToEV(pb7.AV_SPD), - EV_SPE = convertAVToEV(pb7.AV_SPE), + EV_HP = evs[0], + EV_ATK = evs[1], + EV_DEF = evs[2], + EV_SPA = evs[3], + EV_SPD = evs[4], + EV_SPE = evs[5], PokerusState = pb7.PokerusState, }; diff --git a/PKVault.Backend/storage/services/PkmConvertService/PKMConverterUtils.cs b/PKVault.Backend/storage/services/PkmConvertService/PKMConverterUtils.cs index cf02f7b2c..38f1b568b 100644 --- a/PKVault.Backend/storage/services/PkmConvertService/PKMConverterUtils.cs +++ b/PKVault.Backend/storage/services/PkmConvertService/PKMConverterUtils.cs @@ -283,11 +283,6 @@ public void CopyMovesFrom(PKM pkm, PKM pkmSrc) public void CopyCommonPropertiesFrom(PKM pkm, PKM pkmSrc, byte generation, PKMRndValues? rndValues) { - if (pkmSrc.Species > pkm.MaxSpeciesID) - { - throw new InvalidOperationException($"Species incompatible: {pkmSrc.Species} > {pkm.MaxSpeciesID}"); - } - pkm.Species = pkmSrc.Species; pkm.Gender = pkmSrc.Gender; pkm.Form = pkmSrc.Form; diff --git a/PKVault.Backend/storage/services/PkmConvertService/PkmConvertService.cs b/PKVault.Backend/storage/services/PkmConvertService/PkmConvertService.cs index 1340aa185..803a4597e 100644 --- a/PKVault.Backend/storage/services/PkmConvertService/PkmConvertService.cs +++ b/PKVault.Backend/storage/services/PkmConvertService/PkmConvertService.cs @@ -57,6 +57,11 @@ public ImmutablePKM ConvertTo(ImmutablePKM sourcePkm, Type targetPkmType, PKMRnd throw new Exception($"Convert failed, Species=0"); } + if (sourcePkm.Species > result.MaxSpeciesID) + { + throw new InvalidOperationException($"Species incompatible: {sourcePkm.Species} > {result.MaxSpeciesID}"); + } + return new(result); }