mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-12 15:04:36 +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 System;
|
||||
using System.Collections.Generic;
|
||||
@@ -48,12 +49,54 @@ namespace nksrv.LobbyServer.Msgs.Stage
|
||||
user.TeamData.TeamNumber = 1;
|
||||
user.TeamData.TeamCombat = 1446; // TODO: Don't hardcode this
|
||||
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 = 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 = 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);
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using static Google.Rpc.Context.AttributeContext.Types;
|
||||
|
||||
namespace nksrv.LobbyServer.Msgs.Team
|
||||
{
|
||||
@@ -13,13 +14,31 @@ namespace nksrv.LobbyServer.Msgs.Team
|
||||
protected override async Task HandleAsync()
|
||||
{
|
||||
var req = await ReadData<ReqGetTeamData>();
|
||||
var user = GetUser();
|
||||
|
||||
var response = new ResGetTeamData();
|
||||
|
||||
// TODO: assume that team data did not change
|
||||
var resp = new ResGetTeamData();
|
||||
// resp.TypeTeams.Add(new NetUserTeamData() { })
|
||||
//resp.TypeTeams
|
||||
WriteData(resp);
|
||||
// NOTE: Keep this in sync with EnterLobbyServer code
|
||||
if (user.Characters.Count > 0)
|
||||
{
|
||||
var team1 = new NetUserTeamData();
|
||||
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 user = GetUser();
|
||||
|
||||
// NOTE: Keep this in sync with GetUser code
|
||||
|
||||
var response = new ResEnterLobbyServer();
|
||||
response.User = new NetUserData();
|
||||
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.RepresentationTeam = user.TeamData;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ namespace nksrv.LobbyServer.Msgs.User.Tutorial
|
||||
var user = GetUser();
|
||||
if (!user.ClearedTutorials.Contains(req.LastClearedTid))
|
||||
user.ClearedTutorials.Add(req.LastClearedTid);
|
||||
JsonDb.Save();
|
||||
|
||||
var response = new ResSetTutorial();
|
||||
WriteData(response);
|
||||
|
||||
@@ -1534,4 +1534,22 @@ message ReqSetWallpaper {
|
||||
}
|
||||
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<CurrencyType, long> Currency = new Dictionary<CurrencyType, long>() {
|
||||
{ CurrencyType.ContentStamina, 2 },
|
||||
|
||||
{ CurrencyType.Gold, 1 },
|
||||
{ CurrencyType.CharPremiumTicket, 23422 }
|
||||
{ CurrencyType.CharPremiumTicket, 23422 }
|
||||
};
|
||||
|
||||
public List<Character> Characters = new();
|
||||
|
||||
Reference in New Issue
Block a user