From 626fc3be17b8fa5a45115b8ffe2781c2dd12ce7b Mon Sep 17 00:00:00 2001 From: tyrosine1153 Date: Tue, 8 Oct 2024 17:10:53 +0900 Subject: [PATCH 1/5] add column Materials in WorldBossRankingRewardSheet --- .../TableData/WorldBossRankingRewardSheet.cs | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/Lib9c/TableData/WorldBossRankingRewardSheet.cs b/Lib9c/TableData/WorldBossRankingRewardSheet.cs index 066e76379a..4671815ad3 100644 --- a/Lib9c/TableData/WorldBossRankingRewardSheet.cs +++ b/Lib9c/TableData/WorldBossRankingRewardSheet.cs @@ -3,6 +3,7 @@ using System.Linq; using Libplanet.Types.Assets; using Nekoyume.Helper; +using Nekoyume.Model.Item; using static Nekoyume.TableData.TableExtensions; namespace Nekoyume.TableData @@ -32,6 +33,7 @@ public RuneInfo(int id, int qty) public int RateMax; public List Runes; public int Crystal; + public List<(int itemId, int quantity)> Materials; public override int Key => Id; public override void Set(IReadOnlyList fields) { @@ -48,20 +50,42 @@ public override void Set(IReadOnlyList fields) Runes.Add(new RuneInfo(ParseInt(fields[6 + offset]), ParseInt(fields[7 + offset]))); } Crystal = ParseInt(fields[12]); + + if (fields.Count > 13) + { + Materials = new List<(int, int)>(); + for (int i = 0; i < 2; i++) + { + var offset = i * 2; + Materials.Add( + (ParseInt(fields[13 + offset]), ParseInt(fields[14 + offset]))); + } + } } - public List GetRewards(RuneSheet runeSheet) + public (List assets, Dictionary materials) GetRewards( + RuneSheet runeSheet, + MaterialItemSheet materialSheet) { - var result = new List + var assets = new List { Crystal * CrystalCalculator.CRYSTAL }; - result.AddRange(Runes + assets.AddRange(Runes .Where(runeInfo => runeInfo.RuneQty > 0) .Select(runeInfo => RuneHelper.ToFungibleAssetValue(runeSheet[runeInfo.RuneId], runeInfo.RuneQty))); - return result; + + var materials = new Dictionary(); + foreach (var (itemId, quantity) in Materials) + { + var materialRow = materialSheet.Values.First(r => r.Id == itemId); + var material = ItemFactory.CreateTradableMaterial(materialRow); + materials.TryAdd(material, 0); + materials[material] += quantity; + } + return (assets, materials); } } From 9c00932e5bd824effbb77267a884368cfc63e416 Mon Sep 17 00:00:00 2001 From: tyrosine1153 Date: Thu, 10 Oct 2024 18:25:32 +0900 Subject: [PATCH 2/5] update WorldBossRankingRewardSheet test code --- .../WorldBossRankingRewardSheetTest.cs | 51 ++++++++++--------- .../WorldBoss/WorldBossRankingRewardSheet.csv | 38 +++++++------- 2 files changed, 47 insertions(+), 42 deletions(-) diff --git a/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs b/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs index 5bd262d0b8..2c933a8c2e 100644 --- a/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs +++ b/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs @@ -7,25 +7,25 @@ namespace Lib9c.Tests.TableData public class WorldBossRankingRewardSheetTest { private const string Csv = - @"id,boss_id,ranking_min,ranking_max,rate_min,rate_max,rune_1_id,rune_1_qty,rune_2_id,rune_2_qty,rune_3_id,rune_3_qty,crystal -1,900001,1,1,0,0,10001,3500,10002,1200,10003,300,900000 -2,900001,2,2,0,0,10001,2200,10002,650,10003,150,625000 -3,900001,3,3,0,0,10001,1450,10002,450,10003,100,400000 -4,900001,4,10,0,0,10001,1000,10002,330,10003,70,250000 -5,900001,11,100,0,0,10001,560,10002,150,10003,40,150000 -6,900001,0,0,1,30,10001,370,10002,105,10003,25,100000 -7,900001,0,0,31,50,10001,230,10002,60,10003,10,50000 -8,900001,0,0,51,70,10001,75,10002,20,10003,5,25000 -9,900001,0,0,71,100,10001,40,10002,10,10003,0,15000 -10,900002,1,1,0,0,10011,3500,10012,1200,10013,300,1000000 -11,900002,2,2,0,0,10011,2200,10012,650,10013,150,750000 -12,900002,3,3,0,0,10011,1450,10012,450,10013,100,500000 -13,900002,4,10,0,0,10011,1000,10012,330,10013,70,250000 -14,900002,11,100,0,0,10011,560,10012,150,10013,40,150000 -15,900002,0,0,1,30,10011,370,10012,105,10013,25,100000 -16,900002,0,0,31,50,10011,230,10012,60,10013,10,50000 -17,900002,0,0,51,70,10011,75,10012,20,10013,5,25000 -18,900002,0,0,71,100,10011,40,10012,10,0,0,15000 + @"id,boss_id,ranking_min,ranking_max,rate_min,rate_max,rune_1_id,rune_1_qty,rune_2_id,rune_2_qty,rune_3_id,rune_3_qty,crystal,item_1_id,item_1_qty,item_2_id,item_2_qty +1,900001,1,1,0,0,10001,3500,10002,1200,10003,300,10000000,600201,100,500000,1000 +2,900001,2,2,0,0,10001,2200,10002,650,10003,150,7500000,600201,100,500000,1000 +3,900001,3,3,0,0,10001,1450,10002,450,10003,100,5000000,600201,100,500000,1000 +4,900001,4,10,0,0,10001,1000,10002,330,10003,70,2500000,600201,100,500000,1000 +5,900001,11,100,0,0,10001,560,10002,150,10003,40,1500000,600201,100,500000,1000 +6,900001,0,0,1,30,10001,370,10002,105,10003,25,500000,600201,50,500000,100 +7,900001,0,0,31,50,10001,230,10002,60,10003,10,250000,600201,50,500000,100 +8,900001,0,0,51,70,10001,75,10002,20,10003,5,125000,600201,50,500000,100 +9,900001,0,0,71,100,10001,40,10002,10,0,0,100000,600201,50,500000,100 +10,900002,1,1,0,0,10011,3500,10012,1200,10013,300,10000000,600201,100,500000,1000 +11,900002,2,2,0,0,10011,2200,10012,650,10013,150,7500000,600201,100,500000,1000 +12,900002,3,3,0,0,10011,1450,10012,450,10013,100,5000000,600201,100,500000,1000 +13,900002,4,10,0,0,10011,1000,10012,330,10013,70,2500000,600201,100,500000,1000 +14,900002,11,100,0,0,10011,560,10012,150,10013,40,1500000,600201,100,500000,1000 +15,900002,0,0,1,30,10011,370,10012,105,10013,25,500000,600201,50,500000,100 +16,900002,0,0,31,50,10011,230,10012,60,10013,10,250000,600201,50,500000,100 +17,900002,0,0,51,70,10011,75,10012,20,10013,5,125000,600201,50,500000,100 +18,900002,0,0,71,100,10011,40,10012,10,0,0,100000,600201,50,500000,100 "; [Fact] @@ -41,7 +41,11 @@ public void Set() Assert.Equal(0, row.RateMin); Assert.Equal(0, row.RateMax); Assert.Equal(3, row.Runes.Count); - Assert.Equal(900000, row.Crystal); + Assert.Equal(10000000, row.Crystal); + Assert.Equal(600201, row.Materials[0].itemId); + Assert.Equal(100, row.Materials[0].quantity); + Assert.Equal(500000, row.Materials[1].itemId); + Assert.Equal(1000, row.Materials[1].quantity); } [Theory] @@ -70,10 +74,11 @@ public void GetRewards() var sheet = new WorldBossRankingRewardSheet(); sheet.Set(Csv); var row = sheet.FindRow(900001, 1, 0); - var runeSheet = new TableSheets(TableSheetsImporter.ImportSheets()).RuneSheet; - var rewards = row.GetRewards(runeSheet); + var tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); + var rewards = row.GetRewards(tableSheets.RuneSheet, tableSheets.MaterialItemSheet); - Assert.Equal(4, rewards.Count); + Assert.Equal(4, rewards.assets.Count); + Assert.Equal(2, rewards.materials.Count); } } } diff --git a/Lib9c/TableCSV/WorldBoss/WorldBossRankingRewardSheet.csv b/Lib9c/TableCSV/WorldBoss/WorldBossRankingRewardSheet.csv index c1c3f3ac47..dcc4e698b4 100644 --- a/Lib9c/TableCSV/WorldBoss/WorldBossRankingRewardSheet.csv +++ b/Lib9c/TableCSV/WorldBoss/WorldBossRankingRewardSheet.csv @@ -1,19 +1,19 @@ -id,boss_id,ranking_min,ranking_max,rate_min,rate_max,rune_1_id,rune_1_qty,rune_2_id,rune_2_qty,rune_3_id,rune_3_qty,crystal -1,900001,1,1,0,0,10001,3500,10002,1200,10003,300,10000000 -2,900001,2,2,0,0,10001,2200,10002,650,10003,150,7500000 -3,900001,3,3,0,0,10001,1450,10002,450,10003,100,5000000 -4,900001,4,10,0,0,10001,1000,10002,330,10003,70,2500000 -5,900001,11,100,0,0,10001,560,10002,150,10003,40,1500000 -6,900001,0,0,1,30,10001,370,10002,105,10003,25,500000 -7,900001,0,0,31,50,10001,230,10002,60,10003,10,250000 -8,900001,0,0,51,70,10001,75,10002,20,10003,5,125000 -9,900001,0,0,71,100,10001,40,10002,10,0,0,100000 -10,900002,1,1,0,0,10011,3500,10012,1200,10013,300,10000000 -11,900002,2,2,0,0,10011,2200,10012,650,10013,150,7500000 -12,900002,3,3,0,0,10011,1450,10012,450,10013,100,5000000 -13,900002,4,10,0,0,10011,1000,10012,330,10013,70,2500000 -14,900002,11,100,0,0,10011,560,10012,150,10013,40,1500000 -15,900002,0,0,1,30,10011,370,10012,105,10013,25,500000 -16,900002,0,0,31,50,10011,230,10012,60,10013,10,250000 -17,900002,0,0,51,70,10011,75,10012,20,10013,5,125000 -18,900002,0,0,71,100,10011,40,10012,10,0,0,100000 \ No newline at end of file +id,boss_id,ranking_min,ranking_max,rate_min,rate_max,rune_1_id,rune_1_qty,rune_2_id,rune_2_qty,rune_3_id,rune_3_qty,crystal,item_1_id,item_1_qty,item_2_id,item_2_qty +1,900001,1,1,0,0,10001,3500,10002,1200,10003,300,10000000,600201,100,500000,1000 +2,900001,2,2,0,0,10001,2200,10002,650,10003,150,7500000,600201,100,500000,1000 +3,900001,3,3,0,0,10001,1450,10002,450,10003,100,5000000,600201,100,500000,1000 +4,900001,4,10,0,0,10001,1000,10002,330,10003,70,2500000,600201,100,500000,1000 +5,900001,11,100,0,0,10001,560,10002,150,10003,40,1500000,600201,100,500000,1000 +6,900001,0,0,1,30,10001,370,10002,105,10003,25,500000,600201,50,500000,100 +7,900001,0,0,31,50,10001,230,10002,60,10003,10,250000,600201,50,500000,100 +8,900001,0,0,51,70,10001,75,10002,20,10003,5,125000,600201,50,500000,100 +9,900001,0,0,71,100,10001,40,10002,10,0,0,100000,600201,50,500000,100 +10,900002,1,1,0,0,10011,3500,10012,1200,10013,300,10000000,600201,100,500000,1000 +11,900002,2,2,0,0,10011,2200,10012,650,10013,150,7500000,600201,100,500000,1000 +12,900002,3,3,0,0,10011,1450,10012,450,10013,100,5000000,600201,100,500000,1000 +13,900002,4,10,0,0,10011,1000,10012,330,10013,70,2500000,600201,100,500000,1000 +14,900002,11,100,0,0,10011,560,10012,150,10013,40,1500000,600201,100,500000,1000 +15,900002,0,0,1,30,10011,370,10012,105,10013,25,500000,600201,50,500000,100 +16,900002,0,0,31,50,10011,230,10012,60,10013,10,250000,600201,50,500000,100 +17,900002,0,0,51,70,10011,75,10012,20,10013,5,125000,600201,50,500000,100 +18,900002,0,0,71,100,10011,40,10012,10,0,0,100000,600201,50,500000,100 From dd2249fd34a7593a9198dbaea9b2da30a90249f6 Mon Sep 17 00:00:00 2001 From: tyrosine1153 Date: Fri, 11 Oct 2024 14:48:22 +0900 Subject: [PATCH 3/5] fix untradable --- Lib9c/TableData/WorldBossRankingRewardSheet.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Lib9c/TableData/WorldBossRankingRewardSheet.cs b/Lib9c/TableData/WorldBossRankingRewardSheet.cs index 4671815ad3..7698fa7244 100644 --- a/Lib9c/TableData/WorldBossRankingRewardSheet.cs +++ b/Lib9c/TableData/WorldBossRankingRewardSheet.cs @@ -63,7 +63,7 @@ public override void Set(IReadOnlyList fields) } } - public (List assets, Dictionary materials) GetRewards( + public (List assets, Dictionary materials) GetRewards( RuneSheet runeSheet, MaterialItemSheet materialSheet) { @@ -77,11 +77,11 @@ public override void Set(IReadOnlyList fields) RuneHelper.ToFungibleAssetValue(runeSheet[runeInfo.RuneId], runeInfo.RuneQty))); - var materials = new Dictionary(); + var materials = new Dictionary(); foreach (var (itemId, quantity) in Materials) { var materialRow = materialSheet.Values.First(r => r.Id == itemId); - var material = ItemFactory.CreateTradableMaterial(materialRow); + var material = ItemFactory.CreateMaterial(materialRow); materials.TryAdd(material, 0); materials[material] += quantity; } From cca6859b2a8ce5e605063f16dc1d505ae601a7a0 Mon Sep 17 00:00:00 2001 From: tyrosine1153 Date: Fri, 11 Oct 2024 17:56:30 +0900 Subject: [PATCH 4/5] fix material item to FAV --- .../TableData/WorldBossRankingRewardSheet.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Lib9c/TableData/WorldBossRankingRewardSheet.cs b/Lib9c/TableData/WorldBossRankingRewardSheet.cs index 7698fa7244..5e0b639fb4 100644 --- a/Lib9c/TableData/WorldBossRankingRewardSheet.cs +++ b/Lib9c/TableData/WorldBossRankingRewardSheet.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Lib9c; using Libplanet.Types.Assets; using Nekoyume.Helper; using Nekoyume.Model.Item; @@ -63,29 +64,29 @@ public override void Set(IReadOnlyList fields) } } - public (List assets, Dictionary materials) GetRewards( + public List GetRewards( RuneSheet runeSheet, MaterialItemSheet materialSheet) { - var assets = new List + var result = new List { Crystal * CrystalCalculator.CRYSTAL }; - assets.AddRange(Runes + result.AddRange(Runes .Where(runeInfo => runeInfo.RuneQty > 0) .Select(runeInfo => RuneHelper.ToFungibleAssetValue(runeSheet[runeInfo.RuneId], runeInfo.RuneQty))); - var materials = new Dictionary(); foreach (var (itemId, quantity) in Materials) { - var materialRow = materialSheet.Values.First(r => r.Id == itemId); - var material = ItemFactory.CreateMaterial(materialRow); - materials.TryAdd(material, 0); - materials[material] += quantity; + var isTradable = materialSheet[itemId].ItemSubType + is ItemSubType.Circle or ItemSubType.Scroll; + var currency = Currencies.GetItemCurrency(itemId, isTradable); + result.Add(currency * quantity); } - return (assets, materials); + + return result; } } From ca76985b2ce9e73ed898d63a463d06c99a3fc7fe Mon Sep 17 00:00:00 2001 From: tyrosine1153 Date: Fri, 11 Oct 2024 18:04:45 +0900 Subject: [PATCH 5/5] fix sheet test --- .Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs b/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs index 2c933a8c2e..67e80f3e03 100644 --- a/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs +++ b/.Lib9c.Tests/TableData/WorldBossRankingRewardSheetTest.cs @@ -77,8 +77,7 @@ public void GetRewards() var tableSheets = new TableSheets(TableSheetsImporter.ImportSheets()); var rewards = row.GetRewards(tableSheets.RuneSheet, tableSheets.MaterialItemSheet); - Assert.Equal(4, rewards.assets.Count); - Assert.Equal(2, rewards.materials.Count); + Assert.Equal(6, rewards.Count); } } }