Stage rewards fully working, fixed main quest again, cash shop working

This commit is contained in:
Mikhail
2024-07-04 13:18:56 -04:00
parent 3f4ec386a4
commit 04a2b8d2fa
6 changed files with 110 additions and 44 deletions

View File

@@ -20,7 +20,7 @@ namespace nksrv.LobbyServer.Msgs.Shop
var response = new ResGetJupiterProductList(); var response = new ResGetJupiterProductList();
foreach (var item in x.ProductIdList) foreach (var item in x.ProductIdList)
{ {
response.ProductInfoList.Add(new NetJupiterProductInfo() { CurrencyCode = "US", CurrencySymbol = "$", MicroPrice = 212, Price = "22", ProductId = item }); response.ProductInfoList.Add(new NetJupiterProductInfo() { CurrencyCode = "US", CurrencySymbol = "$", MicroPrice = 0, Price = "0", ProductId = item });
} }
WriteData(response); WriteData(response);
} }

View File

@@ -0,0 +1,23 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Shop.InApp
{
[PacketPath("/inappshop/getreceivableproductlist")]
public class GetRetrivableProductList : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var x = await ReadData<ReqGetInAppShopReceivableProductList>();
var response = new ResGetInAppShopReceivableProductList();
// TODO
WriteData(response);
}
}
}

View File

@@ -27,7 +27,6 @@ namespace nksrv.LobbyServer.Msgs.Stage
var clearedStage = StaticDataParser.Instance.GetStageData(req.StageId); var clearedStage = StaticDataParser.Instance.GetStageData(req.StageId);
if (clearedStage == null) throw new Exception("cleared stage cannot be null"); if (clearedStage == null) throw new Exception("cleared stage cannot be null");
user.LastNormalStageCleared = req.StageId;
if (user.FieldInfo.Count == 0) if (user.FieldInfo.Count == 0)
{ {
@@ -37,11 +36,13 @@ namespace nksrv.LobbyServer.Msgs.Stage
DoQuestSpecificUserOperations(user, req.StageId); DoQuestSpecificUserOperations(user, req.StageId);
var rewardData = StaticDataParser.Instance.GetRewardTableEntry(clearedStage.reward_id); var rewardData = StaticDataParser.Instance.GetRewardTableEntry(clearedStage.reward_id);
user.FieldInfo[clearedStage.chapter_id - 1].CompletedStages.Add(new NetFieldStageData() { StageId = req.StageId });
if (rewardData != null) if (rewardData != null)
response.Reward = RegisterRewardsForUser(user, rewardData); response.StageClearReward = RegisterRewardsForUser(user, rewardData);
else else
Logger.Warn("rewardId is null for stage " + req.StageId); Logger.Warn("rewardId is null for stage " + req.StageId);
user.LastNormalStageCleared = req.StageId;
user.FieldInfo[clearedStage.chapter_id - 1].CompletedStages.Add(new NetFieldStageData() { StageId = req.StageId });
JsonDb.Save(); JsonDb.Save();
} }
@@ -55,56 +56,83 @@ namespace nksrv.LobbyServer.Msgs.Stage
if (rewardData.user_exp != 0) if (rewardData.user_exp != 0)
{ {
var newXp = rewardData.character_exp + user.userPointData.ExperiencePoint; var newXp = rewardData.user_exp + user.userPointData.ExperiencePoint;
var newLevel = StaticDataParser.Instance.GetUserLevelFromUserExp(newXp); var newLevel = StaticDataParser.Instance.GetUserLevelFromUserExp(newXp);
if (newLevel == -1) if (newLevel == -1)
{ {
Logger.Warn("Unknown user level value for xp " + newXp); Logger.Warn("Unknown user level value for xp " + newXp);
} }
//ret.UserExp = new NetIncreaseExpData() // TODO: what is the difference between IncreaseExp and GainExp
//{ // NOTE: Current Exp/Lv refers to after XP was added.
// BeforeExp = user.userPointData.ExperiencePoint,
// BeforeLv = user.userPointData.UserLevel, ret.UserExp = new NetIncreaseExpData()
// IncreaseExp = rewardData.character_exp, {
// CurrentExp = rewardData.character_exp + newXp, BeforeExp = user.userPointData.ExperiencePoint,
// CurrentLv = newLevel, BeforeLv = user.userPointData.UserLevel,
// GainExp = rewardData.character_exp
//}; IncreaseExp = rewardData.user_exp,
user.userPointData.ExperiencePoint += rewardData.character_exp; CurrentExp = newXp,
CurrentLv = newLevel,
GainExp = rewardData.user_exp,
Csn = 123,
};
user.userPointData.ExperiencePoint = newXp;
if (newLevel > user.userPointData.UserLevel)
{
// TODO: Commander Level up reward
}
user.userPointData.UserLevel = newLevel;
} }
foreach (var item in rewardData.rewards) foreach (var item in rewardData.rewards)
{ {
if (item.reward_id != 0) if (item.reward_id != 0)
{ {
if (string.IsNullOrEmpty(item.reward_type)) { } if (string.IsNullOrEmpty(item.reward_type) || string.IsNullOrWhiteSpace(item.reward_type)) { }
else if (item.reward_type == "Currency") else if (item.reward_type == "Currency")
{ {
Dictionary<CurrencyType, int> current = new Dictionary<CurrencyType, int>(); bool found = false;
// add all currencies that users has to current dictionary
foreach (var currentReward in user.Currency) foreach (var currentReward in user.Currency)
{ {
if (!current.ContainsKey(currentReward.Key)) if (currentReward.Key == (CurrencyType)item.reward_id)
current.Add(currentReward.Key, 0); {
user.Currency[currentReward.Key] += item.reward_value;
current[currentReward.Key] = (int)currentReward.Value; ret.Currency.Add(new NetCurrencyData()
{
FinalValue = user.Currency[currentReward.Key],
Value = item.reward_value,
Type = item.reward_id
});
found = true;
break;
}
} }
// add currency reward to response if (!found)
CurrencyType t = (CurrencyType)item.reward_id; {
int val = item.reward_value; user.Currency.Add((CurrencyType)item.reward_id, item.reward_value);
if (!current.ContainsKey(t)) ret.Currency.Add(new NetCurrencyData()
current.Add(t, 0); {
var val2 = current[t]; FinalValue = item.reward_value,
ret.Currency.Add(new NetCurrencyData() { Type = (int)t, Value = val, FinalValue = val2 + val }); Value = item.reward_value,
Type = item.reward_id
});
// add currency reward to user info }
if (!user.Currency.ContainsKey(t)) }
user.Currency.Add(t, val); else if (item.reward_type == "Item")
else {
user.Currency[t] += val; for (int i = 0; i < item.reward_value; i++)
{
user.Items.Add(new ItemData() { ItemType = item.reward_id });
ret.Item.Add(new NetItemData()
{
Count = 1,
Tid = item.reward_id
});
}
} }
} }
else else
@@ -133,6 +161,13 @@ namespace nksrv.LobbyServer.Msgs.Stage
team1.Type = 1; team1.Type = 1;
team1.LastContentsTeamNumber = 1; team1.LastContentsTeamNumber = 1;
user.Characters.Add(new Utils.Character() { Csn = 47263455, Tid = 201001 });
user.Characters.Add(new Utils.Character() { Csn = 47273456, Tid = 330501 });
user.Characters.Add(new Utils.Character() { Csn = 47263457, Tid = 130201 });
user.Characters.Add(new Utils.Character() { Csn = 47263458, Tid = 230101 });
user.Characters.Add(new Utils.Character() { Csn = 47263459, Tid = 301201 });
var team1Sub = new NetTeamData(); var team1Sub = new NetTeamData();
team1Sub.TeamNumber = 1; team1Sub.TeamNumber = 1;
for (int i = 1; i < 6; i++) for (int i = 1; i < 6; i++)
@@ -143,11 +178,6 @@ namespace nksrv.LobbyServer.Msgs.Stage
team1.Teams.Add(team1Sub); team1.Teams.Add(team1Sub);
user.UserTeams.Add(1, team1); user.UserTeams.Add(1, team1);
user.Characters.Add(new Utils.Character() { Csn = 47263455, Tid = 201001 });
user.Characters.Add(new Utils.Character() { Csn = 47273456, Tid = 330501 });
user.Characters.Add(new Utils.Character() { Csn = 47263457, Tid = 130201 });
user.Characters.Add(new Utils.Character() { Csn = 47263458, Tid = 230101 });
user.Characters.Add(new Utils.Character() { Csn = 47263459, Tid = 301201 });
user.RepresentationTeamData.TeamNumber = 1; user.RepresentationTeamData.TeamNumber = 1;
user.RepresentationTeamData.TeamCombat = 1446; // TODO: Don't hardcode this user.RepresentationTeamData.TeamCombat = 1446; // TODO: Don't hardcode this

View File

@@ -21,9 +21,6 @@ namespace nksrv.LobbyServer.Msgs.Trigger
var completedQuest = StaticDataParser.Instance.GetMainQuestByTableId(req.Tid); var completedQuest = StaticDataParser.Instance.GetMainQuestByTableId(req.Tid);
if (completedQuest == null) throw new Exception("Quest not found"); if (completedQuest == null) throw new Exception("Quest not found");
// set next quest as available
user.SetQuest(completedQuest.next_main_quest_id, true);
JsonDb.Save(); JsonDb.Save();
var response = new ResFinMainQuest(); var response = new ResFinMainQuest();
WriteData(response); WriteData(response);

View File

@@ -1855,4 +1855,15 @@ message ResProfileCardDecorationLayout {
message ReqGetWallpaperInventory {} message ReqGetWallpaperInventory {}
message ResGetWallpaperInventory { message ResGetWallpaperInventory {
repeated int32 livewallpaperIds = 2; repeated int32 livewallpaperIds = 2;
}
message NetInAppShopReceivableProductData {
string ProductId = 1;
string Token = 2;
int32 SubTid = 3;
}
message ReqGetInAppShopReceivableProductList {}
message ResGetInAppShopReceivableProductList {
repeated NetInAppShopReceivableProductData Data = 1;
} }

View File

@@ -47,6 +47,10 @@ namespace nksrv.Utils
public int ExperiencePoint = 0; public int ExperiencePoint = 0;
} }
public class ItemData
{
public int ItemType;
}
public class User public class User
{ {
@@ -71,6 +75,7 @@ namespace nksrv.Utils
{ CurrencyType.CharPremiumTicket, 999999 } { CurrencyType.CharPremiumTicket, 999999 }
}; };
public List<ItemData> Items = new();
public List<Character> Characters = []; public List<Character> Characters = [];
public NetWholeUserTeamData RepresentationTeamData = new(); public NetWholeUserTeamData RepresentationTeamData = new();
public List<int> ClearedTutorials = []; public List<int> ClearedTutorials = [];