at least you can end the stage

This commit is contained in:
rafi1212122
2023-05-29 06:55:15 +07:00
parent ad02e1785a
commit 761f9c130d
24 changed files with 1491 additions and 51 deletions

View File

@@ -4,11 +4,26 @@ namespace PemukulPaku.GameServer.Game
{
public class Player
{
public User.UserScheme User;
public UserScheme User;
public AvatarScheme[] AvatarList;
public EquipmentScheme Equipment;
public Player(User.UserScheme user)
public Player(UserScheme user)
{
User = user;
Equipment = Common.Database.Equipment.FromUid(user.Uid);
AvatarList = Avatar.AvatarsFromUid(user.Uid);
}
public void SaveAll()
{
User.Save();
Equipment.Save();
foreach (AvatarScheme Avatar in AvatarList)
{
Avatar.Save();
}
}
}
}

View File

@@ -0,0 +1,86 @@
using Common.Resources.Proto;
namespace PemukulPaku.GameServer.Handlers
{
[PacketCmdId(CmdId.GetAvatarDataReq)]
internal class GetAvatarDataReqHandler : IPacketHandler
{
public void Handle(Session session, Packet packet)
{
GetAvatarDataReq Packet = packet.GetDecodedBody<GetAvatarDataReq>();
GetAvatarDataRsp Rsp = new()
{
retcode = GetAvatarDataRsp.Retcode.Succ
};
if (Packet.AvatarIdLists.Contains((uint)0))
{
IEnumerable<Avatar> Avatars = session.Player.AvatarList.Select(avatar =>
{
Avatar a = new()
{
AvatarId = avatar.AvatarId,
AvatarArtifact = avatar.AvatarArtifact,
DressId = avatar.DressId,
DressLists = avatar.DressLists,
Level = avatar.Level,
Exp = avatar.Exp,
Fragment = avatar.Fragment,
Mode = avatar.Mode,
StageGoodfeel = avatar.StageGoodfeel,
Star = avatar.Star,
StigmataUniqueId1 = avatar.StigmataUniqueId1,
StigmataUniqueId2 = avatar.StigmataUniqueId2,
StigmataUniqueId3 = avatar.StigmataUniqueId3,
SubStar = avatar.SubStar,
TodayHasAddGoodfeel = avatar.TodayHasAddGoodfeel,
TouchGoodfeel = avatar.TouchGoodfeel,
WeaponUniqueId = avatar.WeaponUniqueId
};
a.SkillLists.AddRange(avatar.SkillLists);
return a;
});
Rsp.IsAll = true;
Rsp.AvatarLists.AddRange(Avatars);
}
else
{
IEnumerable<Avatar> Avatars = session.Player.AvatarList.Where(avatar => Packet.AvatarIdLists.Contains(avatar.AvatarId)).Select(avatar =>
{
Avatar a = new()
{
AvatarId = avatar.AvatarId,
AvatarArtifact = avatar.AvatarArtifact,
DressId = avatar.DressId,
DressLists = avatar.DressLists,
Level = avatar.Level,
Exp = avatar.Exp,
Fragment = avatar.Fragment,
Mode = avatar.Mode,
StageGoodfeel = avatar.StageGoodfeel,
Star = avatar.Star,
StigmataUniqueId1 = avatar.StigmataUniqueId1,
StigmataUniqueId2 = avatar.StigmataUniqueId2,
StigmataUniqueId3 = avatar.StigmataUniqueId3,
SubStar = avatar.SubStar,
TodayHasAddGoodfeel = avatar.TodayHasAddGoodfeel,
TouchGoodfeel = avatar.TouchGoodfeel,
WeaponUniqueId = avatar.WeaponUniqueId
};
a.SkillLists.AddRange(avatar.SkillLists);
return a;
});
Rsp.AvatarLists.AddRange(Avatars);
Rsp.IsAll = false;
}
session.Send(GameServer.Packet.FromProto(Rsp, CmdId.GetAvatarDataRsp));
}
}
}

View File

@@ -1,5 +1,4 @@
using Common.Resources.Proto;
using Newtonsoft.Json;
namespace PemukulPaku.GameServer.Handlers
{

View File

@@ -0,0 +1,20 @@
using Common;
using Common.Resources.Proto;
namespace PemukulPaku.GameServer.Handlers
{
[PacketCmdId(CmdId.GetConfigReq)]
internal class GetConfigReqHandler : IPacketHandler
{
public void Handle(Session session, Packet packet)
{
GetConfigRsp Rsp = new()
{
retcode = GetConfigRsp.Retcode.Succ,
ServerCurTime = (uint)Global.GetUnixInSeconds(),
};
session.Send(Packet.FromProto(Rsp, CmdId.GetConfigRsp));
}
}
}

View File

@@ -0,0 +1,29 @@
using Common.Database;
using Common.Resources.Proto;
using MongoDB.Driver;
namespace PemukulPaku.GameServer.Handlers
{
[PacketCmdId(CmdId.GetEquipmentDataReq)]
internal class GetEquipmentDataReqHandler : IPacketHandler
{
public void Handle(Session session, Packet packet)
{
EquipmentScheme Equipment = session.Player.Equipment;
GetEquipmentDataRsp Rsp = new()
{
retcode = GetEquipmentDataRsp.Retcode.Succ,
VitalityValue = 0,
IsAll = true
};
Rsp.MaterialLists.AddRange(Equipment.MaterialList.ToList());
Rsp.MechaLists.AddRange(Equipment.MechaList.ToList());
Rsp.StigmataLists.AddRange(Equipment.StigmataList.ToList());
Rsp.WeaponLists.AddRange(Equipment.WeaponList.ToList());
session.Send(Packet.FromProto(Rsp, CmdId.GetEquipmentDataRsp));
}
}
}

View File

@@ -0,0 +1,29 @@
using Common.Database;
using Common.Resources.Proto;
namespace PemukulPaku.GameServer.Handlers
{
[PacketCmdId(CmdId.GetMainDataReq)]
internal class GetMainDataReqHandler : IPacketHandler
{
public void Handle(Session session, Packet packet)
{
UserScheme User = session.Player.User;
GetMainDataRsp Rsp = new()
{
retcode = GetMainDataRsp.Retcode.Succ,
AssistantAvatarId = (uint)User.AssistantAvatarId,
Birthday = (uint)User.BirthDate,
Nickname = User.Nick,
Level = 4,
Exp = (uint)User.Exp,
FreeHcoin = (uint)User.Hcoin,
Hcoin = (uint)User.Hcoin,
CustomHeadId = 161001
};
session.Send(Packet.FromProto(Rsp, CmdId.GetMainDataRsp));
}
}
}

View File

@@ -1,5 +1,6 @@
using Common.Resources.Proto;
using Common.Database;
using Common;
namespace PemukulPaku.GameServer.Handlers
{
@@ -10,7 +11,7 @@ namespace PemukulPaku.GameServer.Handlers
{
GetPlayerTokenReq Packet = _packet.GetDecodedBody<GetPlayerTokenReq>();
GetPlayerTokenRsp Rsp = new () { };
User.UserScheme? CurrentUser = User.FromToken(Packet.AccountToken);
UserScheme? CurrentUser = User.FromToken(Packet.AccountToken);
if (CurrentUser == null || CurrentUser.Uid != uint.Parse(Packet.AccountUid))
{
@@ -21,6 +22,13 @@ namespace PemukulPaku.GameServer.Handlers
{
session.Player = new Game.Player(CurrentUser);
if(session.Player.User.IsFirstLogin)
{
AvatarScheme avatar = Common.Database.Avatar.Create(101, session.Player.User.Uid, session.Player.Equipment);
if ((int)Global.config.VerboseLevel > 0)
session.c.Log($"Automatically created avatar with id: {avatar.AvatarId}");
}
Rsp = new()
{
retcode = GetPlayerTokenRsp.Retcode.Succ,

View File

@@ -1,7 +1,6 @@
using Common;
using Common.Database;
using Common.Resources.Proto;
using Newtonsoft.Json;
namespace PemukulPaku.GameServer.Handlers
{
@@ -10,7 +9,7 @@ namespace PemukulPaku.GameServer.Handlers
{
public void Handle(Session session, Packet packet)
{
User.UserScheme User = session.Player.User;
UserScheme User = session.Player.User;
PlayerLoginRsp Rsp = new()
{

View File

@@ -0,0 +1,23 @@
using Common.Resources.Proto;
namespace PemukulPaku.GameServer.Handlers
{
[PacketCmdId(CmdId.StageBeginReq)]
internal class StageBeginReqHandler : IPacketHandler
{
public void Handle(Session session, Packet packet)
{
StageBeginReq Data = packet.GetDecodedBody<StageBeginReq>();
StageBeginRsp Rsp = new()
{
retcode = StageBeginRsp.Retcode.Succ,
StageId = Data.StageId,
Progress = 0,
IsCollectCheatData = false
};
session.Send(Packet.FromProto(Rsp, CmdId.StageBeginRsp));
}
}
}

View File

@@ -0,0 +1,59 @@
using Common.Database;
using Common.Resources.Proto;
using Common.Utils.ExcelReader;
using ProtoBuf;
namespace PemukulPaku.GameServer.Handlers
{
[PacketCmdId(CmdId.StageEndReq)]
internal class StageEndReqHandler : IPacketHandler
{
public void Handle(Session session, Packet packet)
{
StageEndReq Data = packet.GetDecodedBody<StageEndReq>();
StageEndReqBody DecodedBody = Serializer.Deserialize<StageEndReqBody>(Data.Body.AsSpan());
StageDataExcel? StageData = Common.Utils.ExcelReader.StageData.GetInstance().FromId((int)DecodedBody.StageId);
if(StageData == null)
{
session.c.Error("StageData Excel Is Bad Please Fix");
session.Send(Packet.FromProto(new StageEndRsp() { retcode = StageEndRsp.Retcode.StageError }, CmdId.StageEndRsp));
return;
}
else if(StageData.LevelId == 10101)
{
session.Player.User.IsFirstLogin = false;
}
StageEndRsp Rsp = new()
{
retcode = StageEndRsp.Retcode.Succ,
StageId = DecodedBody.StageId,
EndStatus = DecodedBody.EndStatus
};
if(DecodedBody.EndStatus == StageEndStatus.StageWin)
{
EquipmentScheme Equipment = session.Player.Equipment;
foreach (DropItem DropItem in DecodedBody.DropItemLists)
{
Equipment.AddMaterial((int)DropItem.ItemId, (int)DropItem.Num);
}
session.Player.User.Hcoin += DecodedBody.ChallengeIndexLists.Length * 5;
session.ProcessPacket(Packet.FromProto(new GetEquipmentDataReq() { }, CmdId.GetEquipmentDataReq));
session.ProcessPacket(Packet.FromProto(new GetWorldMapDataReq() { }, CmdId.GetWorldMapDataReq));
session.ProcessPacket(Packet.FromProto(new ChapterGroupGetDataReq() { }, CmdId.ChapterGroupGetDataReq));
Rsp.PlayerExpReward = 100;
Rsp.AvatarExpReward = DecodedBody.AvatarExpReward;
Rsp.ScoinReward = DecodedBody.ScoinReward;
Rsp.ChallengeLists.AddRange(DecodedBody.ChallengeIndexLists.Select(challengeIndex => new StageChallengeData() { ChallengeIndex = challengeIndex, Reward = new() { Hcoin = 5 } }));
}
session.Send(Packet.FromProto(Rsp, CmdId.StageEndRsp));
}
}
}

View File

@@ -123,8 +123,9 @@ namespace PemukulPaku.GameServer
select (t, attr))
{
Handlers.Add(attr.Id, (IPacketHandler)Activator.CreateInstance(t)!);
#if DEBUG
c.Log($"Loaded PacketHandler {t.Name} for Packet Type {attr.Id}");
#endif
}
c.Log("Finished Loading Packet Handlers");

View File

@@ -1,7 +1,4 @@
using System.Data.SqlTypes;
using System;
using System.IO;
using System.Net.Sockets;
using System.Net.Sockets;
using Common;
using Common.Resources.Proto;
using Common.Utils;
@@ -67,7 +64,7 @@ namespace PemukulPaku.GameServer
{
if (Packet.IsValid(packet))
{
ProcessPacket(packet);
ProcessPacket(new Packet(packet));
}
else
{
@@ -77,16 +74,13 @@ namespace PemukulPaku.GameServer
}
}
c.Debug("ClientLoop ends");
Server.GetInstance().LogClients();
c.Warn($"{Id} disconnected");
Server.GetInstance().Sessions.Remove(Id);
Server.GetInstance().LogClients();
}
public void ProcessPacket(byte[] packet)
public void ProcessPacket(Packet _packet)
{
Packet _packet = new(packet);
string PacketName = Enum.GetName(typeof(CmdId), _packet.CmdId)!;
try
{