mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-03 04:36:03 +08:00
[NOT TESTED] handle avatar promotion (#21)
This commit is contained in:
@@ -13,6 +13,8 @@ namespace EggLink.DanhengServer.Data.Excel
|
||||
public int AvatarID { get; set; } = 0;
|
||||
public HashName AvatarName { get; set; } = new();
|
||||
public int ExpGroup { get; set; } = 0;
|
||||
public int MaxPromotion { get; set; } = 0;
|
||||
public int MaxRank { get; set; } = 0;
|
||||
public List<int> RankIDList { get; set; } = [];
|
||||
public string? JsonPath { get; set; } = "";
|
||||
|
||||
|
||||
@@ -12,6 +12,9 @@ namespace EggLink.DanhengServer.Data.Excel
|
||||
public int AvatarID { get; set; }
|
||||
public int Promotion { get; set; }
|
||||
public int MaxLevel { get; set; }
|
||||
public int PlayerLevelRequire { get; set; }
|
||||
public int WorldLevelRequire { get; set; }
|
||||
public List<ItemParam> PromotionCostList { get; set; } = [];
|
||||
|
||||
public override int GetId()
|
||||
{
|
||||
@@ -22,5 +25,11 @@ namespace EggLink.DanhengServer.Data.Excel
|
||||
{
|
||||
GameData.AvatarPromotionConfigData.Add(GetId(), this);
|
||||
}
|
||||
|
||||
public class ItemParam
|
||||
{
|
||||
public int ItemID;
|
||||
public int ItemNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using EggLink.DanhengServer.Data;
|
||||
using EggLink.DanhengServer.Database;
|
||||
using EggLink.DanhengServer.Database.Avatar;
|
||||
using EggLink.DanhengServer.Database.Inventory;
|
||||
using EggLink.DanhengServer.Enums.Item;
|
||||
using EggLink.DanhengServer.Game.Player;
|
||||
@@ -758,6 +759,32 @@ namespace EggLink.DanhengServer.Game.Inventory
|
||||
return list;
|
||||
}
|
||||
|
||||
public Boolean promoteAvatar(int avatarId) {
|
||||
// Get avatar
|
||||
AvatarInfo avatarData = Player.AvatarManager!.GetAvatar(avatarId)!;
|
||||
if (avatarData == null || avatarData.Excel == null || avatarData.Promotion >= avatarData.Excel.MaxPromotion) return false;
|
||||
|
||||
// Get promotion data
|
||||
Data.Excel.AvatarPromotionConfigExcel promotion = GameData.AvatarPromotionConfigData.Values.FirstOrDefault(x => x.AvatarID == avatarId && x.Promotion == avatarData.Promotion + 1)!;
|
||||
|
||||
// Sanity check
|
||||
if ((promotion == null) || avatarData.Level < promotion.MaxLevel || Player.Data.Level < promotion.PlayerLevelRequire || Player.Data.WorldLevel < promotion.WorldLevelRequire) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Pay items
|
||||
foreach (var cost in promotion.PromotionCostList) {
|
||||
Player.InventoryManager!.RemoveItem(cost.ItemID, cost.ItemNum);
|
||||
}
|
||||
|
||||
// Promote
|
||||
avatarData.Promotion = avatarData.Promotion + 1;
|
||||
|
||||
// Send packets
|
||||
Player.SendPacket(new PacketPlayerSyncScNotify(avatarData));
|
||||
return true;
|
||||
}
|
||||
|
||||
public List<ItemData> LevelUpRelic(int uniqueId, ItemCostData costData)
|
||||
{
|
||||
var relicItem = Data.RelicItems.Find(x => x.UniqueId == uniqueId);
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
using EggLink.DanhengServer.Proto;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace EggLink.DanhengServer.Server.Packet.Recv.Avatar
|
||||
{
|
||||
[Opcode(CmdIds.PromoteAvatarCsReq)]
|
||||
public class HandlerPromoteAvatarCsReq : Handler
|
||||
{
|
||||
public override void OnHandle(Connection connection, byte[] header, byte[] data)
|
||||
{
|
||||
var req = PromoteAvatarCsReq.Parser.ParseFrom(data);
|
||||
|
||||
connection.Player!.InventoryManager!.promoteAvatar((int)req.BaseAvatarId);
|
||||
|
||||
connection.SendPacket(CmdIds.PromoteAvatarScRsp);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user