mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-13 15:34:36 +01:00
90 lines
3.3 KiB
C#
90 lines
3.3 KiB
C#
using nksrv.StaticInfo;
|
|
using nksrv.Utils;
|
|
using Swan.Logging;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace nksrv.LobbyServer.Msgs.Character
|
|
{
|
|
[PacketPath("/character/levelup")]
|
|
public class LevelUp : LobbyMsgHandler
|
|
{
|
|
protected override async Task HandleAsync()
|
|
{
|
|
var req = await ReadData<ReqCharacterLevelUp>();
|
|
var user = GetUser();
|
|
var response = new ResCharacterLevelUp();
|
|
var data = StaticDataParser.Instance.GetCharacterLevelUpData();
|
|
|
|
foreach (var item in user.Characters.ToArray())
|
|
{
|
|
if (item.Csn == req.Csn)
|
|
{
|
|
// item.Level = req.Level;
|
|
|
|
int requiredCredit = 0;
|
|
int requiredBattleData = 0;
|
|
int requiredCoreDust = 0;
|
|
for (int i = item.Level; i < req.Level; i++)
|
|
{
|
|
var levelUpData = data[i];
|
|
requiredCredit += levelUpData.gold;
|
|
requiredBattleData += levelUpData.character_exp;
|
|
requiredCoreDust += levelUpData.character_exp2;
|
|
}
|
|
|
|
if (user.CanSubtractCurrency(CurrencyType.Gold, requiredCredit) &&
|
|
user.CanSubtractCurrency(CurrencyType.CharacterExp, requiredBattleData) &&
|
|
user.CanSubtractCurrency(CurrencyType.CharacterExp2, requiredCoreDust))
|
|
{
|
|
user.SubtractCurrency(CurrencyType.Gold, requiredCredit);
|
|
user.SubtractCurrency(CurrencyType.CharacterExp, requiredBattleData);
|
|
user.SubtractCurrency(CurrencyType.CharacterExp2, requiredCoreDust);
|
|
item.Level = req.Level;
|
|
}
|
|
else
|
|
{
|
|
// TOOD: log this
|
|
Logger.Error("ERROR: Not enough currency for upgrade");
|
|
return;
|
|
}
|
|
|
|
response.Character = new() {
|
|
CostumeId = item.CostumeId,
|
|
Csn = item.Csn,
|
|
Lv = item.Level,
|
|
Skill1Lv = item.Skill1Lvl,
|
|
Skill2Lv = item.Skill2Lvl,
|
|
UltiSkillLv = item.UltimateLevel,
|
|
Grade = item.Grade,
|
|
Tid = item.Tid
|
|
};
|
|
var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList();
|
|
|
|
response.SynchroLv = highestLevelCharacters.Last().Level;
|
|
|
|
foreach (var c in highestLevelCharacters)
|
|
{
|
|
response.SynchroStandardCharacters.Add(c.Tid);
|
|
}
|
|
|
|
foreach (var currency in user.Currency)
|
|
{
|
|
response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value });
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
JsonDb.Save();
|
|
|
|
|
|
|
|
await WriteDataAsync(response);
|
|
}
|
|
}
|
|
}
|