diff --git a/.Lib9c.Tests/Action/ItemEnhancement11Test.cs b/.Lib9c.Tests/Action/ItemEnhancement11Test.cs index 2affd37714..a12c084837 100644 --- a/.Lib9c.Tests/Action/ItemEnhancement11Test.cs +++ b/.Lib9c.Tests/Action/ItemEnhancement11Test.cs @@ -15,6 +15,7 @@ namespace Lib9c.Tests.Action using Nekoyume.Model.Item; using Nekoyume.Model.Mail; using Nekoyume.Model.State; + using Nekoyume.TableData; using Xunit; using static Nekoyume.Action.ItemEnhancement11; using static SerializeKeys; @@ -71,6 +72,9 @@ public ItemEnhancement11Test() { _initialState = _initialState.SetState(Addresses.TableSheet.Derive(key), value.Serialize()); } + + var costV3SheetAddress = Addresses.GetSheetAddress(); + _initialState = _initialState.SetState(costV3SheetAddress, null); } [Theory] diff --git a/.Lib9c.Tests/Action/ItemEnhancementTest.cs b/.Lib9c.Tests/Action/ItemEnhancementTest.cs index d6dcc25546..7e60f62b21 100644 --- a/.Lib9c.Tests/Action/ItemEnhancementTest.cs +++ b/.Lib9c.Tests/Action/ItemEnhancementTest.cs @@ -121,16 +121,16 @@ public void Execute( var equipment = (Equipment)ItemFactory.CreateItemUsable(row, default, 0, startLevel); if (startLevel == 0) { - equipment.exp = (long)row.Exp!; + equipment.Exp = (long)row.Exp!; } else { - equipment.exp = _tableSheets.EnhancementCostSheetV3.Values.First(r => + equipment.Exp = _tableSheets.EnhancementCostSheetV3.Values.First(r => r.Grade == equipment.Grade && r.ItemSubType == equipment.ItemSubType && r.Level == equipment.level).Exp; } - var startExp = equipment.exp; + var startExp = equipment.Exp; _avatarState.inventory.AddItem(equipment, count: 1); var expectedExpIncrement = 0L; @@ -143,16 +143,16 @@ public void Execute( (Equipment)ItemFactory.CreateItemUsable(row, materialId, 0, materialLevel); if (materialLevel == 0) { - material.exp = (long)row.Exp!; + material.Exp = (long)row.Exp!; } else { - material.exp = _tableSheets.EnhancementCostSheetV3.Values.First(r => + material.Exp = _tableSheets.EnhancementCostSheetV3.Values.First(r => r.Grade == material.Grade && r.ItemSubType == material.ItemSubType && r.Level == material.level).Exp; } - expectedExpIncrement += material.exp; + expectedExpIncrement += material.Exp; _avatarState.inventory.AddItem(material, count: 1); } @@ -226,7 +226,7 @@ public void Execute( var nextAvatarState = nextState.GetAvatarState(_avatarAddress); Assert.Equal(default, resultEquipment.ItemId); Assert.Equal(expectedLevel, resultEquipment.level); - Assert.Equal(startExp + expectedExpIncrement, resultEquipment.exp); + Assert.Equal(startExp + expectedExpIncrement, resultEquipment.Exp); Assert.Equal( (3_000_000 - expectedCost) * _currency, nextState.GetBalance(_agentAddress, _currency) diff --git a/.Lib9c.Tests/Model/Item/EquipmentTest.cs b/.Lib9c.Tests/Model/Item/EquipmentTest.cs index 6174c90751..77e71b7a65 100644 --- a/.Lib9c.Tests/Model/Item/EquipmentTest.cs +++ b/.Lib9c.Tests/Model/Item/EquipmentTest.cs @@ -38,7 +38,7 @@ public void Serialize(long exp) Assert.NotNull(_equipmentRow); var costume = new Equipment(_equipmentRow, Guid.NewGuid(), 0); - costume.exp = exp; + costume.Exp = exp; var serialized = costume.Serialize(); var deserialized = new Equipment((Bencodex.Types.Dictionary)serialized); var reSerialized = deserialized.Serialize(); diff --git a/Lib9c/Action/CombinationEquipment.cs b/Lib9c/Action/CombinationEquipment.cs index 23dca28521..2d85b3e143 100644 --- a/Lib9c/Action/CombinationEquipment.cs +++ b/Lib9c/Action/CombinationEquipment.cs @@ -8,7 +8,6 @@ using Libplanet.Action; using Libplanet.Action.State; using Libplanet.Crypto; -using Libplanet.Types.Assets; using Nekoyume.Extensions; using Nekoyume.Helper; using Nekoyume.Model.Item; diff --git a/Lib9c/Action/ItemEnhancement.cs b/Lib9c/Action/ItemEnhancement.cs index c7547657e6..1a01009c8e 100644 --- a/Lib9c/Action/ItemEnhancement.cs +++ b/Lib9c/Action/ItemEnhancement.cs @@ -322,14 +322,14 @@ public override IAccountStateDelta Execute(IActionContext context) var preItemUsable = new Equipment((Dictionary)enhancementEquipment.Serialize()); // Equipment level up & Update - enhancementEquipment.exp += - materialEquipments.Aggregate(0L, (total, m) => total + m.exp); + enhancementEquipment.Exp += + materialEquipments.Aggregate(0L, (total, m) => total + m.Exp); var row = enhancementCostSheet .OrderByDescending(r => r.Value.Exp) .First(row => row.Value.ItemSubType == enhancementEquipment.ItemSubType && row.Value.Grade == enhancementEquipment.Grade && - row.Value.Exp <= enhancementEquipment.exp + row.Value.Exp <= enhancementEquipment.Exp ).Value; if (row.Level > enhancementEquipment.level) diff --git a/Lib9c/Action/ItemEnhancement11.cs b/Lib9c/Action/ItemEnhancement11.cs index 7a25cfb413..dd18205bbc 100644 --- a/Lib9c/Action/ItemEnhancement11.cs +++ b/Lib9c/Action/ItemEnhancement11.cs @@ -142,6 +142,13 @@ public override IAccountStateDelta Execute(IActionContext context) return states; } + var costSheetV3Address = Addresses.GetSheetAddress(); + var sheetState = states.GetState(costSheetV3Address); + if (sheetState != null) + { + throw new ActionObsoletedException(nameof(ItemEnhancement11)); + } + var addressesHex = GetSignerAndOtherAddressesHex(context, avatarAddress); var sw = new Stopwatch(); diff --git a/Lib9c/Model/Item/Equipment.cs b/Lib9c/Model/Item/Equipment.cs index 37a0dfed67..dd1a3af1c2 100644 --- a/Lib9c/Model/Item/Equipment.cs +++ b/Lib9c/Model/Item/Equipment.cs @@ -18,7 +18,7 @@ public class Equipment : ItemUsable, IEquippableItem // FIXME: Whether the equipment is equipped or not has no asset value and must be removed from the state. public bool equipped; public int level; - public long exp; + public long Exp; public int optionCountFromCombination; public DecimalStat Stat { get; } @@ -41,6 +41,7 @@ public Equipment(EquipmentItemSheet.Row data, Guid id, long requiredBlockIndex, SetId = data.SetId; SpineResourcePath = data.SpineResourcePath; MadeWithMimisbrunnrRecipe = madeWithMimisbrunnrRecipe; + Exp = data.Exp ?? 0L; } public Equipment(Dictionary serialized) : base(serialized) @@ -66,11 +67,11 @@ public Equipment(Dictionary serialized) : base(serialized) { try { - exp = value.ToLong(); + Exp = value.ToLong(); } catch (InvalidCastException) { - exp = (long)((Integer)value).Value; + Exp = (long)((Integer)value).Value; } } @@ -125,9 +126,9 @@ public override IValue Serialize() dict = dict.SetItem(MadeWithMimisbrunnrRecipeKey, MadeWithMimisbrunnrRecipe.Serialize()); } - if (exp > 0) + if (Exp > 0) { - dict = dict.SetItem(EquipmentExpKey, exp.Serialize()); + dict = dict.SetItem(EquipmentExpKey, Exp.Serialize()); } return dict; @@ -351,7 +352,7 @@ private void UpdateOptionsV3(IRandom random, EnhancementCostSheetV3.Row row) protected bool Equals(Equipment other) { return base.Equals(other) && equipped == other.equipped && level == other.level && - exp == other.exp && Equals(Stat, other.Stat) && SetId == other.SetId && + Exp == other.Exp && Equals(Stat, other.Stat) && SetId == other.SetId && SpineResourcePath == other.SpineResourcePath; }