mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-05-20 08:26:59 -04:00
Renamed Type7Param to ItemRefParam. Changed a lot of "inventoryType" names to "itemPackage". Moved inventory code to Character class for easier use and auto-choosing the correct package.
This commit is contained in:
@@ -1,9 +1,12 @@
|
||||
|
||||
using FFXIVClassic.Common;
|
||||
using FFXIVClassic_Map_Server.actors.chara.player;
|
||||
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.utils;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace FFXIVClassic_Map_Server.Actors
|
||||
{
|
||||
@@ -56,6 +59,10 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
public Group currentParty = null;
|
||||
public ContentGroup currentContentGroup = null;
|
||||
|
||||
//Inventory
|
||||
protected Dictionary<ushort, Inventory> itemPackages = new Dictionary<ushort, Inventory>();
|
||||
private Equipment equipment;
|
||||
|
||||
public Character(uint actorID) : base(actorID)
|
||||
{
|
||||
//Init timer array to "notimer"
|
||||
@@ -114,6 +121,162 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
else
|
||||
zone.BroadcastPacketAroundActor(this, PlayAnimationOnActorPacket.BuildPacket(actorId, animId));
|
||||
}
|
||||
|
||||
#region Inventory
|
||||
|
||||
public void AddItem(uint catalogID)
|
||||
{
|
||||
AddItem(catalogID, 1);
|
||||
}
|
||||
|
||||
public void AddItem(uint catalogID, int quantity)
|
||||
{
|
||||
AddItem(catalogID, quantity, 1);
|
||||
}
|
||||
|
||||
public void AddItem(uint catalogID, int quantity, byte quality)
|
||||
{
|
||||
ushort itemPackage = GetPackageForItem(catalogID);
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
InventoryItem item = Server.GetWorldManager().CreateItem(catalogID, quantity, quality);
|
||||
itemPackages[itemPackage].AddItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddItem(InventoryItem item)
|
||||
{
|
||||
ushort itemPackage = GetPackageForItem(item.GetItemData().catalogID);
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
itemPackages[itemPackage].AddItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetItem(InventoryItem item, ushort itemPackage, ushort slot)
|
||||
{
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
itemPackages[itemPackage].AddItemSpecial(slot, item);
|
||||
}
|
||||
}
|
||||
|
||||
public void MoveItem(InventoryItem item, ushort destinationPackage)
|
||||
{
|
||||
ushort sourcePackage = item.itemPackage;
|
||||
|
||||
if (!itemPackages.ContainsKey(sourcePackage) && !itemPackages.ContainsKey(destinationPackage))
|
||||
return;
|
||||
|
||||
itemPackages[sourcePackage].RemoveItem(item);
|
||||
itemPackages[destinationPackage].AddItem(item);
|
||||
}
|
||||
|
||||
public void RemoveItem(uint catalogID)
|
||||
{
|
||||
RemoveItem(catalogID, 1);
|
||||
}
|
||||
|
||||
public void RemoveItem(uint catalogID, int quantity)
|
||||
{
|
||||
RemoveItem(catalogID, quantity, 1);
|
||||
}
|
||||
|
||||
public void RemoveItem(uint catalogID, int quantity, byte quality)
|
||||
{
|
||||
ushort itemPackage = GetPackageForItem(catalogID);
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
itemPackages[itemPackage].RemoveItem(catalogID, quantity, quantity);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveItemAtSlot(ushort itemPackage, ushort slot)
|
||||
{
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
itemPackages[itemPackage].RemoveItemAtSlot(slot);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveItem(InventoryItem item)
|
||||
{
|
||||
RemoveItem(item, 1);
|
||||
}
|
||||
|
||||
public void RemoveItem(InventoryItem item, int quantity)
|
||||
{
|
||||
if (itemPackages.ContainsKey(item.itemPackage))
|
||||
{
|
||||
itemPackages[item.itemPackage].RemoveItem(item, quantity);
|
||||
}
|
||||
}
|
||||
|
||||
public bool HasItem(uint catalogID)
|
||||
{
|
||||
return HasItem(catalogID, 1);
|
||||
}
|
||||
|
||||
public bool HasItem(uint catalogID, int minQuantity)
|
||||
{
|
||||
return HasItem(catalogID, minQuantity, 1);
|
||||
}
|
||||
|
||||
public bool HasItem(uint catalogID, int minQuantity, byte quality)
|
||||
{
|
||||
ushort itemPackage = GetPackageForItem(catalogID);
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
itemPackages[itemPackage].HasItem(catalogID, minQuantity, quality);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool HasItem(InventoryItem item)
|
||||
{
|
||||
ushort itemPackage = GetPackageForItem(item.GetItemData().catalogID);
|
||||
if (itemPackages.ContainsKey(itemPackage))
|
||||
{
|
||||
//return itemPackages[itemPackage].HasItem(item);
|
||||
return false; //TODO FIX
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public InventoryItem GetItem(LuaUtils.ItemRefParam reference)
|
||||
{
|
||||
if (reference.actorId != actorId)
|
||||
return null;
|
||||
if (itemPackages.ContainsKey(reference.itemPackage))
|
||||
{
|
||||
return itemPackages[reference.itemPackage].GetItemAtSlot(reference.slot);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ushort GetPackageForItem(uint catalogID)
|
||||
{
|
||||
ItemData data = Server.GetItemGamedata(catalogID);
|
||||
|
||||
if (data == null)
|
||||
return Inventory.NORMAL;
|
||||
else
|
||||
{
|
||||
if (data.IsMoney())
|
||||
return Inventory.CURRENCY_CRYSTALS;
|
||||
else if (data.IsImportant())
|
||||
return Inventory.KEYITEMS;
|
||||
else
|
||||
return Inventory.NORMAL;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
//public void removeItem(byUniqueId)
|
||||
//public void removeItem(byUniqueId, quantity)
|
||||
//public void removeItem(slot)
|
||||
//public void removeItem(slot, quantity)
|
||||
|
||||
}
|
||||
|
||||
|
@@ -126,6 +126,8 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
||||
return INV_ERROR.SYSTEM_ERROR;
|
||||
}
|
||||
|
||||
itemRef.RefreshPositioning(inventoryCode, (ushort) endOfListIndex);
|
||||
|
||||
isDirty[endOfListIndex] = true;
|
||||
list[endOfListIndex++] = itemRef;
|
||||
DoDatabaseAdd(itemRef);
|
||||
@@ -265,10 +267,15 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
||||
|
||||
public void RemoveItem(InventoryItem item)
|
||||
{
|
||||
RemoveItemByUniqueId(item.uniqueId);
|
||||
}
|
||||
|
||||
public void RemoveItemByUniqueId(ulong itemDBId)
|
||||
RemoveItemByUniqueId(item.uniqueId, 1);
|
||||
}
|
||||
|
||||
public void RemoveItem(InventoryItem item, int quantity)
|
||||
{
|
||||
RemoveItemByUniqueId(item.uniqueId, quantity);
|
||||
}
|
||||
|
||||
public void RemoveItemByUniqueId(ulong itemDBId, int quantity)
|
||||
{
|
||||
ushort slot = 0;
|
||||
InventoryItem toDelete = null;
|
||||
@@ -288,10 +295,18 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
|
||||
|
||||
if (toDelete == null)
|
||||
return;
|
||||
|
||||
if (quantity >= toDelete.quantity)
|
||||
{
|
||||
DoDatabaseRemove(toDelete.uniqueId);
|
||||
list[slot] = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
list[slot].quantity -= quantity;
|
||||
//DoDatabaseUpdateQuantity(toDelete.uniqueId);
|
||||
}
|
||||
|
||||
DoDatabaseRemove(toDelete.uniqueId);
|
||||
|
||||
list[slot] = null;
|
||||
isDirty[slot] = true;
|
||||
|
||||
DoRealign();
|
||||
|
@@ -104,10 +104,6 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
public bool isGM = false;
|
||||
public bool isZoneChanging = true;
|
||||
|
||||
//Inventory
|
||||
private Dictionary<ushort, Inventory> inventories = new Dictionary<ushort, Inventory>();
|
||||
private Equipment equipment;
|
||||
|
||||
//Trading
|
||||
private Player otherTrader = null;
|
||||
private Inventory myOfferings;
|
||||
@@ -172,14 +168,14 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
moveSpeeds[2] = SetActorSpeedPacket.DEFAULT_RUN;
|
||||
moveSpeeds[3] = SetActorSpeedPacket.DEFAULT_ACTIVE;
|
||||
|
||||
inventories[Inventory.NORMAL] = new Inventory(this, MAXSIZE_INVENTORY_NORMAL, Inventory.NORMAL);
|
||||
inventories[Inventory.KEYITEMS] = new Inventory(this, MAXSIZE_INVENTORY_KEYITEMS, Inventory.KEYITEMS);
|
||||
inventories[Inventory.CURRENCY_CRYSTALS] = new Inventory(this, MAXSIZE_INVENTORY_CURRANCY, Inventory.CURRENCY_CRYSTALS);
|
||||
inventories[Inventory.MELDREQUEST] = new Inventory(this, MAXSIZE_INVENTORY_MELDREQUEST, Inventory.MELDREQUEST);
|
||||
inventories[Inventory.BAZAAR] = new Inventory(this, MAXSIZE_INVENTORY_BAZAAR, Inventory.BAZAAR);
|
||||
inventories[Inventory.LOOT] = new Inventory(this, MAXSIZE_INVENTORY_LOOT, Inventory.LOOT);
|
||||
itemPackages[Inventory.NORMAL] = new Inventory(this, MAXSIZE_INVENTORY_NORMAL, Inventory.NORMAL);
|
||||
itemPackages[Inventory.KEYITEMS] = new Inventory(this, MAXSIZE_INVENTORY_KEYITEMS, Inventory.KEYITEMS);
|
||||
itemPackages[Inventory.CURRENCY_CRYSTALS] = new Inventory(this, MAXSIZE_INVENTORY_CURRANCY, Inventory.CURRENCY_CRYSTALS);
|
||||
itemPackages[Inventory.MELDREQUEST] = new Inventory(this, MAXSIZE_INVENTORY_MELDREQUEST, Inventory.MELDREQUEST);
|
||||
itemPackages[Inventory.BAZAAR] = new Inventory(this, MAXSIZE_INVENTORY_BAZAAR, Inventory.BAZAAR);
|
||||
itemPackages[Inventory.LOOT] = new Inventory(this, MAXSIZE_INVENTORY_LOOT, Inventory.LOOT);
|
||||
|
||||
equipment = new Equipment(this, inventories[Inventory.NORMAL], MAXSIZE_INVENTORY_EQUIPMENT, Inventory.EQUIPMENT);
|
||||
equipment = new Equipment(this, itemPackages[Inventory.NORMAL], MAXSIZE_INVENTORY_EQUIPMENT, Inventory.EQUIPMENT);
|
||||
|
||||
//Set the Skill level caps of all FFXIV (classes)skills to 50
|
||||
for (int i = 0; i < charaWork.battleSave.skillLevelCap.Length; i++)
|
||||
@@ -559,12 +555,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
|
||||
#region Inventory & Equipment
|
||||
QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId));
|
||||
inventories[Inventory.NORMAL].SendFullInventory(this);
|
||||
inventories[Inventory.CURRENCY_CRYSTALS].SendFullInventory(this);
|
||||
inventories[Inventory.KEYITEMS].SendFullInventory(this);
|
||||
inventories[Inventory.BAZAAR].SendFullInventory(this);
|
||||
inventories[Inventory.MELDREQUEST].SendFullInventory(this);
|
||||
inventories[Inventory.LOOT].SendFullInventory(this);
|
||||
itemPackages[Inventory.NORMAL].SendFullInventory(this);
|
||||
itemPackages[Inventory.CURRENCY_CRYSTALS].SendFullInventory(this);
|
||||
itemPackages[Inventory.KEYITEMS].SendFullInventory(this);
|
||||
itemPackages[Inventory.BAZAAR].SendFullInventory(this);
|
||||
itemPackages[Inventory.MELDREQUEST].SendFullInventory(this);
|
||||
itemPackages[Inventory.LOOT].SendFullInventory(this);
|
||||
equipment.SendFullEquipment(false);
|
||||
playerSession.QueuePacket(InventoryEndChangePacket.BuildPacket(actorId));
|
||||
#endregion
|
||||
@@ -1106,8 +1102,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
|
||||
public Inventory GetInventory(ushort type)
|
||||
{
|
||||
if (inventories.ContainsKey(type))
|
||||
return inventories[type];
|
||||
if (itemPackages.ContainsKey(type))
|
||||
return itemPackages[type];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
@@ -1891,7 +1887,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
if (!IsTrading())
|
||||
return;
|
||||
|
||||
InventoryItem mine = inventories[Inventory.NORMAL].GetItemAtSlot(linkedSlot);
|
||||
InventoryItem mine = itemPackages[Inventory.NORMAL].GetItemAtSlot(linkedSlot);
|
||||
|
||||
InventoryItem tradeItem = new InventoryItem(mine, slot);
|
||||
|
||||
@@ -1948,7 +1944,6 @@ namespace FFXIVClassic_Map_Server.Actors
|
||||
otherTrader = null;
|
||||
}
|
||||
|
||||
|
||||
public void Test()
|
||||
{
|
||||
QueuePacket(InventoryBeginChangePacket.BuildPacket(actorId));
|
||||
|
Reference in New Issue
Block a user