PSO2SERVER/Server/Protocol/Packets/03-ServerPacket/03-00-MapTransferPacket.cs
2024-12-08 09:30:03 +08:00

79 lines
2.7 KiB
C#

using PSO2SERVER.Models;
using PSO2SERVER.Zone;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace PSO2SERVER.Protocol.Packets
{
public class MapTransferPacket : Packet
{
//private readonly Map _map;
//private readonly int _playerid;
public ObjectHeader map { get; set; } = new ObjectHeader();
public ObjectHeader target { get; set; } = new ObjectHeader();
public ZoneSettings _zonesettings { get; set; } = new ZoneSettings();
public MapTransferPacket(Map map, int PlayerId)
{
//_map = map;
this.map = new ObjectHeader((uint)map.MapID, ObjectType.Map);
target = new ObjectHeader((uint)PlayerId, ObjectType.Player);
_zonesettings = new ZoneSettings
{
WorldId = 1,
Unk1 = 0,
ZoneId = ~(uint)map.Type,
MapId = (uint)map.MapID,
ZoneType = 0,
Seed = map.GenerationArgs.seed,
Args = (uint)map.VariantID,
SizeX = map.GenerationArgs.xsize,
SizeY = map.GenerationArgs.ysize,
Unk2 = 1,
AreaIndex = 1,
SubArea = 0xFFFFFFFF,
Unk3 = 0x301,
};
}
#region implemented abstract members of Packet
public override byte[] Build()
{
//PacketWriter writer = new PacketWriter();
//writer.WriteStruct(new ObjectHeader(3, ObjectType.Map));
//writer.WriteStruct(target);
//writer.Write(0x1); // 8 Zeros
//writer.Write(0); // 8 Zeros
//writer.Write(~(uint)_map.Type); // F4 FF FF FF
//writer.Write(_map.MapID); // Map ID maybe
//writer.Write((uint)_map.Flags);
//writer.Write(_map.GenerationArgs.seed); // 81 8F E6 19 (Maybe seed)
//writer.Write(_map.VariantID); // Randomgen enable / disable maybe
//writer.Write(_map.GenerationArgs.xsize); // X Size
//writer.Write(_map.GenerationArgs.ysize); // Y Size
//writer.Write(1);
//writer.Write(1);
//writer.Write(~0); // FF FF FF FF FF FF FF FF
//writer.Write(0x301);
//return writer.ToArray();
PacketWriter pkt = new PacketWriter();
pkt.WriteStruct(map);
pkt.WriteStruct(target);
pkt.WriteStruct(_zonesettings);
return pkt.ToArray();
}
public override PacketHeader GetHeader()
{
return new PacketHeader(0x03, 0x00, PacketFlags.None);
}
#endregion
}
}