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\HandshakePacket.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\recruitment\RecruitmentDetailsRequestPacket.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);
}
bazaar.CheckBazaarFlags();
return true;
}

View file

@ -5,6 +5,7 @@ using FFXIVClassic_Map_Server.actors.group;
using FFXIVClassic_Map_Server.Actors.Chara;
using FFXIVClassic_Map_Server.dataobjects;
using FFXIVClassic_Map_Server.packets.send.actor;
using FFXIVClassic_Map_Server.packets.send.actor.inventory;
using FFXIVClassic_Map_Server.utils;
using System.Collections.Generic;
@ -125,6 +126,16 @@ namespace FFXIVClassic_Map_Server.Actors
#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)
{
AddItem(catalogID, 1);

View file

@ -552,7 +552,7 @@ namespace FFXIVClassic_Map_Server.Actors
//GetSpawnPackets(actorId, spawnType).DebugPrintPacket();
#region Inventory & Equipment
QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId));
QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId, true));
itemPackages[Inventory.NORMAL].SendFullInventory(this);
itemPackages[Inventory.CURRENCY_CRYSTALS].SendFullInventory(this);
itemPackages[Inventory.KEYITEMS].SendFullInventory(this);
@ -1630,7 +1630,9 @@ namespace FFXIVClassic_Map_Server.Actors
public void SendMyTradeToPlayer(Player player)
{
Inventory tradeInventory = new Inventory(this, 4, Inventory.TRADE);
player.QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId, true));
tradeInventory.SendFullInventory(player);
player.QueuePacket(InventoryEndChangePacket.BuildPacket(actorId));
}
public void SendDataPacket(params object[] parameters)
@ -1817,16 +1819,6 @@ namespace FFXIVClassic_Map_Server.Actors
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)
{
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)
{
lock (owner.GetItemPackage(itemPackage))
{
this.owner = owner;
this.itemPackage = itemPackage;
this.slot = slot;
}
}
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 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];
data[0] = 2;
return new SubPacket(OPCODE, sourceActorId, data);
}
public static SubPacket BuildPacket(uint playerActorID)
{
byte[] data = new byte[8];
if (clearItemPackage)
data[0] = 2;
return new SubPacket(OPCODE, playerActorID, data);
}
}