mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-17 09:24:37 +01:00
Implement level reset, bug fixes
This commit is contained in:
@@ -139,7 +139,17 @@ namespace nksrv.Database
|
|||||||
|
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
|
public int GenerateUniqueCharacterId()
|
||||||
|
{
|
||||||
|
var num = Rng.RandomId();
|
||||||
|
|
||||||
|
while (Characters.Any(x => x.Csn == num))
|
||||||
|
{
|
||||||
|
num = Rng.RandomId();
|
||||||
|
}
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
||||||
public bool IsStageCompleted(int id, bool isNorm)
|
public bool IsStageCompleted(int id, bool isNorm)
|
||||||
{
|
{
|
||||||
foreach (var item in FieldInfoNew)
|
foreach (var item in FieldInfoNew)
|
||||||
@@ -195,6 +205,11 @@ namespace nksrv.Database
|
|||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool HasCharacter(int c)
|
||||||
|
{
|
||||||
|
return Characters.Any(x => x.Tid == c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public class CoreInfo
|
public class CoreInfo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,9 +11,17 @@ namespace nksrv.LobbyServer.Msgs.Character
|
|||||||
var user = GetUser();
|
var user = GetUser();
|
||||||
|
|
||||||
var response = new ResGetCharacterData();
|
var response = new ResGetCharacterData();
|
||||||
foreach (var item in user.Characters)
|
// TODO: When Squad view opens in the game, or this request is sent, all character levels reset to 1 as well as cusume IDs
|
||||||
|
//foreach (var item in user.Characters)
|
||||||
|
//{
|
||||||
|
// response.Character.Add(new NetUserCharacterData() { Default = new() { Csn = item.Csn, Skill1Lv = item.Skill1Lvl, Skill2Lv = item.Skill2Lvl, CostumeId = item.CostumeId, Lv = item.Level, Grade = item.Grade, Tid = item.Tid, UltiSkillLv = item.UltimateLevel }, IsSynchro = false, Artifact = 0 });
|
||||||
|
//}
|
||||||
|
|
||||||
|
var highestLevelCharacters = user.Characters.OrderByDescending(x => x.Level).Take(5).ToList();
|
||||||
|
|
||||||
|
foreach (var c in highestLevelCharacters)
|
||||||
{
|
{
|
||||||
response.Character.Add(new NetUserCharacterData() { Default = new() { Csn = item.Csn, Skill1Lv = item.Skill1Lvl, Skill2Lv = item.Skill2Lvl, CostumeId = item.CostumeId, Lv = item.Level, Grade = item.Grade, Tid = item.Tid, UltiSkillLv = item.UltimateLevel } });
|
response.SynchroStandardCharacters.Add(c.Csn);
|
||||||
}
|
}
|
||||||
|
|
||||||
await WriteDataAsync(response);
|
await WriteDataAsync(response);
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ namespace nksrv.LobbyServer.Msgs.Character
|
|||||||
|
|
||||||
foreach (var c in highestLevelCharacters)
|
foreach (var c in highestLevelCharacters)
|
||||||
{
|
{
|
||||||
response.SynchroStandardCharacters.Add(c.Tid);
|
response.SynchroStandardCharacters.Add(c.Csn);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var currency in user.Currency)
|
foreach (var currency in user.Currency)
|
||||||
|
|||||||
82
nksrv/LobbyServer/Msgs/Character/ResetLevel.cs
Normal file
82
nksrv/LobbyServer/Msgs/Character/ResetLevel.cs
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
using nksrv.Database;
|
||||||
|
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/growreset")]
|
||||||
|
public class ResetLevel : LobbyMsgHandler
|
||||||
|
{
|
||||||
|
protected override async Task HandleAsync()
|
||||||
|
{
|
||||||
|
var req = await ReadData<ReqCharacterGrowReset>();
|
||||||
|
var user = GetUser();
|
||||||
|
var response = new ResCharacterGrowReset();
|
||||||
|
var data = StaticDataParser.Instance.GetCharacterLevelUpData();
|
||||||
|
|
||||||
|
foreach (var item in user.Characters.ToArray())
|
||||||
|
{
|
||||||
|
if (item.Csn == req.Csn)
|
||||||
|
{
|
||||||
|
if (item.Level == 1)
|
||||||
|
{
|
||||||
|
Logger.Warn("Character level is already 1 - cannot reset");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int requiredCredit = 0;
|
||||||
|
int requiredBattleData = 0;
|
||||||
|
int requiredCoreDust = 0;
|
||||||
|
for (int i = 1; i < item.Level; i++)
|
||||||
|
{
|
||||||
|
var levelUpData = data[i];
|
||||||
|
requiredCredit += levelUpData.gold;
|
||||||
|
requiredBattleData += levelUpData.character_exp;
|
||||||
|
requiredCoreDust += levelUpData.character_exp2;
|
||||||
|
}
|
||||||
|
|
||||||
|
user.AddCurrency(CurrencyType.Gold, requiredCredit);
|
||||||
|
user.AddCurrency(CurrencyType.CharacterExp, requiredBattleData);
|
||||||
|
user.AddCurrency(CurrencyType.CharacterExp2, requiredCoreDust);
|
||||||
|
item.Level = 1;
|
||||||
|
|
||||||
|
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.Csn);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var currency in user.Currency)
|
||||||
|
{
|
||||||
|
response.Currencies.Add(new NetUserCurrencyData() { Type = (int)currency.Key, Value = currency.Value });
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JsonDb.Save();
|
||||||
|
|
||||||
|
await WriteDataAsync(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,17 +19,23 @@ namespace nksrv.LobbyServer.Msgs.Gacha
|
|||||||
// TODO implement reward
|
// TODO implement reward
|
||||||
response.Reward = new NetRewardData();
|
response.Reward = new NetRewardData();
|
||||||
|
|
||||||
if (user.GachaTutorialPlayCount == 0)
|
|
||||||
{
|
|
||||||
foreach (var c in StaticDataParser.Instance.GetAllCharacterTids())
|
foreach (var c in StaticDataParser.Instance.GetAllCharacterTids())
|
||||||
{
|
{
|
||||||
response.Gacha.Add(new NetGachaEntityData() { Corporation = 1, PieceCount = 1, CurrencyValue = 5, Sn = c, Tid = c, Type = 1 });
|
if (!user.HasCharacter(c))
|
||||||
|
{
|
||||||
|
var id = user.GenerateUniqueCharacterId();
|
||||||
|
response.Gacha.Add(new NetGachaEntityData() { Corporation = 1, PieceCount = 1, CurrencyValue = 5, Sn = id, Tid = c, Type = 1 });
|
||||||
|
|
||||||
response.Characters.Add(new NetUserCharacterDefaultData() { CostumeId = 0, Csn = c, Grade = 0, Lv = 1, Skill1Lv = 1, Skill2Lv = 1, Tid = c, UltiSkillLv = 1 });
|
response.Characters.Add(new NetUserCharacterDefaultData() { CostumeId = 0, Csn = id, Grade = 0, Lv = 1, Skill1Lv = 1, Skill2Lv = 1, Tid = c, UltiSkillLv = 1 });
|
||||||
user.Characters.Add(new Database.Character() { CostumeId = 0, Csn = c, Grade = 0, Level = 1, Skill1Lvl = 1, Skill2Lvl = 1, Tid = c, UltimateLevel = 1 });
|
|
||||||
|
user.Characters.Add(new Database.Character() { CostumeId = 0, Csn = id, Grade = 0, Level = 1, Skill1Lvl = 1, Skill2Lvl = 1, Tid = c, UltimateLevel = 1 });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// TODO add spare body
|
||||||
|
}
|
||||||
}
|
}
|
||||||
user.GachaTutorialPlayCount++;
|
user.GachaTutorialPlayCount++;
|
||||||
}
|
|
||||||
|
|
||||||
JsonDb.Save();
|
JsonDb.Save();
|
||||||
|
|
||||||
|
|||||||
@@ -2265,3 +2265,13 @@ message ReqObtainMainQuestReward {
|
|||||||
message ResObtainMainQuestReward {
|
message ResObtainMainQuestReward {
|
||||||
NetRewardData Reward = 2;
|
NetRewardData Reward = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message ReqCharacterGrowReset {
|
||||||
|
int64 Csn = 2;
|
||||||
|
}
|
||||||
|
message ResCharacterGrowReset {
|
||||||
|
NetUserCharacterDefaultData Character = 2;
|
||||||
|
repeated NetUserCurrencyData Currencies = 3;
|
||||||
|
int32 SynchroLv = 4;
|
||||||
|
repeated int64 SynchroStandardCharacters = 5;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user