lobby ui works

This commit is contained in:
Mikhail Thompson
2024-06-27 20:48:15 +03:00
parent 4ffb238c6e
commit d3ea7d4112
27 changed files with 826 additions and 15 deletions

View File

@@ -10,8 +10,8 @@ namespace ProtobufViewUtil
{
Console.WriteLine("Hello, World!");
ResGetMainQuestData s = new ResGetMainQuestData();
var inn = File.ReadAllBytes(@"C:\Users\Misha\Downloads\getmainquestdata-stage01complete");
ResGetTowerData s = new ResGetTowerData();
var inn = File.ReadAllBytes(@"C:\Users\Misha\Downloads\gettowerdata");
s.MergeFrom(inn);
Console.WriteLine(s.ToString());
var outt = s.ToByteArray();

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Archive
{
[PacketPath("/archive/get")]
public class GetArchives : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetArchiveRecord>();
var response = new ResGetArchiveRecord();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Arena
{
[PacketPath("/arena/getbaninfo")]
public class GetArenaBanInfo : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetArenaBanInfo>();
var response = new ResGetArenaBanInfo();
// TODO
WriteData(response);
}
}
}

View File

@@ -16,7 +16,7 @@ namespace nksrv.LobbyServer.Msgs.Auth
{
var req = await ReadData<ReqLogout>();
JsonDb.Instance.GameClientTokens.Remove(UsedAuthToken);
WriteData(new ResLogout());
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Campaign
{
[PacketPath("/shutdownflags/campaignpackage/getall")]
public class CampaignPackageGetAll : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqCampaignPackageGetAllShutdownFlags>();
var response = new ResCampaignPackageGetAllShutdownFlags();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,24 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Character
{
[PacketPath("/character/attractive/get")]
public class GetCharacterAttractiveList : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetAttractiveList>();
var response = new ResGetAttractiveList();
response.CounselAvailableCount = 3; // TODO
// TODO: Validate response from real server and pull info from user info
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Friend
{
[PacketPath("/friend/get")]
public class GetFriends : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetFriendData>();
var response = new ResGetFriendData();
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Minigame
{
[PacketPath("/minigame/nksv2/get")]
public class GetNksv2Minigame : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetMiniGameNKSV2Data>();
var response = new ResGetMiniGameNKSV2Data();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,18 @@
using nksrv.Utils;
namespace nksrv.LobbyServer.Msgs.Misc
{
[PacketPath("/shutdownflags/gacha/getall")]
public class GachaGetAllShutdownFlags : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGachaGetAllShutdownFlags>();
var response = new ResGachaGetAllShutdownFlags();
// TODO: Validate response from real server and pull info from user info
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Mission
{
[PacketPath("/mission/getrewarded/achievement")]
public class GetAchievementRewardedData : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ResGetAchievementRewardedData>();
var response = new ReqGetAchievementRewardedData();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Outpost
{
[PacketPath("/outpost/dispatch/get")]
public class GetDispatchList : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetDispatchList>();
var response = new ResGetDispatchList();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Ranking
{
[PacketPath("/ranking/updateserverreward")]
public class UpdateServerReward : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqUpdateRankingServerReward>();
var response = new ResUpdateRankingServerReward();
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
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/getsubscription")]
public class GetInAppSubscription : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetSubscription>();
var response = new ResGetSubscription();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
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/jupiter/getmarketingdetail")]
public class GetMarketingDetail : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetJupiterMarketingDetail>();
var response = new ResGetJupiterMarketingDetail();
response.MarketingDetail = "Do Not Buy Our Junk Today";
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/getmonthlysubscriptionreward")]
public class GetMonthlySubscriptionReward : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetMonthlySubscriptionReward>();
var response = new ResGetMonthlySubscriptionReward();
// TODO: Validate response from real server
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/custompackage/getsetupdata")]
public class GetCharacterAttractiveList : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetCustomPackageSetupData>();
var response = new ResGetCustomPackageSetupData();
// TODO: Validate response from real server and pull info from user info
WriteData(response);
}
}
}

View File

@@ -0,0 +1,16 @@
using nksrv.Utils;
namespace nksrv.LobbyServer.Msgs.Shop.PackageShop
{
[PacketPath("/packageshop/getpopuppackagestate")]
public class GetPackagePopupState : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetPopupPackageState>();
var response = new ResGetPopupPackageState();
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.PackageShop
{
[PacketPath("/packageshop/campaign/get")]
public class PackageShopGetCampaignPackage : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetCampaignPackage>();
var response = new ResGetCampaignPackage();
// TODO: Validate response from real server and pull info from user info
WriteData(response);
}
}
}

View File

@@ -0,0 +1,26 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Soloraid
{
[PacketPath("/soloraid/getperiod")]
public class GetSoloraidPeriod : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetSoloRaidPeriod>();
var response = new ResGetSoloRaidPeriod();
response.Period = new NetSoloRaidPeriodData
{
};
// TODO
WriteData(response);
}
}
}

View File

@@ -15,7 +15,27 @@ namespace nksrv.LobbyServer.Msgs.Tower
var req = await ReadData<ReqGetTowerData>();
var response = new ResGetTowerData();
// TODO
// TODO: Load remain count for these
var t0 = new NetTowerData() { Type = 1, RemainCount = 3 };
var t1 = new NetTowerData() { Type = 2, RemainCount = 3 };
var t2 = new NetTowerData() { Type = 3, RemainCount = 3 };
var t3 = new NetTowerData() { Type = 4, RemainCount = 3 };
var t4 = new NetTowerData() { Type = 5 };
// setup schedules
t0.Schedules.Add(new NetSchedule() { DayOfWeek = new() { DayOfWeeks = { 1, 4, 6 }, StartTime = 720000000000, Duration = 863990000000 } });
t1.Schedules.Add(new NetSchedule() { DayOfWeek = new() { DayOfWeeks = { 2, 5, 6 }, StartTime = 720000000000, Duration = 863990000000 } });
t2.Schedules.Add(new NetSchedule() { DayOfWeek = new() { DayOfWeeks = { 0, 3, 6 }, StartTime = 720000000000, Duration = 863990000000 } });
t3.Schedules.Add(new NetSchedule() { DayOfWeek = new() { DayOfWeeks = { 2, 6 }, StartTime = 720000000000, Duration = 863990000000 } });
t4.Schedules.Add(new NetSchedule() { AllTime = new() });
response.Data.Add(t0);
response.Data.Add(t1);
response.Data.Add(t2);
response.Data.Add(t3);
response.Data.Add(t4);
WriteData(response);
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/featureflags/all/get")]
public class GetAllFeatureFlags : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetAllFeatureFlags>();
var response = new ResGetAllFeatureFlags();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/ProfileCard/Possession/Get")]
public class GetProfileCardPossession : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqProfileCardObjectList>();
var response = new ResProfileCardObjectList();
// TODO
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/User/GetProfileFrame")]
public class GetProfileFrame : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetProfileFrame>();
var response = new ResGetProfileFrame();
WriteData(response);
}
}
}

View File

@@ -0,0 +1,22 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.User
{
[PacketPath("/User/GetWallpaper")]
public class GetWallpaper : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetWallpaper>();
var response = new ResGetWallpaper();
WriteData(response);
}
}
}

View File

@@ -0,0 +1,25 @@
using nksrv.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace nksrv.LobbyServer.Msgs.Wallet
{
[PacketPath("/wallet/get")]
public class GetWallet : LobbyMsgHandler
{
protected override async Task HandleAsync()
{
var req = await ReadData<ReqGetCurrencyData>();
var response = new ResGetCurrencyData();
foreach (var item in req.Currencies)
{
Console.WriteLine("Request currency " + (CurrencyType)item);
}
WriteData(response);
}
}
}

View File

@@ -1172,12 +1172,32 @@ message ResGetInAppShopData {
repeated NetInAppShopBuyData buyDataList = 2;
}
message NetOnlyOnceSchedule {
int64 startAt = 1;
int64 endAt = 2;
}
message NetDayOfWeekSchedule {
int64 startTime = 1;
int64 duration = 2;
repeated int32 dayOfWeeks = 3;
}
message NetPeriodicSchedule {
int64 initialStartTime = 1;
int64 duration = 2;
int64 period = 3;
}
message NetAllTimeSchedule {
}
message NetSchedule {
oneof ScheduleKindOneof {
int32 OnlyOnceFieldNumber = 1;
int32 DayOfWeekFieldNumber = 2;
int32 PeriodicFieldNumber = 4;
int32 AllTimeFieldNumber = 5;
NetOnlyOnceSchedule OnlyOnce = 1;
NetDayOfWeekSchedule DayOfWeek = 2;
NetPeriodicSchedule Periodic = 3;
NetAllTimeSchedule AllTime = 4;
}
}
@@ -1215,4 +1235,283 @@ message NetUserSynchroData {
message ReqGetSynchroData {
NetUserSynchroData synchro = 2;
}
message NetMonthlySubscriptionReward {
int32 tid = 1;
NetRewardData reward = 2;
}
message NetMonthlySubscriptionData {
int32 tid = 1;
int64 expiredAt = 2;
}
message ReqGetMonthlySubscriptionReward {}
message ResGetMonthlySubscriptionReward {
repeated NetMonthlySubscriptionReward rewardList = 1;
repeated NetMonthlySubscriptionData dataList = 2;
}
message ReqGetAttractiveList {}
message ResGetAttractiveList {
repeated NetUserAttractiveData attractives = 2;
int32 counselAvailableCount = 3;
}
message NetCustomPackageSetupData {
int32 customPackageShopTid = 1;
repeated int32 slotList = 2;
}
message ReqGetCustomPackageSetupData {
int32 inAppShopId = 1;
}
message ResGetCustomPackageSetupData {
repeated NetCustomPackageSetupData dataList = 1;
}
message ReqGachaGetAllShutdownFlags {}
message ResGachaGetAllShutdownFlags {
repeated int32 unavailables = 1;
}
message ReqGetAchievementRewardedData {}
message ResGetAchievementRewardedData {
repeated int32 ids = 2;
}
enum NetFeatureKind {
SimulationRoom = 0;
CooperationEvent = 1;
DailyEvent = 2;
Intercept = 3;
Attendance = 4;
Dice = 5;
UnionRaid_2 = 6;
StoryDungeonEvent = 7;
Tower = 8;
LostSector_2 = 9;
RookieArena = 10;
SpecialArena = 11;
Subscription_2 = 13;
ArchiveEventSystem = 14;
ViewShortCut = 1000;
PollEvent = 1001;
ComeBackUserEvent = 1002;
EventPass = 1003;
FieldHubEvent = 1004;
ShopEvent = 1005;
MissionEvent = 1006;
ChargeGachaEvent = 1007;
MiniGameSortOut = 1008;
CharacterSkillResetEvent = 1009;
EventQuest = 1010;
RewardUpEvent = 1011;
SdbattleEvent = 1012;
TextAdventure = 1013;
ChallengeModeEvent = 1014;
DailyFreeGachaEvent = 1015;
BoxGachaEvent = 1016;
DiceEvent = 1017;
Bbqtycoon = 1018;
Ce002MiniGame = 1019;
SoloRaid = 1020;
}
message NetFeatureFlag{
NetFeatureKind featureKind = 1;
bool isOpen = 2;
}
message ReqGetAllFeatureFlags {}
message ResGetAllFeatureFlags {
repeated NetFeatureFlag flags = 1;
}
message ReqCampaignPackageGetAllShutdownFlags {
}
message ResCampaignPackageGetAllShutdownFlags {
repeated int32 unavailablePackageGroupIds = 1;
}
message NetSoloRaidPeriodData {
int64 visibleDate = 1;
int64 startDate = 2;
int64 endDate = 3;
int64 disableDate = 4;
int64 settleDate_ = 5;
}
message ReqGetSoloRaidPeriod {}
message ResGetSoloRaidPeriod {
NetSoloRaidPeriodData period = 1;
}
message ReqGetArchiveRecord {
}
message ResGetArchiveRecord {
repeated int32 archiveRecordList = 1;
repeated int32 unlockedArchiveRecordList = 2;
}
message NetArenaBanInfo {
string description = 1;
google.protobuf.Timestamp startAt = 2;
google.protobuf.Timestamp endAt = 3;
}
message ReqGetArenaBanInfo {}
message ResGetArenaBanInfo {
NetArenaBanInfo rookieArenaBanInfo = 1;
NetArenaBanInfo specialArenaBanInfo = 2;
}
message ReqProfileCardObjectList {}
message ResProfileCardObjectList {
repeated int32 backgroundIds = 1;
repeated int32 stickerIds = 2;
}
message ReqGetMiniGameNKSV2Data {
int32 nKSId = 1;
}
message NetMiniGameNKSV2MissionProgress {
int64 seq = 1;
int32 nKSMissionId = 2;
int32 progress = 3;
google.protobuf.Timestamp createdAt = 4;
google.protobuf.Timestamp receivedAt = 5;
}
message ResGetMiniGameNKSV2Data {
string progressJson = 1;
repeated NetMiniGameNKSV2MissionProgress missionProgressList = 2;
}
message NetSelectableDispatchData {
int32 dispatchGroupId = 1;
int32 selectTid = 2;
int32 selectSlotId = 3;
bool isRun = 4;
int64 startAt = 5;
int64 endAt = 6;
}
message ReqGetDispatchList {
}
message ResGetDispatchList {
int32 dispatchResetCount = 2;
repeated NetUserDispatchData dispatchList = 3;
repeated NetSelectableDispatchData selectableDispatchList = 4;
}
message ReqGetSubscription {
}
message NetSubscriptionData {
int32 tid = 1;
google.protobuf.Timestamp beginAt = 2;
google.protobuf.Timestamp endAt = 3;
}
message ResGetSubscription {
repeated NetSubscriptionData activeSubscriptionList = 1;
bool hasSubscriptionHistory = 2;
}
message NetCampaignPackageReward {
int32 packageShopId = 1;
int32 packageGroupTableId = 2;
}
message ReqGetCampaignPackage {}
message ResGetCampaignPackage {
repeated NetCampaignPackageReward alreadyRewards = 1;
}
message NetPopupPackageState{
int32 tid = 1;
bool isAppear = 2;
google.protobuf.Timestamp expiredAt = 3;
int32 groupId = 4;
bool isPurchased = 6;
int32 gradeUp = 7;
}
message ReqGetPopupPackageState {}
message ResGetPopupPackageState{
repeated NetPopupPackageState dataList = 1;
repeated int32 appearedList = 2;
}
message ReqUpdateRankingServerReward {}
message ResUpdateRankingServerReward {
bool hasNewReward = 1;
}
message ReqGetProfileFrame {}
message ResGetProfileFrame {
repeated int32 frames = 2;
}
message NetWholeUserData {
int64 usn = 1;
int32 server = 2;
string nickname = 3;
int32 lv = 4;
int32 icon = 5;
bool iconPrism = 6;
int32 frame = 7;
int32 teamCombat = 8;
int64 lastActionAt = 9;
string guildName = 10;
bool isBot = 11;
int32 groupId = 12;
}
message NetUserFriendData {
int32 state = 1;
int32 type = 2;
NetWholeUserData user = 3;
bool isSend = 4;
int32 receiveState = 5;
}
message ReqGetFriendData {}
message ResGetFriendData {
int32 sendFriendshipCount = 2;
int32 receiveFriendshipCount = 3;
repeated NetUserFriendData friends = 4;
repeated NetUserFriendData blocked = 5;
}
message NetWallpaperData {
int32 order = 1;
int32 type = 2;
int32 id = 3;
}
message ReqGetWallpaper {}
message ResGetWallpaper {
repeated NetWallpaperData wallpaperList = 2;
}
message ReqGetCurrencyData {
repeated int32 currencies = 2;
}
message ResGetCurrencyData {
repeated NetUserCurrencyData currency = 2;
}
message ReqGetJupiterMarketingDetail {
string language = 1;
}
message ResGetJupiterMarketingDetail {
string marketingDetail = 1;
}

View File

@@ -15,12 +15,9 @@ namespace nksrv.Utils
{
}
static object lockObject = new object();
public void Log(LogMessageReceivedEventArgs logEvent)
{
var fg = Console.ForegroundColor;
Console.ForegroundColor = GetColorForMsg(logEvent);
var msg = logEvent.Message;
if (msg.StartsWith("["))
{
@@ -28,12 +25,21 @@ namespace nksrv.Utils
}
// ignore telemtry server errors
if (!msg.StartsWith("POST /v2/dr/getsid: \"404 Not Found\""))
if (msg.StartsWith("POST /v2/dr/"))
{
Console.WriteLine(msg);
return;
}
var newFG = GetColorForMsg(logEvent);
lock (lockObject)
{
var oldFG = Console.ForegroundColor;
Console.ForegroundColor = newFG;
Console.WriteLine(msg);
Console.ForegroundColor = oldFG;
}
Console.ForegroundColor = fg;
}
private ConsoleColor GetColorForMsg(LogMessageReceivedEventArgs logEvent)