mirror of
https://github.com/sebastian-heinz/Arrowgene.DragonsDogmaOnline
synced 2026-08-03 11:12:41 -04:00
Lose pawns on pawn death
This commit is contained in:
parent
66b24d496c
commit
baec9ae582
8 changed files with 107 additions and 38 deletions
|
|
@ -1,15 +1,13 @@
|
|||
using Arrowgene.Ddon.Server;
|
||||
using Arrowgene.Ddon.Server.Network;
|
||||
using Arrowgene.Ddon.Shared.Network;
|
||||
using Arrowgene.Logging;
|
||||
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
|
||||
using Arrowgene.Ddon.Shared.Model.Quest;
|
||||
using Arrowgene.Ddon.Shared.Entity.Structure;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Arrowgene.Ddon.Shared.Model;
|
||||
|
||||
namespace Arrowgene.Ddon.GameServer.Handler
|
||||
{
|
||||
public class PawnGetLostPawnListHandler : StructurePacketHandler<GameClient, C2SPawnGetLostPawnListReq>
|
||||
public class PawnGetLostPawnListHandler : GameRequestPacketHandler<C2SPawnGetLostPawnListReq, S2CPawnGetLostPawnListRes>
|
||||
{
|
||||
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(PawnGetLostPawnListHandler));
|
||||
|
||||
|
|
@ -17,10 +15,33 @@ namespace Arrowgene.Ddon.GameServer.Handler
|
|||
{
|
||||
}
|
||||
|
||||
public override void Handle(GameClient client, StructurePacket<C2SPawnGetLostPawnListReq> req)
|
||||
public override S2CPawnGetLostPawnListRes Handle(GameClient client, C2SPawnGetLostPawnListReq request)
|
||||
{
|
||||
var res = new S2CPawnGetLostPawnListRes();
|
||||
client.Send(res);
|
||||
return new S2CPawnGetLostPawnListRes()
|
||||
{
|
||||
LostPawnList = client.Character.Pawns
|
||||
.Select((pawn, index) => new { pawn, slot = index+1 })
|
||||
.Where(tuple => tuple.pawn.PawnState == PawnState.Lost)
|
||||
.Select(tuple => new CDataLostPawnList()
|
||||
{
|
||||
PawnId = (int) tuple.pawn.PawnId,
|
||||
SlotNo = (uint) tuple.slot,
|
||||
Name = tuple.pawn.Name,
|
||||
Sex = tuple.pawn.EditInfo.Sex,
|
||||
PawnState = tuple.pawn.PawnState,
|
||||
// TODO: ShareRange
|
||||
ReviveCost = 1, // TODO: Make it configurable
|
||||
PawnListData = new CDataPawnListData()
|
||||
{
|
||||
Job = tuple.pawn.Job,
|
||||
Level = tuple.pawn.ActiveCharacterJobData.Lv,
|
||||
CraftRank = tuple.pawn.CraftData.CraftRank,
|
||||
PawnCraftSkillList = tuple.pawn.CraftData.PawnCraftSkillList,
|
||||
// TODO: CommentSize, LatestReturnDate
|
||||
}
|
||||
})
|
||||
.ToList()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,12 +2,11 @@ using System.Linq;
|
|||
using Arrowgene.Ddon.Server;
|
||||
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
|
||||
using Arrowgene.Ddon.Shared.Model;
|
||||
using Arrowgene.Ddon.Shared.Network;
|
||||
using Arrowgene.Logging;
|
||||
|
||||
namespace Arrowgene.Ddon.GameServer.Handler
|
||||
{
|
||||
public class PawnPawnLostHandler : GameStructurePacketHandler<C2SPawnPawnLostReq>
|
||||
public class PawnPawnLostHandler : GameRequestPacketHandler<C2SPawnPawnLostReq, S2CPawnPawnLostRes>
|
||||
{
|
||||
private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(PawnPawnLostHandler));
|
||||
|
||||
|
|
@ -15,16 +14,25 @@ namespace Arrowgene.Ddon.GameServer.Handler
|
|||
{
|
||||
}
|
||||
|
||||
public override void Handle(GameClient client, StructurePacket<C2SPawnPawnLostReq> packet)
|
||||
public override S2CPawnPawnLostRes Handle(GameClient client, C2SPawnPawnLostReq request)
|
||||
{
|
||||
// TODO: Lost pawns system
|
||||
Pawn pawn = client.Character.Pawns.Where(pawn => pawn.PawnId == packet.Structure.PawnId).Single();
|
||||
client.Send(new S2CPawnPawnLostRes()
|
||||
Pawn pawn = client.Character.Pawns.Where(pawn => pawn.PawnId == request.PawnId).Single();
|
||||
pawn.PawnState = PawnState.Lost;
|
||||
|
||||
S2CPawnPawnLostNtc ntc = new S2CPawnPawnLostNtc()
|
||||
{
|
||||
PawnId = pawn.PawnId,
|
||||
PawnName = pawn.Name,
|
||||
IsLost = false
|
||||
});
|
||||
IsLost = pawn.PawnState == PawnState.Lost
|
||||
};
|
||||
client.Party.SendToAll(ntc);
|
||||
|
||||
return new S2CPawnPawnLostRes()
|
||||
{
|
||||
PawnId = pawn.PawnId,
|
||||
PawnName = pawn.Name,
|
||||
IsLost = pawn.PawnState == PawnState.Lost
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -991,6 +991,7 @@ namespace Arrowgene.Ddon.Shared.Entity
|
|||
Create(new S2CPawnGetPawnTotalScoreRes.Serializer());
|
||||
Create(new S2CPawnGetRegisteredPawnDataRes.Serializer());
|
||||
Create(new S2CPawnJoinPartyMypawnRes.Serializer());
|
||||
Create(new S2CPawnPawnLostNtc.Serializer());
|
||||
Create(new S2CPawnPawnLostRes.Serializer());
|
||||
Create(new S2CPawnSpSkillDeleteStockSkillRes.Serializer());
|
||||
Create(new S2CPawnSpSkillGetActiveSkillRes.Serializer());
|
||||
|
|
|
|||
|
|
@ -11,24 +11,24 @@ namespace Arrowgene.Ddon.Shared.Entity.PacketStructure
|
|||
|
||||
public S2CPawnGetLostPawnListRes()
|
||||
{
|
||||
LostPawnList = new List<CDataLostPawn>();
|
||||
LostPawnList = new List<CDataLostPawnList>();
|
||||
}
|
||||
|
||||
public List<CDataLostPawn> LostPawnList { get; set; }
|
||||
public List<CDataLostPawnList> LostPawnList { get; set; }
|
||||
|
||||
public class Serializer : PacketEntitySerializer<S2CPawnGetLostPawnListRes>
|
||||
{
|
||||
public override void Write(IBuffer buffer, S2CPawnGetLostPawnListRes obj)
|
||||
{
|
||||
WriteServerResponse(buffer, obj);
|
||||
WriteEntityList<CDataLostPawn>(buffer, obj.LostPawnList);
|
||||
WriteEntityList<CDataLostPawnList>(buffer, obj.LostPawnList);
|
||||
}
|
||||
|
||||
public override S2CPawnGetLostPawnListRes Read(IBuffer buffer)
|
||||
{
|
||||
S2CPawnGetLostPawnListRes obj = new S2CPawnGetLostPawnListRes();
|
||||
ReadServerResponse(buffer, obj);
|
||||
obj.LostPawnList = ReadEntityList<CDataLostPawn>(buffer);
|
||||
obj.LostPawnList = ReadEntityList<CDataLostPawnList>(buffer);
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
using Arrowgene.Buffers;
|
||||
using Arrowgene.Ddon.Shared.Network;
|
||||
|
||||
namespace Arrowgene.Ddon.Shared.Entity.PacketStructure
|
||||
{
|
||||
public class S2CPawnPawnLostNtc : IPacketStructure
|
||||
{
|
||||
public PacketId Id => PacketId.S2C_PAWN_PAWN_LOST_NTC;
|
||||
|
||||
public S2CPawnPawnLostNtc()
|
||||
{
|
||||
PawnName = string.Empty;
|
||||
}
|
||||
|
||||
public uint PawnId { get; set; }
|
||||
public string PawnName { get; set; }
|
||||
public bool IsLost { get; set; }
|
||||
|
||||
public class Serializer : PacketEntitySerializer<S2CPawnPawnLostNtc>
|
||||
{
|
||||
public override void Write(IBuffer buffer, S2CPawnPawnLostNtc obj)
|
||||
{
|
||||
WriteUInt32(buffer, obj.PawnId);
|
||||
WriteMtString(buffer, obj.PawnName);
|
||||
WriteBool(buffer, obj.IsLost);
|
||||
}
|
||||
|
||||
public override S2CPawnPawnLostNtc Read(IBuffer buffer)
|
||||
{
|
||||
S2CPawnPawnLostNtc obj = new S2CPawnPawnLostNtc();
|
||||
obj.PawnId = ReadUInt32(buffer);
|
||||
obj.PawnName = ReadMtString(buffer);
|
||||
obj.IsLost = ReadBool(buffer);
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -1,11 +1,11 @@
|
|||
using System.Collections.Generic;
|
||||
using Arrowgene.Buffers;
|
||||
using Arrowgene.Ddon.Shared.Model;
|
||||
|
||||
namespace Arrowgene.Ddon.Shared.Entity.Structure
|
||||
{
|
||||
public class CDataLostPawn
|
||||
public class CDataLostPawnList
|
||||
{
|
||||
public CDataLostPawn()
|
||||
public CDataLostPawnList()
|
||||
{
|
||||
PawnListData = new CDataPawnListData();
|
||||
}
|
||||
|
|
@ -14,33 +14,33 @@ namespace Arrowgene.Ddon.Shared.Entity.Structure
|
|||
public uint SlotNo { get; set; }
|
||||
public string Name { get; set; }
|
||||
public byte Sex { get; set; }
|
||||
public byte PawnState { get; set; }
|
||||
public PawnState PawnState { get; set; }
|
||||
public byte ShareRange { get; set; }
|
||||
public uint ReviveCost { get; set; }
|
||||
public CDataPawnListData PawnListData { get; set; }
|
||||
|
||||
public class Serializer : EntitySerializer<CDataLostPawn>
|
||||
public class Serializer : EntitySerializer<CDataLostPawnList>
|
||||
{
|
||||
public override void Write(IBuffer buffer, CDataLostPawn obj)
|
||||
public override void Write(IBuffer buffer, CDataLostPawnList obj)
|
||||
{
|
||||
WriteInt32(buffer, obj.PawnId);
|
||||
WriteUInt32(buffer, obj.SlotNo);
|
||||
WriteMtString(buffer, obj.Name);
|
||||
WriteByte(buffer, obj.Sex);
|
||||
WriteByte(buffer, obj.PawnState);
|
||||
WriteByte(buffer, (byte) obj.PawnState);
|
||||
WriteByte(buffer, obj.ShareRange);
|
||||
WriteUInt32(buffer, obj.ReviveCost);
|
||||
WriteEntity<CDataPawnListData>(buffer, obj.PawnListData);
|
||||
}
|
||||
|
||||
public override CDataLostPawn Read(IBuffer buffer)
|
||||
public override CDataLostPawnList Read(IBuffer buffer)
|
||||
{
|
||||
CDataLostPawn obj = new CDataLostPawn();
|
||||
CDataLostPawnList obj = new CDataLostPawnList();
|
||||
obj.PawnId = ReadInt32(buffer);
|
||||
obj.SlotNo = ReadUInt32(buffer);
|
||||
obj.Name = ReadMtString(buffer);
|
||||
obj.Sex = ReadByte(buffer);
|
||||
obj.PawnState = ReadByte(buffer);
|
||||
obj.PawnState = (PawnState) ReadByte(buffer);
|
||||
obj.ShareRange = ReadByte(buffer);
|
||||
obj.ReviveCost = ReadUInt32(buffer);
|
||||
obj.PawnListData = ReadEntity<CDataPawnListData>(buffer);
|
||||
|
|
@ -475,7 +475,7 @@ namespace Arrowgene.Ddon.Shared.Network
|
|||
public static readonly PacketId S2C_PAWN_GET_LEGEND_PAWN_LIST_RES = new PacketId(8, 18, 2, "S2C_PAWN_GET_LEGEND_PAWN_LIST_RES", ServerType.Game, PacketSource.Server); // レジェンドポーンリスト取得に
|
||||
public static readonly PacketId C2S_PAWN_PAWN_LOST_REQ = new PacketId(8, 19, 1, "C2S_PAWN_PAWN_LOST_REQ", ServerType.Game, PacketSource.Client);
|
||||
public static readonly PacketId S2C_PAWN_PAWN_LOST_RES = new PacketId(8, 19, 2, "S2C_PAWN_PAWN_LOST_RES", ServerType.Game, PacketSource.Server); // ポーンロストに
|
||||
public static readonly PacketId S2C_PAWN_8_19_16_NTC = new PacketId(8, 19, 16, "S2C_PAWN_8_19_16_NTC", ServerType.Game, PacketSource.Server);
|
||||
public static readonly PacketId S2C_PAWN_PAWN_LOST_NTC = new PacketId(8, 19, 16, "S2C_PAWN_PAWN_LOST_RES", ServerType.Game, PacketSource.Server, "S2C_PAWN_8_19_16_NTC");
|
||||
public static readonly PacketId C2S_PAWN_GET_LOST_PAWN_LIST_REQ = new PacketId(8, 20, 1, "C2S_PAWN_GET_LOST_PAWN_LIST_REQ", ServerType.Game, PacketSource.Client);
|
||||
public static readonly PacketId S2C_PAWN_GET_LOST_PAWN_LIST_RES = new PacketId(8, 20, 2, "S2C_PAWN_GET_LOST_PAWN_LIST_RES", ServerType.Game, PacketSource.Server); // ロストポーンポーンリスト取得に
|
||||
public static readonly PacketId C2S_PAWN_LOST_PAWN_REVIVE_REQ = new PacketId(8, 21, 1, "C2S_PAWN_LOST_PAWN_REVIVE_REQ", ServerType.Game, PacketSource.Client);
|
||||
|
|
@ -2401,7 +2401,7 @@ namespace Arrowgene.Ddon.Shared.Network
|
|||
AddPacketIdEntry(packetIds, S2C_PAWN_GET_LEGEND_PAWN_LIST_RES);
|
||||
AddPacketIdEntry(packetIds, C2S_PAWN_PAWN_LOST_REQ);
|
||||
AddPacketIdEntry(packetIds, S2C_PAWN_PAWN_LOST_RES);
|
||||
AddPacketIdEntry(packetIds, S2C_PAWN_8_19_16_NTC);
|
||||
AddPacketIdEntry(packetIds, S2C_PAWN_PAWN_LOST_NTC);
|
||||
AddPacketIdEntry(packetIds, C2S_PAWN_GET_LOST_PAWN_LIST_REQ);
|
||||
AddPacketIdEntry(packetIds, S2C_PAWN_GET_LOST_PAWN_LIST_RES);
|
||||
AddPacketIdEntry(packetIds, C2S_PAWN_LOST_PAWN_REVIVE_REQ);
|
||||
|
|
|
|||
12
research/GamePackets.md
generated
12
research/GamePackets.md
generated
|
|
@ -264,7 +264,7 @@
|
|||
|S2C_PAWN_GET_LEGEND_PAWN_LIST_RES|8|18|2|0x7ea770|レジェンドポーンリスト取得に|
|
||||
|C2S_PAWN_PAWN_LOST_REQ|8|19|1|0x834263||
|
||||
|S2C_PAWN_PAWN_LOST_RES|8|19|2|0x7ec490|ポーンロストに|
|
||||
|S2C_PAWN_8_19_16_NTC|8|19|16|0x7ec2f0|None|
|
||||
|S2C_PAWN_PAWN_LOST_NTC|8|19|16|0x7ec2f0|None|
|
||||
|C2S_PAWN_GET_LOST_PAWN_LIST_REQ|8|20|1|0x8331e3||
|
||||
|S2C_PAWN_GET_LOST_PAWN_LIST_RES|8|20|2|0x7ea870|ロストポーンポーンリスト取得に|
|
||||
|C2S_PAWN_LOST_PAWN_REVIVE_REQ|8|21|1|0x834073||
|
||||
|
|
@ -275,9 +275,9 @@
|
|||
|S2C_PAWN_LOST_PAWN_GOLDEN_REVIVE_RES|8|23|2|0x7ec030|ロストポーン復活(黄金石消費)に|
|
||||
|C2S_PAWN_LOST_PAWN_WALLET_REVIVE_REQ|8|24|1|0x834153||
|
||||
|S2C_PAWN_LOST_PAWN_WALLET_REVIVE_RES|8|24|2|0x7ec240|ロストポーン復活(通貨消費)に|
|
||||
|C2S_PAWN_8_25_1_REQ|8|25|1|0x834343||
|
||||
|S2C_PAWN_8_25_2_RES|8|25|2|0x7ec5e0|None|
|
||||
|S2C_PAWN_8_25_16_NTC|8|25|16|0x7ec560|None|
|
||||
|C2S_PAWN_RENTAL_PAWN_LOST_REQ|8|25|1|0x834343||
|
||||
|S2C_PAWN_RENTAL_PAWN_LOST_RES|8|25|2|0x7ec5e0|None|
|
||||
|S2C_PAWN_RENTAL_PAWN_LOST_NTC|8|25|16|0x7ec560|None|
|
||||
|C2S_PAWN_UPDATE_PAWN_REACTION_LIST_REQ|8|26|1|0x834da3||
|
||||
|S2C_PAWN_UPDATE_PAWN_REACTION_LIST_RES|8|26|2|0x7eda50|ポーンリアクションリスト更新に|
|
||||
|S2C_PAWN_8_26_16_NTC|8|26|16|0x7ed940|None|
|
||||
|
|
@ -1125,8 +1125,8 @@
|
|||
|C2S_GP_GP_SHOP_CAN_BUY_REQ|28|23|1|0x829e63||
|
||||
|S2C_GP_GP_SHOP_CAN_BUY_RES|28|23|2|0x7d84e0|課金商品購入可能状態の取得に|
|
||||
|S2C_GP_28_24_16_NTC|28|24|16|0x7d6fd0|None|
|
||||
|S2C_GP_28_25_16_NTC|28|25|16|0x7d8010|None|
|
||||
|S2C_GP_28_26_16_NTC|28|26|16|0x7d78f0|None|
|
||||
|S2C_GP_COURSE_START_NTC|28|25|16|0x7d8010|None|
|
||||
|S2C_GP_COURSE_EXTEND_NTC|28|26|16|0x7d78f0|None|
|
||||
|S2C_GP_28_27_16_NTC|28|27|16|0x7d7770|None|
|
||||
|S2C_GP_28_28_16_NTC|28|28|16|0x7d80c0|None|
|
||||
|S2C_GP_28_29_16_NTC|28|29|16|0x7d7810|None|
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue