1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-21 20:27:47 +00:00

Moved SendItemPackage to character class. Added a flag check after a bazaar purchase is made. Discovered a flag in InventoryBeginChangePacket that either modifies the client package or clears and refills it. Implemented this mode for a bunch of "SendFullInventory" methods.

This commit is contained in:
Filip Maj 2017-12-10 15:13:33 -05:00
parent f5ea82f735
commit 08c5980b22
6 changed files with 24 additions and 25 deletions

View file

@ -146,7 +146,7 @@
<Compile Include="packets\receive\GroupCreatedPacket.cs" /> <Compile Include="packets\receive\GroupCreatedPacket.cs" />
<Compile Include="packets\receive\HandshakePacket.cs" /> <Compile Include="packets\receive\HandshakePacket.cs" />
<Compile Include="packets\receive\LangaugeCodePacket.cs" /> <Compile Include="packets\receive\LangaugeCodePacket.cs" />
<Compile Include="packets\receive\ItemPackageRequestPacket.cs" /> <Compile Include="packets\receive\UpdateItemPackagePacket.cs" />
<Compile Include="packets\receive\ParameterDataRequestPacket.cs" /> <Compile Include="packets\receive\ParameterDataRequestPacket.cs" />
<Compile Include="packets\receive\recruitment\RecruitmentDetailsRequestPacket.cs" /> <Compile Include="packets\receive\recruitment\RecruitmentDetailsRequestPacket.cs" />
<Compile Include="packets\receive\recruitment\RecruitmentSearchRequestPacket.cs" /> <Compile Include="packets\receive\recruitment\RecruitmentSearchRequestPacket.cs" />

View file

@ -1073,6 +1073,8 @@ namespace FFXIVClassic_Map_Server
buyer.GetItemPackage(Inventory.CURRENCY_CRYSTALS).RemoveItem(1000001, cost); buyer.GetItemPackage(Inventory.CURRENCY_CRYSTALS).RemoveItem(1000001, cost);
} }
bazaar.CheckBazaarFlags();
return true; return true;
} }

View file

@ -5,6 +5,7 @@ using FFXIVClassic_Map_Server.actors.group;
using FFXIVClassic_Map_Server.Actors.Chara; using FFXIVClassic_Map_Server.Actors.Chara;
using FFXIVClassic_Map_Server.dataobjects; using FFXIVClassic_Map_Server.dataobjects;
using FFXIVClassic_Map_Server.packets.send.actor; using FFXIVClassic_Map_Server.packets.send.actor;
using FFXIVClassic_Map_Server.packets.send.actor.inventory;
using FFXIVClassic_Map_Server.utils; using FFXIVClassic_Map_Server.utils;
using System.Collections.Generic; using System.Collections.Generic;
@ -125,6 +126,16 @@ namespace FFXIVClassic_Map_Server.Actors
#region Inventory #region Inventory
public void SendItemPackage(Player player, uint id)
{
if (!itemPackages.ContainsKey((ushort)id))
return;
player.QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId, true));
itemPackages[(ushort)id].SendFullInventory(player);
player.QueuePacket(InventoryEndChangePacket.BuildPacket(actorId));
}
public void AddItem(uint catalogID) public void AddItem(uint catalogID)
{ {
AddItem(catalogID, 1); AddItem(catalogID, 1);

View file

@ -552,7 +552,7 @@ namespace FFXIVClassic_Map_Server.Actors
//GetSpawnPackets(actorId, spawnType).DebugPrintPacket(); //GetSpawnPackets(actorId, spawnType).DebugPrintPacket();
#region Inventory & Equipment #region Inventory & Equipment
QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId)); QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId, true));
itemPackages[Inventory.NORMAL].SendFullInventory(this); itemPackages[Inventory.NORMAL].SendFullInventory(this);
itemPackages[Inventory.CURRENCY_CRYSTALS].SendFullInventory(this); itemPackages[Inventory.CURRENCY_CRYSTALS].SendFullInventory(this);
itemPackages[Inventory.KEYITEMS].SendFullInventory(this); itemPackages[Inventory.KEYITEMS].SendFullInventory(this);
@ -1630,7 +1630,9 @@ namespace FFXIVClassic_Map_Server.Actors
public void SendMyTradeToPlayer(Player player) public void SendMyTradeToPlayer(Player player)
{ {
Inventory tradeInventory = new Inventory(this, 4, Inventory.TRADE); Inventory tradeInventory = new Inventory(this, 4, Inventory.TRADE);
player.QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId, true));
tradeInventory.SendFullInventory(player); tradeInventory.SendFullInventory(player);
player.QueuePacket(InventoryEndChangePacket.BuildPacket(actorId));
} }
public void SendDataPacket(params object[] parameters) public void SendDataPacket(params object[] parameters)
@ -1817,16 +1819,6 @@ namespace FFXIVClassic_Map_Server.Actors
chocoboAppearance = appearanceId; chocoboAppearance = appearanceId;
} }
public void SendItemPackage(Player player, uint id)
{
if (!itemPackages.ContainsKey((ushort)id))
return;
player.QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId));
itemPackages[(ushort)id].SendFullInventory(player);
player.QueuePacket(InventoryEndChangePacket.BuildPacket(actorId));
}
public Retainer SpawnMyRetainer(Npc bell, int retainerIndex) public Retainer SpawnMyRetainer(Npc bell, int retainerIndex)
{ {
Retainer retainer = Database.LoadRetainer(this, retainerIndex); Retainer retainer = Database.LoadRetainer(this, retainerIndex);

View file

@ -235,14 +235,11 @@ namespace FFXIVClassic_Map_Server.dataobjects
} }
public void RefreshPositioning(Character owner, ushort itemPackage, ushort slot) public void RefreshPositioning(Character owner, ushort itemPackage, ushort slot)
{
lock (owner.GetItemPackage(itemPackage))
{ {
this.owner = owner; this.owner = owner;
this.itemPackage = itemPackage; this.itemPackage = itemPackage;
this.slot = slot; this.slot = slot;
} }
}
public void SetExclusive(bool isExclusive) public void SetExclusive(bool isExclusive)
{ {

View file

@ -7,16 +7,13 @@ namespace FFXIVClassic_Map_Server.packets.send.actor.inventory
public const ushort OPCODE = 0x016D; public const ushort OPCODE = 0x016D;
public const uint PACKET_SIZE = 0x28; public const uint PACKET_SIZE = 0x28;
public static SubPacket BuildPacket(uint sourceActorId, uint targetActorId) public static SubPacket BuildPacket(uint playerActorID, bool clearItemPackage = false)
{ {
byte[] data = new byte[8]; byte[] data = new byte[8];
data[0] = 2;
return new SubPacket(OPCODE, sourceActorId, data);
}
public static SubPacket BuildPacket(uint playerActorID) if (clearItemPackage)
{ data[0] = 2;
byte[] data = new byte[8];
return new SubPacket(OPCODE, playerActorID, data); return new SubPacket(OPCODE, playerActorID, data);
} }
} }