mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-12 23:14:34 +01:00
basic reward system working
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
31
nksrv/StaticInfo/StageCompletionReward.cs
Normal file
31
nksrv/StaticInfo/StageCompletionReward.cs
Normal 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 }
|
||||||
|
} }
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user