mirror of
https://github.com/rafi1212122/PemukulPaku
synced 2025-12-13 10:24:34 +01:00
at least you can end the stage
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
86
GameServer/Handlers/GetAvatarDataReqHandler.cs
Normal file
86
GameServer/Handlers/GetAvatarDataReqHandler.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
using Common.Resources.Proto;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PemukulPaku.GameServer.Handlers
|
||||
{
|
||||
|
||||
20
GameServer/Handlers/GetConfigReqHandler.cs
Normal file
20
GameServer/Handlers/GetConfigReqHandler.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
29
GameServer/Handlers/GetEquipmentDataReqHandler.cs
Normal file
29
GameServer/Handlers/GetEquipmentDataReqHandler.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
29
GameServer/Handlers/GetMainDataReqHandler.cs
Normal file
29
GameServer/Handlers/GetMainDataReqHandler.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
23
GameServer/Handlers/StageBeginReqHandler.cs
Normal file
23
GameServer/Handlers/StageBeginReqHandler.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
59
GameServer/Handlers/StageEndReqHandler.cs
Normal file
59
GameServer/Handlers/StageEndReqHandler.cs
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user