From c10a49b09a3754e79ffffb50352215a33f66fca7 Mon Sep 17 00:00:00 2001 From: rfi Date: Sun, 3 Dec 2023 07:00:08 +0700 Subject: [PATCH] character promote grade cost --- AscNet.GameServer/Handlers/CharacterModule.cs | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/AscNet.GameServer/Handlers/CharacterModule.cs b/AscNet.GameServer/Handlers/CharacterModule.cs index 3cafc0b..0b6089a 100644 --- a/AscNet.GameServer/Handlers/CharacterModule.cs +++ b/AscNet.GameServer/Handlers/CharacterModule.cs @@ -3,6 +3,7 @@ using AscNet.Common.MsgPack; using AscNet.Common.Util; using AscNet.Table.V2.share.item; using AscNet.Table.V2.share.character; +using AscNet.Table.V2.share.character.grade; using MessagePack; using AscNet.Common; @@ -111,15 +112,25 @@ namespace AscNet.GameServer.Handlers { CharacterPromoteGradeRequest req = packet.Deserialize(); var character = session.character.Characters.Find(c => c.Id == req.TemplateId); + var currentGrade = TableReaderV2.Parse().Find(x => x.CharacterId == req.TemplateId && x.Grade == character?.Grade); - if (character is not null) + if (character is not null && currentGrade is not null) { - const int MaxGrade = 14; // Can't find an instance of this anywhere in the tables sadly + var nextGrade = TableReaderV2.Parse().Where(x => x.CharacterId == req.TemplateId && x.Grade > character.Grade).OrderBy(x => x.Grade).FirstOrDefault()?.Grade ?? character.Grade; + if (character.Grade == nextGrade) + { + // CharacterManagerMaxGrade + session.SendResponse(new CharacterPromoteGradeResponse() { Code = 20009019 }, packet.Id); + return; + } + if (currentGrade.UseItemKey is not null) + { + NotifyItemDataList notifyItemData = new(); + notifyItemData.ItemDataList.Add(session.inventory.Do(currentGrade.UseItemKey ?? 1, (currentGrade.UseItemCount ?? 0) * -1)); + session.SendPush(notifyItemData); + } - // TODO: Remove Cogs - - if (character.Grade < MaxGrade) - character.Grade++; + character.Grade = nextGrade; session.SendPush(new NotifyCharacterDataList() {