basic reward system working

This commit is contained in:
Mikhail Thompson
2024-06-28 13:48:43 +03:00
parent 91a6ee3b3d
commit 28f6473bb9
9 changed files with 148 additions and 10 deletions

View File

@@ -0,0 +1,18 @@
using nksrv.Utils;
namespace nksrv.LobbyServer.Msgs.PartyMatch
{
[PacketPath("/partymatch/listinvitation")]
public class ListPartyMatchInvitations : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqListInvitation>();
var user = GetUser();
var response = new ResListInvitation();
// TODO
WriteData(response);
}
}
}

View File

@@ -1,4 +1,5 @@
using nksrv.Utils; using nksrv.StaticInfo;
using nksrv.Utils;
using Swan.Logging; using Swan.Logging;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -48,12 +49,54 @@ namespace nksrv.LobbyServer.Msgs.Stage
user.TeamData.TeamNumber = 1; user.TeamData.TeamNumber = 1;
user.TeamData.TeamCombat = 1446; // TODO: Don't hardcode this user.TeamData.TeamCombat = 1446; // TODO: Don't hardcode this
user.TeamData.Slots.Clear(); user.TeamData.Slots.Clear();
user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 1, Csn = 47263455, Tid = 201001, Lvl = 1}); user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 1, Csn = 47263455, Tid = 201001, Lvl = 1 });
user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 2, Csn = 47273456, Tid = 330501, Lvl = 1 }); user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 2, Csn = 47273456, Tid = 330501, Lvl = 1 });
user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 3, Csn = 47263457, Tid = 130201, Lvl = 1 }); user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 3, Csn = 47263457, Tid = 130201, Lvl = 1 });
user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 4, Csn = 47263458, Tid = 230101, Lvl = 1 }); user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 4, Csn = 47263458, Tid = 230101, Lvl = 1 });
user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 5, Csn = 47263459, Tid = 301201, Lvl = 1 }); user.TeamData.Slots.Add(new NetWholeTeamSlot { Slot = 5, Csn = 47263459, Tid = 301201, Lvl = 1 });
} }
// assign rewards
if (StageCompletionReward.RewardData.ContainsKey(req.StageId))
{
var reward = StageCompletionReward.RewardData[req.StageId];
Dictionary<CurrencyType, int> current = new Dictionary<CurrencyType, int>();
// add all currencies that users has to current dictionary
foreach (var currentReward in user.Currency)
{
if (!current.ContainsKey(currentReward.Key))
current.Add(currentReward.Key, 0);
current[currentReward.Key] = (int)currentReward.Value;
}
// add currency reward to response
response.StageClearReward = new NetRewardData();
foreach (var item in reward.Currency)
{
if (!current.ContainsKey((CurrencyType)item.Type))
current.Add((CurrencyType)item.Type, 0);
var val = current[(CurrencyType)item.Type];
response.StageClearReward.Currency.Add(new NetCurrencyData() { Type = item.Type, Value = item.Value, FinalValue = val + item.Value });
}
// add currency reward to user info
foreach (var item in reward.Currency)
{
if (!user.Currency.ContainsKey((CurrencyType)item.Type))
user.Currency.Add((CurrencyType)item.Type, item.Value);
else
user.Currency[(CurrencyType)item.Type] += item.Value;
}
JsonDb.Save();
}
else
{
Logger.Warn("TODO - Reward for stage ID " + req.StageId);
}
} }
WriteData(response); WriteData(response);

View File

@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using static Google.Rpc.Context.AttributeContext.Types;
namespace nksrv.LobbyServer.Msgs.Team namespace nksrv.LobbyServer.Msgs.Team
{ {
@@ -13,13 +14,31 @@ namespace nksrv.LobbyServer.Msgs.Team
protected override async Task HandleAsync() protected override async Task HandleAsync()
{ {
var req = await ReadData<ReqGetTeamData>(); var req = await ReadData<ReqGetTeamData>();
var user = GetUser();
var response = new ResGetTeamData();
// TODO: assume that team data did not change // NOTE: Keep this in sync with EnterLobbyServer code
var resp = new ResGetTeamData(); if (user.Characters.Count > 0)
// resp.TypeTeams.Add(new NetUserTeamData() { }) {
//resp.TypeTeams var team1 = new NetUserTeamData();
WriteData(resp); team1.Type = 1;
team1.LastContentsTeamNumber = 1;
var team1Sub = new NetTeamData();
team1Sub.TeamNumber = 1;
// TODO: Save this properly. Right now return first 5 characters as a squad.
for (int i = 1; i < 6; i++)
{
var character = user.Characters[i - 1];
team1Sub.Slots.Add(new NetTeamSlot() { Slot = i, Value = character.Csn });
}
team1.Teams.Add(team1Sub);
response.TypeTeams.Add(team1);
}
WriteData(response);
} }
} }
} }

View File

@@ -15,6 +15,8 @@ namespace nksrv.LobbyServer.Msgs.User
var req = await ReadData<ReqEnterLobbyServer>(); var req = await ReadData<ReqEnterLobbyServer>();
var user = GetUser(); var user = GetUser();
// NOTE: Keep this in sync with GetUser code
var response = new ResEnterLobbyServer(); var response = new ResEnterLobbyServer();
response.User = new NetUserData(); response.User = new NetUserData();
response.User.Lv = 1; response.User.Lv = 1;

View File

@@ -34,9 +34,17 @@ namespace nksrv.LobbyServer.Msgs.User
{ {
response.Currency.Add(new NetUserCurrencyData() { Type = (int)item.Key, Value = item.Value }); response.Currency.Add(new NetUserCurrencyData() { Type = (int)item.Key, Value = item.Value });
} }
response.RepresentationTeam = user.TeamData;
response.LastClearedNormalMainStageId = user.LastStageCleared; response.LastClearedNormalMainStageId = user.LastStageCleared;
// Restore completed tutorials. GroupID is the first 4 digits of the Table ID.
foreach (var item in user.ClearedTutorials)
{
var groupId = int.Parse(item.ToString().Substring(0, 4));
int tutorialVersion = item == 1020101 ? 1 : 0; // TODO
response.User.Tutorials.Add(new NetTutorialData() { GroupId = groupId, LastClearedTid = item, LastClearedVersion = tutorialVersion });
}
WriteData(response); WriteData(response);
} }
} }

View File

@@ -16,6 +16,7 @@ namespace nksrv.LobbyServer.Msgs.User.Tutorial
var user = GetUser(); var user = GetUser();
if (!user.ClearedTutorials.Contains(req.LastClearedTid)) if (!user.ClearedTutorials.Contains(req.LastClearedTid))
user.ClearedTutorials.Add(req.LastClearedTid); user.ClearedTutorials.Add(req.LastClearedTid);
JsonDb.Save();
var response = new ResSetTutorial(); var response = new ResSetTutorial();
WriteData(response); WriteData(response);

View File

@@ -1534,4 +1534,22 @@ message ReqSetWallpaper {
} }
message ResSetWallpaper { message ResSetWallpaper {
}
message NetInvitation {
NetWholeUserData fromUser = 1;
int64 inviteTime = 2;
string partyId = 3;
int32 eventId = 4;
}
enum ListInvitationError {
LIST_INVITATION_ERROR_SUCCESS = 0;
LIST_INVITATION_ERROR_NOT_PERIOD_EVENT = 1;
}
message ReqListInvitation {}
message ResListInvitation {
ListInvitationError error = 1;
repeated NetInvitation invitationList = 2;
} }

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.StaticInfo
{
public static class StageCompletionReward
{
// <Stage ID, Reward data>
public static readonly Dictionary<int, NetRewardData> RewardData =
new() {
{ 6000001, new NetRewardData() { Currency = {
new NetCurrencyData() { Type = (int)CurrencyType.Gold, Value = 500 },
new NetCurrencyData() { Type = (int)CurrencyType.CharacterExp , Value = 600 }
} }
},
{ 6000002, new NetRewardData() { Currency = {
new NetCurrencyData() { Type = (int)CurrencyType.Gold, Value = 500 },
new NetCurrencyData() { Type = (int)CurrencyType.CharacterExp , Value = 600 }
} }
},
{ 6000003, new NetRewardData() { Currency = {
new NetCurrencyData() { Type = (int)CurrencyType.Gold, Value = 500 },
new NetCurrencyData() { Type = (int)CurrencyType.CharacterExp , Value = 600 }
} }
},
};
}
}

View File

@@ -54,9 +54,7 @@ namespace nksrv.Utils
public Dictionary<string, string> MapJson = new(); public Dictionary<string, string> MapJson = new();
public Dictionary<CurrencyType, long> Currency = new Dictionary<CurrencyType, long>() { public Dictionary<CurrencyType, long> Currency = new Dictionary<CurrencyType, long>() {
{ CurrencyType.ContentStamina, 2 }, { CurrencyType.ContentStamina, 2 },
{ CurrencyType.CharPremiumTicket, 23422 }
{ CurrencyType.Gold, 1 },
{ CurrencyType.CharPremiumTicket, 23422 }
}; };
public List<Character> Characters = new(); public List<Character> Characters = new();