mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-06-12 23:44:34 +02:00
More refactoring. Adding to bazaar now works for selling and seeking by gil.
This commit is contained in:
parent
bbac4b0fce
commit
e8c9904e1d
9 changed files with 109 additions and 75 deletions
|
@ -61,7 +61,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||
|
||||
//Inventory
|
||||
protected Dictionary<ushort, Inventory> itemPackages = new Dictionary<ushort, Inventory>();
|
||||
private Equipment equipment;
|
||||
protected Equipment equipment;
|
||||
|
||||
public Character(uint actorID) : base(actorID)
|
||||
{
|
||||
|
@ -157,7 +157,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||
{
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
itemPackages[itemPackage].AddItemSpecial(slot, item);
|
||||
itemPackages[itemPackage].SetItem(slot, item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -254,6 +254,14 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||
return null;
|
||||
}
|
||||
|
||||
public Inventory GetItemPackage(ushort package)
|
||||
{
|
||||
if (itemPackages.ContainsKey(package))
|
||||
return itemPackages[package];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public ushort GetPackageForItem(uint catalogID)
|
||||
{
|
||||
ItemData data = Server.GetItemGamedata(catalogID);
|
||||
|
|
|
@ -32,8 +32,8 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
};
|
||||
|
||||
private Character owner;
|
||||
private ushort inventoryCapacity;
|
||||
private ushort inventoryCode;
|
||||
private ushort itemPackageCapacity;
|
||||
private ushort itemPackageCode;
|
||||
private bool isTemporary;
|
||||
private InventoryItem[] list;
|
||||
private bool[] isDirty;
|
||||
|
@ -44,8 +44,8 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
public Inventory(Character ownerPlayer, ushort capacity, ushort code, bool temporary = false)
|
||||
{
|
||||
owner = ownerPlayer;
|
||||
inventoryCapacity = capacity;
|
||||
inventoryCode = code;
|
||||
itemPackageCapacity = capacity;
|
||||
itemPackageCode = code;
|
||||
isTemporary = temporary;
|
||||
list = new InventoryItem[capacity];
|
||||
isDirty = new bool[capacity];
|
||||
|
@ -101,18 +101,11 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
return AddItem(itemId, 1, 1);
|
||||
}
|
||||
|
||||
public void AddItem(uint[] itemId)
|
||||
{
|
||||
for (int i = 0; i < itemId.Length; i++)
|
||||
AddItem(itemId[i]);
|
||||
}
|
||||
|
||||
public INV_ERROR AddItem(uint itemId, int quantity)
|
||||
{
|
||||
return AddItem(itemId, quantity, 1);
|
||||
}
|
||||
|
||||
|
||||
public INV_ERROR AddItem(InventoryItem itemRef)
|
||||
{
|
||||
if (!IsSpaceForAdd(itemRef.itemId, itemRef.quantity, itemRef.quality))
|
||||
|
@ -126,7 +119,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
return INV_ERROR.SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
itemRef.RefreshPositioning(inventoryCode, (ushort) endOfListIndex);
|
||||
itemRef.RefreshPositioning(itemPackageCode, (ushort) endOfListIndex);
|
||||
|
||||
isDirty[endOfListIndex] = true;
|
||||
list[endOfListIndex++] = itemRef;
|
||||
|
@ -200,7 +193,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
return INV_ERROR.SUCCESS;
|
||||
}
|
||||
|
||||
public void AddItemSpecial(ushort slot, InventoryItem item)
|
||||
public void SetItem(ushort slot, InventoryItem item)
|
||||
{
|
||||
list[slot] = item;
|
||||
SendUpdatePackets();
|
||||
|
@ -304,7 +297,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
else
|
||||
{
|
||||
list[slot].quantity -= quantity;
|
||||
//DoDatabaseUpdateQuantity(toDelete.uniqueId);
|
||||
DoDatabaseQuantity(list[slot].uniqueId, list[slot].quantity);
|
||||
}
|
||||
|
||||
isDirty[slot] = true;
|
||||
|
@ -387,7 +380,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
#region Packet Functions
|
||||
public void SendFullInventory(Player player)
|
||||
{
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, inventoryCapacity, inventoryCode));
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, itemPackageCapacity, itemPackageCode));
|
||||
SendInventoryPackets(player, 0);
|
||||
player.QueuePacket(InventorySetEndPacket.BuildPacket(owner.actorId));
|
||||
}
|
||||
|
@ -483,21 +476,21 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
|
||||
public void RefreshItem(Player player, InventoryItem item)
|
||||
{
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, inventoryCapacity, inventoryCode));
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, itemPackageCapacity, itemPackageCode));
|
||||
SendInventoryPackets(player, item);
|
||||
player.QueuePacket(InventorySetEndPacket.BuildPacket(owner.actorId));
|
||||
}
|
||||
|
||||
public void RefreshItem(Player player, params InventoryItem[] items)
|
||||
{
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, inventoryCapacity, inventoryCode));
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, itemPackageCapacity, itemPackageCode));
|
||||
SendInventoryPackets(player, items.ToList());
|
||||
player.QueuePacket(InventorySetEndPacket.BuildPacket(owner.actorId));
|
||||
}
|
||||
|
||||
public void RefreshItem(Player player, List<InventoryItem> items)
|
||||
{
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, inventoryCapacity, inventoryCode));
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, itemPackageCapacity, itemPackageCode));
|
||||
SendInventoryPackets(player, items);
|
||||
player.QueuePacket(InventorySetEndPacket.BuildPacket(owner.actorId));
|
||||
}
|
||||
|
@ -512,9 +505,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
return;
|
||||
|
||||
if (owner is Player)
|
||||
Database.AddItem((Player)owner, addedItem, inventoryCode);
|
||||
Database.AddItem((Player)owner, addedItem, itemPackageCode);
|
||||
else if (owner is Retainer)
|
||||
Database.AddItem((Retainer)owner, addedItem, inventoryCode);
|
||||
Database.AddItem((Retainer)owner, addedItem, itemPackageCode);
|
||||
}
|
||||
|
||||
private void DoDatabaseQuantity(ulong itemDBId, int quantity)
|
||||
|
@ -523,9 +516,9 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
return;
|
||||
|
||||
if (owner is Player)
|
||||
Database.SetQuantity((Player)owner, itemDBId, inventoryCode);
|
||||
Database.SetQuantity((Player)owner, itemDBId, itemPackageCode);
|
||||
else if (owner is Retainer)
|
||||
Database.SetQuantity((Retainer)owner, itemDBId, inventoryCode);
|
||||
Database.SetQuantity((Retainer)owner, itemDBId, itemPackageCode);
|
||||
}
|
||||
|
||||
private void DoDatabaseRemove(ulong itemDBId)
|
||||
|
@ -570,7 +563,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
DoneSendUpdate();
|
||||
|
||||
player.QueuePacket(InventoryBeginChangePacket.BuildPacket(owner.actorId));
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, inventoryCapacity, inventoryCode));
|
||||
player.QueuePacket(InventorySetBeginPacket.BuildPacket(owner.actorId, itemPackageCapacity, itemPackageCode));
|
||||
//Send Updated Slots
|
||||
SendInventoryPackets(player, items);
|
||||
//Send Remove packets for tail end
|
||||
|
@ -596,7 +589,7 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
|||
|
||||
public bool IsFull()
|
||||
{
|
||||
return endOfListIndex >= inventoryCapacity;
|
||||
return endOfListIndex >= itemPackageCapacity;
|
||||
}
|
||||
|
||||
public bool IsSpaceForAdd(uint itemId, int quantity, int quality)
|
||||
|
|
|
@ -1070,14 +1070,14 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||
public void CheckBazaarFlags()
|
||||
{
|
||||
bool isDealing = false, isRepairing = false, seekingItem = false;
|
||||
lock (GetInventory(Inventory.BAZAAR))
|
||||
lock (GetItemPackage(Inventory.BAZAAR))
|
||||
{
|
||||
foreach (InventoryItem item in GetInventory(Inventory.BAZAAR).GetRawList())
|
||||
foreach (InventoryItem item in GetItemPackage(Inventory.BAZAAR).GetRawList())
|
||||
{
|
||||
if (item == null)
|
||||
break;
|
||||
|
||||
if (item.GetBazaarMode() == InventoryItem.TYPE_SINGLE || item.GetBazaarMode() == InventoryItem.TYPE_STACK)
|
||||
if (item.GetBazaarMode() == InventoryItem.TYPE_SINGLE || item.GetBazaarMode() == InventoryItem.TYPE_MULTI || item.GetBazaarMode() == InventoryItem.TYPE_STACK)
|
||||
isDealing = true;
|
||||
if (item.GetBazaarMode() == InventoryItem.TYPE_SEEK_REPAIR)
|
||||
isRepairing = true;
|
||||
|
@ -1091,27 +1091,19 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||
|
||||
charaWork.eventTemp.bazaarRetail = isDealing;
|
||||
charaWork.eventTemp.bazaarRepair = isRepairing;
|
||||
charaWork.eventTemp.bazaarMateria = GetInventory(Inventory.MELDREQUEST).GetCount() == 0;
|
||||
charaWork.eventTemp.bazaarMateria = GetItemPackage(Inventory.MELDREQUEST).GetCount() == 0;
|
||||
|
||||
ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("charaWork/bazaar", this);
|
||||
propPacketUtil.AddProperty("charaWork.eventTemp.bazaarRetail");
|
||||
propPacketUtil.AddProperty("charaWork.eventTemp.bazaarRepair");
|
||||
propPacketUtil.AddProperty("charaWork.eventTemp.bazaarMateria");
|
||||
QueuePackets(propPacketUtil.Done());
|
||||
}
|
||||
|
||||
public Inventory GetInventory(ushort type)
|
||||
{
|
||||
if (itemPackages.ContainsKey(type))
|
||||
return itemPackages[type];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public int GetCurrentGil()
|
||||
{
|
||||
if (GetInventory(Inventory.CURRENCY_CRYSTALS).HasItem(1000001))
|
||||
return GetInventory(Inventory.CURRENCY_CRYSTALS).GetItemByCatelogId(1000001).quantity;
|
||||
if (HasItem(1000001))
|
||||
return GetItemPackage(Inventory.CURRENCY_CRYSTALS).GetItemByCatelogId(1000001).quantity;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue