mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 14:41:28 +00:00
Renamed struct EQEmu::ItemBase to EQEmu::ItemData and class ItemInst to EQEmu::ItemInstance
This commit is contained in:
parent
decaadfe7d
commit
8b5dd58e96
@ -1,5 +1,8 @@
|
|||||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
== 10/16/2016 ==
|
||||||
|
Uleat: Renamed struct EQEmu::ItemBase to EQEmu::ItemData and class ItemInst to EQEmu::ItemInstance.
|
||||||
|
|
||||||
== 10/15/2016 ==
|
== 10/15/2016 ==
|
||||||
Uleat: Changed filenames to facilitate future inventory naming conventions
|
Uleat: Changed filenames to facilitate future inventory naming conventions
|
||||||
|
|
||||||
|
|||||||
@ -701,7 +701,7 @@ bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, Inven
|
|||||||
/* Insert starting inventory... */
|
/* Insert starting inventory... */
|
||||||
std::string invquery;
|
std::string invquery;
|
||||||
for (int16 i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::BANK_BAGS_END;) {
|
for (int16 i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::BANK_BAGS_END;) {
|
||||||
const ItemInst* newinv = inv->GetItem(i);
|
const EQEmu::ItemInstance* newinv = inv->GetItem(i);
|
||||||
if (newinv) {
|
if (newinv) {
|
||||||
invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)",
|
invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)",
|
||||||
charid, i, newinv->GetItem()->ID, newinv->GetCharges(), newinv->GetColor());
|
charid, i, newinv->GetItem()->ID, newinv->GetCharges(), newinv->GetColor());
|
||||||
|
|||||||
@ -2071,7 +2071,7 @@ struct AdventureLeaderboard_Struct
|
|||||||
/*struct Item_Shop_Struct {
|
/*struct Item_Shop_Struct {
|
||||||
uint16 merchantid;
|
uint16 merchantid;
|
||||||
uint8 itemtype;
|
uint8 itemtype;
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
uint8 iss_unknown001[6];
|
uint8 iss_unknown001[6];
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
|
|||||||
@ -167,7 +167,7 @@ uint8 EQEmu::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsEquipable(uint16 race_id, uint16 class_id)
|
bool EQEmu::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const
|
||||||
{
|
{
|
||||||
if (!(Races & GetPlayerRaceBit(race_id)))
|
if (!(Races & GetPlayerRaceBit(race_id)))
|
||||||
return false;
|
return false;
|
||||||
@ -178,32 +178,32 @@ bool EQEmu::ItemBase::IsEquipable(uint16 race_id, uint16 class_id)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsClassCommon()
|
bool EQEmu::ItemData::IsClassCommon() const
|
||||||
{
|
{
|
||||||
return (ItemClass == item::ItemClassCommon);
|
return (ItemClass == item::ItemClassCommon);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsClassBag()
|
bool EQEmu::ItemData::IsClassBag() const
|
||||||
{
|
{
|
||||||
return (ItemClass == item::ItemClassBag);
|
return (ItemClass == item::ItemClassBag);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsClassBook()
|
bool EQEmu::ItemData::IsClassBook() const
|
||||||
{
|
{
|
||||||
return (ItemClass == item::ItemClassBook);
|
return (ItemClass == item::ItemClassBook);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsType1HWeapon()
|
bool EQEmu::ItemData::IsType1HWeapon() const
|
||||||
{
|
{
|
||||||
return ((ItemType == item::ItemType1HBlunt) || (ItemType == item::ItemType1HSlash) || (ItemType == item::ItemType1HPiercing));
|
return ((ItemType == item::ItemType1HBlunt) || (ItemType == item::ItemType1HSlash) || (ItemType == item::ItemType1HPiercing));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsType2HWeapon()
|
bool EQEmu::ItemData::IsType2HWeapon() const
|
||||||
{
|
{
|
||||||
return ((ItemType == item::ItemType2HBlunt) || (ItemType == item::ItemType2HSlash) || (ItemType == item::ItemType2HPiercing));
|
return ((ItemType == item::ItemType2HBlunt) || (ItemType == item::ItemType2HSlash) || (ItemType == item::ItemType2HPiercing));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EQEmu::ItemBase::IsTypeShield()
|
bool EQEmu::ItemData::IsTypeShield() const
|
||||||
{
|
{
|
||||||
return (ItemType == item::ItemTypeShield);
|
return (ItemType == item::ItemTypeShield);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,8 +17,8 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 04111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 04111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef COMMON_ITEM_BASE_H
|
#ifndef COMMON_ITEM_DATA_H
|
||||||
#define COMMON_ITEM_BASE_H
|
#define COMMON_ITEM_DATA_H
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -50,17 +50,6 @@
|
|||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
namespace item {
|
namespace item {
|
||||||
enum ItemAttributeBit : uint32 {
|
|
||||||
bit_ItemAttributeNone = 0x00000000,
|
|
||||||
bit_ItemAttributeLore = 0x00000001,
|
|
||||||
bit_ItemAttributeArtifact = 0x00000002,
|
|
||||||
bit_ItemAttributeSummoned = 0x00000004,
|
|
||||||
bit_ItemAttributeMagic = 0x00000008,
|
|
||||||
bit_ItemAttributeAugment = 0x00000010,
|
|
||||||
bit_ItemAttributePendingLore = 0x00000020,
|
|
||||||
bit_ItemAttributeUnknown = 0xFFFFFFFF
|
|
||||||
};
|
|
||||||
|
|
||||||
enum ItemClass {
|
enum ItemClass {
|
||||||
ItemClassCommon = 0,
|
ItemClassCommon = 0,
|
||||||
ItemClassBag,
|
ItemClassBag,
|
||||||
@ -354,8 +343,8 @@ namespace EQEmu
|
|||||||
//ProcRate
|
//ProcRate
|
||||||
};
|
};
|
||||||
|
|
||||||
extern uint32 ConvertAugTypeToAugTypeBit(uint8 aug_type);
|
uint32 ConvertAugTypeToAugTypeBit(uint8 aug_type);
|
||||||
extern uint8 ConvertAugTypeBitToAugType(uint32 aug_type_bit);
|
uint8 ConvertAugTypeBitToAugType(uint32 aug_type_bit);
|
||||||
|
|
||||||
} /*item*/
|
} /*item*/
|
||||||
|
|
||||||
@ -364,10 +353,9 @@ namespace EQEmu
|
|||||||
const void * inst;
|
const void * inst;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ItemBase {
|
struct ItemData {
|
||||||
// Non packet based fields
|
// Non packet based fields
|
||||||
uint8 MinStatus;
|
uint8 MinStatus;
|
||||||
uint8 ItemDataType; // memset to item::ItemDataBase ('0') during mmf load
|
|
||||||
|
|
||||||
// Packet based fields
|
// Packet based fields
|
||||||
uint8 ItemClass; // Item Type: 0=common, 1=container, 2=book
|
uint8 ItemClass; // Item Type: 0=common, 1=container, 2=book
|
||||||
@ -543,23 +531,15 @@ namespace EQEmu
|
|||||||
char ScrollName[65];
|
char ScrollName[65];
|
||||||
//BardName
|
//BardName
|
||||||
|
|
||||||
bool IsEquipable(uint16 Race, uint16 Class);
|
bool IsEquipable(uint16 Race, uint16 Class) const;
|
||||||
bool IsClassCommon();
|
bool IsClassCommon() const;
|
||||||
bool IsClassBag();
|
bool IsClassBag() const;
|
||||||
bool IsClassBook();
|
bool IsClassBook() const;
|
||||||
bool IsType1HWeapon();
|
bool IsType1HWeapon() const;
|
||||||
bool IsType2HWeapon();
|
bool IsType2HWeapon() const;
|
||||||
bool IsTypeShield();
|
bool IsTypeShield() const;
|
||||||
|
|
||||||
bool IsEquipable(uint16 Race, uint16 Class) const { return const_cast<ItemBase*>(this)->IsEquipable(Race, Class); }
|
|
||||||
bool IsClassCommon() const { return const_cast<ItemBase*>(this)->IsClassCommon(); }
|
|
||||||
bool IsClassBag() const { return const_cast<ItemBase*>(this)->IsClassBag(); }
|
|
||||||
bool IsClassBook() const { return const_cast<ItemBase*>(this)->IsClassBook(); }
|
|
||||||
bool IsType1HWeapon() const { return const_cast<ItemBase*>(this)->IsType1HWeapon(); }
|
|
||||||
bool IsType2HWeapon() const { return const_cast<ItemBase*>(this)->IsType2HWeapon(); }
|
|
||||||
bool IsTypeShield() const { return const_cast<ItemBase*>(this)->IsTypeShield(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} /*EQEmu*/
|
} /*EQEmu*/
|
||||||
|
|
||||||
#endif /*COMMON_ITEM_BASE_H*/
|
#endif /*COMMON_ITEM_DATA_H*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -21,8 +21,8 @@
|
|||||||
// These classes could be optimized with database reads/writes by storing
|
// These classes could be optimized with database reads/writes by storing
|
||||||
// a status flag indicating how object needs to interact with database
|
// a status flag indicating how object needs to interact with database
|
||||||
|
|
||||||
#ifndef COMMON_ITEM_H
|
#ifndef COMMON_ITEM_INSTANCE_H
|
||||||
#define COMMON_ITEM_H
|
#define COMMON_ITEM_INSTANCE_H
|
||||||
|
|
||||||
|
|
||||||
class ItemParse; // Parses item packets
|
class ItemParse; // Parses item packets
|
||||||
@ -51,7 +51,7 @@ namespace ItemField
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Specifies usage type for item inside ItemInst
|
// Specifies usage type for item inside EQEmu::ItemInstance
|
||||||
enum ItemInstTypes
|
enum ItemInstTypes
|
||||||
{
|
{
|
||||||
ItemInstNormal = 0,
|
ItemInstNormal = 0,
|
||||||
@ -76,7 +76,10 @@ enum {
|
|||||||
invWhereCursor = 0x20
|
invWhereCursor = 0x20
|
||||||
};
|
};
|
||||||
|
|
||||||
class ItemInst;
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
// ########################################
|
// ########################################
|
||||||
// Class: Queue
|
// Class: Queue
|
||||||
@ -89,24 +92,24 @@ public:
|
|||||||
// Public Methods
|
// Public Methods
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
inline std::list<ItemInst*>::const_iterator cbegin() { return m_list.cbegin(); }
|
inline std::list<EQEmu::ItemInstance*>::const_iterator cbegin() { return m_list.cbegin(); }
|
||||||
inline std::list<ItemInst*>::const_iterator cend() { return m_list.cend(); }
|
inline std::list<EQEmu::ItemInstance*>::const_iterator cend() { return m_list.cend(); }
|
||||||
|
|
||||||
inline int size() { return static_cast<int>(m_list.size()); } // TODO: change to size_t
|
inline int size() { return static_cast<int>(m_list.size()); } // TODO: change to size_t
|
||||||
inline bool empty() { return m_list.empty(); }
|
inline bool empty() { return m_list.empty(); }
|
||||||
|
|
||||||
void push(ItemInst* inst);
|
void push(EQEmu::ItemInstance* inst);
|
||||||
void push_front(ItemInst* inst);
|
void push_front(EQEmu::ItemInstance* inst);
|
||||||
ItemInst* pop();
|
EQEmu::ItemInstance* pop();
|
||||||
ItemInst* pop_back();
|
EQEmu::ItemInstance* pop_back();
|
||||||
ItemInst* peek_front() const;
|
EQEmu::ItemInstance* peek_front() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
// Protected Members
|
// Protected Members
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
std::list<ItemInst*> m_list;
|
std::list<EQEmu::ItemInstance*> m_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ########################################
|
// ########################################
|
||||||
@ -114,7 +117,7 @@ protected:
|
|||||||
// Character inventory
|
// Character inventory
|
||||||
class Inventory
|
class Inventory
|
||||||
{
|
{
|
||||||
friend class ItemInst;
|
friend class EQEmu::ItemInstance;
|
||||||
public:
|
public:
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
// Public Methods
|
// Public Methods
|
||||||
@ -138,29 +141,29 @@ public:
|
|||||||
EQEmu::versions::InventoryVersion InventoryVersion() { return m_inventory_version; }
|
EQEmu::versions::InventoryVersion InventoryVersion() { return m_inventory_version; }
|
||||||
|
|
||||||
static void CleanDirty();
|
static void CleanDirty();
|
||||||
static void MarkDirty(ItemInst *inst);
|
static void MarkDirty(EQEmu::ItemInstance *inst);
|
||||||
|
|
||||||
// Retrieve a writeable item at specified slot
|
// Retrieve a writeable item at specified slot
|
||||||
ItemInst* GetItem(int16 slot_id) const;
|
EQEmu::ItemInstance* GetItem(int16 slot_id) const;
|
||||||
ItemInst* GetItem(int16 slot_id, uint8 bagidx) const;
|
EQEmu::ItemInstance* GetItem(int16 slot_id, uint8 bagidx) const;
|
||||||
|
|
||||||
inline std::list<ItemInst*>::const_iterator cursor_cbegin() { return m_cursor.cbegin(); }
|
inline std::list<EQEmu::ItemInstance*>::const_iterator cursor_cbegin() { return m_cursor.cbegin(); }
|
||||||
inline std::list<ItemInst*>::const_iterator cursor_cend() { return m_cursor.cend(); }
|
inline std::list<EQEmu::ItemInstance*>::const_iterator cursor_cend() { return m_cursor.cend(); }
|
||||||
|
|
||||||
inline int CursorSize() { return m_cursor.size(); }
|
inline int CursorSize() { return m_cursor.size(); }
|
||||||
inline bool CursorEmpty() { return m_cursor.empty(); }
|
inline bool CursorEmpty() { return m_cursor.empty(); }
|
||||||
|
|
||||||
// Retrieve a read-only item from inventory
|
// Retrieve a read-only item from inventory
|
||||||
inline const ItemInst* operator[](int16 slot_id) const { return GetItem(slot_id); }
|
inline const EQEmu::ItemInstance* operator[](int16 slot_id) const { return GetItem(slot_id); }
|
||||||
|
|
||||||
// Add item to inventory
|
// Add item to inventory
|
||||||
int16 PutItem(int16 slot_id, const ItemInst& inst);
|
int16 PutItem(int16 slot_id, const EQEmu::ItemInstance& inst);
|
||||||
|
|
||||||
// Add item to cursor queue
|
// Add item to cursor queue
|
||||||
int16 PushCursor(const ItemInst& inst);
|
int16 PushCursor(const EQEmu::ItemInstance& inst);
|
||||||
|
|
||||||
// Get cursor item in front of queue
|
// Get cursor item in front of queue
|
||||||
ItemInst* GetCursorItem();
|
EQEmu::ItemInstance* GetCursorItem();
|
||||||
|
|
||||||
// Swap items in inventory
|
// Swap items in inventory
|
||||||
bool SwapItem(int16 slot_a, int16 slot_b);
|
bool SwapItem(int16 slot_a, int16 slot_b);
|
||||||
@ -172,10 +175,10 @@ public:
|
|||||||
bool CheckNoDrop(int16 slot_id);
|
bool CheckNoDrop(int16 slot_id);
|
||||||
|
|
||||||
// Remove item from inventory (and take control of memory)
|
// Remove item from inventory (and take control of memory)
|
||||||
ItemInst* PopItem(int16 slot_id);
|
EQEmu::ItemInstance* PopItem(int16 slot_id);
|
||||||
|
|
||||||
// Check whether there is space for the specified number of the specified item.
|
// Check whether there is space for the specified number of the specified item.
|
||||||
bool HasSpaceForItem(const EQEmu::ItemBase *ItemToTry, int16 Quantity);
|
bool HasSpaceForItem(const EQEmu::ItemData *ItemToTry, int16 Quantity);
|
||||||
|
|
||||||
// Check whether item exists in inventory
|
// Check whether item exists in inventory
|
||||||
// where argument specifies OR'd list of invWhere constants to look
|
// where argument specifies OR'd list of invWhere constants to look
|
||||||
@ -191,7 +194,7 @@ public:
|
|||||||
|
|
||||||
// Locate an available inventory slot
|
// Locate an available inventory slot
|
||||||
int16 FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size = 0, bool is_arrow = false);
|
int16 FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size = 0, bool is_arrow = false);
|
||||||
int16 FindFreeSlotForTradeItem(const ItemInst* inst);
|
int16 FindFreeSlotForTradeItem(const EQEmu::ItemInstance* inst);
|
||||||
|
|
||||||
// Calculate slot_id for an item within a bag
|
// Calculate slot_id for an item within a bag
|
||||||
static int16 CalcSlotId(int16 slot_id); // Calc parent bag's slot_id
|
static int16 CalcSlotId(int16 slot_id); // Calc parent bag's slot_id
|
||||||
@ -200,7 +203,7 @@ public:
|
|||||||
static int16 CalcSlotFromMaterial(uint8 material);
|
static int16 CalcSlotFromMaterial(uint8 material);
|
||||||
static uint8 CalcMaterialFromSlot(int16 equipslot);
|
static uint8 CalcMaterialFromSlot(int16 equipslot);
|
||||||
|
|
||||||
static bool CanItemFitInContainer(const EQEmu::ItemBase *ItemToTry, const EQEmu::ItemBase *Container);
|
static bool CanItemFitInContainer(const EQEmu::ItemData *ItemToTry, const EQEmu::ItemData *Container);
|
||||||
|
|
||||||
// Test for valid inventory casting slot
|
// Test for valid inventory casting slot
|
||||||
bool SupportsClickCasting(int16 slot_id);
|
bool SupportsClickCasting(int16 slot_id);
|
||||||
@ -209,7 +212,7 @@ public:
|
|||||||
// Test whether a given slot can support a container item
|
// Test whether a given slot can support a container item
|
||||||
static bool SupportsContainers(int16 slot_id);
|
static bool SupportsContainers(int16 slot_id);
|
||||||
|
|
||||||
int GetSlotByItemInst(ItemInst *inst);
|
int GetSlotByItemInst(EQEmu::ItemInstance *inst);
|
||||||
|
|
||||||
uint8 FindBrightestLightType();
|
uint8 FindBrightestLightType();
|
||||||
|
|
||||||
@ -229,31 +232,31 @@ protected:
|
|||||||
// Protected Methods
|
// Protected Methods
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
|
|
||||||
int GetSlotByItemInstCollection(const std::map<int16, ItemInst*> &collection, ItemInst *inst);
|
int GetSlotByItemInstCollection(const std::map<int16, EQEmu::ItemInstance*> &collection, EQEmu::ItemInstance *inst);
|
||||||
void dumpItemCollection(const std::map<int16, ItemInst*> &collection);
|
void dumpItemCollection(const std::map<int16, EQEmu::ItemInstance*> &collection);
|
||||||
void dumpBagContents(ItemInst *inst, std::map<int16, ItemInst*>::const_iterator *it);
|
void dumpBagContents(EQEmu::ItemInstance *inst, std::map<int16, EQEmu::ItemInstance*>::const_iterator *it);
|
||||||
|
|
||||||
// Retrieves item within an inventory bucket
|
// Retrieves item within an inventory bucket
|
||||||
ItemInst* _GetItem(const std::map<int16, ItemInst*>& bucket, int16 slot_id) const;
|
EQEmu::ItemInstance* _GetItem(const std::map<int16, EQEmu::ItemInstance*>& bucket, int16 slot_id) const;
|
||||||
|
|
||||||
// Private "put" item into bucket, without regard for what is currently in bucket
|
// Private "put" item into bucket, without regard for what is currently in bucket
|
||||||
int16 _PutItem(int16 slot_id, ItemInst* inst);
|
int16 _PutItem(int16 slot_id, EQEmu::ItemInstance* inst);
|
||||||
|
|
||||||
// Checks an inventory bucket for a particular item
|
// Checks an inventory bucket for a particular item
|
||||||
int16 _HasItem(std::map<int16, ItemInst*>& bucket, uint32 item_id, uint8 quantity);
|
int16 _HasItem(std::map<int16, EQEmu::ItemInstance*>& bucket, uint32 item_id, uint8 quantity);
|
||||||
int16 _HasItem(ItemInstQueue& iqueue, uint32 item_id, uint8 quantity);
|
int16 _HasItem(ItemInstQueue& iqueue, uint32 item_id, uint8 quantity);
|
||||||
int16 _HasItemByUse(std::map<int16, ItemInst*>& bucket, uint8 use, uint8 quantity);
|
int16 _HasItemByUse(std::map<int16, EQEmu::ItemInstance*>& bucket, uint8 use, uint8 quantity);
|
||||||
int16 _HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint8 quantity);
|
int16 _HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint8 quantity);
|
||||||
int16 _HasItemByLoreGroup(std::map<int16, ItemInst*>& bucket, uint32 loregroup);
|
int16 _HasItemByLoreGroup(std::map<int16, EQEmu::ItemInstance*>& bucket, uint32 loregroup);
|
||||||
int16 _HasItemByLoreGroup(ItemInstQueue& iqueue, uint32 loregroup);
|
int16 _HasItemByLoreGroup(ItemInstQueue& iqueue, uint32 loregroup);
|
||||||
|
|
||||||
|
|
||||||
// Player inventory
|
// Player inventory
|
||||||
std::map<int16, ItemInst*> m_worn; // Items worn by character
|
std::map<int16, EQEmu::ItemInstance*> m_worn; // Items worn by character
|
||||||
std::map<int16, ItemInst*> m_inv; // Items in character personal inventory
|
std::map<int16, EQEmu::ItemInstance*> m_inv; // Items in character personal inventory
|
||||||
std::map<int16, ItemInst*> m_bank; // Items in character bank
|
std::map<int16, EQEmu::ItemInstance*> m_bank; // Items in character bank
|
||||||
std::map<int16, ItemInst*> m_shbank; // Items in character shared bank
|
std::map<int16, EQEmu::ItemInstance*> m_shbank; // Items in character shared bank
|
||||||
std::map<int16, ItemInst*> m_trade; // Items in a trade session
|
std::map<int16, EQEmu::ItemInstance*> m_trade; // Items in a trade session
|
||||||
ItemInstQueue m_cursor; // Items on cursor: FIFO
|
ItemInstQueue m_cursor; // Items on cursor: FIFO
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -265,271 +268,269 @@ private:
|
|||||||
class SharedDatabase;
|
class SharedDatabase;
|
||||||
|
|
||||||
// ########################################
|
// ########################################
|
||||||
// Class: ItemInst
|
// Class: EQEmu::ItemInstance
|
||||||
// Base class for an instance of an item
|
// Base class for an instance of an item
|
||||||
// An item instance encapsulates item data + data specific
|
// An item instance encapsulates item data + data specific
|
||||||
// to an item instance (includes dye, augments, charges, etc)
|
// to an item instance (includes dye, augments, charges, etc)
|
||||||
class ItemInst
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
public:
|
class ItemInstance {
|
||||||
/////////////////////////
|
public:
|
||||||
// Methods
|
/////////////////////////
|
||||||
/////////////////////////
|
// Methods
|
||||||
|
/////////////////////////
|
||||||
|
|
||||||
// Constructors/Destructor
|
// Constructors/Destructor
|
||||||
ItemInst(const EQEmu::ItemBase* item = nullptr, int16 charges = 0);
|
ItemInstance(const ItemData* item = nullptr, int16 charges = 0);
|
||||||
|
|
||||||
ItemInst(SharedDatabase *db, uint32 item_id, int16 charges = 0);
|
ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges = 0);
|
||||||
|
|
||||||
ItemInst(ItemInstTypes use_type);
|
ItemInstance(ItemInstTypes use_type);
|
||||||
|
|
||||||
ItemInst(const ItemInst& copy);
|
ItemInstance(const ItemInstance& copy);
|
||||||
|
|
||||||
~ItemInst();
|
~ItemInstance();
|
||||||
|
|
||||||
// Query item type
|
// Query item type
|
||||||
bool IsType(EQEmu::item::ItemClass item_class) const;
|
bool IsType(EQEmu::item::ItemClass item_class) const;
|
||||||
|
|
||||||
bool IsClassCommon();
|
bool IsClassCommon() const;
|
||||||
bool IsClassBag();
|
bool IsClassBag() const;
|
||||||
bool IsClassBook();
|
bool IsClassBook() const;
|
||||||
|
|
||||||
bool IsClassCommon() const { return const_cast<ItemInst*>(this)->IsClassCommon(); }
|
// Can item be stacked?
|
||||||
bool IsClassBag() const { return const_cast<ItemInst*>(this)->IsClassBag(); }
|
bool IsStackable() const;
|
||||||
bool IsClassBook() const { return const_cast<ItemInst*>(this)->IsClassBook(); }
|
bool IsCharged() const;
|
||||||
|
|
||||||
// Can item be stacked?
|
// Can item be equipped by/at?
|
||||||
bool IsStackable() const;
|
bool IsEquipable(uint16 race, uint16 class_) const;
|
||||||
bool IsCharged() const;
|
bool IsEquipable(int16 slot_id) const;
|
||||||
|
|
||||||
// Can item be equipped by/at?
|
//
|
||||||
bool IsEquipable(uint16 race, uint16 class_) const;
|
// Augments
|
||||||
bool IsEquipable(int16 slot_id) const;
|
//
|
||||||
|
bool IsAugmentable() const;
|
||||||
|
bool AvailableWearSlot(uint32 aug_wear_slots) const;
|
||||||
|
int8 AvailableAugmentSlot(int32 augtype) const;
|
||||||
|
bool IsAugmentSlotAvailable(int32 augtype, uint8 slot) const;
|
||||||
|
inline int32 GetAugmentType() const { return ((m_item) ? m_item->AugType : NO_ITEM); }
|
||||||
|
|
||||||
//
|
inline bool IsExpendable() const { return ((m_item) ? ((m_item->Click.Type == EQEmu::item::ItemEffectExpendable) || (m_item->ItemType == EQEmu::item::ItemTypePotion)) : false); }
|
||||||
// Augments
|
|
||||||
//
|
|
||||||
bool IsAugmentable() const;
|
|
||||||
bool AvailableWearSlot(uint32 aug_wear_slots) const;
|
|
||||||
int8 AvailableAugmentSlot(int32 augtype) const;
|
|
||||||
bool IsAugmentSlotAvailable(int32 augtype, uint8 slot) const;
|
|
||||||
inline int32 GetAugmentType() const { return ((m_item) ? m_item->AugType : NO_ITEM); }
|
|
||||||
|
|
||||||
inline bool IsExpendable() const { return ((m_item) ? ((m_item->Click.Type == EQEmu::item::ItemEffectExpendable) || (m_item->ItemType == EQEmu::item::ItemTypePotion)) : false); }
|
//
|
||||||
|
// Contents
|
||||||
|
//
|
||||||
|
ItemInstance* GetItem(uint8 slot) const;
|
||||||
|
uint32 GetItemID(uint8 slot) const;
|
||||||
|
inline const ItemInstance* operator[](uint8 slot) const { return GetItem(slot); }
|
||||||
|
void PutItem(uint8 slot, const ItemInstance& inst);
|
||||||
|
void PutItem(SharedDatabase *db, uint8 slot, uint32 item_id) { return; } // not defined anywhere...
|
||||||
|
void DeleteItem(uint8 slot);
|
||||||
|
ItemInstance* PopItem(uint8 index);
|
||||||
|
void Clear();
|
||||||
|
void ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_norent);
|
||||||
|
uint8 FirstOpenSlot() const;
|
||||||
|
uint8 GetTotalItemCount() const;
|
||||||
|
bool IsNoneEmptyContainer();
|
||||||
|
std::map<uint8, ItemInstance*>* GetContents() { return &m_contents; }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Contents
|
// Augments
|
||||||
//
|
//
|
||||||
ItemInst* GetItem(uint8 slot) const;
|
ItemInstance* GetAugment(uint8 slot) const;
|
||||||
uint32 GetItemID(uint8 slot) const;
|
uint32 GetAugmentItemID(uint8 slot) const;
|
||||||
inline const ItemInst* operator[](uint8 slot) const { return GetItem(slot); }
|
void PutAugment(uint8 slot, const ItemInstance& inst);
|
||||||
void PutItem(uint8 slot, const ItemInst& inst);
|
void PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id);
|
||||||
void PutItem(SharedDatabase *db, uint8 slot, uint32 item_id) { return; } // not defined anywhere...
|
void DeleteAugment(uint8 slot);
|
||||||
void DeleteItem(uint8 slot);
|
ItemInstance* RemoveAugment(uint8 index);
|
||||||
ItemInst* PopItem(uint8 index);
|
bool IsAugmented();
|
||||||
void Clear();
|
ItemInstance* GetOrnamentationAug(int32 ornamentationAugtype) const;
|
||||||
void ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_norent);
|
bool UpdateOrnamentationInfo();
|
||||||
uint8 FirstOpenSlot() const;
|
static bool CanTransform(const EQEmu::ItemData *ItemToTry, const EQEmu::ItemData *Container, bool AllowAll = false);
|
||||||
uint8 GetTotalItemCount() const;
|
|
||||||
bool IsNoneEmptyContainer();
|
|
||||||
std::map<uint8, ItemInst*>* GetContents() { return &m_contents; }
|
|
||||||
|
|
||||||
//
|
// Has attack/delay?
|
||||||
// Augments
|
bool IsWeapon() const;
|
||||||
//
|
bool IsAmmo() const;
|
||||||
ItemInst* GetAugment(uint8 slot) const;
|
|
||||||
uint32 GetAugmentItemID(uint8 slot) const;
|
|
||||||
void PutAugment(uint8 slot, const ItemInst& inst);
|
|
||||||
void PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id);
|
|
||||||
void DeleteAugment(uint8 slot);
|
|
||||||
ItemInst* RemoveAugment(uint8 index);
|
|
||||||
bool IsAugmented();
|
|
||||||
ItemInst* GetOrnamentationAug(int32 ornamentationAugtype) const;
|
|
||||||
bool UpdateOrnamentationInfo();
|
|
||||||
static bool CanTransform(const EQEmu::ItemBase *ItemToTry, const EQEmu::ItemBase *Container, bool AllowAll = false);
|
|
||||||
|
|
||||||
// Has attack/delay?
|
|
||||||
bool IsWeapon() const;
|
|
||||||
bool IsAmmo() const;
|
|
||||||
|
|
||||||
// Accessors
|
// Accessors
|
||||||
const uint32 GetID() const { return ((m_item) ? m_item->ID : NO_ITEM); }
|
const uint32 GetID() const { return ((m_item) ? m_item->ID : NO_ITEM); }
|
||||||
const uint32 GetItemScriptID() const { return ((m_item) ? m_item->ScriptFileID : NO_ITEM); }
|
const uint32 GetItemScriptID() const { return ((m_item) ? m_item->ScriptFileID : NO_ITEM); }
|
||||||
const EQEmu::ItemBase* GetItem() const;
|
const ItemData* GetItem() const;
|
||||||
const EQEmu::ItemBase* GetUnscaledItem() const;
|
const ItemData* GetUnscaledItem() const;
|
||||||
|
|
||||||
int16 GetCharges() const { return m_charges; }
|
int16 GetCharges() const { return m_charges; }
|
||||||
void SetCharges(int16 charges) { m_charges = charges; }
|
void SetCharges(int16 charges) { m_charges = charges; }
|
||||||
|
|
||||||
uint32 GetPrice() const { return m_price; }
|
uint32 GetPrice() const { return m_price; }
|
||||||
void SetPrice(uint32 price) { m_price = price; }
|
void SetPrice(uint32 price) { m_price = price; }
|
||||||
|
|
||||||
void SetColor(uint32 color) { m_color = color; }
|
void SetColor(uint32 color) { m_color = color; }
|
||||||
uint32 GetColor() const { return m_color; }
|
uint32 GetColor() const { return m_color; }
|
||||||
|
|
||||||
uint32 GetMerchantSlot() const { return m_merchantslot; }
|
uint32 GetMerchantSlot() const { return m_merchantslot; }
|
||||||
void SetMerchantSlot(uint32 slot) { m_merchantslot = slot; }
|
void SetMerchantSlot(uint32 slot) { m_merchantslot = slot; }
|
||||||
|
|
||||||
int32 GetMerchantCount() const { return m_merchantcount; }
|
int32 GetMerchantCount() const { return m_merchantcount; }
|
||||||
void SetMerchantCount(int32 count) { m_merchantcount = count; }
|
void SetMerchantCount(int32 count) { m_merchantcount = count; }
|
||||||
|
|
||||||
int16 GetCurrentSlot() const { return m_currentslot; }
|
int16 GetCurrentSlot() const { return m_currentslot; }
|
||||||
void SetCurrentSlot(int16 curr_slot) { m_currentslot = curr_slot; }
|
void SetCurrentSlot(int16 curr_slot) { m_currentslot = curr_slot; }
|
||||||
|
|
||||||
// Is this item already attuned?
|
// Is this item already attuned?
|
||||||
bool IsAttuned() const { return m_attuned; }
|
bool IsAttuned() const { return m_attuned; }
|
||||||
void SetAttuned(bool flag) { m_attuned=flag; }
|
void SetAttuned(bool flag) { m_attuned = flag; }
|
||||||
|
|
||||||
std::string GetCustomDataString() const;
|
std::string GetCustomDataString() const;
|
||||||
std::string GetCustomData(std::string identifier);
|
std::string GetCustomData(std::string identifier);
|
||||||
void SetCustomData(std::string identifier, std::string value);
|
void SetCustomData(std::string identifier, std::string value);
|
||||||
void SetCustomData(std::string identifier, int value);
|
void SetCustomData(std::string identifier, int value);
|
||||||
void SetCustomData(std::string identifier, float value);
|
void SetCustomData(std::string identifier, float value);
|
||||||
void SetCustomData(std::string identifier, bool value);
|
void SetCustomData(std::string identifier, bool value);
|
||||||
void DeleteCustomData(std::string identifier);
|
void DeleteCustomData(std::string identifier);
|
||||||
|
|
||||||
// Allows treatment of this object as though it were a pointer to m_item
|
// Allows treatment of this object as though it were a pointer to m_item
|
||||||
operator bool() const { return (m_item != nullptr); }
|
operator bool() const { return (m_item != nullptr); }
|
||||||
|
|
||||||
// Compare inner Item_Struct of two ItemInst objects
|
// Compare inner Item_Struct of two ItemInstance objects
|
||||||
bool operator==(const ItemInst& right) const { return (this->m_item == right.m_item); }
|
bool operator==(const ItemInstance& right) const { return (this->m_item == right.m_item); }
|
||||||
bool operator!=(const ItemInst& right) const { return (this->m_item != right.m_item); }
|
bool operator!=(const ItemInstance& right) const { return (this->m_item != right.m_item); }
|
||||||
|
|
||||||
// Clone current item
|
// Clone current item
|
||||||
ItemInst* Clone() const;
|
ItemInstance* Clone() const;
|
||||||
|
|
||||||
bool IsSlotAllowed(int16 slot_id) const;
|
bool IsSlotAllowed(int16 slot_id) const;
|
||||||
|
|
||||||
bool IsScaling() const { return m_scaling; }
|
bool IsScaling() const { return m_scaling; }
|
||||||
bool IsEvolving() const { return (m_evolveLvl >= 1); }
|
bool IsEvolving() const { return (m_evolveLvl >= 1); }
|
||||||
uint32 GetExp() const { return m_exp; }
|
uint32 GetExp() const { return m_exp; }
|
||||||
void SetExp(uint32 exp) { m_exp = exp; }
|
void SetExp(uint32 exp) { m_exp = exp; }
|
||||||
void AddExp(uint32 exp) { m_exp += exp; }
|
void AddExp(uint32 exp) { m_exp += exp; }
|
||||||
bool IsActivated() { return m_activated; }
|
bool IsActivated() { return m_activated; }
|
||||||
void SetActivated(bool activated) { m_activated = activated; }
|
void SetActivated(bool activated) { m_activated = activated; }
|
||||||
int8 GetEvolveLvl() const { return m_evolveLvl; }
|
int8 GetEvolveLvl() const { return m_evolveLvl; }
|
||||||
void SetScaling(bool v) { m_scaling = v; }
|
void SetScaling(bool v) { m_scaling = v; }
|
||||||
uint32 GetOrnamentationIcon() const { return m_ornamenticon; }
|
uint32 GetOrnamentationIcon() const { return m_ornamenticon; }
|
||||||
void SetOrnamentIcon(uint32 ornament_icon) { m_ornamenticon = ornament_icon; }
|
void SetOrnamentIcon(uint32 ornament_icon) { m_ornamenticon = ornament_icon; }
|
||||||
uint32 GetOrnamentationIDFile() const { return m_ornamentidfile; }
|
uint32 GetOrnamentationIDFile() const { return m_ornamentidfile; }
|
||||||
void SetOrnamentationIDFile(uint32 ornament_idfile) { m_ornamentidfile = ornament_idfile; }
|
void SetOrnamentationIDFile(uint32 ornament_idfile) { m_ornamentidfile = ornament_idfile; }
|
||||||
uint32 GetOrnamentHeroModel(int32 material_slot = -1) const;
|
uint32 GetOrnamentHeroModel(int32 material_slot = -1) const;
|
||||||
void SetOrnamentHeroModel(uint32 ornament_hero_model) { m_ornament_hero_model = ornament_hero_model; }
|
void SetOrnamentHeroModel(uint32 ornament_hero_model) { m_ornament_hero_model = ornament_hero_model; }
|
||||||
uint32 GetRecastTimestamp() const { return m_recast_timestamp; }
|
uint32 GetRecastTimestamp() const { return m_recast_timestamp; }
|
||||||
void SetRecastTimestamp(uint32 in) { m_recast_timestamp = in; }
|
void SetRecastTimestamp(uint32 in) { m_recast_timestamp = in; }
|
||||||
|
|
||||||
void Initialize(SharedDatabase *db = nullptr);
|
void Initialize(SharedDatabase *db = nullptr);
|
||||||
void ScaleItem();
|
void ScaleItem();
|
||||||
bool EvolveOnAllKills() const;
|
bool EvolveOnAllKills() const;
|
||||||
int8 GetMaxEvolveLvl() const;
|
int8 GetMaxEvolveLvl() const;
|
||||||
uint32 GetKillsNeeded(uint8 currentlevel);
|
uint32 GetKillsNeeded(uint8 currentlevel);
|
||||||
|
|
||||||
std::string Serialize(int16 slot_id) const { EQEmu::InternalSerializedItem_Struct s; s.slot_id = slot_id; s.inst = (const void*)this; std::string ser; ser.assign((char*)&s, sizeof(EQEmu::InternalSerializedItem_Struct)); return ser; }
|
std::string Serialize(int16 slot_id) const { EQEmu::InternalSerializedItem_Struct s; s.slot_id = slot_id; s.inst = (const void*)this; std::string ser; ser.assign((char*)&s, sizeof(EQEmu::InternalSerializedItem_Struct)); return ser; }
|
||||||
void Serialize(EQEmu::OutBuffer& ob, int16 slot_id) const { EQEmu::InternalSerializedItem_Struct isi; isi.slot_id = slot_id; isi.inst = (const void*)this; ob.write((const char*)&isi, sizeof(isi)); }
|
void Serialize(EQEmu::OutBuffer& ob, int16 slot_id) const { EQEmu::InternalSerializedItem_Struct isi; isi.slot_id = slot_id; isi.inst = (const void*)this; ob.write((const char*)&isi, sizeof(isi)); }
|
||||||
|
|
||||||
inline int32 GetSerialNumber() const { return m_SerialNumber; }
|
|
||||||
inline void SetSerialNumber(int32 id) { m_SerialNumber = id; }
|
|
||||||
|
|
||||||
std::map<std::string, Timer>& GetTimers() { return m_timers; }
|
inline int32 GetSerialNumber() const { return m_SerialNumber; }
|
||||||
void SetTimer(std::string name, uint32 time);
|
inline void SetSerialNumber(int32 id) { m_SerialNumber = id; }
|
||||||
void StopTimer(std::string name);
|
|
||||||
void ClearTimers();
|
|
||||||
|
|
||||||
// Get a total of a stat, including augs
|
std::map<std::string, Timer>& GetTimers() { return m_timers; }
|
||||||
// These functions should be used in place of other code manually totaling
|
void SetTimer(std::string name, uint32 time);
|
||||||
// to centralize where it is done to make future changes easier (ex. whenever powersources come around)
|
void StopTimer(std::string name);
|
||||||
// and to minimize errors. CalcItemBonuses however doesn't use these in interest of performance
|
void ClearTimers();
|
||||||
// by default these do not recurse into augs
|
|
||||||
int GetItemArmorClass(bool augments = false) const;
|
|
||||||
int GetItemElementalDamage(int &magic, int &fire, int &cold, int &poison, int &disease, int &chromatic, int &prismatic, int &physical, int &corruption, bool augments = false) const;
|
|
||||||
// These two differ in the fact that they're quick checks (they are checked BEFORE the one above
|
|
||||||
int GetItemElementalFlag(bool augments = false) const;
|
|
||||||
int GetItemElementalDamage(bool augments = false) const;
|
|
||||||
int GetItemRecommendedLevel(bool augments = false) const;
|
|
||||||
int GetItemRequiredLevel(bool augments = false) const;
|
|
||||||
int GetItemWeaponDamage(bool augments = false) const;
|
|
||||||
int GetItemBackstabDamage(bool augments = false) const;
|
|
||||||
// these two are just quick checks
|
|
||||||
int GetItemBaneDamageBody(bool augments = false) const;
|
|
||||||
int GetItemBaneDamageRace(bool augments = false) const;
|
|
||||||
int GetItemBaneDamageBody(bodyType against, bool augments = false) const;
|
|
||||||
int GetItemBaneDamageRace(uint16 against, bool augments = false) const;
|
|
||||||
int GetItemMagical(bool augments = false) const;
|
|
||||||
int GetItemHP(bool augments = false) const;
|
|
||||||
int GetItemMana(bool augments = false) const;
|
|
||||||
int GetItemEndur(bool augments = false) const;
|
|
||||||
int GetItemAttack(bool augments = false) const;
|
|
||||||
int GetItemStr(bool augments = false) const;
|
|
||||||
int GetItemSta(bool augments = false) const;
|
|
||||||
int GetItemDex(bool augments = false) const;
|
|
||||||
int GetItemAgi(bool augments = false) const;
|
|
||||||
int GetItemInt(bool augments = false) const;
|
|
||||||
int GetItemWis(bool augments = false) const;
|
|
||||||
int GetItemCha(bool augments = false) const;
|
|
||||||
int GetItemMR(bool augments = false) const;
|
|
||||||
int GetItemFR(bool augments = false) const;
|
|
||||||
int GetItemCR(bool augments = false) const;
|
|
||||||
int GetItemPR(bool augments = false) const;
|
|
||||||
int GetItemDR(bool augments = false) const;
|
|
||||||
int GetItemCorrup(bool augments = false) const;
|
|
||||||
int GetItemHeroicStr(bool augments = false) const;
|
|
||||||
int GetItemHeroicSta(bool augments = false) const;
|
|
||||||
int GetItemHeroicDex(bool augments = false) const;
|
|
||||||
int GetItemHeroicAgi(bool augments = false) const;
|
|
||||||
int GetItemHeroicInt(bool augments = false) const;
|
|
||||||
int GetItemHeroicWis(bool augments = false) const;
|
|
||||||
int GetItemHeroicCha(bool augments = false) const;
|
|
||||||
int GetItemHeroicMR(bool augments = false) const;
|
|
||||||
int GetItemHeroicFR(bool augments = false) const;
|
|
||||||
int GetItemHeroicCR(bool augments = false) const;
|
|
||||||
int GetItemHeroicPR(bool augments = false) const;
|
|
||||||
int GetItemHeroicDR(bool augments = false) const;
|
|
||||||
int GetItemHeroicCorrup(bool augments = false) const;
|
|
||||||
int GetItemHaste(bool augments = false) const;
|
|
||||||
|
|
||||||
protected:
|
// Get a total of a stat, including augs
|
||||||
//////////////////////////
|
// These functions should be used in place of other code manually totaling
|
||||||
// Protected Members
|
// to centralize where it is done to make future changes easier (ex. whenever powersources come around)
|
||||||
//////////////////////////
|
// and to minimize errors. CalcItemBonuses however doesn't use these in interest of performance
|
||||||
std::map<uint8, ItemInst*>::const_iterator _cbegin() { return m_contents.cbegin(); }
|
// by default these do not recurse into augs
|
||||||
std::map<uint8, ItemInst*>::const_iterator _cend() { return m_contents.cend(); }
|
int GetItemArmorClass(bool augments = false) const;
|
||||||
|
int GetItemElementalDamage(int &magic, int &fire, int &cold, int &poison, int &disease, int &chromatic, int &prismatic, int &physical, int &corruption, bool augments = false) const;
|
||||||
|
// These two differ in the fact that they're quick checks (they are checked BEFORE the one above
|
||||||
|
int GetItemElementalFlag(bool augments = false) const;
|
||||||
|
int GetItemElementalDamage(bool augments = false) const;
|
||||||
|
int GetItemRecommendedLevel(bool augments = false) const;
|
||||||
|
int GetItemRequiredLevel(bool augments = false) const;
|
||||||
|
int GetItemWeaponDamage(bool augments = false) const;
|
||||||
|
int GetItemBackstabDamage(bool augments = false) const;
|
||||||
|
// these two are just quick checks
|
||||||
|
int GetItemBaneDamageBody(bool augments = false) const;
|
||||||
|
int GetItemBaneDamageRace(bool augments = false) const;
|
||||||
|
int GetItemBaneDamageBody(bodyType against, bool augments = false) const;
|
||||||
|
int GetItemBaneDamageRace(uint16 against, bool augments = false) const;
|
||||||
|
int GetItemMagical(bool augments = false) const;
|
||||||
|
int GetItemHP(bool augments = false) const;
|
||||||
|
int GetItemMana(bool augments = false) const;
|
||||||
|
int GetItemEndur(bool augments = false) const;
|
||||||
|
int GetItemAttack(bool augments = false) const;
|
||||||
|
int GetItemStr(bool augments = false) const;
|
||||||
|
int GetItemSta(bool augments = false) const;
|
||||||
|
int GetItemDex(bool augments = false) const;
|
||||||
|
int GetItemAgi(bool augments = false) const;
|
||||||
|
int GetItemInt(bool augments = false) const;
|
||||||
|
int GetItemWis(bool augments = false) const;
|
||||||
|
int GetItemCha(bool augments = false) const;
|
||||||
|
int GetItemMR(bool augments = false) const;
|
||||||
|
int GetItemFR(bool augments = false) const;
|
||||||
|
int GetItemCR(bool augments = false) const;
|
||||||
|
int GetItemPR(bool augments = false) const;
|
||||||
|
int GetItemDR(bool augments = false) const;
|
||||||
|
int GetItemCorrup(bool augments = false) const;
|
||||||
|
int GetItemHeroicStr(bool augments = false) const;
|
||||||
|
int GetItemHeroicSta(bool augments = false) const;
|
||||||
|
int GetItemHeroicDex(bool augments = false) const;
|
||||||
|
int GetItemHeroicAgi(bool augments = false) const;
|
||||||
|
int GetItemHeroicInt(bool augments = false) const;
|
||||||
|
int GetItemHeroicWis(bool augments = false) const;
|
||||||
|
int GetItemHeroicCha(bool augments = false) const;
|
||||||
|
int GetItemHeroicMR(bool augments = false) const;
|
||||||
|
int GetItemHeroicFR(bool augments = false) const;
|
||||||
|
int GetItemHeroicCR(bool augments = false) const;
|
||||||
|
int GetItemHeroicPR(bool augments = false) const;
|
||||||
|
int GetItemHeroicDR(bool augments = false) const;
|
||||||
|
int GetItemHeroicCorrup(bool augments = false) const;
|
||||||
|
int GetItemHaste(bool augments = false) const;
|
||||||
|
|
||||||
friend class Inventory;
|
protected:
|
||||||
|
//////////////////////////
|
||||||
|
// Protected Members
|
||||||
|
//////////////////////////
|
||||||
|
std::map<uint8, ItemInstance*>::const_iterator _cbegin() { return m_contents.cbegin(); }
|
||||||
|
std::map<uint8, ItemInstance*>::const_iterator _cend() { return m_contents.cend(); }
|
||||||
|
|
||||||
|
friend class Inventory;
|
||||||
|
|
||||||
|
|
||||||
void _PutItem(uint8 index, ItemInst* inst) { m_contents[index] = inst; }
|
void _PutItem(uint8 index, ItemInstance* inst) { m_contents[index] = inst; }
|
||||||
|
|
||||||
ItemInstTypes m_use_type; // Usage type for item
|
ItemInstTypes m_use_type; // Usage type for item
|
||||||
const EQEmu::ItemBase* m_item; // Ptr to item data
|
const ItemData* m_item; // Ptr to item data
|
||||||
int16 m_charges; // # of charges for chargeable items
|
int16 m_charges; // # of charges for chargeable items
|
||||||
uint32 m_price; // Bazaar /trader price
|
uint32 m_price; // Bazaar /trader price
|
||||||
uint32 m_color;
|
uint32 m_color;
|
||||||
uint32 m_merchantslot;
|
uint32 m_merchantslot;
|
||||||
int16 m_currentslot;
|
int16 m_currentslot;
|
||||||
bool m_attuned;
|
bool m_attuned;
|
||||||
int32 m_merchantcount; //number avaliable on the merchant, -1=unlimited
|
int32 m_merchantcount; //number avaliable on the merchant, -1=unlimited
|
||||||
int32 m_SerialNumber; // Unique identifier for this instance of an item. Needed for Bazaar.
|
int32 m_SerialNumber; // Unique identifier for this instance of an item. Needed for Bazaar.
|
||||||
uint32 m_exp;
|
uint32 m_exp;
|
||||||
int8 m_evolveLvl;
|
int8 m_evolveLvl;
|
||||||
bool m_activated;
|
bool m_activated;
|
||||||
EQEmu::ItemBase* m_scaledItem;
|
ItemData* m_scaledItem;
|
||||||
EvolveInfo* m_evolveInfo;
|
EvolveInfo* m_evolveInfo;
|
||||||
bool m_scaling;
|
bool m_scaling;
|
||||||
uint32 m_ornamenticon;
|
uint32 m_ornamenticon;
|
||||||
uint32 m_ornamentidfile;
|
uint32 m_ornamentidfile;
|
||||||
uint32 m_ornament_hero_model;
|
uint32 m_ornament_hero_model;
|
||||||
uint32 m_recast_timestamp;
|
uint32 m_recast_timestamp;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Items inside of this item (augs or contents);
|
// Items inside of this item (augs or contents);
|
||||||
std::map<uint8, ItemInst*> m_contents; // Zero-based index: min=0, max=9
|
std::map<uint8, ItemInstance*> m_contents; // Zero-based index: min=0, max=9
|
||||||
std::map<std::string, std::string> m_custom_data;
|
std::map<std::string, std::string> m_custom_data;
|
||||||
std::map<std::string, Timer> m_timers;
|
std::map<std::string, Timer> m_timers;
|
||||||
};
|
};
|
||||||
|
}
|
||||||
|
|
||||||
class EvolveInfo {
|
class EvolveInfo {
|
||||||
public:
|
public:
|
||||||
friend class ItemInst;
|
friend class EQEmu::ItemInstance;
|
||||||
//temporary
|
//temporary
|
||||||
uint16 LvlKills[9];
|
uint16 LvlKills[9];
|
||||||
uint32 FirstItem;
|
uint32 FirstItem;
|
||||||
@ -541,4 +542,4 @@ public:
|
|||||||
~EvolveInfo();
|
~EvolveInfo();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*COMMON_ITEM_H*/
|
#endif /*COMMON_ITEM_INSTANCE_H*/
|
||||||
|
|||||||
@ -45,7 +45,7 @@ namespace RoF
|
|||||||
static OpcodeManager *opcodes = nullptr;
|
static OpcodeManager *opcodes = nullptr;
|
||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id, uint8 depth);
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||||
|
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline structs::InventorySlot_Struct ServerToRoFSlot(uint32 serverSlot);
|
static inline structs::InventorySlot_Struct ServerToRoFSlot(uint32 serverSlot);
|
||||||
@ -596,7 +596,7 @@ namespace RoF
|
|||||||
ob.write((const char*)&item_count, sizeof(uint32));
|
ob.write((const char*)&item_count, sizeof(uint32));
|
||||||
|
|
||||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||||
SerializeItem(ob, (const ItemInst*)eq->inst, eq->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos)
|
if (ob.tellp() == last_pos)
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
|
||||||
@ -1533,7 +1533,7 @@ namespace RoF
|
|||||||
|
|
||||||
ob.write((const char*)__emu_buffer, 4);
|
ob.write((const char*)__emu_buffer, 4);
|
||||||
|
|
||||||
SerializeItem(ob, (const ItemInst*)int_struct->inst, int_struct->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos) {
|
if (ob.tellp() == last_pos) {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
||||||
delete in;
|
delete in;
|
||||||
@ -5209,9 +5209,9 @@ namespace RoF
|
|||||||
return NextItemInstSerialNumber;
|
return NextItemInstSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth)
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = inst->GetUnscaledItem();
|
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||||
|
|
||||||
RoF::structs::ItemSerializationHeader hdr;
|
RoF::structs::ItemSerializationHeader hdr;
|
||||||
|
|
||||||
@ -5623,7 +5623,7 @@ namespace RoF
|
|||||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||||
|
|
||||||
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
||||||
ItemInst* sub = inst->GetItem(index);
|
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (!sub)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -45,7 +45,7 @@ namespace RoF2
|
|||||||
static OpcodeManager *opcodes = nullptr;
|
static OpcodeManager *opcodes = nullptr;
|
||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id, uint8 depth, ItemPacketType packet_type);
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth, ItemPacketType packet_type);
|
||||||
|
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline structs::InventorySlot_Struct ServerToRoF2Slot(uint32 serverSlot, ItemPacketType PacketType = ItemPacketInvalid);
|
static inline structs::InventorySlot_Struct ServerToRoF2Slot(uint32 serverSlot, ItemPacketType PacketType = ItemPacketInvalid);
|
||||||
@ -671,7 +671,7 @@ namespace RoF2
|
|||||||
ob.write((const char*)&item_count, sizeof(uint32));
|
ob.write((const char*)&item_count, sizeof(uint32));
|
||||||
|
|
||||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||||
SerializeItem(ob, (const ItemInst*)eq->inst, eq->slot_id, 0, ItemPacketCharInventory);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0, ItemPacketCharInventory);
|
||||||
if (ob.tellp() == last_pos)
|
if (ob.tellp() == last_pos)
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
|
||||||
@ -1609,7 +1609,7 @@ namespace RoF2
|
|||||||
|
|
||||||
ob.write((const char*)__emu_buffer, 4);
|
ob.write((const char*)__emu_buffer, 4);
|
||||||
|
|
||||||
SerializeItem(ob, (const ItemInst*)int_struct->inst, int_struct->slot_id, 0, old_item_pkt->PacketType);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0, old_item_pkt->PacketType);
|
||||||
if (ob.tellp() == last_pos) {
|
if (ob.tellp() == last_pos) {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
||||||
delete in;
|
delete in;
|
||||||
@ -5499,9 +5499,9 @@ namespace RoF2
|
|||||||
return NextItemInstSerialNumber;
|
return NextItemInstSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth, ItemPacketType packet_type)
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth, ItemPacketType packet_type)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = inst->GetUnscaledItem();
|
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||||
|
|
||||||
RoF2::structs::ItemSerializationHeader hdr;
|
RoF2::structs::ItemSerializationHeader hdr;
|
||||||
|
|
||||||
@ -5923,7 +5923,7 @@ namespace RoF2
|
|||||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||||
|
|
||||||
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
||||||
ItemInst* sub = inst->GetItem(index);
|
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (!sub)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -2423,7 +2423,7 @@ struct AdventureLeaderboard_Struct
|
|||||||
/*struct Item_Shop_Struct {
|
/*struct Item_Shop_Struct {
|
||||||
uint16 merchantid;
|
uint16 merchantid;
|
||||||
uint8 itemtype;
|
uint8 itemtype;
|
||||||
ItemBase item;
|
ItemData item;
|
||||||
uint8 iss_unknown001[6];
|
uint8 iss_unknown001[6];
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
|
|||||||
@ -2450,7 +2450,7 @@ struct AdventureLeaderboard_Struct
|
|||||||
/*struct Item_Shop_Struct {
|
/*struct Item_Shop_Struct {
|
||||||
uint16 merchantid;
|
uint16 merchantid;
|
||||||
uint8 itemtype;
|
uint8 itemtype;
|
||||||
ItemBase item;
|
ItemData item;
|
||||||
uint8 iss_unknown001[6];
|
uint8 iss_unknown001[6];
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ namespace SoD
|
|||||||
static OpcodeManager *opcodes = nullptr;
|
static OpcodeManager *opcodes = nullptr;
|
||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id, uint8 depth);
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||||
|
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline uint32 ServerToSoDSlot(uint32 ServerSlot);
|
static inline uint32 ServerToSoDSlot(uint32 ServerSlot);
|
||||||
@ -396,7 +396,7 @@ namespace SoD
|
|||||||
ob.write((const char*)&item_count, sizeof(uint32));
|
ob.write((const char*)&item_count, sizeof(uint32));
|
||||||
|
|
||||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||||
SerializeItem(ob, (const ItemInst*)eq->inst, eq->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos)
|
if (ob.tellp() == last_pos)
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
|
||||||
@ -1060,7 +1060,7 @@ namespace SoD
|
|||||||
|
|
||||||
ob.write((const char*)__emu_buffer, 4);
|
ob.write((const char*)__emu_buffer, 4);
|
||||||
|
|
||||||
SerializeItem(ob, (const ItemInst*)int_struct->inst, int_struct->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos) {
|
if (ob.tellp() == last_pos) {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
||||||
delete in;
|
delete in;
|
||||||
@ -3553,9 +3553,9 @@ namespace SoD
|
|||||||
return NextItemInstSerialNumber;
|
return NextItemInstSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth)
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = inst->GetUnscaledItem();
|
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||||
|
|
||||||
SoD::structs::ItemSerializationHeader hdr;
|
SoD::structs::ItemSerializationHeader hdr;
|
||||||
|
|
||||||
@ -3870,7 +3870,7 @@ namespace SoD
|
|||||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||||
|
|
||||||
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
||||||
ItemInst* sub = inst->GetItem(index);
|
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (!sub)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -1970,7 +1970,7 @@ struct AdventureLeaderboard_Struct
|
|||||||
/*struct Item_Shop_Struct {
|
/*struct Item_Shop_Struct {
|
||||||
uint16 merchantid;
|
uint16 merchantid;
|
||||||
uint8 itemtype;
|
uint8 itemtype;
|
||||||
ItemBase item;
|
ItemData item;
|
||||||
uint8 iss_unknown001[6];
|
uint8 iss_unknown001[6];
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ namespace SoF
|
|||||||
static OpcodeManager *opcodes = nullptr;
|
static OpcodeManager *opcodes = nullptr;
|
||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id, uint8 depth);
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||||
|
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline uint32 ServerToSoFSlot(uint32 serverSlot);
|
static inline uint32 ServerToSoFSlot(uint32 serverSlot);
|
||||||
@ -378,7 +378,7 @@ namespace SoF
|
|||||||
ob.write((const char*)&item_count, sizeof(uint32));
|
ob.write((const char*)&item_count, sizeof(uint32));
|
||||||
|
|
||||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||||
SerializeItem(ob, (const ItemInst*)eq->inst, eq->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos)
|
if (ob.tellp() == last_pos)
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
|
||||||
@ -857,7 +857,7 @@ namespace SoF
|
|||||||
|
|
||||||
ob.write((const char*)__emu_buffer, 4);
|
ob.write((const char*)__emu_buffer, 4);
|
||||||
|
|
||||||
SerializeItem(ob, (const ItemInst*)int_struct->inst, int_struct->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos) {
|
if (ob.tellp() == last_pos) {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
||||||
delete in;
|
delete in;
|
||||||
@ -2923,9 +2923,9 @@ namespace SoF
|
|||||||
return NextItemInstSerialNumber;
|
return NextItemInstSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth)
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = inst->GetUnscaledItem();
|
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||||
|
|
||||||
SoF::structs::ItemSerializationHeader hdr;
|
SoF::structs::ItemSerializationHeader hdr;
|
||||||
|
|
||||||
@ -3238,7 +3238,7 @@ namespace SoF
|
|||||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||||
|
|
||||||
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
||||||
ItemInst* sub = inst->GetItem(index);
|
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (!sub)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,7 @@ namespace Titanium
|
|||||||
static OpcodeManager *opcodes = nullptr;
|
static OpcodeManager *opcodes = nullptr;
|
||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth);
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth);
|
||||||
|
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline int16 ServerToTitaniumSlot(uint32 serverSlot);
|
static inline int16 ServerToTitaniumSlot(uint32 serverSlot);
|
||||||
@ -329,7 +329,7 @@ namespace Titanium
|
|||||||
EQEmu::OutBuffer::pos_type last_pos = ob.tellp();
|
EQEmu::OutBuffer::pos_type last_pos = ob.tellp();
|
||||||
|
|
||||||
for (int r = 0; r < itemcount; r++, eq++) {
|
for (int r = 0; r < itemcount; r++, eq++) {
|
||||||
SerializeItem(ob, (const ItemInst*)eq->inst, eq->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos)
|
if (ob.tellp() == last_pos)
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
|
||||||
@ -815,7 +815,7 @@ namespace Titanium
|
|||||||
|
|
||||||
ob.write((const char*)__emu_buffer, 4);
|
ob.write((const char*)__emu_buffer, 4);
|
||||||
|
|
||||||
SerializeItem(ob, (const ItemInst*)int_struct->inst, int_struct->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos) {
|
if (ob.tellp() == last_pos) {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
||||||
delete in;
|
delete in;
|
||||||
@ -2216,10 +2216,10 @@ namespace Titanium
|
|||||||
}
|
}
|
||||||
|
|
||||||
// file scope helper methods
|
// file scope helper methods
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth)
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||||
{
|
{
|
||||||
const char* protection = "\\\\\\\\\\";
|
const char* protection = "\\\\\\\\\\";
|
||||||
const EQEmu::ItemBase* item = inst->GetUnscaledItem();
|
const EQEmu::ItemData* item = inst->GetUnscaledItem();
|
||||||
|
|
||||||
ob << StringFormat("%.*s%s", (depth ? (depth - 1) : 0), protection, (depth ? "\"" : "")); // For leading quotes (and protection) if a subitem;
|
ob << StringFormat("%.*s%s", (depth ? (depth - 1) : 0), protection, (depth ? "\"" : "")); // For leading quotes (and protection) if a subitem;
|
||||||
|
|
||||||
@ -2440,7 +2440,7 @@ namespace Titanium
|
|||||||
for (int index = SUB_INDEX_BEGIN; index < invbag::ItemBagSize; ++index) {
|
for (int index = SUB_INDEX_BEGIN; index < invbag::ItemBagSize; ++index) {
|
||||||
ob << '|';
|
ob << '|';
|
||||||
|
|
||||||
ItemInst* sub = inst->GetItem(index);
|
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (!sub)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ namespace UF
|
|||||||
static OpcodeManager *opcodes = nullptr;
|
static OpcodeManager *opcodes = nullptr;
|
||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id, uint8 depth);
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||||
|
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline uint32 ServerToUFSlot(uint32 serverSlot);
|
static inline uint32 ServerToUFSlot(uint32 serverSlot);
|
||||||
@ -541,7 +541,7 @@ namespace UF
|
|||||||
ob.write((const char*)&item_count, sizeof(uint32));
|
ob.write((const char*)&item_count, sizeof(uint32));
|
||||||
|
|
||||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||||
SerializeItem(ob, (const ItemInst*)eq->inst, eq->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos)
|
if (ob.tellp() == last_pos)
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
|
||||||
@ -1293,7 +1293,7 @@ namespace UF
|
|||||||
|
|
||||||
ob.write((const char*)__emu_buffer, 4);
|
ob.write((const char*)__emu_buffer, 4);
|
||||||
|
|
||||||
SerializeItem(ob, (const ItemInst*)int_struct->inst, int_struct->slot_id, 0);
|
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||||
if (ob.tellp() == last_pos) {
|
if (ob.tellp() == last_pos) {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d.", int_struct->slot_id);
|
||||||
delete in;
|
delete in;
|
||||||
@ -3847,9 +3847,9 @@ namespace UF
|
|||||||
return NextItemInstSerialNumber;
|
return NextItemInstSerialNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerializeItem(EQEmu::OutBuffer& ob, const ItemInst *inst, int16 slot_id_in, uint8 depth)
|
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = inst->GetUnscaledItem();
|
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||||
|
|
||||||
UF::structs::ItemSerializationHeader hdr;
|
UF::structs::ItemSerializationHeader hdr;
|
||||||
|
|
||||||
@ -3893,7 +3893,7 @@ namespace UF
|
|||||||
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
||||||
uint16 ornaIcon = 0;
|
uint16 ornaIcon = 0;
|
||||||
if (inst->GetOrnamentationAug(ornamentationAugtype)) {
|
if (inst->GetOrnamentationAug(ornamentationAugtype)) {
|
||||||
const EQEmu::ItemBase *aug_weap = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
const EQEmu::ItemData *aug_weap = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
||||||
ornaIcon = aug_weap->Icon;
|
ornaIcon = aug_weap->Icon;
|
||||||
|
|
||||||
ob.write(aug_weap->IDFile, strlen(aug_weap->IDFile));
|
ob.write(aug_weap->IDFile, strlen(aug_weap->IDFile));
|
||||||
@ -4225,7 +4225,7 @@ namespace UF
|
|||||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||||
|
|
||||||
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
for (uint32 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; ++index) {
|
||||||
ItemInst* sub = inst->GetItem(index);
|
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||||
if (!sub)
|
if (!sub)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@ -2011,7 +2011,7 @@ struct AdventureLeaderboard_Struct
|
|||||||
/*struct Item_Shop_Struct {
|
/*struct Item_Shop_Struct {
|
||||||
uint16 merchantid;
|
uint16 merchantid;
|
||||||
uint8 itemtype;
|
uint8 itemtype;
|
||||||
ItemBase item;
|
ItemData item;
|
||||||
uint8 iss_unknown001[6];
|
uint8 iss_unknown001[6];
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
|
|||||||
@ -147,7 +147,7 @@ void EQEmu::SayLinkEngine::generate_body()
|
|||||||
|
|
||||||
memset(&m_LinkBodyStruct, 0, sizeof(SayLinkBody_Struct));
|
memset(&m_LinkBodyStruct, 0, sizeof(SayLinkBody_Struct));
|
||||||
|
|
||||||
const EQEmu::ItemBase* item_data = nullptr;
|
const EQEmu::ItemData* item_data = nullptr;
|
||||||
|
|
||||||
switch (m_LinkType) {
|
switch (m_LinkType) {
|
||||||
case saylink::SayLinkBlank:
|
case saylink::SayLinkBlank:
|
||||||
@ -250,7 +250,7 @@ void EQEmu::SayLinkEngine::generate_text()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item_data = nullptr;
|
const EQEmu::ItemData* item_data = nullptr;
|
||||||
|
|
||||||
switch (m_LinkType) {
|
switch (m_LinkType) {
|
||||||
case saylink::SayLinkBlank:
|
case saylink::SayLinkBlank:
|
||||||
|
|||||||
@ -26,11 +26,11 @@
|
|||||||
|
|
||||||
|
|
||||||
struct ServerLootItem_Struct;
|
struct ServerLootItem_Struct;
|
||||||
class ItemInst;
|
|
||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
|
class ItemInstance;
|
||||||
struct SayLinkBody_Struct;
|
struct SayLinkBody_Struct;
|
||||||
|
|
||||||
namespace saylink {
|
namespace saylink {
|
||||||
@ -67,9 +67,9 @@ namespace EQEmu
|
|||||||
SayLinkEngine();
|
SayLinkEngine();
|
||||||
|
|
||||||
void SetLinkType(saylink::SayLinkType link_type) { m_LinkType = link_type; }
|
void SetLinkType(saylink::SayLinkType link_type) { m_LinkType = link_type; }
|
||||||
void SetItemData(const EQEmu::ItemBase* item_data) { m_ItemData = item_data; }
|
void SetItemData(const EQEmu::ItemData* item_data) { m_ItemData = item_data; }
|
||||||
void SetLootData(const ServerLootItem_Struct* loot_data) { m_LootData = loot_data; }
|
void SetLootData(const ServerLootItem_Struct* loot_data) { m_LootData = loot_data; }
|
||||||
void SetItemInst(const ItemInst* item_inst) { m_ItemInst = item_inst; }
|
void SetItemInst(const ItemInstance* item_inst) { m_ItemInst = item_inst; }
|
||||||
|
|
||||||
// mainly for saylinks..but, not limited to
|
// mainly for saylinks..but, not limited to
|
||||||
void SetProxyUnknown1(uint8 proxy_unknown_1) { m_Proxy_unknown_1 = proxy_unknown_1; }
|
void SetProxyUnknown1(uint8 proxy_unknown_1) { m_Proxy_unknown_1 = proxy_unknown_1; }
|
||||||
@ -103,9 +103,9 @@ namespace EQEmu
|
|||||||
void generate_text();
|
void generate_text();
|
||||||
|
|
||||||
int m_LinkType;
|
int m_LinkType;
|
||||||
const ItemBase* m_ItemData;
|
const ItemData* m_ItemData;
|
||||||
const ServerLootItem_Struct* m_LootData;
|
const ServerLootItem_Struct* m_LootData;
|
||||||
const ItemInst* m_ItemInst;
|
const ItemInstance* m_ItemInst;
|
||||||
|
|
||||||
uint8 m_Proxy_unknown_1;
|
uint8 m_Proxy_unknown_1;
|
||||||
uint32 m_ProxyItemID;
|
uint32 m_ProxyItemID;
|
||||||
|
|||||||
@ -99,7 +99,7 @@ uint32 SharedDatabase::GetTotalTimeEntitledOnAccount(uint32 AccountID) {
|
|||||||
return EntitledTime;
|
return EntitledTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SharedDatabase::SaveCursor(uint32 char_id, std::list<ItemInst*>::const_iterator &start, std::list<ItemInst*>::const_iterator &end)
|
bool SharedDatabase::SaveCursor(uint32 char_id, std::list<EQEmu::ItemInstance*>::const_iterator &start, std::list<EQEmu::ItemInstance*>::const_iterator &end)
|
||||||
{
|
{
|
||||||
// Delete cursor items
|
// Delete cursor items
|
||||||
std::string query = StringFormat("DELETE FROM inventory WHERE charid = %i "
|
std::string query = StringFormat("DELETE FROM inventory WHERE charid = %i "
|
||||||
@ -116,7 +116,7 @@ bool SharedDatabase::SaveCursor(uint32 char_id, std::list<ItemInst*>::const_iter
|
|||||||
int i = 8000;
|
int i = 8000;
|
||||||
for(auto it = start; it != end; ++it, i++) {
|
for(auto it = start; it != end; ++it, i++) {
|
||||||
if (i > 8999) { break; } // shouldn't be anything in the queue that indexes this high
|
if (i > 8999) { break; } // shouldn't be anything in the queue that indexes this high
|
||||||
ItemInst *inst = *it;
|
EQEmu::ItemInstance *inst = *it;
|
||||||
int16 use_slot = (i == 8000) ? EQEmu::legacy::SlotCursor : i;
|
int16 use_slot = (i == 8000) ? EQEmu::legacy::SlotCursor : i;
|
||||||
if (!SaveInventory(char_id, inst, use_slot)) {
|
if (!SaveInventory(char_id, inst, use_slot)) {
|
||||||
return false;
|
return false;
|
||||||
@ -126,7 +126,7 @@ bool SharedDatabase::SaveCursor(uint32 char_id, std::list<ItemInst*>::const_iter
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SharedDatabase::VerifyInventory(uint32 account_id, int16 slot_id, const ItemInst* inst)
|
bool SharedDatabase::VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance* inst)
|
||||||
{
|
{
|
||||||
// Delete cursor items
|
// Delete cursor items
|
||||||
std::string query = StringFormat("SELECT itemid, charges FROM sharedbank "
|
std::string query = StringFormat("SELECT itemid, charges FROM sharedbank "
|
||||||
@ -159,7 +159,7 @@ bool SharedDatabase::VerifyInventory(uint32 account_id, int16 slot_id, const Ite
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SharedDatabase::SaveInventory(uint32 char_id, const ItemInst* inst, int16 slot_id) {
|
bool SharedDatabase::SaveInventory(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id) {
|
||||||
|
|
||||||
//never save tribute slots:
|
//never save tribute slots:
|
||||||
if (slot_id >= EQEmu::legacy::TRIBUTE_BEGIN && slot_id <= EQEmu::legacy::TRIBUTE_END)
|
if (slot_id >= EQEmu::legacy::TRIBUTE_BEGIN && slot_id <= EQEmu::legacy::TRIBUTE_END)
|
||||||
@ -189,13 +189,13 @@ bool SharedDatabase::SaveInventory(uint32 char_id, const ItemInst* inst, int16 s
|
|||||||
return UpdateInventorySlot(char_id, inst, slot_id);
|
return UpdateInventorySlot(char_id, inst, slot_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const ItemInst* inst, int16 slot_id) {
|
bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id) {
|
||||||
// need to check 'inst' argument for valid pointer
|
// need to check 'inst' argument for valid pointer
|
||||||
|
|
||||||
uint32 augslot[EQEmu::legacy::ITEM_COMMON_SIZE] = { 0, 0, 0, 0, 0, 0 };
|
uint32 augslot[EQEmu::legacy::ITEM_COMMON_SIZE] = { 0, 0, 0, 0, 0, 0 };
|
||||||
if (inst->IsClassCommon()) {
|
if (inst->IsClassCommon()) {
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
||||||
ItemInst *auginst = inst->GetItem(i);
|
EQEmu::ItemInstance *auginst = inst->GetItem(i);
|
||||||
augslot[i] = (auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0;
|
augslot[i] = (auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -225,7 +225,7 @@ bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const ItemInst* inst, i
|
|||||||
// Limiting to bag slot count will get rid of 'hidden' duplicated items and 'Invalid Slot ID'
|
// Limiting to bag slot count will get rid of 'hidden' duplicated items and 'Invalid Slot ID'
|
||||||
// messages through attrition (and the modded code in SaveInventory)
|
// messages through attrition (and the modded code in SaveInventory)
|
||||||
for (uint8 idx = SUB_INDEX_BEGIN; idx < inst->GetItem()->BagSlots && idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
for (uint8 idx = SUB_INDEX_BEGIN; idx < inst->GetItem()->BagSlots && idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
||||||
const ItemInst* baginst = inst->GetItem(idx);
|
const EQEmu::ItemInstance* baginst = inst->GetItem(idx);
|
||||||
SaveInventory(char_id, baginst, Inventory::CalcSlotId(slot_id, idx));
|
SaveInventory(char_id, baginst, Inventory::CalcSlotId(slot_id, idx));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,13 +236,13 @@ bool SharedDatabase::UpdateInventorySlot(uint32 char_id, const ItemInst* inst, i
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SharedDatabase::UpdateSharedBankSlot(uint32 char_id, const ItemInst* inst, int16 slot_id) {
|
bool SharedDatabase::UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id) {
|
||||||
// need to check 'inst' argument for valid pointer
|
// need to check 'inst' argument for valid pointer
|
||||||
|
|
||||||
uint32 augslot[EQEmu::legacy::ITEM_COMMON_SIZE] = { 0, 0, 0, 0, 0, 0 };
|
uint32 augslot[EQEmu::legacy::ITEM_COMMON_SIZE] = { 0, 0, 0, 0, 0, 0 };
|
||||||
if (inst->IsClassCommon()) {
|
if (inst->IsClassCommon()) {
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
||||||
ItemInst *auginst = inst->GetItem(i);
|
EQEmu::ItemInstance *auginst = inst->GetItem(i);
|
||||||
augslot[i] = (auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0;
|
augslot[i] = (auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +271,7 @@ bool SharedDatabase::UpdateSharedBankSlot(uint32 char_id, const ItemInst* inst,
|
|||||||
// Limiting to bag slot count will get rid of 'hidden' duplicated items and 'Invalid Slot ID'
|
// Limiting to bag slot count will get rid of 'hidden' duplicated items and 'Invalid Slot ID'
|
||||||
// messages through attrition (and the modded code in SaveInventory)
|
// messages through attrition (and the modded code in SaveInventory)
|
||||||
for (uint8 idx = SUB_INDEX_BEGIN; idx < inst->GetItem()->BagSlots && idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
for (uint8 idx = SUB_INDEX_BEGIN; idx < inst->GetItem()->BagSlots && idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
||||||
const ItemInst* baginst = inst->GetItem(idx);
|
const EQEmu::ItemInstance* baginst = inst->GetItem(idx);
|
||||||
SaveInventory(char_id, baginst, Inventory::CalcSlotId(slot_id, idx));
|
SaveInventory(char_id, baginst, Inventory::CalcSlotId(slot_id, idx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -364,7 +364,7 @@ bool SharedDatabase::SetSharedPlatinum(uint32 account_id, int32 amount_to_add) {
|
|||||||
|
|
||||||
bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin_level) {
|
bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin_level) {
|
||||||
|
|
||||||
const EQEmu::ItemBase* myitem;
|
const EQEmu::ItemData* myitem;
|
||||||
|
|
||||||
std::string query = StringFormat("SELECT itemid, item_charges, slot FROM starting_items "
|
std::string query = StringFormat("SELECT itemid, item_charges, slot FROM starting_items "
|
||||||
"WHERE (race = %i or race = 0) AND (class = %i or class = 0) AND "
|
"WHERE (race = %i or race = 0) AND (class = %i or class = 0) AND "
|
||||||
@ -385,7 +385,7 @@ bool SharedDatabase::SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv,
|
|||||||
if(!myitem)
|
if(!myitem)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ItemInst* myinst = CreateBaseItem(myitem, charges);
|
EQEmu::ItemInstance* myinst = CreateBaseItem(myitem, charges);
|
||||||
|
|
||||||
if(slot < 0)
|
if(slot < 0)
|
||||||
slot = inv->FindFreeSlot(0, 0);
|
slot = inv->FindFreeSlot(0, 0);
|
||||||
@ -436,7 +436,7 @@ bool SharedDatabase::GetSharedBank(uint32 id, Inventory *inv, bool is_charid)
|
|||||||
aug[4] = (uint32)atoi(row[7]);
|
aug[4] = (uint32)atoi(row[7]);
|
||||||
aug[5] = (uint32)atoi(row[8]);
|
aug[5] = (uint32)atoi(row[8]);
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = GetItem(item_id);
|
const EQEmu::ItemData *item = GetItem(item_id);
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
Log.Out(Logs::General, Logs::Error,
|
Log.Out(Logs::General, Logs::Error,
|
||||||
@ -447,7 +447,7 @@ bool SharedDatabase::GetSharedBank(uint32 id, Inventory *inv, bool is_charid)
|
|||||||
|
|
||||||
int16 put_slot_id = INVALID_INDEX;
|
int16 put_slot_id = INVALID_INDEX;
|
||||||
|
|
||||||
ItemInst *inst = CreateBaseItem(item, charges);
|
EQEmu::ItemInstance *inst = CreateBaseItem(item, charges);
|
||||||
if (inst && item->IsClassCommon()) {
|
if (inst && item->IsClassCommon()) {
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
||||||
if (aug[i])
|
if (aug[i])
|
||||||
@ -539,7 +539,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, Inventory *inv)
|
|||||||
uint32 ornament_idfile = (uint32)atoul(row[13]);
|
uint32 ornament_idfile = (uint32)atoul(row[13]);
|
||||||
uint32 ornament_hero_model = (uint32)atoul(row[14]);
|
uint32 ornament_hero_model = (uint32)atoul(row[14]);
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = GetItem(item_id);
|
const EQEmu::ItemData *item = GetItem(item_id);
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
Log.Out(Logs::General, Logs::Error,
|
Log.Out(Logs::General, Logs::Error,
|
||||||
@ -550,7 +550,7 @@ bool SharedDatabase::GetInventory(uint32 char_id, Inventory *inv)
|
|||||||
|
|
||||||
int16 put_slot_id = INVALID_INDEX;
|
int16 put_slot_id = INVALID_INDEX;
|
||||||
|
|
||||||
ItemInst *inst = CreateBaseItem(item, charges);
|
EQEmu::ItemInstance *inst = CreateBaseItem(item, charges);
|
||||||
|
|
||||||
if (inst == nullptr)
|
if (inst == nullptr)
|
||||||
continue;
|
continue;
|
||||||
@ -679,12 +679,12 @@ bool SharedDatabase::GetInventory(uint32 account_id, char *name, Inventory *inv)
|
|||||||
uint32 ornament_idfile = (uint32)atoul(row[13]);
|
uint32 ornament_idfile = (uint32)atoul(row[13]);
|
||||||
uint32 ornament_hero_model = (uint32)atoul(row[14]);
|
uint32 ornament_hero_model = (uint32)atoul(row[14]);
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = GetItem(item_id);
|
const EQEmu::ItemData *item = GetItem(item_id);
|
||||||
int16 put_slot_id = INVALID_INDEX;
|
int16 put_slot_id = INVALID_INDEX;
|
||||||
if (!item)
|
if (!item)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ItemInst *inst = CreateBaseItem(item, charges);
|
EQEmu::ItemInstance *inst = CreateBaseItem(item, charges);
|
||||||
|
|
||||||
if (inst == nullptr)
|
if (inst == nullptr)
|
||||||
continue;
|
continue;
|
||||||
@ -816,7 +816,7 @@ bool SharedDatabase::LoadItems(const std::string &prefix) {
|
|||||||
mutex.Lock();
|
mutex.Lock();
|
||||||
std::string file_name = Config->SharedMemDir + prefix + std::string("items");
|
std::string file_name = Config->SharedMemDir + prefix + std::string("items");
|
||||||
items_mmf = std::unique_ptr<EQEmu::MemoryMappedFile>(new EQEmu::MemoryMappedFile(file_name));
|
items_mmf = std::unique_ptr<EQEmu::MemoryMappedFile>(new EQEmu::MemoryMappedFile(file_name));
|
||||||
items_hash = std::unique_ptr<EQEmu::FixedMemoryHashSet<EQEmu::ItemBase>>(new EQEmu::FixedMemoryHashSet<EQEmu::ItemBase>(reinterpret_cast<uint8*>(items_mmf->Get()), items_mmf->Size()));
|
items_hash = std::unique_ptr<EQEmu::FixedMemoryHashSet<EQEmu::ItemData>>(new EQEmu::FixedMemoryHashSet<EQEmu::ItemData>(reinterpret_cast<uint8*>(items_mmf->Get()), items_mmf->Size()));
|
||||||
mutex.Unlock();
|
mutex.Unlock();
|
||||||
} catch(std::exception& ex) {
|
} catch(std::exception& ex) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Error Loading Items: %s", ex.what());
|
Log.Out(Logs::General, Logs::Error, "Error Loading Items: %s", ex.what());
|
||||||
@ -828,7 +828,7 @@ bool SharedDatabase::LoadItems(const std::string &prefix) {
|
|||||||
|
|
||||||
void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id)
|
void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id)
|
||||||
{
|
{
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(reinterpret_cast<uint8 *>(data), size, items, max_item_id);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(reinterpret_cast<uint8 *>(data), size, items, max_item_id);
|
||||||
|
|
||||||
std::string ndbuffer;
|
std::string ndbuffer;
|
||||||
bool disableNoRent = false;
|
bool disableNoRent = false;
|
||||||
@ -856,7 +856,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
|
|
||||||
const std::string query = "SELECT source,"
|
const std::string query = "SELECT source,"
|
||||||
#define F(x) "`"#x"`,"
|
#define F(x) "`"#x"`,"
|
||||||
@ -869,7 +869,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
memset(&item, 0, sizeof(EQEmu::ItemBase));
|
memset(&item, 0, sizeof(EQEmu::ItemData));
|
||||||
|
|
||||||
item.ItemClass = (uint8)atoi(row[ItemField::itemclass]);
|
item.ItemClass = (uint8)atoi(row[ItemField::itemclass]);
|
||||||
strcpy(item.Name, row[ItemField::name]);
|
strcpy(item.Name, row[ItemField::name]);
|
||||||
@ -1086,7 +1086,7 @@ void SharedDatabase::LoadItems(void *data, uint32 size, int32 items, uint32 max_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* SharedDatabase::GetItem(uint32 id) {
|
const EQEmu::ItemData* SharedDatabase::GetItem(uint32 id) {
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -1105,7 +1105,7 @@ const EQEmu::ItemBase* SharedDatabase::GetItem(uint32 id) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* SharedDatabase::IterateItems(uint32* id) {
|
const EQEmu::ItemData* SharedDatabase::IterateItems(uint32* id) {
|
||||||
if(!items_hash || !id) {
|
if(!items_hash || !id) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -1250,18 +1250,18 @@ bool SharedDatabase::LoadNPCFactionLists(const std::string &prefix) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create appropriate ItemInst class
|
// Create appropriate EQEmu::ItemInstance class
|
||||||
ItemInst* SharedDatabase::CreateItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned)
|
EQEmu::ItemInstance* SharedDatabase::CreateItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
|
|
||||||
item = GetItem(item_id);
|
item = GetItem(item_id);
|
||||||
if (item) {
|
if (item) {
|
||||||
inst = CreateBaseItem(item, charges);
|
inst = CreateBaseItem(item, charges);
|
||||||
|
|
||||||
if (inst == nullptr) {
|
if (inst == nullptr) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Error: valid item data returned a null reference for ItemInst creation in SharedDatabase::CreateItem()");
|
Log.Out(Logs::General, Logs::Error, "Error: valid item data returned a null reference for EQEmu::ItemInstance creation in SharedDatabase::CreateItem()");
|
||||||
Log.Out(Logs::General, Logs::Error, "Item Data = ID: %u, Name: %s, Charges: %i", item->ID, item->Name, charges);
|
Log.Out(Logs::General, Logs::Error, "Item Data = ID: %u, Name: %s, Charges: %i", item->ID, item->Name, charges);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -1279,15 +1279,15 @@ ItemInst* SharedDatabase::CreateItem(uint32 item_id, int16 charges, uint32 aug1,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Create appropriate ItemInst class
|
// Create appropriate EQEmu::ItemInstance class
|
||||||
ItemInst* SharedDatabase::CreateItem(const EQEmu::ItemBase* item, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned)
|
EQEmu::ItemInstance* SharedDatabase::CreateItem(const EQEmu::ItemData* item, int16 charges, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint32 aug6, uint8 attuned)
|
||||||
{
|
{
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
if (item) {
|
if (item) {
|
||||||
inst = CreateBaseItem(item, charges);
|
inst = CreateBaseItem(item, charges);
|
||||||
|
|
||||||
if (inst == nullptr) {
|
if (inst == nullptr) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Error: valid item data returned a null reference for ItemInst creation in SharedDatabase::CreateItem()");
|
Log.Out(Logs::General, Logs::Error, "Error: valid item data returned a null reference for EQEmu::ItemInstance creation in SharedDatabase::CreateItem()");
|
||||||
Log.Out(Logs::General, Logs::Error, "Item Data = ID: %u, Name: %s, Charges: %i", item->ID, item->Name, charges);
|
Log.Out(Logs::General, Logs::Error, "Item Data = ID: %u, Name: %s, Charges: %i", item->ID, item->Name, charges);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -1304,8 +1304,8 @@ ItemInst* SharedDatabase::CreateItem(const EQEmu::ItemBase* item, int16 charges,
|
|||||||
return inst;
|
return inst;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* SharedDatabase::CreateBaseItem(const EQEmu::ItemBase* item, int16 charges) {
|
EQEmu::ItemInstance* SharedDatabase::CreateBaseItem(const EQEmu::ItemData* item, int16 charges) {
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
if (item) {
|
if (item) {
|
||||||
// if maxcharges is -1 that means it is an unlimited use item.
|
// if maxcharges is -1 that means it is an unlimited use item.
|
||||||
// set it to 1 charge so that it is usable on creation
|
// set it to 1 charge so that it is usable on creation
|
||||||
@ -1315,10 +1315,10 @@ ItemInst* SharedDatabase::CreateBaseItem(const EQEmu::ItemBase* item, int16 char
|
|||||||
if(charges <= 0 && item->Stackable)
|
if(charges <= 0 && item->Stackable)
|
||||||
charges = 1;
|
charges = 1;
|
||||||
|
|
||||||
inst = new ItemInst(item, charges);
|
inst = new EQEmu::ItemInstance(item, charges);
|
||||||
|
|
||||||
if (inst == nullptr) {
|
if (inst == nullptr) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Error: valid item data returned a null reference for ItemInst creation in SharedDatabase::CreateBaseItem()");
|
Log.Out(Logs::General, Logs::Error, "Error: valid item data returned a null reference for EQEmu::ItemInstance creation in SharedDatabase::CreateBaseItem()");
|
||||||
Log.Out(Logs::General, Logs::Error, "Item Data = ID: %u, Name: %s, Charges: %i", item->ID, item->Name, charges);
|
Log.Out(Logs::General, Logs::Error, "Item Data = ID: %u, Name: %s, Charges: %i", item->ID, item->Name, charges);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,7 +34,6 @@
|
|||||||
|
|
||||||
class EvolveInfo;
|
class EvolveInfo;
|
||||||
class Inventory;
|
class Inventory;
|
||||||
class ItemInst;
|
|
||||||
struct BaseDataStruct;
|
struct BaseDataStruct;
|
||||||
struct InspectMessage_Struct;
|
struct InspectMessage_Struct;
|
||||||
struct PlayerProfile_Struct;
|
struct PlayerProfile_Struct;
|
||||||
@ -45,7 +44,8 @@ struct LootDrop_Struct;
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
|
class ItemInstance;
|
||||||
class MemoryMappedFile;
|
class MemoryMappedFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,13 +76,13 @@ class SharedDatabase : public Database
|
|||||||
/*
|
/*
|
||||||
Character Inventory
|
Character Inventory
|
||||||
*/
|
*/
|
||||||
bool SaveCursor(uint32 char_id, std::list<ItemInst*>::const_iterator &start, std::list<ItemInst*>::const_iterator &end);
|
bool SaveCursor(uint32 char_id, std::list<EQEmu::ItemInstance*>::const_iterator &start, std::list<EQEmu::ItemInstance*>::const_iterator &end);
|
||||||
bool SaveInventory(uint32 char_id, const ItemInst* inst, int16 slot_id);
|
bool SaveInventory(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id);
|
||||||
bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id);
|
bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id);
|
||||||
bool DeleteInventorySlot(uint32 char_id, int16 slot_id);
|
bool DeleteInventorySlot(uint32 char_id, int16 slot_id);
|
||||||
bool UpdateInventorySlot(uint32 char_id, const ItemInst* inst, int16 slot_id);
|
bool UpdateInventorySlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id);
|
||||||
bool UpdateSharedBankSlot(uint32 char_id, const ItemInst* inst, int16 slot_id);
|
bool UpdateSharedBankSlot(uint32 char_id, const EQEmu::ItemInstance* inst, int16 slot_id);
|
||||||
bool VerifyInventory(uint32 account_id, int16 slot_id, const ItemInst* inst);
|
bool VerifyInventory(uint32 account_id, int16 slot_id, const EQEmu::ItemInstance* inst);
|
||||||
bool GetSharedBank(uint32 id, Inventory* inv, bool is_charid);
|
bool GetSharedBank(uint32 id, Inventory* inv, bool is_charid);
|
||||||
int32 GetSharedPlatinum(uint32 account_id);
|
int32 GetSharedPlatinum(uint32 account_id);
|
||||||
bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add);
|
bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add);
|
||||||
@ -99,9 +99,9 @@ class SharedDatabase : public Database
|
|||||||
/*
|
/*
|
||||||
Item Methods
|
Item Methods
|
||||||
*/
|
*/
|
||||||
ItemInst* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
|
EQEmu::ItemInstance* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
|
||||||
ItemInst* CreateItem(const EQEmu::ItemBase* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
|
EQEmu::ItemInstance* CreateItem(const EQEmu::ItemData* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
|
||||||
ItemInst* CreateBaseItem(const EQEmu::ItemBase* item, int16 charges = 0);
|
EQEmu::ItemInstance* CreateBaseItem(const EQEmu::ItemData* item, int16 charges = 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Shared Memory crap
|
Shared Memory crap
|
||||||
@ -111,8 +111,8 @@ class SharedDatabase : public Database
|
|||||||
void GetItemsCount(int32 &item_count, uint32 &max_id);
|
void GetItemsCount(int32 &item_count, uint32 &max_id);
|
||||||
void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id);
|
void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id);
|
||||||
bool LoadItems(const std::string &prefix);
|
bool LoadItems(const std::string &prefix);
|
||||||
const EQEmu::ItemBase* IterateItems(uint32* id);
|
const EQEmu::ItemData* IterateItems(uint32* id);
|
||||||
const EQEmu::ItemBase* GetItem(uint32 id);
|
const EQEmu::ItemData* GetItem(uint32 id);
|
||||||
const EvolveInfo* GetEvolveInfo(uint32 loregroup);
|
const EvolveInfo* GetEvolveInfo(uint32 loregroup);
|
||||||
|
|
||||||
//faction lists
|
//faction lists
|
||||||
@ -149,7 +149,7 @@ class SharedDatabase : public Database
|
|||||||
|
|
||||||
std::unique_ptr<EQEmu::MemoryMappedFile> skill_caps_mmf;
|
std::unique_ptr<EQEmu::MemoryMappedFile> skill_caps_mmf;
|
||||||
std::unique_ptr<EQEmu::MemoryMappedFile> items_mmf;
|
std::unique_ptr<EQEmu::MemoryMappedFile> items_mmf;
|
||||||
std::unique_ptr<EQEmu::FixedMemoryHashSet<EQEmu::ItemBase>> items_hash;
|
std::unique_ptr<EQEmu::FixedMemoryHashSet<EQEmu::ItemData>> items_hash;
|
||||||
std::unique_ptr<EQEmu::MemoryMappedFile> faction_mmf;
|
std::unique_ptr<EQEmu::MemoryMappedFile> faction_mmf;
|
||||||
std::unique_ptr<EQEmu::FixedMemoryHashSet<NPCFactionList>> faction_hash;
|
std::unique_ptr<EQEmu::FixedMemoryHashSet<NPCFactionList>> faction_hash;
|
||||||
std::unique_ptr<EQEmu::MemoryMappedFile> loot_table_mmf;
|
std::unique_ptr<EQEmu::MemoryMappedFile> loot_table_mmf;
|
||||||
|
|||||||
@ -35,7 +35,7 @@ void LoadItems(SharedDatabase *database, const std::string &prefix) {
|
|||||||
EQ_EXCEPT("Shared Memory", "Unable to get any items from the database.");
|
EQ_EXCEPT("Shared Memory", "Unable to get any items from the database.");
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 size = static_cast<uint32>(EQEmu::FixedMemoryHashSet<EQEmu::ItemBase>::estimated_size(items, max_item));
|
uint32 size = static_cast<uint32>(EQEmu::FixedMemoryHashSet<EQEmu::ItemData>::estimated_size(items, max_item));
|
||||||
|
|
||||||
auto Config = EQEmuConfig::get();
|
auto Config = EQEmuConfig::get();
|
||||||
std::string file_name = Config->SharedMemDir + prefix + std::string("items");
|
std::string file_name = Config->SharedMemDir + prefix + std::string("items");
|
||||||
|
|||||||
@ -27,7 +27,7 @@ class FixedMemoryHashTest : public Test::Suite {
|
|||||||
typedef void(FixedMemoryHashTest::*TestFunction)(void);
|
typedef void(FixedMemoryHashTest::*TestFunction)(void);
|
||||||
public:
|
public:
|
||||||
FixedMemoryHashTest() {
|
FixedMemoryHashTest() {
|
||||||
size_ = EQEmu::FixedMemoryHashSet<EQEmu::ItemBase>::estimated_size(72000, 190000);
|
size_ = EQEmu::FixedMemoryHashSet<EQEmu::ItemData>::estimated_size(72000, 190000);
|
||||||
data_ = new uint8[size_];
|
data_ = new uint8[size_];
|
||||||
memset(data_, 0, size_);
|
memset(data_, 0, size_);
|
||||||
TEST_ADD(FixedMemoryHashTest::InitTest);
|
TEST_ADD(FixedMemoryHashTest::InitTest);
|
||||||
@ -49,7 +49,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void InitTest() {
|
void InitTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_, 72000, 190000);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_, 72000, 190000);
|
||||||
TEST_ASSERT(!hash.exists(1001));
|
TEST_ASSERT(!hash.exists(1001));
|
||||||
TEST_ASSERT(hash.size() == 0);
|
TEST_ASSERT(hash.size() == 0);
|
||||||
TEST_ASSERT(hash.max_size() == 72000);
|
TEST_ASSERT(hash.max_size() == 72000);
|
||||||
@ -57,7 +57,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void LoadTest() {
|
void LoadTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
TEST_ASSERT(!hash.exists(1001));
|
TEST_ASSERT(!hash.exists(1001));
|
||||||
TEST_ASSERT(hash.size() == 0);
|
TEST_ASSERT(hash.size() == 0);
|
||||||
TEST_ASSERT(hash.max_size() == 72000);
|
TEST_ASSERT(hash.max_size() == 72000);
|
||||||
@ -65,8 +65,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InsertTest() {
|
void InsertTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
memset(&item, 0, sizeof(item));
|
memset(&item, 0, sizeof(item));
|
||||||
strcpy(item.Name, "Iron Sword");
|
strcpy(item.Name, "Iron Sword");
|
||||||
item.ID = 1001;
|
item.ID = 1001;
|
||||||
@ -79,20 +79,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RetrieveTest() {
|
void RetrieveTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
TEST_ASSERT(hash.exists(1001));
|
TEST_ASSERT(hash.exists(1001));
|
||||||
TEST_ASSERT(hash.size() == 1);
|
TEST_ASSERT(hash.size() == 1);
|
||||||
TEST_ASSERT(hash.max_size() == 72000);
|
TEST_ASSERT(hash.max_size() == 72000);
|
||||||
TEST_ASSERT(!hash.empty());
|
TEST_ASSERT(!hash.empty());
|
||||||
|
|
||||||
EQEmu::ItemBase item = hash[1001];
|
EQEmu::ItemData item = hash[1001];
|
||||||
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
||||||
TEST_ASSERT(item.ID == 1001);
|
TEST_ASSERT(item.ID == 1001);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverwriteTest() {
|
void OverwriteTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
memset(&item, 0, sizeof(item));
|
memset(&item, 0, sizeof(item));
|
||||||
strcpy(item.Name, "Steel Sword");
|
strcpy(item.Name, "Steel Sword");
|
||||||
item.ID = 1001;
|
item.ID = 1001;
|
||||||
@ -105,20 +105,20 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OverwriteRetrieveTest() {
|
void OverwriteRetrieveTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
TEST_ASSERT(hash.exists(1001));
|
TEST_ASSERT(hash.exists(1001));
|
||||||
TEST_ASSERT(hash.size() == 1);
|
TEST_ASSERT(hash.size() == 1);
|
||||||
TEST_ASSERT((hash.max_size() == 72000));
|
TEST_ASSERT((hash.max_size() == 72000));
|
||||||
TEST_ASSERT(!hash.empty());
|
TEST_ASSERT(!hash.empty());
|
||||||
|
|
||||||
EQEmu::ItemBase item = hash[1001];
|
EQEmu::ItemData item = hash[1001];
|
||||||
TEST_ASSERT(strcmp(item.Name, "Steel Sword") == 0);
|
TEST_ASSERT(strcmp(item.Name, "Steel Sword") == 0);
|
||||||
TEST_ASSERT(item.ID == 1001);
|
TEST_ASSERT(item.ID == 1001);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InsertAgainTest() {
|
void InsertAgainTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
memset(&item, 0, sizeof(item));
|
memset(&item, 0, sizeof(item));
|
||||||
strcpy(item.Name, "Iron Sword");
|
strcpy(item.Name, "Iron Sword");
|
||||||
item.ID = 1000;
|
item.ID = 1000;
|
||||||
@ -132,14 +132,14 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RetrieveAgainTest() {
|
void RetrieveAgainTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
TEST_ASSERT(hash.exists(1000));
|
TEST_ASSERT(hash.exists(1000));
|
||||||
TEST_ASSERT(hash.exists(1001));
|
TEST_ASSERT(hash.exists(1001));
|
||||||
TEST_ASSERT(hash.size() == 2);
|
TEST_ASSERT(hash.size() == 2);
|
||||||
TEST_ASSERT(hash.max_size() == 72000);
|
TEST_ASSERT(hash.max_size() == 72000);
|
||||||
TEST_ASSERT(!hash.empty());
|
TEST_ASSERT(!hash.empty());
|
||||||
|
|
||||||
EQEmu::ItemBase item = hash[1000];
|
EQEmu::ItemData item = hash[1000];
|
||||||
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
||||||
TEST_ASSERT(item.ID == 1000);
|
TEST_ASSERT(item.ID == 1000);
|
||||||
|
|
||||||
@ -149,8 +149,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InsertBeginTest() {
|
void InsertBeginTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
memset(&item, 0, sizeof(item));
|
memset(&item, 0, sizeof(item));
|
||||||
strcpy(item.Name, "Bronze Sword");
|
strcpy(item.Name, "Bronze Sword");
|
||||||
item.ID = 0;
|
item.ID = 0;
|
||||||
@ -165,7 +165,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RetrieveBeginTest() {
|
void RetrieveBeginTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
TEST_ASSERT(hash.exists(1000));
|
TEST_ASSERT(hash.exists(1000));
|
||||||
TEST_ASSERT(hash.exists(1001));
|
TEST_ASSERT(hash.exists(1001));
|
||||||
TEST_ASSERT(hash.exists(0));
|
TEST_ASSERT(hash.exists(0));
|
||||||
@ -173,7 +173,7 @@ public:
|
|||||||
TEST_ASSERT(hash.max_size() == 72000);
|
TEST_ASSERT(hash.max_size() == 72000);
|
||||||
TEST_ASSERT(!hash.empty());
|
TEST_ASSERT(!hash.empty());
|
||||||
|
|
||||||
EQEmu::ItemBase item = hash[1000];
|
EQEmu::ItemData item = hash[1000];
|
||||||
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
||||||
TEST_ASSERT(item.ID == 1000);
|
TEST_ASSERT(item.ID == 1000);
|
||||||
|
|
||||||
@ -187,8 +187,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void InsertEndTest() {
|
void InsertEndTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
EQEmu::ItemBase item;
|
EQEmu::ItemData item;
|
||||||
memset(&item, 0, sizeof(item));
|
memset(&item, 0, sizeof(item));
|
||||||
strcpy(item.Name, "Jade Sword");
|
strcpy(item.Name, "Jade Sword");
|
||||||
item.ID = 190000;
|
item.ID = 190000;
|
||||||
@ -204,7 +204,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RetrieveEndTest() {
|
void RetrieveEndTest() {
|
||||||
EQEmu::FixedMemoryHashSet<EQEmu::ItemBase> hash(data_, size_);
|
EQEmu::FixedMemoryHashSet<EQEmu::ItemData> hash(data_, size_);
|
||||||
TEST_ASSERT(hash.exists(1000));
|
TEST_ASSERT(hash.exists(1000));
|
||||||
TEST_ASSERT(hash.exists(1001));
|
TEST_ASSERT(hash.exists(1001));
|
||||||
TEST_ASSERT(hash.exists(0));
|
TEST_ASSERT(hash.exists(0));
|
||||||
@ -213,7 +213,7 @@ public:
|
|||||||
TEST_ASSERT(hash.max_size() == 72000);
|
TEST_ASSERT(hash.max_size() == 72000);
|
||||||
TEST_ASSERT(!hash.empty());
|
TEST_ASSERT(!hash.empty());
|
||||||
|
|
||||||
EQEmu::ItemBase item = hash[1000];
|
EQEmu::ItemData item = hash[1000];
|
||||||
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
TEST_ASSERT(strcmp(item.Name, "Iron Sword") == 0);
|
||||||
TEST_ASSERT(item.ID == 1000);
|
TEST_ASSERT(item.ID == 1000);
|
||||||
|
|
||||||
|
|||||||
@ -245,8 +245,8 @@ void WorldDatabase::GetCharSelectInfo(uint32 accountID, EQApplicationPacket **ou
|
|||||||
/* Load Inventory */
|
/* Load Inventory */
|
||||||
// If we ensure that the material data is updated appropriately, we can do away with inventory loads
|
// If we ensure that the material data is updated appropriately, we can do away with inventory loads
|
||||||
if (GetInventory(accountID, cse->Name, &inv)) {
|
if (GetInventory(accountID, cse->Name, &inv)) {
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
const ItemInst* inst = nullptr;
|
const EQEmu::ItemInstance* inst = nullptr;
|
||||||
int16 invslot = 0;
|
int16 invslot = 0;
|
||||||
|
|
||||||
for (uint32 matslot = 0; matslot < EQEmu::textures::TextureCount; matslot++) {
|
for (uint32 matslot = 0; matslot < EQEmu::textures::TextureCount; matslot++) {
|
||||||
|
|||||||
@ -423,7 +423,7 @@ void Mob::WakeTheDead(uint16 spell_id, Mob *target, uint32 duration)
|
|||||||
uint32 sitem = 0;
|
uint32 sitem = 0;
|
||||||
sitem = CorpseToUse->GetWornItem(x);
|
sitem = CorpseToUse->GetWornItem(x);
|
||||||
if(sitem){
|
if(sitem){
|
||||||
const EQEmu::ItemBase * itm = database.GetItem(sitem);
|
const EQEmu::ItemData * itm = database.GetItem(sitem);
|
||||||
npca->AddLootDrop(itm, &npca->itemlist, 1, 1, 255, true, true);
|
npca->AddLootDrop(itm, &npca->itemlist, 1, 1, 255, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -51,12 +51,12 @@ extern WorldServer worldserver;
|
|||||||
extern EntityList entity_list;
|
extern EntityList entity_list;
|
||||||
extern Zone* zone;
|
extern Zone* zone;
|
||||||
|
|
||||||
bool Mob::AttackAnimation(EQEmu::skills::SkillType &skillinuse, int Hand, const ItemInst* weapon)
|
bool Mob::AttackAnimation(EQEmu::skills::SkillType &skillinuse, int Hand, const EQEmu::ItemInstance* weapon)
|
||||||
{
|
{
|
||||||
// Determine animation
|
// Determine animation
|
||||||
int type = 0;
|
int type = 0;
|
||||||
if (weapon && weapon->IsClassCommon()) {
|
if (weapon && weapon->IsClassCommon()) {
|
||||||
const EQEmu::ItemBase* item = weapon->GetItem();
|
const EQEmu::ItemData* item = weapon->GetItem();
|
||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::Attack, "Weapon skill : %i", item->ItemType);
|
Log.Out(Logs::Detail, Logs::Attack, "Weapon skill : %i", item->ItemType);
|
||||||
|
|
||||||
@ -786,9 +786,9 @@ int32 Client::GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit,
|
|||||||
//Returns the weapon damage against the input mob
|
//Returns the weapon damage against the input mob
|
||||||
//if we cannot hit the mob with the current weapon we will get a value less than or equal to zero
|
//if we cannot hit the mob with the current weapon we will get a value less than or equal to zero
|
||||||
//Else we know we can hit.
|
//Else we know we can hit.
|
||||||
//GetWeaponDamage(mob*, const ItemBase*) is intended to be used for mobs or any other situation where we do not have a client inventory item
|
//GetWeaponDamage(mob*, const EQEmu::ItemData*) is intended to be used for mobs or any other situation where we do not have a client inventory item
|
||||||
//GetWeaponDamage(mob*, const ItemInst*) is intended to be used for situations where we have a client inventory item
|
//GetWeaponDamage(mob*, const EQEmu::ItemInstance*) is intended to be used for situations where we have a client inventory item
|
||||||
int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemBase *weapon_item) {
|
int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemData *weapon_item) {
|
||||||
int dmg = 0;
|
int dmg = 0;
|
||||||
int banedmg = 0;
|
int banedmg = 0;
|
||||||
|
|
||||||
@ -888,7 +888,7 @@ int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemBase *weapon_item) {
|
|||||||
return dmg;
|
return dmg;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Mob::GetWeaponDamage(Mob *against, const ItemInst *weapon_item, uint32 *hate)
|
int Mob::GetWeaponDamage(Mob *against, const EQEmu::ItemInstance *weapon_item, uint32 *hate)
|
||||||
{
|
{
|
||||||
int dmg = 0;
|
int dmg = 0;
|
||||||
int banedmg = 0;
|
int banedmg = 0;
|
||||||
@ -927,7 +927,7 @@ int Mob::GetWeaponDamage(Mob *against, const ItemInst *weapon_item, uint32 *hate
|
|||||||
} else {
|
} else {
|
||||||
bool MagicGloves = false;
|
bool MagicGloves = false;
|
||||||
if (IsClient()) {
|
if (IsClient()) {
|
||||||
const ItemInst *gloves = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotHands);
|
const EQEmu::ItemInstance *gloves = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotHands);
|
||||||
if (gloves)
|
if (gloves)
|
||||||
MagicGloves = gloves->GetItemMagical(true);
|
MagicGloves = gloves->GetItemMagical(true);
|
||||||
}
|
}
|
||||||
@ -1035,7 +1035,7 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b
|
|||||||
if (GetFeigned())
|
if (GetFeigned())
|
||||||
return false; // Rogean: How can you attack while feigned? Moved up from Aggro Code.
|
return false; // Rogean: How can you attack while feigned? Moved up from Aggro Code.
|
||||||
|
|
||||||
ItemInst* weapon;
|
EQEmu::ItemInstance* weapon;
|
||||||
if (Hand == EQEmu::legacy::SlotSecondary){ // Kaiyodo - Pick weapon from the attacking hand
|
if (Hand == EQEmu::legacy::SlotSecondary){ // Kaiyodo - Pick weapon from the attacking hand
|
||||||
weapon = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
weapon = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
OffHandAtk(true);
|
OffHandAtk(true);
|
||||||
@ -1114,7 +1114,7 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b
|
|||||||
// Damage bonuses apply only to hits from the main hand (Hand == MainPrimary) by characters level 28 and above
|
// Damage bonuses apply only to hits from the main hand (Hand == MainPrimary) by characters level 28 and above
|
||||||
// who belong to a melee class. If we're here, then all of these conditions apply.
|
// who belong to a melee class. If we're here, then all of these conditions apply.
|
||||||
|
|
||||||
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemBase*) nullptr);
|
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr);
|
||||||
|
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
@ -1125,7 +1125,7 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b
|
|||||||
if (Hand == EQEmu::legacy::SlotSecondary) {
|
if (Hand == EQEmu::legacy::SlotSecondary) {
|
||||||
if (aabonuses.SecondaryDmgInc || itembonuses.SecondaryDmgInc || spellbonuses.SecondaryDmgInc){
|
if (aabonuses.SecondaryDmgInc || itembonuses.SecondaryDmgInc || spellbonuses.SecondaryDmgInc){
|
||||||
|
|
||||||
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemBase*) nullptr, true);
|
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr, true);
|
||||||
|
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
@ -1593,7 +1593,7 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool
|
|||||||
}
|
}
|
||||||
|
|
||||||
//figure out what weapon they are using, if any
|
//figure out what weapon they are using, if any
|
||||||
const EQEmu::ItemBase* weapon = nullptr;
|
const EQEmu::ItemData* weapon = nullptr;
|
||||||
if (Hand == EQEmu::legacy::SlotPrimary && equipment[EQEmu::legacy::SlotPrimary] > 0)
|
if (Hand == EQEmu::legacy::SlotPrimary && equipment[EQEmu::legacy::SlotPrimary] > 0)
|
||||||
weapon = database.GetItem(equipment[EQEmu::legacy::SlotPrimary]);
|
weapon = database.GetItem(equipment[EQEmu::legacy::SlotPrimary]);
|
||||||
else if (equipment[EQEmu::legacy::SlotSecondary])
|
else if (equipment[EQEmu::legacy::SlotSecondary])
|
||||||
@ -1645,7 +1645,7 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool
|
|||||||
|
|
||||||
//do attack animation regardless of whether or not we can hit below
|
//do attack animation regardless of whether or not we can hit below
|
||||||
int16 charges = 0;
|
int16 charges = 0;
|
||||||
ItemInst weapon_inst(weapon, charges);
|
EQEmu::ItemInstance weapon_inst(weapon, charges);
|
||||||
AttackAnimation(skillinuse, Hand, &weapon_inst);
|
AttackAnimation(skillinuse, Hand, &weapon_inst);
|
||||||
|
|
||||||
//basically "if not immune" then do the attack
|
//basically "if not immune" then do the attack
|
||||||
@ -2515,7 +2515,7 @@ void Mob::DamageShield(Mob* attacker, bool spell_ds) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 Mob::GetWeaponDamageBonus(const EQEmu::ItemBase *weapon, bool offhand)
|
uint8 Mob::GetWeaponDamageBonus(const EQEmu::ItemData *weapon, bool offhand)
|
||||||
{
|
{
|
||||||
// dev quote with old and new formulas
|
// dev quote with old and new formulas
|
||||||
// https://forums.daybreakgames.com/eq/index.php?threads/test-update-09-17-15.226618/page-5#post-3326194
|
// https://forums.daybreakgames.com/eq/index.php?threads/test-update-09-17-15.226618/page-5#post-3326194
|
||||||
@ -3526,7 +3526,7 @@ void Mob::TryDefensiveProc(Mob *on, uint16 hand) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::TryWeaponProc(const ItemInst* weapon_g, Mob *on, uint16 hand) {
|
void Mob::TryWeaponProc(const EQEmu::ItemInstance* weapon_g, Mob *on, uint16 hand) {
|
||||||
if(!on) {
|
if(!on) {
|
||||||
SetTarget(nullptr);
|
SetTarget(nullptr);
|
||||||
Log.Out(Logs::General, Logs::Error, "A null Mob object was passed to Mob::TryWeaponProc for evaluation!");
|
Log.Out(Logs::General, Logs::Error, "A null Mob object was passed to Mob::TryWeaponProc for evaluation!");
|
||||||
@ -3544,12 +3544,12 @@ void Mob::TryWeaponProc(const ItemInst* weapon_g, Mob *on, uint16 hand) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!weapon_g) {
|
if(!weapon_g) {
|
||||||
TrySpellProc(nullptr, (const EQEmu::ItemBase*)nullptr, on);
|
TrySpellProc(nullptr, (const EQEmu::ItemData*)nullptr, on);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!weapon_g->IsClassCommon()) {
|
if (!weapon_g->IsClassCommon()) {
|
||||||
TrySpellProc(nullptr, (const EQEmu::ItemBase*)nullptr, on);
|
TrySpellProc(nullptr, (const EQEmu::ItemData*)nullptr, on);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3562,7 +3562,7 @@ void Mob::TryWeaponProc(const ItemInst* weapon_g, Mob *on, uint16 hand) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::TryWeaponProc(const ItemInst *inst, const EQEmu::ItemBase *weapon, Mob *on, uint16 hand)
|
void Mob::TryWeaponProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *weapon, Mob *on, uint16 hand)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!weapon)
|
if (!weapon)
|
||||||
@ -3612,10 +3612,10 @@ void Mob::TryWeaponProc(const ItemInst *inst, const EQEmu::ItemBase *weapon, Mob
|
|||||||
|
|
||||||
if (!proced && inst) {
|
if (!proced && inst) {
|
||||||
for (int r = 0; r < EQEmu::legacy::ITEM_COMMON_SIZE; r++) {
|
for (int r = 0; r < EQEmu::legacy::ITEM_COMMON_SIZE; r++) {
|
||||||
const ItemInst *aug_i = inst->GetAugment(r);
|
const EQEmu::ItemInstance *aug_i = inst->GetAugment(r);
|
||||||
if (!aug_i) // no aug, try next slot!
|
if (!aug_i) // no aug, try next slot!
|
||||||
continue;
|
continue;
|
||||||
const EQEmu::ItemBase *aug = aug_i->GetItem();
|
const EQEmu::ItemData *aug = aug_i->GetItem();
|
||||||
if (!aug)
|
if (!aug)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -3645,7 +3645,7 @@ void Mob::TryWeaponProc(const ItemInst *inst, const EQEmu::ItemBase *weapon, Mob
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::TrySpellProc(const ItemInst *inst, const EQEmu::ItemBase *weapon, Mob *on, uint16 hand)
|
void Mob::TrySpellProc(const EQEmu::ItemInstance *inst, const EQEmu::ItemData *weapon, Mob *on, uint16 hand)
|
||||||
{
|
{
|
||||||
float ProcBonus = static_cast<float>(spellbonuses.SpellProcChance +
|
float ProcBonus = static_cast<float>(spellbonuses.SpellProcChance +
|
||||||
itembonuses.SpellProcChance + aabonuses.SpellProcChance);
|
itembonuses.SpellProcChance + aabonuses.SpellProcChance);
|
||||||
@ -4489,10 +4489,10 @@ void Client::SetAttackTimer()
|
|||||||
else //invalid slot (hands will always hit this)
|
else //invalid slot (hands will always hit this)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const EQEmu::ItemBase *ItemToUse = nullptr;
|
const EQEmu::ItemData *ItemToUse = nullptr;
|
||||||
|
|
||||||
//find our item
|
//find our item
|
||||||
ItemInst *ci = GetInv().GetItem(i);
|
EQEmu::ItemInstance *ci = GetInv().GetItem(i);
|
||||||
if (ci)
|
if (ci)
|
||||||
ItemToUse = ci->GetItem();
|
ItemToUse = ci->GetItem();
|
||||||
|
|
||||||
|
|||||||
@ -146,13 +146,13 @@ void Client::CalcItemBonuses(StatBonuses* newbon) {
|
|||||||
unsigned int i;
|
unsigned int i;
|
||||||
// Update: MainAmmo should only calc skill mods (TODO: Check for other cases)
|
// Update: MainAmmo should only calc skill mods (TODO: Check for other cases)
|
||||||
for (i = EQEmu::legacy::SlotCharm; i <= EQEmu::legacy::SlotAmmo; i++) {
|
for (i = EQEmu::legacy::SlotCharm; i <= EQEmu::legacy::SlotAmmo; i++) {
|
||||||
const ItemInst* inst = m_inv[i];
|
const EQEmu::ItemInstance* inst = m_inv[i];
|
||||||
if(inst == 0)
|
if(inst == 0)
|
||||||
continue;
|
continue;
|
||||||
AddItemBonuses(inst, newbon, false, false, 0, (i == EQEmu::legacy::SlotAmmo));
|
AddItemBonuses(inst, newbon, false, false, 0, (i == EQEmu::legacy::SlotAmmo));
|
||||||
|
|
||||||
//These are given special flags due to how often they are checked for various spell effects.
|
//These are given special flags due to how often they are checked for various spell effects.
|
||||||
const EQEmu::ItemBase *item = inst->GetItem();
|
const EQEmu::ItemData *item = inst->GetItem();
|
||||||
if (i == EQEmu::legacy::SlotSecondary && (item && item->ItemType == EQEmu::item::ItemTypeShield))
|
if (i == EQEmu::legacy::SlotSecondary && (item && item->ItemType == EQEmu::item::ItemTypeShield))
|
||||||
SetShieldEquiped(true);
|
SetShieldEquiped(true);
|
||||||
else if (i == EQEmu::legacy::SlotPrimary && (item && item->ItemType == EQEmu::item::ItemType2HBlunt)) {
|
else if (i == EQEmu::legacy::SlotPrimary && (item && item->ItemType == EQEmu::item::ItemType2HBlunt)) {
|
||||||
@ -166,14 +166,14 @@ void Client::CalcItemBonuses(StatBonuses* newbon) {
|
|||||||
//Power Source Slot
|
//Power Source Slot
|
||||||
if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF)
|
if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF)
|
||||||
{
|
{
|
||||||
const ItemInst* inst = m_inv[EQEmu::legacy::SlotPowerSource];
|
const EQEmu::ItemInstance* inst = m_inv[EQEmu::legacy::SlotPowerSource];
|
||||||
if(inst)
|
if(inst)
|
||||||
AddItemBonuses(inst, newbon);
|
AddItemBonuses(inst, newbon);
|
||||||
}
|
}
|
||||||
|
|
||||||
//tribute items
|
//tribute items
|
||||||
for (i = 0; i < EQEmu::legacy::TRIBUTE_SIZE; i++) {
|
for (i = 0; i < EQEmu::legacy::TRIBUTE_SIZE; i++) {
|
||||||
const ItemInst* inst = m_inv[EQEmu::legacy::TRIBUTE_BEGIN + i];
|
const EQEmu::ItemInstance* inst = m_inv[EQEmu::legacy::TRIBUTE_BEGIN + i];
|
||||||
if(inst == 0)
|
if(inst == 0)
|
||||||
continue;
|
continue;
|
||||||
AddItemBonuses(inst, newbon, false, true);
|
AddItemBonuses(inst, newbon, false, true);
|
||||||
@ -182,7 +182,7 @@ void Client::CalcItemBonuses(StatBonuses* newbon) {
|
|||||||
//Optional ability to have worn effects calculate as an addititive bonus instead of highest value
|
//Optional ability to have worn effects calculate as an addititive bonus instead of highest value
|
||||||
if (RuleI(Spells, AdditiveBonusWornType) && RuleI(Spells, AdditiveBonusWornType) != EQEmu::item::ItemEffectWorn){
|
if (RuleI(Spells, AdditiveBonusWornType) && RuleI(Spells, AdditiveBonusWornType) != EQEmu::item::ItemEffectWorn){
|
||||||
for (i = EQEmu::legacy::SlotCharm; i < EQEmu::legacy::SlotAmmo; i++) {
|
for (i = EQEmu::legacy::SlotCharm; i < EQEmu::legacy::SlotAmmo; i++) {
|
||||||
const ItemInst* inst = m_inv[i];
|
const EQEmu::ItemInstance* inst = m_inv[i];
|
||||||
if(inst == 0)
|
if(inst == 0)
|
||||||
continue;
|
continue;
|
||||||
AdditiveWornBonuses(inst, newbon);
|
AdditiveWornBonuses(inst, newbon);
|
||||||
@ -208,7 +208,7 @@ void Client::ProcessItemCaps()
|
|||||||
itembonuses.ATK = std::min(itembonuses.ATK, CalcItemATKCap());
|
itembonuses.ATK = std::min(itembonuses.ATK, CalcItemATKCap());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::AddItemBonuses(const ItemInst *inst, StatBonuses *newbon, bool isAug, bool isTribute, int rec_override, bool ammo_slot_item)
|
void Client::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses *newbon, bool isAug, bool isTribute, int rec_override, bool ammo_slot_item)
|
||||||
{
|
{
|
||||||
if (!inst || !inst->IsClassCommon()) {
|
if (!inst || !inst->IsClassCommon()) {
|
||||||
return;
|
return;
|
||||||
@ -218,7 +218,7 @@ void Client::AddItemBonuses(const ItemInst *inst, StatBonuses *newbon, bool isAu
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = inst->GetItem();
|
const EQEmu::ItemData *item = inst->GetItem();
|
||||||
|
|
||||||
if (!isTribute && !inst->IsEquipable(GetBaseRace(), GetClass())) {
|
if (!isTribute && !inst->IsEquipable(GetBaseRace(), GetClass())) {
|
||||||
if (item->ItemType != EQEmu::item::ItemTypeFood && item->ItemType != EQEmu::item::ItemTypeDrink)
|
if (item->ItemType != EQEmu::item::ItemTypeFood && item->ItemType != EQEmu::item::ItemTypeDrink)
|
||||||
@ -532,7 +532,7 @@ void Client::AddItemBonuses(const ItemInst *inst, StatBonuses *newbon, bool isAu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::AdditiveWornBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug) {
|
void Client::AdditiveWornBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Powerful Non-live like option allows developers to add worn effects on items that
|
Powerful Non-live like option allows developers to add worn effects on items that
|
||||||
@ -550,7 +550,7 @@ void Client::AdditiveWornBonuses(const ItemInst *inst, StatBonuses* newbon, bool
|
|||||||
if(inst->GetAugmentType()==0 && isAug == true)
|
if(inst->GetAugmentType()==0 && isAug == true)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = inst->GetItem();
|
const EQEmu::ItemData *item = inst->GetItem();
|
||||||
|
|
||||||
if(!inst->IsEquipable(GetBaseRace(),GetClass()))
|
if(!inst->IsEquipable(GetBaseRace(),GetClass()))
|
||||||
return;
|
return;
|
||||||
@ -580,9 +580,9 @@ void Client::CalcEdibleBonuses(StatBonuses* newbon) {
|
|||||||
{
|
{
|
||||||
if (food && drink)
|
if (food && drink)
|
||||||
break;
|
break;
|
||||||
const ItemInst* inst = GetInv().GetItem(i);
|
const EQEmu::ItemInstance* inst = GetInv().GetItem(i);
|
||||||
if (inst && inst->GetItem() && inst->IsClassCommon()) {
|
if (inst && inst->GetItem() && inst->IsClassCommon()) {
|
||||||
const EQEmu::ItemBase *item = inst->GetItem();
|
const EQEmu::ItemData *item = inst->GetItem();
|
||||||
if (item->ItemType == EQEmu::item::ItemTypeFood && !food)
|
if (item->ItemType == EQEmu::item::ItemTypeFood && !food)
|
||||||
food = true;
|
food = true;
|
||||||
else if (item->ItemType == EQEmu::item::ItemTypeDrink && !drink)
|
else if (item->ItemType == EQEmu::item::ItemTypeDrink && !drink)
|
||||||
@ -596,9 +596,9 @@ void Client::CalcEdibleBonuses(StatBonuses* newbon) {
|
|||||||
{
|
{
|
||||||
if (food && drink)
|
if (food && drink)
|
||||||
break;
|
break;
|
||||||
const ItemInst* inst = GetInv().GetItem(i);
|
const EQEmu::ItemInstance* inst = GetInv().GetItem(i);
|
||||||
if (inst && inst->GetItem() && inst->IsClassCommon()) {
|
if (inst && inst->GetItem() && inst->IsClassCommon()) {
|
||||||
const EQEmu::ItemBase *item = inst->GetItem();
|
const EQEmu::ItemData *item = inst->GetItem();
|
||||||
if (item->ItemType == EQEmu::item::ItemTypeFood && !food)
|
if (item->ItemType == EQEmu::item::ItemTypeFood && !food)
|
||||||
food = true;
|
food = true;
|
||||||
else if (item->ItemType == EQEmu::item::ItemTypeDrink && !drink)
|
else if (item->ItemType == EQEmu::item::ItemTypeDrink && !drink)
|
||||||
@ -3205,7 +3205,7 @@ void NPC::CalcItemBonuses(StatBonuses *newbon)
|
|||||||
if(newbon){
|
if(newbon){
|
||||||
|
|
||||||
for (int i = 0; i < EQEmu::legacy::EQUIPMENT_SIZE; i++){
|
for (int i = 0; i < EQEmu::legacy::EQUIPMENT_SIZE; i++){
|
||||||
const EQEmu::ItemBase *cur = database.GetItem(equipment[i]);
|
const EQEmu::ItemData *cur = database.GetItem(equipment[i]);
|
||||||
if(cur){
|
if(cur){
|
||||||
//basic stats
|
//basic stats
|
||||||
newbon->AC += cur->AC;
|
newbon->AC += cur->AC;
|
||||||
@ -3317,7 +3317,7 @@ bool Client::CalcItemScale(uint32 slot_x, uint32 slot_y) {
|
|||||||
if (i == EQEmu::legacy::SlotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot
|
if (i == EQEmu::legacy::SlotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ItemInst* inst = m_inv.GetItem(i);
|
EQEmu::ItemInstance* inst = m_inv.GetItem(i);
|
||||||
|
|
||||||
if(inst == nullptr)
|
if(inst == nullptr)
|
||||||
continue;
|
continue;
|
||||||
@ -3325,7 +3325,7 @@ bool Client::CalcItemScale(uint32 slot_x, uint32 slot_y) {
|
|||||||
// TEST CODE: test for bazaar trader crashing with charm items
|
// TEST CODE: test for bazaar trader crashing with charm items
|
||||||
if (Trader)
|
if (Trader)
|
||||||
if (i >= EQEmu::legacy::GENERAL_BAGS_BEGIN && i <= EQEmu::legacy::GENERAL_BAGS_END) {
|
if (i >= EQEmu::legacy::GENERAL_BAGS_BEGIN && i <= EQEmu::legacy::GENERAL_BAGS_END) {
|
||||||
ItemInst* parent_item = m_inv.GetItem(Inventory::CalcSlotId(i));
|
EQEmu::ItemInstance* parent_item = m_inv.GetItem(Inventory::CalcSlotId(i));
|
||||||
if (parent_item && parent_item->GetItem()->ID == 17899) // trader satchel
|
if (parent_item && parent_item->GetItem()->ID == 17899) // trader satchel
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -3346,7 +3346,7 @@ bool Client::CalcItemScale(uint32 slot_x, uint32 slot_y) {
|
|||||||
//iterate all augments
|
//iterate all augments
|
||||||
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
||||||
{
|
{
|
||||||
ItemInst * a_inst = inst->GetAugment(x);
|
EQEmu::ItemInstance * a_inst = inst->GetAugment(x);
|
||||||
if(!a_inst)
|
if(!a_inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -3410,7 +3410,7 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) {
|
|||||||
if (i == EQEmu::legacy::SlotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot
|
if (i == EQEmu::legacy::SlotAmmo) // moved here from calling procedure to facilitate future range changes where MainAmmo may not be the last slot
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ItemInst* inst = m_inv.GetItem(i);
|
EQEmu::ItemInstance* inst = m_inv.GetItem(i);
|
||||||
|
|
||||||
if(!inst)
|
if(!inst)
|
||||||
continue;
|
continue;
|
||||||
@ -3418,7 +3418,7 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) {
|
|||||||
// TEST CODE: test for bazaar trader crashing with charm items
|
// TEST CODE: test for bazaar trader crashing with charm items
|
||||||
if (Trader)
|
if (Trader)
|
||||||
if (i >= EQEmu::legacy::GENERAL_BAGS_BEGIN && i <= EQEmu::legacy::GENERAL_BAGS_END) {
|
if (i >= EQEmu::legacy::GENERAL_BAGS_BEGIN && i <= EQEmu::legacy::GENERAL_BAGS_END) {
|
||||||
ItemInst* parent_item = m_inv.GetItem(Inventory::CalcSlotId(i));
|
EQEmu::ItemInstance* parent_item = m_inv.GetItem(Inventory::CalcSlotId(i));
|
||||||
if (parent_item && parent_item->GetItem()->ID == 17899) // trader satchel
|
if (parent_item && parent_item->GetItem()->ID == 17899) // trader satchel
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -3449,7 +3449,7 @@ bool Client::DoItemEnterZone(uint32 slot_x, uint32 slot_y) {
|
|||||||
//iterate all augments
|
//iterate all augments
|
||||||
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
||||||
{
|
{
|
||||||
ItemInst *a_inst = inst->GetAugment(x);
|
EQEmu::ItemInstance *a_inst = inst->GetAugment(x);
|
||||||
if(!a_inst)
|
if(!a_inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
134
zone/bot.cpp
134
zone/bot.cpp
@ -229,13 +229,13 @@ void Bot::SetBotSpellID(uint32 newSpellID) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32 Bot::GetBotArcheryRange() {
|
uint32 Bot::GetBotArcheryRange() {
|
||||||
const ItemInst *range_inst = GetBotItem(EQEmu::legacy::SlotRange);
|
const EQEmu::ItemInstance *range_inst = GetBotItem(EQEmu::legacy::SlotRange);
|
||||||
const ItemInst *ammo_inst = GetBotItem(EQEmu::legacy::SlotAmmo);
|
const EQEmu::ItemInstance *ammo_inst = GetBotItem(EQEmu::legacy::SlotAmmo);
|
||||||
if (!range_inst || !ammo_inst)
|
if (!range_inst || !ammo_inst)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const EQEmu::ItemBase *range_item = range_inst->GetItem();
|
const EQEmu::ItemData *range_item = range_inst->GetItem();
|
||||||
const EQEmu::ItemBase *ammo_item = ammo_inst->GetItem();
|
const EQEmu::ItemData *ammo_item = ammo_inst->GetItem();
|
||||||
if (!range_item || !ammo_item || range_item->ItemType != EQEmu::item::ItemTypeBow || ammo_item->ItemType != EQEmu::item::ItemTypeArrow)
|
if (!range_item || !ammo_item || range_item->ItemType != EQEmu::item::ItemTypeBow || ammo_item->ItemType != EQEmu::item::ItemTypeArrow)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -1900,13 +1900,13 @@ void Bot::BotRangedAttack(Mob* other) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* rangedItem = GetBotItem(EQEmu::legacy::SlotRange);
|
EQEmu::ItemInstance* rangedItem = GetBotItem(EQEmu::legacy::SlotRange);
|
||||||
const EQEmu::ItemBase* RangeWeapon = 0;
|
const EQEmu::ItemData* RangeWeapon = 0;
|
||||||
if(rangedItem)
|
if(rangedItem)
|
||||||
RangeWeapon = rangedItem->GetItem();
|
RangeWeapon = rangedItem->GetItem();
|
||||||
|
|
||||||
ItemInst* ammoItem = GetBotItem(EQEmu::legacy::SlotAmmo);
|
EQEmu::ItemInstance* ammoItem = GetBotItem(EQEmu::legacy::SlotAmmo);
|
||||||
const EQEmu::ItemBase* Ammo = 0;
|
const EQEmu::ItemData* Ammo = 0;
|
||||||
if(ammoItem)
|
if(ammoItem)
|
||||||
Ammo = ammoItem->GetItem();
|
Ammo = ammoItem->GetItem();
|
||||||
|
|
||||||
@ -2015,7 +2015,7 @@ void Bot::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills:
|
|||||||
int32 min_hit = 1;
|
int32 min_hit = 1;
|
||||||
int32 max_hit = ((2 * weapon_damage * GetDamageTable(skillinuse)) / 100);
|
int32 max_hit = ((2 * weapon_damage * GetDamageTable(skillinuse)) / 100);
|
||||||
if(GetLevel() >= 28 && IsWarriorClass()) {
|
if(GetLevel() >= 28 && IsWarriorClass()) {
|
||||||
int ucDamageBonus = GetWeaponDamageBonus((const EQEmu::ItemBase*) nullptr);
|
int ucDamageBonus = GetWeaponDamageBonus((const EQEmu::ItemData*) nullptr);
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
hate += ucDamageBonus;
|
hate += ucDamageBonus;
|
||||||
@ -2056,8 +2056,8 @@ void Bot::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills:
|
|||||||
damage = -5;
|
damage = -5;
|
||||||
|
|
||||||
if (skillinuse == EQEmu::skills::SkillBash){
|
if (skillinuse == EQEmu::skills::SkillBash){
|
||||||
const ItemInst* inst = GetBotItem(EQEmu::legacy::SlotSecondary);
|
const EQEmu::ItemInstance* inst = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
const EQEmu::ItemBase* botweapon = 0;
|
const EQEmu::ItemData* botweapon = 0;
|
||||||
if(inst)
|
if(inst)
|
||||||
botweapon = inst->GetItem();
|
botweapon = inst->GetItem();
|
||||||
|
|
||||||
@ -2116,8 +2116,8 @@ void Bot::ApplySpecialAttackMod(EQEmu::skills::SkillType skill, int32 &dmg, int3
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (item_slot >= EQEmu::legacy::EQUIPMENT_BEGIN){
|
if (item_slot >= EQEmu::legacy::EQUIPMENT_BEGIN){
|
||||||
const ItemInst* inst = GetBotItem(item_slot);
|
const EQEmu::ItemInstance* inst = GetBotItem(item_slot);
|
||||||
const EQEmu::ItemBase* botweapon = 0;
|
const EQEmu::ItemData* botweapon = 0;
|
||||||
if(inst)
|
if(inst)
|
||||||
botweapon = inst->GetItem();
|
botweapon = inst->GetItem();
|
||||||
|
|
||||||
@ -2451,7 +2451,7 @@ void Bot::AI_Process() {
|
|||||||
if(attack_timer.Check()) {
|
if(attack_timer.Check()) {
|
||||||
Attack(GetTarget(), EQEmu::legacy::SlotPrimary);
|
Attack(GetTarget(), EQEmu::legacy::SlotPrimary);
|
||||||
TriggerDefensiveProcs(GetTarget(), EQEmu::legacy::SlotPrimary, false);
|
TriggerDefensiveProcs(GetTarget(), EQEmu::legacy::SlotPrimary, false);
|
||||||
ItemInst *wpn = GetBotItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance *wpn = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
TryWeaponProc(wpn, GetTarget(), EQEmu::legacy::SlotPrimary);
|
TryWeaponProc(wpn, GetTarget(), EQEmu::legacy::SlotPrimary);
|
||||||
bool tripleSuccess = false;
|
bool tripleSuccess = false;
|
||||||
if(BotOwner && GetTarget() && CanThisClassDoubleAttack()) {
|
if(BotOwner && GetTarget() && CanThisClassDoubleAttack()) {
|
||||||
@ -2480,7 +2480,7 @@ void Bot::AI_Process() {
|
|||||||
|
|
||||||
int32 ExtraAttackChanceBonus = (spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance + aabonuses.ExtraAttackChance);
|
int32 ExtraAttackChanceBonus = (spellbonuses.ExtraAttackChance + itembonuses.ExtraAttackChance + aabonuses.ExtraAttackChance);
|
||||||
if (GetTarget() && ExtraAttackChanceBonus) {
|
if (GetTarget() && ExtraAttackChanceBonus) {
|
||||||
ItemInst *wpn = GetBotItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance *wpn = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
if(wpn) {
|
if(wpn) {
|
||||||
if (wpn->GetItem()->IsType2HWeapon()) {
|
if (wpn->GetItem()->IsType2HWeapon()) {
|
||||||
if(zone->random.Int(0, 100) < ExtraAttackChanceBonus)
|
if(zone->random.Int(0, 100) < ExtraAttackChanceBonus)
|
||||||
@ -2504,8 +2504,8 @@ void Bot::AI_Process() {
|
|||||||
|
|
||||||
//now off hand
|
//now off hand
|
||||||
if(GetTarget() && attack_dw_timer.Check() && CanThisClassDualWield()) {
|
if(GetTarget() && attack_dw_timer.Check() && CanThisClassDualWield()) {
|
||||||
const ItemInst* instweapon = GetBotItem(EQEmu::legacy::SlotSecondary);
|
const EQEmu::ItemInstance* instweapon = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
const EQEmu::ItemBase* weapon = 0;
|
const EQEmu::ItemData* weapon = 0;
|
||||||
//can only dual wield without a weapon if you're a monk
|
//can only dual wield without a weapon if you're a monk
|
||||||
if(instweapon || (botClass == MONK)) {
|
if(instweapon || (botClass == MONK)) {
|
||||||
if(instweapon)
|
if(instweapon)
|
||||||
@ -2527,7 +2527,7 @@ void Bot::AI_Process() {
|
|||||||
float random = zone->random.Real(0, 1);
|
float random = zone->random.Real(0, 1);
|
||||||
if (random < DualWieldProbability){ // Max 78% of DW
|
if (random < DualWieldProbability){ // Max 78% of DW
|
||||||
Attack(GetTarget(), EQEmu::legacy::SlotSecondary); // Single attack with offhand
|
Attack(GetTarget(), EQEmu::legacy::SlotSecondary); // Single attack with offhand
|
||||||
ItemInst *wpn = GetBotItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance *wpn = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
TryWeaponProc(wpn, GetTarget(), EQEmu::legacy::SlotSecondary);
|
TryWeaponProc(wpn, GetTarget(), EQEmu::legacy::SlotSecondary);
|
||||||
if( CanThisClassDoubleAttack() && CheckBotDoubleAttack()) {
|
if( CanThisClassDoubleAttack() && CheckBotDoubleAttack()) {
|
||||||
if(GetTarget() && GetTarget()->GetHP() > -10)
|
if(GetTarget() && GetTarget()->GetHP() > -10)
|
||||||
@ -2952,8 +2952,8 @@ void Bot::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
|
|||||||
ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive];
|
ns->spawn.light = m_Light.Type[EQEmu::lightsource::LightActive];
|
||||||
ns->spawn.helm = helmtexture; //(GetShowHelm() ? helmtexture : 0); //0xFF;
|
ns->spawn.helm = helmtexture; //(GetShowHelm() ? helmtexture : 0); //0xFF;
|
||||||
ns->spawn.equip_chest2 = texture; //0xFF;
|
ns->spawn.equip_chest2 = texture; //0xFF;
|
||||||
const EQEmu::ItemBase* item = 0;
|
const EQEmu::ItemData* item = 0;
|
||||||
const ItemInst* inst = 0;
|
const EQEmu::ItemInstance* inst = 0;
|
||||||
uint32 spawnedbotid = 0;
|
uint32 spawnedbotid = 0;
|
||||||
spawnedbotid = this->GetBotID();
|
spawnedbotid = this->GetBotID();
|
||||||
for (int i = 0; i < EQEmu::textures::TexturePrimary; i++) {
|
for (int i = 0; i < EQEmu::textures::TexturePrimary; i++) {
|
||||||
@ -3224,8 +3224,8 @@ void Bot::SendBotArcheryWearChange(uint8 material_slot, uint32 material, uint32
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns the item id that is in the bot inventory collection for the specified slot.
|
// Returns the item id that is in the bot inventory collection for the specified slot.
|
||||||
ItemInst* Bot::GetBotItem(uint32 slotID) {
|
EQEmu::ItemInstance* Bot::GetBotItem(uint32 slotID) {
|
||||||
ItemInst* item = m_inv.GetItem(slotID);
|
EQEmu::ItemInstance* item = m_inv.GetItem(slotID);
|
||||||
if(item)
|
if(item)
|
||||||
return item;
|
return item;
|
||||||
|
|
||||||
@ -3266,7 +3266,7 @@ void Bot::BotRemoveEquipItem(int slot) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bot::BotTradeSwapItem(Client* client, int16 lootSlot, const ItemInst* inst, const ItemInst* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap) {
|
void Bot::BotTradeSwapItem(Client* client, int16 lootSlot, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap) {
|
||||||
|
|
||||||
if(!errorMessage->empty())
|
if(!errorMessage->empty())
|
||||||
return;
|
return;
|
||||||
@ -3289,7 +3289,7 @@ void Bot::BotTradeSwapItem(Client* client, int16 lootSlot, const ItemInst* inst,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bot::BotTradeAddItem(uint32 id, const ItemInst* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb)
|
void Bot::BotTradeAddItem(uint32 id, const EQEmu::ItemInstance* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb)
|
||||||
{
|
{
|
||||||
if(addToDb) {
|
if(addToDb) {
|
||||||
if (!botdb.SaveItemBySlot(this, lootSlot, inst)) {
|
if (!botdb.SaveItemBySlot(this, lootSlot, inst)) {
|
||||||
@ -3383,7 +3383,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
bool already_returned = false;
|
bool already_returned = false;
|
||||||
|
|
||||||
Inventory& clientInventory = client->GetInv();
|
Inventory& clientInventory = client->GetInv();
|
||||||
const ItemInst* inst = clientInventory[i];
|
const EQEmu::ItemInstance* inst = clientInventory[i];
|
||||||
if(inst) {
|
if(inst) {
|
||||||
items[i] = inst->GetItem()->ID;
|
items[i] = inst->GetItem()->ID;
|
||||||
charges[i] = inst->GetCharges();
|
charges[i] = inst->GetCharges();
|
||||||
@ -3395,10 +3395,10 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
//EQoffline: will give the items to the bots and change the bot stats
|
//EQoffline: will give the items to the bots and change the bot stats
|
||||||
if(inst && (GetBotOwner() == client->CastToMob()) && !IsEngaged()) {
|
if(inst && (GetBotOwner() == client->CastToMob()) && !IsEngaged()) {
|
||||||
std::string TempErrorMessage;
|
std::string TempErrorMessage;
|
||||||
const EQEmu::ItemBase* mWeaponItem = inst->GetItem();
|
const EQEmu::ItemData* mWeaponItem = inst->GetItem();
|
||||||
bool failedLoreCheck = false;
|
bool failedLoreCheck = false;
|
||||||
for (int m = AUG_INDEX_BEGIN; m < EQEmu::legacy::ITEM_COMMON_SIZE; ++m) {
|
for (int m = AUG_INDEX_BEGIN; m < EQEmu::legacy::ITEM_COMMON_SIZE; ++m) {
|
||||||
ItemInst *itm = inst->GetAugment(m);
|
EQEmu::ItemInstance *itm = inst->GetAugment(m);
|
||||||
if(itm)
|
if(itm)
|
||||||
{
|
{
|
||||||
if(CheckLoreConflict(itm->GetItem())) {
|
if(CheckLoreConflict(itm->GetItem())) {
|
||||||
@ -3415,7 +3415,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
if(!failedLoreCheck && mWeaponItem && inst->IsEquipable(GetBaseRace(), GetClass()) && (GetLevel() >= mWeaponItem->ReqLevel)) {
|
if(!failedLoreCheck && mWeaponItem && inst->IsEquipable(GetBaseRace(), GetClass()) && (GetLevel() >= mWeaponItem->ReqLevel)) {
|
||||||
BotCanWear = true;
|
BotCanWear = true;
|
||||||
botCanWear[i] = BotCanWear;
|
botCanWear[i] = BotCanWear;
|
||||||
ItemInst* swap_item = nullptr;
|
EQEmu::ItemInstance* swap_item = nullptr;
|
||||||
|
|
||||||
const char* equipped[EQEmu::legacy::EQUIPMENT_SIZE + 1] = { "Charm", "Left Ear", "Head", "Face", "Right Ear", "Neck", "Shoulders", "Arms", "Back",
|
const char* equipped[EQEmu::legacy::EQUIPMENT_SIZE + 1] = { "Charm", "Left Ear", "Head", "Face", "Right Ear", "Neck", "Shoulders", "Arms", "Back",
|
||||||
"Left Wrist", "Right Wrist", "Range", "Hands", "Primary Hand", "Secondary Hand",
|
"Left Wrist", "Right Wrist", "Range", "Hands", "Primary Hand", "Secondary Hand",
|
||||||
@ -3438,7 +3438,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ItemInst* remove_item = GetBotItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance* remove_item = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
BotTradeSwapItem(client, EQEmu::legacy::SlotSecondary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
BotTradeSwapItem(client, EQEmu::legacy::SlotSecondary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3466,7 +3466,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
}
|
}
|
||||||
if(success) {
|
if(success) {
|
||||||
if (GetBotItem(EQEmu::legacy::SlotPrimary)) {
|
if (GetBotItem(EQEmu::legacy::SlotPrimary)) {
|
||||||
ItemInst* remove_item = GetBotItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance* remove_item = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
if (remove_item->GetItem()->IsType2HWeapon()) {
|
if (remove_item->GetItem()->IsType2HWeapon()) {
|
||||||
BotTradeSwapItem(client, EQEmu::legacy::SlotPrimary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
BotTradeSwapItem(client, EQEmu::legacy::SlotPrimary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
||||||
}
|
}
|
||||||
@ -3491,7 +3491,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
swap_item = GetBotItem(j);
|
swap_item = GetBotItem(j);
|
||||||
failedLoreCheck = false;
|
failedLoreCheck = false;
|
||||||
for (int k = AUG_INDEX_BEGIN; k < EQEmu::legacy::ITEM_COMMON_SIZE; ++k) {
|
for (int k = AUG_INDEX_BEGIN; k < EQEmu::legacy::ITEM_COMMON_SIZE; ++k) {
|
||||||
ItemInst *itm = swap_item->GetAugment(k);
|
EQEmu::ItemInstance *itm = swap_item->GetAugment(k);
|
||||||
if(itm)
|
if(itm)
|
||||||
{
|
{
|
||||||
if(client->CheckLoreConflict(itm->GetItem())) {
|
if(client->CheckLoreConflict(itm->GetItem())) {
|
||||||
@ -3510,7 +3510,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
failedLoreCheck = true;
|
failedLoreCheck = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ItemInst* remove_item = GetBotItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance* remove_item = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
BotTradeSwapItem(client, EQEmu::legacy::SlotSecondary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
BotTradeSwapItem(client, EQEmu::legacy::SlotSecondary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3537,7 +3537,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
success = true;
|
success = true;
|
||||||
}
|
}
|
||||||
if (success && GetBotItem(EQEmu::legacy::SlotPrimary)) {
|
if (success && GetBotItem(EQEmu::legacy::SlotPrimary)) {
|
||||||
ItemInst* remove_item = GetBotItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance* remove_item = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
if (remove_item->GetItem()->IsType2HWeapon()) {
|
if (remove_item->GetItem()->IsType2HWeapon()) {
|
||||||
BotTradeSwapItem(client, EQEmu::legacy::SlotPrimary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
BotTradeSwapItem(client, EQEmu::legacy::SlotPrimary, 0, remove_item, remove_item->GetItem()->Slots, &TempErrorMessage, false);
|
||||||
}
|
}
|
||||||
@ -3574,7 +3574,7 @@ void Bot::PerformTradeWithClient(int16 beginSlotID, int16 endSlotID, Client* cli
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item2 = 0;
|
const EQEmu::ItemData* item2 = 0;
|
||||||
for(int y = beginSlotID; y <= endSlotID; ++y) {
|
for(int y = beginSlotID; y <= endSlotID; ++y) {
|
||||||
item2 = database.GetItem(items[y]);
|
item2 = database.GetItem(items[y]);
|
||||||
if(item2) {
|
if(item2) {
|
||||||
@ -3738,7 +3738,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
}
|
}
|
||||||
|
|
||||||
FaceTarget(GetTarget());
|
FaceTarget(GetTarget());
|
||||||
ItemInst* weapon = nullptr;
|
EQEmu::ItemInstance* weapon = nullptr;
|
||||||
if (Hand == EQEmu::legacy::SlotPrimary) {
|
if (Hand == EQEmu::legacy::SlotPrimary) {
|
||||||
weapon = GetBotItem(EQEmu::legacy::SlotPrimary);
|
weapon = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
OffHandAtk(false);
|
OffHandAtk(false);
|
||||||
@ -3813,7 +3813,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
if (Hand == EQEmu::legacy::SlotPrimary && GetLevel() >= 28 && IsWarriorClass()) {
|
if (Hand == EQEmu::legacy::SlotPrimary && GetLevel() >= 28 && IsWarriorClass()) {
|
||||||
// Damage bonuses apply only to hits from the main hand (Hand == MainPrimary) by characters level 28 and above
|
// Damage bonuses apply only to hits from the main hand (Hand == MainPrimary) by characters level 28 and above
|
||||||
// who belong to a melee class. If we're here, then all of these conditions apply.
|
// who belong to a melee class. If we're here, then all of these conditions apply.
|
||||||
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemBase*) nullptr);
|
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr);
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
hate += ucDamageBonus;
|
hate += ucDamageBonus;
|
||||||
@ -3822,7 +3822,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
//Live AA - Sinister Strikes *Adds weapon damage bonus to offhand weapon.
|
//Live AA - Sinister Strikes *Adds weapon damage bonus to offhand weapon.
|
||||||
if (Hand == EQEmu::legacy::SlotSecondary) {
|
if (Hand == EQEmu::legacy::SlotSecondary) {
|
||||||
if (aabonuses.SecondaryDmgInc || itembonuses.SecondaryDmgInc || spellbonuses.SecondaryDmgInc){
|
if (aabonuses.SecondaryDmgInc || itembonuses.SecondaryDmgInc || spellbonuses.SecondaryDmgInc){
|
||||||
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemBase*) nullptr);
|
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr);
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
hate += ucDamageBonus;
|
hate += ucDamageBonus;
|
||||||
@ -4280,9 +4280,9 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) {
|
|||||||
|
|
||||||
//Check if item focus effect exists for the client.
|
//Check if item focus effect exists for the client.
|
||||||
if (itembonuses.FocusEffects[bottype]) {
|
if (itembonuses.FocusEffects[bottype]) {
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
const EQEmu::ItemBase* UsedItem = 0;
|
const EQEmu::ItemData* UsedItem = 0;
|
||||||
const ItemInst* TempInst = 0;
|
const EQEmu::ItemInstance* TempInst = 0;
|
||||||
uint16 UsedFocusID = 0;
|
uint16 UsedFocusID = 0;
|
||||||
int32 Total = 0;
|
int32 Total = 0;
|
||||||
int32 focus_max = 0;
|
int32 focus_max = 0;
|
||||||
@ -4290,7 +4290,7 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) {
|
|||||||
//item focus
|
//item focus
|
||||||
for (int x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::EQUIPMENT_END; x++) {
|
for (int x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::EQUIPMENT_END; x++) {
|
||||||
TempItem = nullptr;
|
TempItem = nullptr;
|
||||||
ItemInst* ins = GetBotItem(x);
|
EQEmu::ItemInstance* ins = GetBotItem(x);
|
||||||
if (!ins)
|
if (!ins)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -4314,10 +4314,10 @@ int32 Bot::GetBotFocusEffect(BotfocusType bottype, uint16 spell_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int y = AUG_INDEX_BEGIN; y < EQEmu::legacy::ITEM_COMMON_SIZE; ++y) {
|
for (int y = AUG_INDEX_BEGIN; y < EQEmu::legacy::ITEM_COMMON_SIZE; ++y) {
|
||||||
ItemInst *aug = nullptr;
|
EQEmu::ItemInstance *aug = nullptr;
|
||||||
aug = ins->GetAugment(y);
|
aug = ins->GetAugment(y);
|
||||||
if(aug) {
|
if(aug) {
|
||||||
const EQEmu::ItemBase* TempItemAug = aug->GetItem();
|
const EQEmu::ItemData* TempItemAug = aug->GetItem();
|
||||||
if (TempItemAug && TempItemAug->Focus.Effect > 0 && TempItemAug->Focus.Effect != SPELL_UNKNOWN) {
|
if (TempItemAug && TempItemAug->Focus.Effect > 0 && TempItemAug->Focus.Effect != SPELL_UNKNOWN) {
|
||||||
if(rand_effectiveness) {
|
if(rand_effectiveness) {
|
||||||
focus_max = CalcBotFocusEffect(bottype, TempItemAug->Focus.Effect, spell_id, true);
|
focus_max = CalcBotFocusEffect(bottype, TempItemAug->Focus.Effect, spell_id, true);
|
||||||
@ -4864,8 +4864,8 @@ void Bot::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32
|
|||||||
hate = hate_override;
|
hate = hate_override;
|
||||||
|
|
||||||
if (skill == EQEmu::skills::SkillBash) {
|
if (skill == EQEmu::skills::SkillBash) {
|
||||||
const ItemInst* inst = GetBotItem(EQEmu::legacy::SlotSecondary);
|
const EQEmu::ItemInstance* inst = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
const EQEmu::ItemBase* botweapon = 0;
|
const EQEmu::ItemData* botweapon = 0;
|
||||||
if(inst)
|
if(inst)
|
||||||
botweapon = inst->GetItem();
|
botweapon = inst->GetItem();
|
||||||
|
|
||||||
@ -4929,8 +4929,8 @@ void Bot::TryBackstab(Mob *other, int ReuseTime) {
|
|||||||
|
|
||||||
bool bIsBehind = false;
|
bool bIsBehind = false;
|
||||||
bool bCanFrontalBS = false;
|
bool bCanFrontalBS = false;
|
||||||
const ItemInst* inst = GetBotItem(EQEmu::legacy::SlotPrimary);
|
const EQEmu::ItemInstance* inst = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
const EQEmu::ItemBase* botpiercer = nullptr;
|
const EQEmu::ItemData* botpiercer = nullptr;
|
||||||
if(inst)
|
if(inst)
|
||||||
botpiercer = inst->GetItem();
|
botpiercer = inst->GetItem();
|
||||||
|
|
||||||
@ -4989,12 +4989,12 @@ void Bot::RogueBackstab(Mob* other, bool min_damage, int ReuseTime) {
|
|||||||
int32 hate = 0;
|
int32 hate = 0;
|
||||||
int32 primaryweapondamage = 0;
|
int32 primaryweapondamage = 0;
|
||||||
int32 backstab_dmg = 0;
|
int32 backstab_dmg = 0;
|
||||||
ItemInst* botweaponInst = GetBotItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance* botweaponInst = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
if(botweaponInst) {
|
if(botweaponInst) {
|
||||||
primaryweapondamage = GetWeaponDamage(other, botweaponInst);
|
primaryweapondamage = GetWeaponDamage(other, botweaponInst);
|
||||||
backstab_dmg = botweaponInst->GetItem()->BackstabDmg;
|
backstab_dmg = botweaponInst->GetItem()->BackstabDmg;
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; ++i) {
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; ++i) {
|
||||||
ItemInst *aug = botweaponInst->GetAugment(i);
|
EQEmu::ItemInstance *aug = botweaponInst->GetAugment(i);
|
||||||
if(aug)
|
if(aug)
|
||||||
backstab_dmg += aug->GetItem()->BackstabDmg;
|
backstab_dmg += aug->GetItem()->BackstabDmg;
|
||||||
}
|
}
|
||||||
@ -5037,7 +5037,7 @@ void Bot::RogueBackstab(Mob* other, bool min_damage, int ReuseTime) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Bot::RogueAssassinate(Mob* other) {
|
void Bot::RogueAssassinate(Mob* other) {
|
||||||
ItemInst* botweaponInst = GetBotItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance* botweaponInst = GetBotItem(EQEmu::legacy::SlotPrimary);
|
||||||
if(botweaponInst) {
|
if(botweaponInst) {
|
||||||
if(GetWeaponDamage(other, botweaponInst))
|
if(GetWeaponDamage(other, botweaponInst))
|
||||||
other->Damage(this, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab);
|
other->Damage(this, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab);
|
||||||
@ -5366,8 +5366,8 @@ bool Bot::IsBotAttackAllowed(Mob* attacker, Mob* target, bool& hasRuleDefined) {
|
|||||||
|
|
||||||
void Bot::EquipBot(std::string* errorMessage) {
|
void Bot::EquipBot(std::string* errorMessage) {
|
||||||
GetBotItems(m_inv, errorMessage);
|
GetBotItems(m_inv, errorMessage);
|
||||||
const ItemInst* inst = 0;
|
const EQEmu::ItemInstance* inst = 0;
|
||||||
const EQEmu::ItemBase* item = 0;
|
const EQEmu::ItemData* item = 0;
|
||||||
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::EQUIPMENT_END; ++i) {
|
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::EQUIPMENT_END; ++i) {
|
||||||
inst = GetBotItem(i);
|
inst = GetBotItem(i);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
@ -5494,7 +5494,7 @@ void Bot::SetAttackTimer() {
|
|||||||
float haste_mod = (GetHaste() * 0.01f);
|
float haste_mod = (GetHaste() * 0.01f);
|
||||||
attack_timer.SetAtTrigger(4000, true);
|
attack_timer.SetAtTrigger(4000, true);
|
||||||
Timer* TimerToUse = nullptr;
|
Timer* TimerToUse = nullptr;
|
||||||
const EQEmu::ItemBase* PrimaryWeapon = nullptr;
|
const EQEmu::ItemData* PrimaryWeapon = nullptr;
|
||||||
for (int i = EQEmu::legacy::SlotRange; i <= EQEmu::legacy::SlotSecondary; i++) {
|
for (int i = EQEmu::legacy::SlotRange; i <= EQEmu::legacy::SlotSecondary; i++) {
|
||||||
if (i == EQEmu::legacy::SlotPrimary)
|
if (i == EQEmu::legacy::SlotPrimary)
|
||||||
TimerToUse = &attack_timer;
|
TimerToUse = &attack_timer;
|
||||||
@ -5505,8 +5505,8 @@ void Bot::SetAttackTimer() {
|
|||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const EQEmu::ItemBase* ItemToUse = nullptr;
|
const EQEmu::ItemData* ItemToUse = nullptr;
|
||||||
ItemInst* ci = GetBotItem(i);
|
EQEmu::ItemInstance* ci = GetBotItem(i);
|
||||||
if (ci)
|
if (ci)
|
||||||
ItemToUse = ci->GetItem();
|
ItemToUse = ci->GetItem();
|
||||||
|
|
||||||
@ -7180,8 +7180,8 @@ void Bot::ProcessBotInspectionRequest(Bot* inspectedBot, Client* client) {
|
|||||||
insr->TargetID = inspectedBot->GetNPCTypeID();
|
insr->TargetID = inspectedBot->GetNPCTypeID();
|
||||||
insr->playerid = inspectedBot->GetID();
|
insr->playerid = inspectedBot->GetID();
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = 0;
|
const EQEmu::ItemData* item = 0;
|
||||||
const ItemInst* inst = 0;
|
const EQEmu::ItemInstance* inst = 0;
|
||||||
|
|
||||||
// Modded to display power source items (will only show up on SoF+ client inspect windows though.)
|
// Modded to display power source items (will only show up on SoF+ client inspect windows though.)
|
||||||
// I don't think bots are currently coded to use them..but, you'll have to use '#bot inventory list'
|
// I don't think bots are currently coded to use them..but, you'll have to use '#bot inventory list'
|
||||||
@ -7232,10 +7232,10 @@ void Bot::ProcessBotInspectionRequest(Bot* inspectedBot, Client* client) {
|
|||||||
|
|
||||||
void Bot::CalcItemBonuses(StatBonuses* newbon)
|
void Bot::CalcItemBonuses(StatBonuses* newbon)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* itemtmp = 0;
|
const EQEmu::ItemData* itemtmp = 0;
|
||||||
|
|
||||||
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= (EQEmu::legacy::EQUIPMENT_END + 1); ++i) {
|
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= (EQEmu::legacy::EQUIPMENT_END + 1); ++i) {
|
||||||
const ItemInst* item = GetBotItem((i == 22 ? 9999 : i));
|
const EQEmu::ItemInstance* item = GetBotItem((i == 22 ? 9999 : i));
|
||||||
if(item) {
|
if(item) {
|
||||||
AddItemBonuses(item, newbon);
|
AddItemBonuses(item, newbon);
|
||||||
}
|
}
|
||||||
@ -7252,7 +7252,7 @@ void Bot::CalcItemBonuses(StatBonuses* newbon)
|
|||||||
newbon->EnduranceRegen = CalcEnduranceRegenCap();
|
newbon->EnduranceRegen = CalcEnduranceRegenCap();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bot::AddItemBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug, bool isTribute, int rec_override) {
|
void Bot::AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug, bool isTribute, int rec_override) {
|
||||||
if (!inst || !inst->IsClassCommon())
|
if (!inst || !inst->IsClassCommon())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -7263,7 +7263,7 @@ void Bot::AddItemBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = inst->GetItem();
|
const EQEmu::ItemData *item = inst->GetItem();
|
||||||
|
|
||||||
if(!isTribute && !inst->IsEquipable(GetBaseRace(),GetClass()))
|
if(!isTribute && !inst->IsEquipable(GetBaseRace(),GetClass()))
|
||||||
{
|
{
|
||||||
@ -7630,7 +7630,7 @@ void Bot::CalcBotStats(bool showtext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Bot::CheckLoreConflict(const EQEmu::ItemBase* item) {
|
bool Bot::CheckLoreConflict(const EQEmu::ItemData* item) {
|
||||||
if (!item || !(item->LoreFlag))
|
if (!item || !(item->LoreFlag))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -8036,7 +8036,7 @@ uint8 Bot::GetNumberNeedingHealedInGroup(uint8 hpr, bool includePets) {
|
|||||||
int Bot::GetRawACNoShield(int &shield_ac) {
|
int Bot::GetRawACNoShield(int &shield_ac) {
|
||||||
int ac = itembonuses.AC + spellbonuses.AC;
|
int ac = itembonuses.AC + spellbonuses.AC;
|
||||||
shield_ac = 0;
|
shield_ac = 0;
|
||||||
ItemInst* inst = GetBotItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance* inst = GetBotItem(EQEmu::legacy::SlotSecondary);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
if (inst->GetItem()->ItemType == EQEmu::item::ItemTypeShield) {
|
if (inst->GetItem()->ItemType == EQEmu::item::ItemTypeShield) {
|
||||||
ac -= inst->GetItem()->AC;
|
ac -= inst->GetItem()->AC;
|
||||||
@ -8053,8 +8053,8 @@ int Bot::GetRawACNoShield(int &shield_ac) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32 Bot::CalcCurrentWeight() {
|
uint32 Bot::CalcCurrentWeight() {
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
ItemInst* inst;
|
EQEmu::ItemInstance* inst;
|
||||||
uint32 Total = 0;
|
uint32 Total = 0;
|
||||||
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::EQUIPMENT_END; ++i) {
|
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::EQUIPMENT_END; ++i) {
|
||||||
inst = GetBotItem(i);
|
inst = GetBotItem(i);
|
||||||
@ -8435,7 +8435,7 @@ bool Bot::DyeArmor(int16 slot_id, uint32 rgb, bool all_flag, bool save_flag)
|
|||||||
|
|
||||||
for (uint8 i = 0; i < EQEmu::textures::TexturePrimary; ++i) {
|
for (uint8 i = 0; i < EQEmu::textures::TexturePrimary; ++i) {
|
||||||
uint8 inv_slot = Inventory::CalcSlotFromMaterial(i);
|
uint8 inv_slot = Inventory::CalcSlotFromMaterial(i);
|
||||||
ItemInst* inst = m_inv.GetItem(inv_slot);
|
EQEmu::ItemInstance* inst = m_inv.GetItem(inv_slot);
|
||||||
if (!inst)
|
if (!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -8448,7 +8448,7 @@ bool Bot::DyeArmor(int16 slot_id, uint32 rgb, bool all_flag, bool save_flag)
|
|||||||
if (mat_slot == EQEmu::textures::TextureInvalid || mat_slot >= EQEmu::textures::TexturePrimary)
|
if (mat_slot == EQEmu::textures::TextureInvalid || mat_slot >= EQEmu::textures::TexturePrimary)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ItemInst* inst = m_inv.GetItem(slot_id);
|
EQEmu::ItemInstance* inst = m_inv.GetItem(slot_id);
|
||||||
if (!inst)
|
if (!inst)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|||||||
10
zone/bot.h
10
zone/bot.h
@ -260,7 +260,7 @@ public:
|
|||||||
virtual int32 CheckAggroAmount(uint16 spellid);
|
virtual int32 CheckAggroAmount(uint16 spellid);
|
||||||
virtual void CalcBonuses();
|
virtual void CalcBonuses();
|
||||||
void CalcItemBonuses(StatBonuses* newbon);
|
void CalcItemBonuses(StatBonuses* newbon);
|
||||||
void AddItemBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0);
|
void AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0);
|
||||||
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
|
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
|
||||||
virtual void MakePet(uint16 spell_id, const char* pettype, const char *petname = nullptr);
|
virtual void MakePet(uint16 spell_id, const char* pettype, const char *petname = nullptr);
|
||||||
virtual FACTION_VALUE GetReverseFactionCon(Mob* iOther);
|
virtual FACTION_VALUE GetReverseFactionCon(Mob* iOther);
|
||||||
@ -382,10 +382,10 @@ public:
|
|||||||
virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, EQEmu::CastingSlot slot = EQEmu::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 aa_id = 0);
|
virtual bool DoCastSpell(uint16 spell_id, uint16 target_id, EQEmu::CastingSlot slot = EQEmu::CastingSlot::Item, int32 casttime = -1, int32 mana_cost = -1, uint32* oSpellWillFinish = 0, uint32 item_slot = 0xFFFFFFFF, uint32 aa_id = 0);
|
||||||
|
|
||||||
// Bot Equipment & Inventory Class Methods
|
// Bot Equipment & Inventory Class Methods
|
||||||
void BotTradeSwapItem(Client* client, int16 lootSlot, const ItemInst* inst, const ItemInst* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap = true);
|
void BotTradeSwapItem(Client* client, int16 lootSlot, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* inst_swap, uint32 equipableSlots, std::string* errorMessage, bool swap = true);
|
||||||
void BotTradeAddItem(uint32 id, const ItemInst* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb = true);
|
void BotTradeAddItem(uint32 id, const EQEmu::ItemInstance* inst, int16 charges, uint32 equipableSlots, uint16 lootSlot, std::string* errorMessage, bool addToDb = true);
|
||||||
void EquipBot(std::string* errorMessage);
|
void EquipBot(std::string* errorMessage);
|
||||||
bool CheckLoreConflict(const EQEmu::ItemBase* item);
|
bool CheckLoreConflict(const EQEmu::ItemData* item);
|
||||||
virtual void UpdateEquipmentLight() { m_Light.Type[EQEmu::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); }
|
virtual void UpdateEquipmentLight() { m_Light.Type[EQEmu::lightsource::LightEquipment] = m_inv.FindBrightestLightType(); m_Light.Level[EQEmu::lightsource::LightEquipment] = EQEmu::lightsource::TypeToLevel(m_Light.Type[EQEmu::lightsource::LightEquipment]); }
|
||||||
|
|
||||||
// Static Class Methods
|
// Static Class Methods
|
||||||
@ -457,7 +457,7 @@ public:
|
|||||||
uint32 GetBotSpellID() { return npc_spells_id; }
|
uint32 GetBotSpellID() { return npc_spells_id; }
|
||||||
Mob* GetBotOwner() { return this->_botOwner; }
|
Mob* GetBotOwner() { return this->_botOwner; }
|
||||||
uint32 GetBotArcheryRange();
|
uint32 GetBotArcheryRange();
|
||||||
ItemInst* GetBotItem(uint32 slotID);
|
EQEmu::ItemInstance* GetBotItem(uint32 slotID);
|
||||||
virtual bool GetSpawnStatus() { return _spawnStatus; }
|
virtual bool GetSpawnStatus() { return _spawnStatus; }
|
||||||
uint8 GetPetChooserID() { return _petChooserID; }
|
uint8 GetPetChooserID() { return _petChooserID; }
|
||||||
bool IsPetChooser() { return _petChooser; }
|
bool IsPetChooser() { return _petChooser; }
|
||||||
|
|||||||
@ -2402,7 +2402,7 @@ namespace ActionableBots
|
|||||||
|
|
||||||
mod_skill_value = base_skill_value;
|
mod_skill_value = base_skill_value;
|
||||||
for (int16 index = EQEmu::legacy::EQUIPMENT_BEGIN; index <= EQEmu::legacy::EQUIPMENT_END; ++index) {
|
for (int16 index = EQEmu::legacy::EQUIPMENT_BEGIN; index <= EQEmu::legacy::EQUIPMENT_END; ++index) {
|
||||||
const ItemInst* indexed_item = bot_iter->GetBotItem(index);
|
const EQEmu::ItemInstance* indexed_item = bot_iter->GetBotItem(index);
|
||||||
if (indexed_item && indexed_item->GetItem()->SkillModType == skill_type)
|
if (indexed_item && indexed_item->GetItem()->SkillModType == skill_type)
|
||||||
mod_skill_value += (base_skill_value * (((float)indexed_item->GetItem()->SkillModValue) / 100.0f));
|
mod_skill_value += (base_skill_value * (((float)indexed_item->GetItem()->SkillModValue) / 100.0f));
|
||||||
}
|
}
|
||||||
@ -7062,8 +7062,8 @@ void bot_subcommand_inventory_list(Client *c, const Seperator *sep)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* inst = nullptr;
|
const EQEmu::ItemInstance* inst = nullptr;
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
bool is2Hweapon = false;
|
bool is2Hweapon = false;
|
||||||
|
|
||||||
std::string item_link;
|
std::string item_link;
|
||||||
@ -7132,8 +7132,8 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* itm = nullptr;
|
const EQEmu::ItemData* itm = nullptr;
|
||||||
const ItemInst* itminst = my_bot->GetBotItem(slotId);
|
const EQEmu::ItemInstance* itminst = my_bot->GetBotItem(slotId);
|
||||||
if (itminst)
|
if (itminst)
|
||||||
itm = itminst->GetItem();
|
itm = itminst->GetItem();
|
||||||
|
|
||||||
@ -7146,7 +7146,7 @@ void bot_subcommand_inventory_remove(Client *c, const Seperator *sep)
|
|||||||
if (!itminst)
|
if (!itminst)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ItemInst *itma = itminst->GetAugment(m);
|
EQEmu::ItemInstance *itma = itminst->GetAugment(m);
|
||||||
if (!itma)
|
if (!itma)
|
||||||
continue;
|
continue;
|
||||||
if (!c->CheckLoreConflict(itma->GetItem()))
|
if (!c->CheckLoreConflict(itma->GetItem()))
|
||||||
@ -7235,8 +7235,8 @@ void bot_subcommand_inventory_window(Client *c, const Seperator *sep)
|
|||||||
//linker.SetLinkType(linker.linkItemInst);
|
//linker.SetLinkType(linker.linkItemInst);
|
||||||
|
|
||||||
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= (EQEmu::legacy::EQUIPMENT_END + 1); ++i) {
|
for (int i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= (EQEmu::legacy::EQUIPMENT_END + 1); ++i) {
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
const ItemInst* inst = my_bot->CastToBot()->GetBotItem(i == 22 ? EQEmu::legacy::SlotPowerSource : i);
|
const EQEmu::ItemInstance* inst = my_bot->CastToBot()->GetBotItem(i == 22 ? EQEmu::legacy::SlotPowerSource : i);
|
||||||
if (inst)
|
if (inst)
|
||||||
item = inst->GetItem();
|
item = inst->GetItem();
|
||||||
|
|
||||||
|
|||||||
@ -1064,7 +1064,7 @@ bool BotDatabase::LoadItems(const uint32 bot_id, Inventory& inventory_inst)
|
|||||||
uint32 item_id = atoi(row[1]);
|
uint32 item_id = atoi(row[1]);
|
||||||
uint16 item_charges = (uint16)atoi(row[2]);
|
uint16 item_charges = (uint16)atoi(row[2]);
|
||||||
|
|
||||||
ItemInst* item_inst = database.CreateItem(
|
EQEmu::ItemInstance* item_inst = database.CreateItem(
|
||||||
item_id,
|
item_id,
|
||||||
item_charges,
|
item_charges,
|
||||||
(uint32)atoul(row[9]),
|
(uint32)atoul(row[9]),
|
||||||
@ -1177,7 +1177,7 @@ bool BotDatabase::LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const ItemInst* item_inst)
|
bool BotDatabase::SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEmu::ItemInstance* item_inst)
|
||||||
{
|
{
|
||||||
if (!bot_inst || !bot_inst->GetBotID() || (slot_id > EQEmu::legacy::EQUIPMENT_END && slot_id != EQEmu::legacy::SlotPowerSource))
|
if (!bot_inst || !bot_inst->GetBotID() || (slot_id > EQEmu::legacy::EQUIPMENT_END && slot_id != EQEmu::legacy::SlotPowerSource))
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -31,10 +31,14 @@
|
|||||||
|
|
||||||
|
|
||||||
class Bot;
|
class Bot;
|
||||||
class ItemInst;
|
|
||||||
class Inventory;
|
class Inventory;
|
||||||
struct BotsAvailableList;
|
struct BotsAvailableList;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class BotDatabase : public DBcore
|
class BotDatabase : public DBcore
|
||||||
{
|
{
|
||||||
@ -91,7 +95,7 @@ public:
|
|||||||
|
|
||||||
bool LoadItemBySlot(Bot* bot_inst);
|
bool LoadItemBySlot(Bot* bot_inst);
|
||||||
bool LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint32& item_id);
|
bool LoadItemBySlot(const uint32 bot_id, const uint32 slot_id, uint32& item_id);
|
||||||
bool SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const ItemInst* item_inst);
|
bool SaveItemBySlot(Bot* bot_inst, const uint32 slot_id, const EQEmu::ItemInstance* item_inst);
|
||||||
bool DeleteItemBySlot(const uint32 bot_id, const uint32 slot_id);
|
bool DeleteItemBySlot(const uint32 bot_id, const uint32 slot_id);
|
||||||
|
|
||||||
bool LoadEquipmentColor(const uint32 bot_id, const uint8 material_slot_id, uint32& rgb);
|
bool LoadEquipmentColor(const uint32 bot_id, const uint8 material_slot_id, uint32& rgb);
|
||||||
|
|||||||
@ -2017,7 +2017,7 @@ void Client::ReadBook(BookRequest_Struct *book) {
|
|||||||
out->window = book->window;
|
out->window = book->window;
|
||||||
if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF)
|
if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF)
|
||||||
{
|
{
|
||||||
const ItemInst *inst = m_inv[book->invslot];
|
const EQEmu::ItemInstance *inst = m_inv[book->invslot];
|
||||||
if(inst)
|
if(inst)
|
||||||
out->type = inst->GetItem()->Book;
|
out->type = inst->GetItem()->Book;
|
||||||
else
|
else
|
||||||
@ -2549,7 +2549,7 @@ void Client::SetFeigned(bool in_feigned) {
|
|||||||
feigned=in_feigned;
|
feigned=in_feigned;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQEmu::ItemBase* item, bool buying)
|
void Client::LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQEmu::ItemData* item, bool buying)
|
||||||
{
|
{
|
||||||
if(!player || !merchant || !item)
|
if(!player || !merchant || !item)
|
||||||
return;
|
return;
|
||||||
@ -2796,7 +2796,7 @@ bool Client::BindWound(Mob *bindmob, bool start, bool fail)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::SetMaterial(int16 in_slot, uint32 item_id) {
|
void Client::SetMaterial(int16 in_slot, uint32 item_id) {
|
||||||
const EQEmu::ItemBase* item = database.GetItem(item_id);
|
const EQEmu::ItemData* item = database.GetItem(item_id);
|
||||||
if (item && item->IsClassCommon())
|
if (item && item->IsClassCommon())
|
||||||
{
|
{
|
||||||
uint8 matslot = Inventory::CalcMaterialFromSlot(in_slot);
|
uint8 matslot = Inventory::CalcMaterialFromSlot(in_slot);
|
||||||
@ -3839,7 +3839,7 @@ void Client::SendOPTranslocateConfirm(Mob *Caster, uint16 SpellID) {
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
void Client::SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQEmu::ItemBase* item){
|
void Client::SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQEmu::ItemData* item){
|
||||||
auto outapp = new EQApplicationPacket(OP_PickPocket, sizeof(sPickPocket_Struct));
|
auto outapp = new EQApplicationPacket(OP_PickPocket, sizeof(sPickPocket_Struct));
|
||||||
sPickPocket_Struct *pick_out = (sPickPocket_Struct *)outapp->pBuffer;
|
sPickPocket_Struct *pick_out = (sPickPocket_Struct *)outapp->pBuffer;
|
||||||
pick_out->coin = amt;
|
pick_out->coin = amt;
|
||||||
@ -4013,7 +4013,7 @@ bool Client::KeyRingCheck(uint32 item_id)
|
|||||||
void Client::KeyRingList()
|
void Client::KeyRingList()
|
||||||
{
|
{
|
||||||
Message(4,"Keys on Keyring:");
|
Message(4,"Keys on Keyring:");
|
||||||
const EQEmu::ItemBase *item = 0;
|
const EQEmu::ItemData *item = 0;
|
||||||
for (auto iter = keyring.begin(); iter != keyring.end(); ++iter) {
|
for (auto iter = keyring.begin(); iter != keyring.end(); ++iter) {
|
||||||
if ((item = database.GetItem(*iter))!=nullptr) {
|
if ((item = database.GetItem(*iter))!=nullptr) {
|
||||||
Message(4,item->Name);
|
Message(4,item->Name);
|
||||||
@ -5440,7 +5440,7 @@ bool Client::TryReward(uint32 claim_id)
|
|||||||
uint32 free_slot = 0xFFFFFFFF;
|
uint32 free_slot = 0xFFFFFFFF;
|
||||||
|
|
||||||
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; ++i) {
|
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; ++i) {
|
||||||
ItemInst *item = GetInv().GetItem(i);
|
EQEmu::ItemInstance *item = GetInv().GetItem(i);
|
||||||
if (!item) {
|
if (!item) {
|
||||||
free_slot = i;
|
free_slot = i;
|
||||||
break;
|
break;
|
||||||
@ -5486,7 +5486,7 @@ bool Client::TryReward(uint32 claim_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto &ivr = (*iter);
|
auto &ivr = (*iter);
|
||||||
ItemInst *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges);
|
EQEmu::ItemInstance *claim = database.CreateItem(ivr.items[0].item_id, ivr.items[0].charges);
|
||||||
if (!claim) {
|
if (!claim) {
|
||||||
Save();
|
Save();
|
||||||
return true;
|
return true;
|
||||||
@ -5496,7 +5496,7 @@ bool Client::TryReward(uint32 claim_id)
|
|||||||
|
|
||||||
for (int y = 1; y < 8; y++)
|
for (int y = 1; y < 8; y++)
|
||||||
if (ivr.items[y].item_id && claim->GetItem()->ItemClass == 1) {
|
if (ivr.items[y].item_id && claim->GetItem()->ItemClass == 1) {
|
||||||
ItemInst *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges);
|
EQEmu::ItemInstance *item_temp = database.CreateItem(ivr.items[y].item_id, ivr.items[y].charges);
|
||||||
if (item_temp) {
|
if (item_temp) {
|
||||||
if (CheckLoreConflict(item_temp->GetItem())) {
|
if (CheckLoreConflict(item_temp->GetItem())) {
|
||||||
lore_conflict = true;
|
lore_conflict = true;
|
||||||
@ -5756,8 +5756,8 @@ void Client::ProcessInspectRequest(Client* requestee, Client* requester) {
|
|||||||
insr->TargetID = requester->GetID();
|
insr->TargetID = requester->GetID();
|
||||||
insr->playerid = requestee->GetID();
|
insr->playerid = requestee->GetID();
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
const ItemInst* inst = nullptr;
|
const EQEmu::ItemInstance* inst = nullptr;
|
||||||
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
||||||
for(int16 L = 0; L <= 20; L++) {
|
for(int16 L = 0; L <= 20; L++) {
|
||||||
inst = requestee->GetInv().GetItem(L);
|
inst = requestee->GetInv().GetItem(L);
|
||||||
@ -5768,7 +5768,7 @@ void Client::ProcessInspectRequest(Client* requestee, Client* requester) {
|
|||||||
strcpy(insr->itemnames[L], item->Name);
|
strcpy(insr->itemnames[L], item->Name);
|
||||||
if (inst && inst->GetOrnamentationAug(ornamentationAugtype))
|
if (inst && inst->GetOrnamentationAug(ornamentationAugtype))
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
const EQEmu::ItemData *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
||||||
insr->itemicons[L] = aug_item->Icon;
|
insr->itemicons[L] = aug_item->Icon;
|
||||||
}
|
}
|
||||||
else if (inst && inst->GetOrnamentationIcon())
|
else if (inst && inst->GetOrnamentationIcon())
|
||||||
@ -6949,7 +6949,7 @@ void Client::SendAltCurrencies() {
|
|||||||
uint32 i = 0;
|
uint32 i = 0;
|
||||||
auto iter = zone->AlternateCurrencies.begin();
|
auto iter = zone->AlternateCurrencies.begin();
|
||||||
while(iter != zone->AlternateCurrencies.end()) {
|
while(iter != zone->AlternateCurrencies.end()) {
|
||||||
const EQEmu::ItemBase* item = database.GetItem((*iter).item_id);
|
const EQEmu::ItemData* item = database.GetItem((*iter).item_id);
|
||||||
altc->entries[i].currency_number = (*iter).id;
|
altc->entries[i].currency_number = (*iter).id;
|
||||||
altc->entries[i].unknown00 = 1;
|
altc->entries[i].unknown00 = 1;
|
||||||
altc->entries[i].currency_number2 = (*iter).id;
|
altc->entries[i].currency_number2 = (*iter).id;
|
||||||
@ -7604,7 +7604,7 @@ void Client::DuplicateLoreMessage(uint32 ItemID)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item)
|
if(!item)
|
||||||
return;
|
return;
|
||||||
@ -8075,7 +8075,7 @@ void Client::TickItemCheck()
|
|||||||
void Client::TryItemTick(int slot)
|
void Client::TryItemTick(int slot)
|
||||||
{
|
{
|
||||||
int iid = 0;
|
int iid = 0;
|
||||||
const ItemInst* inst = m_inv[slot];
|
const EQEmu::ItemInstance* inst = m_inv[slot];
|
||||||
if(inst == 0) { return; }
|
if(inst == 0) { return; }
|
||||||
|
|
||||||
iid = inst->GetID();
|
iid = inst->GetID();
|
||||||
@ -8084,7 +8084,7 @@ void Client::TryItemTick(int slot)
|
|||||||
{
|
{
|
||||||
if (GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) && (zone->tick_items[iid].bagslot || slot <= EQEmu::legacy::EQUIPMENT_END))
|
if (GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) && (zone->tick_items[iid].bagslot || slot <= EQEmu::legacy::EQUIPMENT_END))
|
||||||
{
|
{
|
||||||
ItemInst* e_inst = (ItemInst*)inst;
|
EQEmu::ItemInstance* e_inst = (EQEmu::ItemInstance*)inst;
|
||||||
parse->EventItem(EVENT_ITEM_TICK, this, e_inst, nullptr, "", slot);
|
parse->EventItem(EVENT_ITEM_TICK, this, e_inst, nullptr, "", slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8094,7 +8094,7 @@ void Client::TryItemTick(int slot)
|
|||||||
|
|
||||||
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
||||||
{
|
{
|
||||||
ItemInst * a_inst = inst->GetAugment(x);
|
EQEmu::ItemInstance * a_inst = inst->GetAugment(x);
|
||||||
if(!a_inst) { continue; }
|
if(!a_inst) { continue; }
|
||||||
|
|
||||||
iid = a_inst->GetID();
|
iid = a_inst->GetID();
|
||||||
@ -8103,7 +8103,7 @@ void Client::TryItemTick(int slot)
|
|||||||
{
|
{
|
||||||
if( GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) )
|
if( GetLevel() >= zone->tick_items[iid].level && zone->random.Int(0, 100) >= (100 - zone->tick_items[iid].chance) )
|
||||||
{
|
{
|
||||||
ItemInst* e_inst = (ItemInst*)a_inst;
|
EQEmu::ItemInstance* e_inst = (EQEmu::ItemInstance*)a_inst;
|
||||||
parse->EventItem(EVENT_ITEM_TICK, this, e_inst, nullptr, "", slot);
|
parse->EventItem(EVENT_ITEM_TICK, this, e_inst, nullptr, "", slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -8131,7 +8131,7 @@ void Client::ItemTimerCheck()
|
|||||||
|
|
||||||
void Client::TryItemTimer(int slot)
|
void Client::TryItemTimer(int slot)
|
||||||
{
|
{
|
||||||
ItemInst* inst = m_inv.GetItem(slot);
|
EQEmu::ItemInstance* inst = m_inv.GetItem(slot);
|
||||||
if(!inst) {
|
if(!inst) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -8151,7 +8151,7 @@ void Client::TryItemTimer(int slot)
|
|||||||
|
|
||||||
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
for (int x = AUG_INDEX_BEGIN; x < EQEmu::legacy::ITEM_COMMON_SIZE; ++x)
|
||||||
{
|
{
|
||||||
ItemInst * a_inst = inst->GetAugment(x);
|
EQEmu::ItemInstance * a_inst = inst->GetAugment(x);
|
||||||
if(!a_inst) {
|
if(!a_inst) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -8167,7 +8167,7 @@ void Client::TryItemTimer(int slot)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::SendItemScale(ItemInst *inst) {
|
void Client::SendItemScale(EQEmu::ItemInstance *inst) {
|
||||||
int slot = m_inv.GetSlotByItemInst(inst);
|
int slot = m_inv.GetSlotByItemInst(inst);
|
||||||
if(slot != -1) {
|
if(slot != -1) {
|
||||||
inst->ScaleItem();
|
inst->ScaleItem();
|
||||||
@ -8321,7 +8321,7 @@ void Client::SetConsumption(int32 in_hunger, int32 in_thirst)
|
|||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::Consume(const EQEmu::ItemBase *item, uint8 type, int16 slot, bool auto_consume)
|
void Client::Consume(const EQEmu::ItemData *item, uint8 type, int16 slot, bool auto_consume)
|
||||||
{
|
{
|
||||||
if(!item) { return; }
|
if(!item) { return; }
|
||||||
|
|
||||||
@ -8436,7 +8436,7 @@ void Client::ShowNumHits()
|
|||||||
|
|
||||||
int Client::GetQuiverHaste(int delay)
|
int Client::GetQuiverHaste(int delay)
|
||||||
{
|
{
|
||||||
const ItemInst *pi = nullptr;
|
const EQEmu::ItemInstance *pi = nullptr;
|
||||||
for (int r = EQEmu::legacy::GENERAL_BEGIN; r <= EQEmu::legacy::GENERAL_END; r++) {
|
for (int r = EQEmu::legacy::GENERAL_BEGIN; r <= EQEmu::legacy::GENERAL_END; r++) {
|
||||||
pi = GetInv().GetItem(r);
|
pi = GetInv().GetItem(r);
|
||||||
if (pi && pi->IsClassBag() && pi->GetItem()->BagType == EQEmu::item::BagTypeQuiver &&
|
if (pi && pi->IsClassBag() && pi->GetItem()->BagType == EQEmu::item::BagTypeQuiver &&
|
||||||
|
|||||||
@ -31,7 +31,7 @@ enum WaterRegionType : int;
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "../common/timer.h"
|
#include "../common/timer.h"
|
||||||
@ -250,7 +250,7 @@ public:
|
|||||||
void KeyRingList();
|
void KeyRingList();
|
||||||
virtual bool IsClient() const { return true; }
|
virtual bool IsClient() const { return true; }
|
||||||
void CompleteConnect();
|
void CompleteConnect();
|
||||||
bool TryStacking(ItemInst* item, uint8 type = ItemPacketTrade, bool try_worn = true, bool try_cursor = true);
|
bool TryStacking(EQEmu::ItemInstance* item, uint8 type = ItemPacketTrade, bool try_worn = true, bool try_cursor = true);
|
||||||
void SendTraderPacket(Client* trader, uint32 Unknown72 = 51);
|
void SendTraderPacket(Client* trader, uint32 Unknown72 = 51);
|
||||||
void SendBuyerPacket(Client* Buyer);
|
void SendBuyerPacket(Client* Buyer);
|
||||||
GetItems_Struct* GetTraderItems();
|
GetItems_Struct* GetTraderItems();
|
||||||
@ -273,7 +273,7 @@ public:
|
|||||||
void SendTraderItem(uint32 item_id,uint16 quantity);
|
void SendTraderItem(uint32 item_id,uint16 quantity);
|
||||||
uint16 FindTraderItem(int32 SerialNumber,uint16 Quantity);
|
uint16 FindTraderItem(int32 SerialNumber,uint16 Quantity);
|
||||||
uint32 FindTraderItemSerialNumber(int32 ItemID);
|
uint32 FindTraderItemSerialNumber(int32 ItemID);
|
||||||
ItemInst* FindTraderItemBySerialNumber(int32 SerialNumber);
|
EQEmu::ItemInstance* FindTraderItemBySerialNumber(int32 SerialNumber);
|
||||||
void FindAndNukeTraderItem(int32 item_id,uint16 quantity,Client* customer,uint16 traderslot);
|
void FindAndNukeTraderItem(int32 item_id,uint16 quantity,Client* customer,uint16 traderslot);
|
||||||
void NukeTraderItem(uint16 slot, int16 charges, uint16 quantity, Client* customer, uint16 traderslot, int32 uniqueid, int32 itemid = 0);
|
void NukeTraderItem(uint16 slot, int16 charges, uint16 quantity, Client* customer, uint16 traderslot, int32 uniqueid, int32 itemid = 0);
|
||||||
void ReturnTraderReq(const EQApplicationPacket* app,int16 traderitemcharges, uint32 itemid = 0);
|
void ReturnTraderReq(const EQApplicationPacket* app,int16 traderitemcharges, uint32 itemid = 0);
|
||||||
@ -294,7 +294,7 @@ public:
|
|||||||
|
|
||||||
void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho);
|
void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho);
|
||||||
virtual bool Process();
|
virtual bool Process();
|
||||||
void LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQEmu::ItemBase* item, bool buying);
|
void LogMerchant(Client* player, Mob* merchant, uint32 quantity, uint32 price, const EQEmu::ItemData* item, bool buying);
|
||||||
void SendPacketQueue(bool Block = true);
|
void SendPacketQueue(bool Block = true);
|
||||||
void QueuePacket(const EQApplicationPacket* app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL, eqFilterType filter=FilterNone);
|
void QueuePacket(const EQApplicationPacket* app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL, eqFilterType filter=FilterNone);
|
||||||
void FastQueuePacket(EQApplicationPacket** app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL);
|
void FastQueuePacket(EQApplicationPacket** app, bool ack_req = true, CLIENT_CONN_STATUS = CLIENT_CONNECTINGALL);
|
||||||
@ -308,7 +308,7 @@ public:
|
|||||||
void LearnRecipe(uint32 recipeID);
|
void LearnRecipe(uint32 recipeID);
|
||||||
bool CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill);
|
bool CanIncreaseTradeskill(EQEmu::skills::SkillType tradeskill);
|
||||||
|
|
||||||
EQApplicationPacket* ReturnItemPacket(int16 slot_id, const ItemInst* inst, ItemPacketType packet_type);
|
EQApplicationPacket* ReturnItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type);
|
||||||
|
|
||||||
bool GetRevoked() const { return revoked; }
|
bool GetRevoked() const { return revoked; }
|
||||||
void SetRevoked(bool rev) { revoked = rev; }
|
void SetRevoked(bool rev) { revoked = rev; }
|
||||||
@ -403,7 +403,7 @@ public:
|
|||||||
|
|
||||||
inline uint8 GetLanguageSkill(uint16 n) const { return m_pp.languages[n]; }
|
inline uint8 GetLanguageSkill(uint16 n) const { return m_pp.languages[n]; }
|
||||||
|
|
||||||
void SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQEmu::ItemBase* item = nullptr);
|
void SendPickPocketResponse(Mob *from, uint32 amt, int type, const EQEmu::ItemData* item = nullptr);
|
||||||
|
|
||||||
inline const char* GetLastName() const { return lastname; }
|
inline const char* GetLastName() const { return lastname; }
|
||||||
|
|
||||||
@ -601,7 +601,7 @@ public:
|
|||||||
void AssignToInstance(uint16 instance_id);
|
void AssignToInstance(uint16 instance_id);
|
||||||
void RemoveFromInstance(uint16 instance_id);
|
void RemoveFromInstance(uint16 instance_id);
|
||||||
void WhoAll();
|
void WhoAll();
|
||||||
bool CheckLoreConflict(const EQEmu::ItemBase* item);
|
bool CheckLoreConflict(const EQEmu::ItemData* item);
|
||||||
void ChangeLastName(const char* in_lastname);
|
void ChangeLastName(const char* in_lastname);
|
||||||
void GetGroupAAs(GroupLeadershipAA_Struct *into) const;
|
void GetGroupAAs(GroupLeadershipAA_Struct *into) const;
|
||||||
void GetRaidAAs(RaidLeadershipAA_Struct *into) const;
|
void GetRaidAAs(RaidLeadershipAA_Struct *into) const;
|
||||||
@ -813,25 +813,25 @@ public:
|
|||||||
void Undye();
|
void Undye();
|
||||||
int32 GetItemIDAt(int16 slot_id);
|
int32 GetItemIDAt(int16 slot_id);
|
||||||
int32 GetAugmentIDAt(int16 slot_id, uint8 augslot);
|
int32 GetAugmentIDAt(int16 slot_id, uint8 augslot);
|
||||||
bool PutItemInInventory(int16 slot_id, const ItemInst& inst, bool client_update = false);
|
bool PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, bool client_update = false);
|
||||||
bool PushItemOnCursor(const ItemInst& inst, bool client_update = false);
|
bool PushItemOnCursor(const EQEmu::ItemInstance& inst, bool client_update = false);
|
||||||
void SendCursorBuffer();
|
void SendCursorBuffer();
|
||||||
void DeleteItemInInventory(int16 slot_id, int8 quantity = 0, bool client_update = false, bool update_db = true);
|
void DeleteItemInInventory(int16 slot_id, int8 quantity = 0, bool client_update = false, bool update_db = true);
|
||||||
bool SwapItem(MoveItem_Struct* move_in);
|
bool SwapItem(MoveItem_Struct* move_in);
|
||||||
void SwapItemResync(MoveItem_Struct* move_slots);
|
void SwapItemResync(MoveItem_Struct* move_slots);
|
||||||
void QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call = false);
|
void QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call = false);
|
||||||
void PutLootInInventory(int16 slot_id, const ItemInst &inst, ServerLootItem_Struct** bag_item_data = 0);
|
void PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, ServerLootItem_Struct** bag_item_data = 0);
|
||||||
bool AutoPutLootInInventory(ItemInst& inst, bool try_worn = false, bool try_cursor = true, ServerLootItem_Struct** bag_item_data = 0);
|
bool AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn = false, bool try_cursor = true, ServerLootItem_Struct** bag_item_data = 0);
|
||||||
bool SummonItem(uint32 item_id, int16 charges = -1, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, bool attuned = false, uint16 to_slot = EQEmu::legacy::SlotCursor, uint32 ornament_icon = 0, uint32 ornament_idfile = 0, uint32 ornament_hero_model = 0);
|
bool SummonItem(uint32 item_id, int16 charges = -1, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, bool attuned = false, uint16 to_slot = EQEmu::legacy::SlotCursor, uint32 ornament_icon = 0, uint32 ornament_idfile = 0, uint32 ornament_hero_model = 0);
|
||||||
void SetStats(uint8 type,int16 set_val);
|
void SetStats(uint8 type,int16 set_val);
|
||||||
void IncStats(uint8 type,int16 increase_val);
|
void IncStats(uint8 type,int16 increase_val);
|
||||||
void DropItem(int16 slot_id);
|
void DropItem(int16 slot_id);
|
||||||
|
|
||||||
int GetItemLinkHash(const ItemInst* inst); // move to ItemBase..or make use of the pre-calculated database field
|
int GetItemLinkHash(const EQEmu::ItemInstance* inst); // move to ItemData..or make use of the pre-calculated database field
|
||||||
|
|
||||||
void SendItemLink(const ItemInst* inst, bool sendtoall=false);
|
void SendItemLink(const EQEmu::ItemInstance* inst, bool sendtoall=false);
|
||||||
void SendLootItemInPacket(const ItemInst* inst, int16 slot_id);
|
void SendLootItemInPacket(const EQEmu::ItemInstance* inst, int16 slot_id);
|
||||||
void SendItemPacket(int16 slot_id, const ItemInst* inst, ItemPacketType packet_type);
|
void SendItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type);
|
||||||
bool IsValidSlot(uint32 slot);
|
bool IsValidSlot(uint32 slot);
|
||||||
bool IsBankSlot(uint32 slot);
|
bool IsBankSlot(uint32 slot);
|
||||||
|
|
||||||
@ -887,7 +887,7 @@ public:
|
|||||||
//Calculate vendor price modifier based on CHA: (reverse==selling)
|
//Calculate vendor price modifier based on CHA: (reverse==selling)
|
||||||
float CalcPriceMod(Mob* other = 0, bool reverse = false);
|
float CalcPriceMod(Mob* other = 0, bool reverse = false);
|
||||||
void ResetTrade();
|
void ResetTrade();
|
||||||
void DropInst(const ItemInst* inst);
|
void DropInst(const EQEmu::ItemInstance* inst);
|
||||||
bool TrainDiscipline(uint32 itemid);
|
bool TrainDiscipline(uint32 itemid);
|
||||||
void TrainDiscBySpellID(int32 spell_id);
|
void TrainDiscBySpellID(int32 spell_id);
|
||||||
int GetDiscSlotBySpellID(int32 spellid);
|
int GetDiscSlotBySpellID(int32 spellid);
|
||||||
@ -965,7 +965,7 @@ public:
|
|||||||
inline void UpdateTasksForItem(ActivityType Type, int ItemID, int Count=1) { if(taskstate) taskstate->UpdateTasksForItem(this, Type, ItemID, Count); }
|
inline void UpdateTasksForItem(ActivityType Type, int ItemID, int Count=1) { if(taskstate) taskstate->UpdateTasksForItem(this, Type, ItemID, Count); }
|
||||||
inline void UpdateTasksOnExplore(int ExploreID) { if(taskstate) taskstate->UpdateTasksOnExplore(this, ExploreID); }
|
inline void UpdateTasksOnExplore(int ExploreID) { if(taskstate) taskstate->UpdateTasksOnExplore(this, ExploreID); }
|
||||||
inline bool UpdateTasksOnSpeakWith(int NPCTypeID) { if(taskstate) return taskstate->UpdateTasksOnSpeakWith(this, NPCTypeID); else return false; }
|
inline bool UpdateTasksOnSpeakWith(int NPCTypeID) { if(taskstate) return taskstate->UpdateTasksOnSpeakWith(this, NPCTypeID); else return false; }
|
||||||
inline bool UpdateTasksOnDeliver(std::list<ItemInst*>& Items, int Cash, int NPCTypeID) { if (taskstate) return taskstate->UpdateTasksOnDeliver(this, Items, Cash, NPCTypeID); else return false; }
|
inline bool UpdateTasksOnDeliver(std::list<EQEmu::ItemInstance*>& Items, int Cash, int NPCTypeID) { if (taskstate) return taskstate->UpdateTasksOnDeliver(this, Items, Cash, NPCTypeID); else return false; }
|
||||||
inline void TaskSetSelector(Mob *mob, int TaskSetID) { if(taskmanager) taskmanager->TaskSetSelector(this, taskstate, mob, TaskSetID); }
|
inline void TaskSetSelector(Mob *mob, int TaskSetID) { if(taskmanager) taskmanager->TaskSetSelector(this, taskstate, mob, TaskSetID); }
|
||||||
inline void EnableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->EnableTask(CharacterID(), TaskCount, TaskList); }
|
inline void EnableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->EnableTask(CharacterID(), TaskCount, TaskList); }
|
||||||
inline void DisableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->DisableTask(CharacterID(), TaskCount, TaskList); }
|
inline void DisableTask(int TaskCount, int *TaskList) { if(taskstate) taskstate->DisableTask(CharacterID(), TaskCount, TaskList); }
|
||||||
@ -1080,7 +1080,7 @@ public:
|
|||||||
inline bool GetPendingGuildInvitation() { return PendingGuildInvitation; }
|
inline bool GetPendingGuildInvitation() { return PendingGuildInvitation; }
|
||||||
void LocateCorpse();
|
void LocateCorpse();
|
||||||
void SendTargetCommand(uint32 EntityID);
|
void SendTargetCommand(uint32 EntityID);
|
||||||
bool MoveItemToInventory(ItemInst *BInst, bool UpdateClient = false);
|
bool MoveItemToInventory(EQEmu::ItemInstance *BInst, bool UpdateClient = false);
|
||||||
void HandleRespawnFromHover(uint32 Option);
|
void HandleRespawnFromHover(uint32 Option);
|
||||||
bool IsHoveringForRespawn() { return RespawnFromHoverTimer.Enabled(); }
|
bool IsHoveringForRespawn() { return RespawnFromHoverTimer.Enabled(); }
|
||||||
std::list<RespawnOption> respawn_options;
|
std::list<RespawnOption> respawn_options;
|
||||||
@ -1173,7 +1173,7 @@ public:
|
|||||||
void TryItemTick(int slot);
|
void TryItemTick(int slot);
|
||||||
void ItemTimerCheck();
|
void ItemTimerCheck();
|
||||||
void TryItemTimer(int slot);
|
void TryItemTimer(int slot);
|
||||||
void SendItemScale(ItemInst *inst);
|
void SendItemScale(EQEmu::ItemInstance *inst);
|
||||||
|
|
||||||
int32 GetActSTR() { return( std::min(GetMaxSTR(), GetSTR()) ); }
|
int32 GetActSTR() { return( std::min(GetMaxSTR(), GetSTR()) ); }
|
||||||
int32 GetActSTA() { return( std::min(GetMaxSTA(), GetSTA()) ); }
|
int32 GetActSTA() { return( std::min(GetMaxSTA(), GetSTA()) ); }
|
||||||
@ -1186,10 +1186,10 @@ public:
|
|||||||
void SetAccountFlag(std::string flag, std::string val);
|
void SetAccountFlag(std::string flag, std::string val);
|
||||||
std::string GetAccountFlag(std::string flag);
|
std::string GetAccountFlag(std::string flag);
|
||||||
float GetDamageMultiplier(EQEmu::skills::SkillType how_long_has_this_been_missing);
|
float GetDamageMultiplier(EQEmu::skills::SkillType how_long_has_this_been_missing);
|
||||||
void Consume(const EQEmu::ItemBase *item, uint8 type, int16 slot, bool auto_consume);
|
void Consume(const EQEmu::ItemData *item, uint8 type, int16 slot, bool auto_consume);
|
||||||
void PlayMP3(const char* fname);
|
void PlayMP3(const char* fname);
|
||||||
void ExpeditionSay(const char *str, int ExpID);
|
void ExpeditionSay(const char *str, int ExpID);
|
||||||
int mod_client_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const ItemInst* weapon, Mob* other);
|
int mod_client_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemInstance* weapon, Mob* other);
|
||||||
bool mod_client_message(char* message, uint8 chan_num);
|
bool mod_client_message(char* message, uint8 chan_num);
|
||||||
bool mod_can_increase_skill(EQEmu::skills::SkillType skillid, Mob* against_who);
|
bool mod_can_increase_skill(EQEmu::skills::SkillType skillid, Mob* against_who);
|
||||||
int16 mod_increase_skill_chance(int16 chance, Mob* against_who);
|
int16 mod_increase_skill_chance(int16 chance, Mob* against_who);
|
||||||
@ -1201,16 +1201,16 @@ public:
|
|||||||
int16 mod_pet_power(int16 act_power, uint16 spell_id);
|
int16 mod_pet_power(int16 act_power, uint16 spell_id);
|
||||||
float mod_tradeskill_chance(float chance, DBTradeskillRecipe_Struct *spec);
|
float mod_tradeskill_chance(float chance, DBTradeskillRecipe_Struct *spec);
|
||||||
float mod_tradeskill_skillup(float chance_stage2);
|
float mod_tradeskill_skillup(float chance_stage2);
|
||||||
int32 mod_tribute_item_value(int32 pts, const ItemInst* item);
|
int32 mod_tribute_item_value(int32 pts, const EQEmu::ItemInstance* item);
|
||||||
void mod_client_death_npc(Mob* killerMob);
|
void mod_client_death_npc(Mob* killerMob);
|
||||||
void mod_client_death_duel(Mob* killerMob);
|
void mod_client_death_duel(Mob* killerMob);
|
||||||
void mod_client_death_env();
|
void mod_client_death_env();
|
||||||
int32 mod_client_xp(int32 in_exp, NPC *npc);
|
int32 mod_client_xp(int32 in_exp, NPC *npc);
|
||||||
uint32 mod_client_xp_for_level(uint32 xp, uint16 check_level);
|
uint32 mod_client_xp_for_level(uint32 xp, uint16 check_level);
|
||||||
int mod_client_haste_cap(int cap);
|
int mod_client_haste_cap(int cap);
|
||||||
int mod_consume(EQEmu::ItemBase *item, EQEmu::item::ItemType type, int change);
|
int mod_consume(EQEmu::ItemData *item, EQEmu::item::ItemType type, int change);
|
||||||
int mod_food_value(const EQEmu::ItemBase *item, int change);
|
int mod_food_value(const EQEmu::ItemData *item, int change);
|
||||||
int mod_drink_value(const EQEmu::ItemBase *item, int change);
|
int mod_drink_value(const EQEmu::ItemData *item, int change);
|
||||||
|
|
||||||
void SetEngagedRaidTarget(bool value) { EngagedRaidTarget = value; }
|
void SetEngagedRaidTarget(bool value) { EngagedRaidTarget = value; }
|
||||||
bool GetEngagedRaidTarget() const { return EngagedRaidTarget; }
|
bool GetEngagedRaidTarget() const { return EngagedRaidTarget; }
|
||||||
@ -1244,8 +1244,8 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
friend class Mob;
|
friend class Mob;
|
||||||
void CalcItemBonuses(StatBonuses* newbon);
|
void CalcItemBonuses(StatBonuses* newbon);
|
||||||
void AddItemBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0, bool ammo_slot_item = false);
|
void AddItemBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug = false, bool isTribute = false, int rec_override = 0, bool ammo_slot_item = false);
|
||||||
void AdditiveWornBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAug = false);
|
void AdditiveWornBonuses(const EQEmu::ItemInstance *inst, StatBonuses* newbon, bool isAug = false);
|
||||||
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
|
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
|
||||||
void CalcEdibleBonuses(StatBonuses* newbon);
|
void CalcEdibleBonuses(StatBonuses* newbon);
|
||||||
void ProcessItemCaps();
|
void ProcessItemCaps();
|
||||||
@ -1286,7 +1286,7 @@ private:
|
|||||||
void OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 InstanceID, float x, float y, float z);
|
void OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 InstanceID, float x, float y, float z);
|
||||||
void OPMemorizeSpell(const EQApplicationPacket *app);
|
void OPMemorizeSpell(const EQApplicationPacket *app);
|
||||||
void OPMoveCoin(const EQApplicationPacket* app);
|
void OPMoveCoin(const EQApplicationPacket* app);
|
||||||
void MoveItemCharges(ItemInst &from, int16 to_slot, uint8 type);
|
void MoveItemCharges(EQEmu::ItemInstance &from, int16 to_slot, uint8 type);
|
||||||
void OPGMTraining(const EQApplicationPacket *app);
|
void OPGMTraining(const EQApplicationPacket *app);
|
||||||
void OPGMEndTraining(const EQApplicationPacket *app);
|
void OPGMEndTraining(const EQApplicationPacket *app);
|
||||||
void OPGMTrainSkill(const EQApplicationPacket *app);
|
void OPGMTrainSkill(const EQApplicationPacket *app);
|
||||||
@ -1561,8 +1561,8 @@ private:
|
|||||||
|
|
||||||
bool interrogateinv_flag; // used to minimize log spamming by players
|
bool interrogateinv_flag; // used to minimize log spamming by players
|
||||||
|
|
||||||
void InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const ItemInst* inst, const ItemInst* parent, bool log, bool silent, bool &error, int depth);
|
void InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, bool log, bool silent, bool &error, int depth);
|
||||||
bool InterrogateInventory_error(int16 head, int16 index, const ItemInst* inst, const ItemInst* parent, int depth);
|
bool InterrogateInventory_error(int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, int depth);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -486,7 +486,7 @@ int32 Client::GetRawItemAC()
|
|||||||
int32 Total = 0;
|
int32 Total = 0;
|
||||||
// this skips MainAmmo..add an '=' conditional if that slot is required (original behavior)
|
// this skips MainAmmo..add an '=' conditional if that slot is required (original behavior)
|
||||||
for (int16 slot_id = EQEmu::legacy::EQUIPMENT_BEGIN; slot_id < EQEmu::legacy::EQUIPMENT_END; slot_id++) {
|
for (int16 slot_id = EQEmu::legacy::EQUIPMENT_BEGIN; slot_id < EQEmu::legacy::EQUIPMENT_END; slot_id++) {
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (inst && inst->IsClassCommon()) {
|
if (inst && inst->IsClassCommon()) {
|
||||||
Total += inst->GetItem()->AC;
|
Total += inst->GetItem()->AC;
|
||||||
}
|
}
|
||||||
@ -1316,8 +1316,8 @@ int32 Client::CalcManaRegenCap()
|
|||||||
|
|
||||||
uint32 Client::CalcCurrentWeight()
|
uint32 Client::CalcCurrentWeight()
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
ItemInst* ins;
|
EQEmu::ItemInstance* ins;
|
||||||
uint32 Total = 0;
|
uint32 Total = 0;
|
||||||
int x;
|
int x;
|
||||||
for (x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::SlotCursor; x++) { // include cursor or not?
|
for (x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::SlotCursor; x++) { // include cursor or not?
|
||||||
@ -1350,7 +1350,7 @@ uint32 Client::CalcCurrentWeight()
|
|||||||
bagslot += 1;
|
bagslot += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ItemInst* baginst = GetInv().GetItem(bagslot);
|
EQEmu::ItemInstance* baginst = GetInv().GetItem(bagslot);
|
||||||
if (baginst && baginst->GetItem() && baginst->IsClassBag()) {
|
if (baginst && baginst->GetItem() && baginst->IsClassBag()) {
|
||||||
reduction = baginst->GetItem()->BagWR;
|
reduction = baginst->GetItem()->BagWR;
|
||||||
}
|
}
|
||||||
@ -2219,7 +2219,7 @@ int Client::GetRawACNoShield(int &shield_ac) const
|
|||||||
{
|
{
|
||||||
int ac = itembonuses.AC + spellbonuses.AC + aabonuses.AC;
|
int ac = itembonuses.AC + spellbonuses.AC + aabonuses.AC;
|
||||||
shield_ac = 0;
|
shield_ac = 0;
|
||||||
const ItemInst *inst = m_inv.GetItem(EQEmu::legacy::SlotSecondary);
|
const EQEmu::ItemInstance *inst = m_inv.GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
if (inst->GetItem()->ItemType == EQEmu::item::ItemTypeShield) {
|
if (inst->GetItem()->ItemType == EQEmu::item::ItemTypeShield) {
|
||||||
ac -= inst->GetItem()->AC;
|
ac -= inst->GetItem()->AC;
|
||||||
|
|||||||
@ -1690,7 +1690,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app)
|
|||||||
/* First item cursor is sent in bulk inventory packet */
|
/* First item cursor is sent in bulk inventory packet */
|
||||||
if (iter == m_inv.cursor_cbegin())
|
if (iter == m_inv.cursor_cbegin())
|
||||||
continue;
|
continue;
|
||||||
const ItemInst *inst = *iter;
|
const EQEmu::ItemInstance *inst = *iter;
|
||||||
SendItemPacket(EQEmu::legacy::SlotCursor, inst, ItemPacketLimbo);
|
SendItemPacket(EQEmu::legacy::SlotCursor, inst, ItemPacketLimbo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1883,7 +1883,7 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
merchantid = tmp->CastToNPC()->MerchantType;
|
merchantid = tmp->CastToNPC()->MerchantType;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
std::list<MerchantList> merlist = zone->merchanttable[merchantid];
|
std::list<MerchantList> merlist = zone->merchanttable[merchantid];
|
||||||
std::list<MerchantList>::const_iterator itr;
|
std::list<MerchantList>::const_iterator itr;
|
||||||
@ -2026,7 +2026,7 @@ void Client::Handle_OP_AdventureMerchantPurchase(const EQApplicationPacket *app)
|
|||||||
if (item->MaxCharges != 0)
|
if (item->MaxCharges != 0)
|
||||||
charges = item->MaxCharges;
|
charges = item->MaxCharges;
|
||||||
|
|
||||||
ItemInst *inst = database.CreateItem(item, charges);
|
EQEmu::ItemInstance *inst = database.CreateItem(item, charges);
|
||||||
if (!AutoPutLootInInventory(*inst, true, true))
|
if (!AutoPutLootInInventory(*inst, true, true))
|
||||||
{
|
{
|
||||||
PutLootInInventory(EQEmu::legacy::SlotCursor, *inst);
|
PutLootInInventory(EQEmu::legacy::SlotCursor, *inst);
|
||||||
@ -2059,7 +2059,7 @@ void Client::Handle_OP_AdventureMerchantRequest(const EQApplicationPacket *app)
|
|||||||
merchantid = tmp->CastToNPC()->MerchantType;
|
merchantid = tmp->CastToNPC()->MerchantType;
|
||||||
tmp->CastToNPC()->FaceTarget(this->CastToMob());
|
tmp->CastToNPC()->FaceTarget(this->CastToMob());
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = 0;
|
const EQEmu::ItemData *item = 0;
|
||||||
std::list<MerchantList> merlist = zone->merchanttable[merchantid];
|
std::list<MerchantList> merlist = zone->merchanttable[merchantid];
|
||||||
std::list<MerchantList>::const_iterator itr;
|
std::list<MerchantList>::const_iterator itr;
|
||||||
for (itr = merlist.begin(); itr != merlist.end() && count<255; ++itr){
|
for (itr = merlist.begin(); itr != merlist.end() && count<255; ++itr){
|
||||||
@ -2158,8 +2158,8 @@ void Client::Handle_OP_AdventureMerchantSell(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(itemid);
|
const EQEmu::ItemData* item = database.GetItem(itemid);
|
||||||
ItemInst* inst = GetInv().GetItem(ams_in->slot);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(ams_in->slot);
|
||||||
if (!item || !inst){
|
if (!item || !inst){
|
||||||
Message(13, "You seemed to have misplaced that item...");
|
Message(13, "You seemed to have misplaced that item...");
|
||||||
return;
|
return;
|
||||||
@ -2435,7 +2435,7 @@ void Client::Handle_OP_AltCurrencyMerchantRequest(const EQApplicationPacket *app
|
|||||||
ss << alt_cur_id << "|1|" << alt_cur_id;
|
ss << alt_cur_id << "|1|" << alt_cur_id;
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
uint32 merchant_id = tar->MerchantType;
|
uint32 merchant_id = tar->MerchantType;
|
||||||
const EQEmu::ItemBase *item = nullptr;
|
const EQEmu::ItemData *item = nullptr;
|
||||||
|
|
||||||
std::list<MerchantList> merlist = zone->merchanttable[merchant_id];
|
std::list<MerchantList> merlist = zone->merchanttable[merchant_id];
|
||||||
std::list<MerchantList>::const_iterator itr;
|
std::list<MerchantList>::const_iterator itr;
|
||||||
@ -2495,7 +2495,7 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
uint32 cost = 0;
|
uint32 cost = 0;
|
||||||
uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id);
|
uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id);
|
||||||
uint32 merchant_id = tar->MerchantType;
|
uint32 merchant_id = tar->MerchantType;
|
||||||
@ -2551,7 +2551,7 @@ void Client::Handle_OP_AltCurrencyPurchase(const EQApplicationPacket *app)
|
|||||||
if (item->MaxCharges != 0)
|
if (item->MaxCharges != 0)
|
||||||
charges = item->MaxCharges;
|
charges = item->MaxCharges;
|
||||||
|
|
||||||
ItemInst *inst = database.CreateItem(item, charges);
|
EQEmu::ItemInstance *inst = database.CreateItem(item, charges);
|
||||||
if (!AutoPutLootInInventory(*inst, true, true))
|
if (!AutoPutLootInInventory(*inst, true, true))
|
||||||
{
|
{
|
||||||
PutLootInInventory(EQEmu::legacy::SlotCursor, *inst);
|
PutLootInInventory(EQEmu::legacy::SlotCursor, *inst);
|
||||||
@ -2635,7 +2635,7 @@ void Client::Handle_OP_AltCurrencySell(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* inst = GetInv().GetItem(sell->slot_id);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(sell->slot_id);
|
||||||
if (!inst) {
|
if (!inst) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2644,7 +2644,7 @@ void Client::Handle_OP_AltCurrencySell(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
uint32 cost = 0;
|
uint32 cost = 0;
|
||||||
uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id);
|
uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id);
|
||||||
uint32 merchant_id = tar->MerchantType;
|
uint32 merchant_id = tar->MerchantType;
|
||||||
@ -2732,12 +2732,12 @@ void Client::Handle_OP_AltCurrencySellSelection(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *inst = m_inv.GetItem(select->slot_id);
|
EQEmu::ItemInstance *inst = m_inv.GetItem(select->slot_id);
|
||||||
if (!inst) {
|
if (!inst) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
uint32 cost = 0;
|
uint32 cost = 0;
|
||||||
uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id);
|
uint32 current_currency = GetAlternateCurrencyValue(alt_cur_id);
|
||||||
uint32 merchant_id = tar->MerchantType;
|
uint32 merchant_id = tar->MerchantType;
|
||||||
@ -2816,9 +2816,9 @@ void Client::Handle_OP_ApplyPoison(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
uint32 ApplyPoisonSuccessResult = 0;
|
uint32 ApplyPoisonSuccessResult = 0;
|
||||||
ApplyPoison_Struct* ApplyPoisonData = (ApplyPoison_Struct*)app->pBuffer;
|
ApplyPoison_Struct* ApplyPoisonData = (ApplyPoison_Struct*)app->pBuffer;
|
||||||
const ItemInst* PrimaryWeapon = GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
const EQEmu::ItemInstance* PrimaryWeapon = GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
const ItemInst* SecondaryWeapon = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
const EQEmu::ItemInstance* SecondaryWeapon = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
const ItemInst* PoisonItemInstance = GetInv()[ApplyPoisonData->inventorySlot];
|
const EQEmu::ItemInstance* PoisonItemInstance = GetInv()[ApplyPoisonData->inventorySlot];
|
||||||
|
|
||||||
bool IsPoison = PoisonItemInstance && (PoisonItemInstance->GetItem()->ItemType == EQEmu::item::ItemTypePoison);
|
bool IsPoison = PoisonItemInstance && (PoisonItemInstance->GetItem()->ItemType == EQEmu::item::ItemTypePoison);
|
||||||
|
|
||||||
@ -2912,7 +2912,7 @@ void Client::Handle_OP_AugmentInfo(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AugmentInfo_Struct* AugInfo = (AugmentInfo_Struct*)app->pBuffer;
|
AugmentInfo_Struct* AugInfo = (AugmentInfo_Struct*)app->pBuffer;
|
||||||
const EQEmu::ItemBase * item = database.GetItem(AugInfo->itemid);
|
const EQEmu::ItemData * item = database.GetItem(AugInfo->itemid);
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
strn0cpy(AugInfo->augment_info, item->Name, 64);
|
strn0cpy(AugInfo->augment_info, item->Name, 64);
|
||||||
@ -2933,12 +2933,12 @@ void Client::Handle_OP_AugmentItem(const EQApplicationPacket *app)
|
|||||||
bool deleteItems = false;
|
bool deleteItems = false;
|
||||||
if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF)
|
if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF)
|
||||||
{
|
{
|
||||||
ItemInst *itemOneToPush = nullptr, *itemTwoToPush = nullptr;
|
EQEmu::ItemInstance *itemOneToPush = nullptr, *itemTwoToPush = nullptr;
|
||||||
|
|
||||||
//Log.Out(Logs::DebugLevel::Moderate, Logs::Debug, "cslot: %i aslot: %i cidx: %i aidx: %i act: %i dest: %i",
|
//Log.Out(Logs::DebugLevel::Moderate, Logs::Debug, "cslot: %i aslot: %i cidx: %i aidx: %i act: %i dest: %i",
|
||||||
// in_augment->container_slot, in_augment->augment_slot, in_augment->container_index, in_augment->augment_index, in_augment->augment_action, in_augment->dest_inst_id);
|
// in_augment->container_slot, in_augment->augment_slot, in_augment->container_index, in_augment->augment_index, in_augment->augment_action, in_augment->dest_inst_id);
|
||||||
|
|
||||||
ItemInst *tobe_auged = nullptr, *old_aug = nullptr, *new_aug = nullptr, *aug = nullptr, *solvent = nullptr;
|
EQEmu::ItemInstance *tobe_auged = nullptr, *old_aug = nullptr, *new_aug = nullptr, *aug = nullptr, *solvent = nullptr;
|
||||||
Inventory& user_inv = GetInv();
|
Inventory& user_inv = GetInv();
|
||||||
|
|
||||||
uint16 item_slot = in_augment->container_slot;
|
uint16 item_slot = in_augment->container_slot;
|
||||||
@ -3494,13 +3494,13 @@ void Client::Handle_OP_Barter(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
BarterItemSearchLinkRequest_Struct* bislr = (BarterItemSearchLinkRequest_Struct*)app->pBuffer;
|
BarterItemSearchLinkRequest_Struct* bislr = (BarterItemSearchLinkRequest_Struct*)app->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(bislr->ItemID);
|
const EQEmu::ItemData* item = database.GetItem(bislr->ItemID);
|
||||||
|
|
||||||
if (!item)
|
if (!item)
|
||||||
Message(13, "Error: This item does not exist!");
|
Message(13, "Error: This item does not exist!");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
SendItemPacket(0, inst, ItemPacketViewLink);
|
SendItemPacket(0, inst, ItemPacketViewLink);
|
||||||
@ -3527,13 +3527,13 @@ void Client::Handle_OP_Barter(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
BuyerItemSearchLinkRequest_Struct* bislr = (BuyerItemSearchLinkRequest_Struct*)app->pBuffer;
|
BuyerItemSearchLinkRequest_Struct* bislr = (BuyerItemSearchLinkRequest_Struct*)app->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(bislr->ItemID);
|
const EQEmu::ItemData* item = database.GetItem(bislr->ItemID);
|
||||||
|
|
||||||
if (!item)
|
if (!item)
|
||||||
Message(13, "Error: This item does not exist!");
|
Message(13, "Error: This item does not exist!");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
SendItemPacket(0, inst, ItemPacketViewLink);
|
SendItemPacket(0, inst, ItemPacketViewLink);
|
||||||
@ -3566,14 +3566,14 @@ void Client::Handle_OP_BazaarInspect(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
BazaarInspect_Struct* bis = (BazaarInspect_Struct*)app->pBuffer;
|
BazaarInspect_Struct* bis = (BazaarInspect_Struct*)app->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(bis->ItemID);
|
const EQEmu::ItemData* item = database.GetItem(bis->ItemID);
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
Message(13, "Error: This item does not exist!");
|
Message(13, "Error: This item does not exist!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
|
|
||||||
if (inst) {
|
if (inst) {
|
||||||
SendItemPacket(0, inst, ItemPacketViewLink);
|
SendItemPacket(0, inst, ItemPacketViewLink);
|
||||||
@ -3606,7 +3606,7 @@ void Client::Handle_OP_BazaarSearch(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
Client *c = entity_list.GetClientByName(nbis->Name);
|
Client *c = entity_list.GetClientByName(nbis->Name);
|
||||||
if (c) {
|
if (c) {
|
||||||
ItemInst* inst = c->FindTraderItemBySerialNumber(nbis->SerialNumber);
|
EQEmu::ItemInstance* inst = c->FindTraderItemBySerialNumber(nbis->SerialNumber);
|
||||||
if (inst)
|
if (inst)
|
||||||
SendItemPacket(0, inst, ItemPacketViewLink);
|
SendItemPacket(0, inst, ItemPacketViewLink);
|
||||||
}
|
}
|
||||||
@ -4007,11 +4007,11 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
|||||||
if (m_inv.SupportsClickCasting(castspell->inventoryslot) || slot == CastingSlot::PotionBelt) // sanity check
|
if (m_inv.SupportsClickCasting(castspell->inventoryslot) || slot == CastingSlot::PotionBelt) // sanity check
|
||||||
{
|
{
|
||||||
// packet field types will be reviewed as packet transistions occur
|
// packet field types will be reviewed as packet transistions occur
|
||||||
const ItemInst* inst = m_inv[castspell->inventoryslot]; //slot values are int16, need to check packet on this field
|
const EQEmu::ItemInstance* inst = m_inv[castspell->inventoryslot]; //slot values are int16, need to check packet on this field
|
||||||
//bool cancast = true;
|
//bool cancast = true;
|
||||||
if (inst && inst->IsClassCommon())
|
if (inst && inst->IsClassCommon())
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (item->Click.Effect != (uint32)castspell->spell_id)
|
if (item->Click.Effect != (uint32)castspell->spell_id)
|
||||||
{
|
{
|
||||||
database.SetMQDetectionFlag(account_name, name, "OP_CastSpell with item, tried to cast a different spell.", zone->GetShortName());
|
database.SetMQDetectionFlag(account_name, name, "OP_CastSpell with item, tried to cast a different spell.", zone->GetShortName());
|
||||||
@ -4025,7 +4025,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
if (GetLevel() >= item->Click.Level2)
|
if (GetLevel() >= item->Click.Level2)
|
||||||
{
|
{
|
||||||
ItemInst* p_inst = (ItemInst*)inst;
|
EQEmu::ItemInstance* p_inst = (EQEmu::ItemInstance*)inst;
|
||||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
@ -4045,7 +4045,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ItemInst* p_inst = (ItemInst*)inst;
|
EQEmu::ItemInstance* p_inst = (EQEmu::ItemInstance*)inst;
|
||||||
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
int i = parse->EventItem(EVENT_ITEM_CLICK_CAST, this, p_inst, nullptr, "", castspell->inventoryslot);
|
||||||
|
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
@ -4857,13 +4857,13 @@ void Client::Handle_OP_Consume(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *myitem = GetInv().GetItem(pcs->slot);
|
EQEmu::ItemInstance *myitem = GetInv().GetItem(pcs->slot);
|
||||||
if (myitem == nullptr) {
|
if (myitem == nullptr) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Consuming from empty slot %d", pcs->slot);
|
Log.Out(Logs::General, Logs::Error, "Consuming from empty slot %d", pcs->slot);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* eat_item = myitem->GetItem();
|
const EQEmu::ItemData* eat_item = myitem->GetItem();
|
||||||
if (pcs->type == 0x01) {
|
if (pcs->type == 0x01) {
|
||||||
Consume(eat_item, EQEmu::item::ItemTypeFood, pcs->slot, (pcs->auto_consumed == 0xffffffff));
|
Consume(eat_item, EQEmu::item::ItemTypeFood, pcs->slot, (pcs->auto_consumed == 0xffffffff));
|
||||||
}
|
}
|
||||||
@ -5146,7 +5146,7 @@ void Client::Handle_OP_DeleteItem(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DeleteItem_Struct* alc = (DeleteItem_Struct*)app->pBuffer;
|
DeleteItem_Struct* alc = (DeleteItem_Struct*)app->pBuffer;
|
||||||
const ItemInst *inst = GetInv().GetItem(alc->from_slot);
|
const EQEmu::ItemInstance *inst = GetInv().GetItem(alc->from_slot);
|
||||||
if (inst && inst->GetItem()->ItemType == EQEmu::item::ItemTypeAlcohol) {
|
if (inst && inst->GetItem()->ItemType == EQEmu::item::ItemTypeAlcohol) {
|
||||||
entity_list.MessageClose_StringID(this, true, 50, 0, DRINKING_MESSAGE, GetName(), inst->GetItem()->Name);
|
entity_list.MessageClose_StringID(this, true, 50, 0, DRINKING_MESSAGE, GetName(), inst->GetItem()->Name);
|
||||||
CheckIncreaseSkill(EQEmu::skills::SkillAlcoholTolerance, nullptr, 25);
|
CheckIncreaseSkill(EQEmu::skills::SkillAlcoholTolerance, nullptr, 25);
|
||||||
@ -6876,7 +6876,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
if (Slot >= 0)
|
if (Slot >= 0)
|
||||||
{
|
{
|
||||||
ItemInst* inst = GuildBanks->GetItem(GuildID(), GuildBankMainArea, Slot, 1);
|
EQEmu::ItemInstance* inst = GuildBanks->GetItem(GuildID(), GuildBankMainArea, Slot, 1);
|
||||||
|
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
@ -6896,7 +6896,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
GuildBankViewItem_Struct *gbvis = (GuildBankViewItem_Struct*)app->pBuffer;
|
GuildBankViewItem_Struct *gbvis = (GuildBankViewItem_Struct*)app->pBuffer;
|
||||||
|
|
||||||
ItemInst* inst = GuildBanks->GetItem(GuildID(), gbvis->Area, gbvis->SlotID, 1);
|
EQEmu::ItemInstance* inst = GuildBanks->GetItem(GuildID(), gbvis->Area, gbvis->SlotID, 1);
|
||||||
|
|
||||||
if (!inst)
|
if (!inst)
|
||||||
break;
|
break;
|
||||||
@ -6919,7 +6919,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *CursorItemInst = GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
EQEmu::ItemInstance *CursorItemInst = GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
||||||
|
|
||||||
bool Allowed = true;
|
bool Allowed = true;
|
||||||
|
|
||||||
@ -6932,7 +6932,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* CursorItem = CursorItemInst->GetItem();
|
const EQEmu::ItemData* CursorItem = CursorItemInst->GetItem();
|
||||||
|
|
||||||
if (!CursorItem->NoDrop || CursorItemInst->IsAttuned())
|
if (!CursorItem->NoDrop || CursorItemInst->IsAttuned())
|
||||||
{
|
{
|
||||||
@ -6999,7 +6999,7 @@ void Client::Handle_OP_GuildBank(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
GuildBankWithdrawItem_Struct *gbwis = (GuildBankWithdrawItem_Struct*)app->pBuffer;
|
GuildBankWithdrawItem_Struct *gbwis = (GuildBankWithdrawItem_Struct*)app->pBuffer;
|
||||||
|
|
||||||
ItemInst* inst = GuildBanks->GetItem(GuildID(), gbwis->Area, gbwis->SlotID, gbwis->Quantity);
|
EQEmu::ItemInstance* inst = GuildBanks->GetItem(GuildID(), gbwis->Area, gbwis->SlotID, gbwis->Quantity);
|
||||||
|
|
||||||
if (!inst)
|
if (!inst)
|
||||||
{
|
{
|
||||||
@ -8013,17 +8013,17 @@ void Client::Handle_OP_InspectAnswer(const EQApplicationPacket *app)
|
|||||||
EQApplicationPacket* outapp = app->Copy();
|
EQApplicationPacket* outapp = app->Copy();
|
||||||
InspectResponse_Struct* insr = (InspectResponse_Struct*)outapp->pBuffer;
|
InspectResponse_Struct* insr = (InspectResponse_Struct*)outapp->pBuffer;
|
||||||
Mob* tmp = entity_list.GetMob(insr->TargetID);
|
Mob* tmp = entity_list.GetMob(insr->TargetID);
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
|
|
||||||
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
int ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
||||||
for (int16 L = EQEmu::legacy::EQUIPMENT_BEGIN; L <= EQEmu::legacy::SlotWaist; L++) {
|
for (int16 L = EQEmu::legacy::EQUIPMENT_BEGIN; L <= EQEmu::legacy::SlotWaist; L++) {
|
||||||
const ItemInst* inst = GetInv().GetItem(L);
|
const EQEmu::ItemInstance* inst = GetInv().GetItem(L);
|
||||||
item = inst ? inst->GetItem() : nullptr;
|
item = inst ? inst->GetItem() : nullptr;
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
strcpy(insr->itemnames[L], item->Name);
|
strcpy(insr->itemnames[L], item->Name);
|
||||||
if (inst && inst->GetOrnamentationAug(ornamentationAugtype)) {
|
if (inst && inst->GetOrnamentationAug(ornamentationAugtype)) {
|
||||||
const EQEmu::ItemBase *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
const EQEmu::ItemData *aug_item = inst->GetOrnamentationAug(ornamentationAugtype)->GetItem();
|
||||||
insr->itemicons[L] = aug_item->Icon;
|
insr->itemicons[L] = aug_item->Icon;
|
||||||
}
|
}
|
||||||
else if (inst->GetOrnamentationIcon()) {
|
else if (inst->GetOrnamentationIcon()) {
|
||||||
@ -8036,7 +8036,7 @@ void Client::Handle_OP_InspectAnswer(const EQApplicationPacket *app)
|
|||||||
else { insr->itemicons[L] = 0xFFFFFFFF; }
|
else { insr->itemicons[L] = 0xFFFFFFFF; }
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* inst = GetInv().GetItem(EQEmu::legacy::SlotAmmo);
|
const EQEmu::ItemInstance* inst = GetInv().GetItem(EQEmu::legacy::SlotAmmo);
|
||||||
item = inst ? inst->GetItem() : nullptr;
|
item = inst ? inst->GetItem() : nullptr;
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
@ -8123,7 +8123,7 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app)
|
|||||||
// todo: verify ivrs->link_hash based on a rule, in case we don't care about people being able to sniff data
|
// todo: verify ivrs->link_hash based on a rule, in case we don't care about people being able to sniff data
|
||||||
// from the item DB
|
// from the item DB
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ivrs->item_id);
|
const EQEmu::ItemData *item = database.GetItem(ivrs->item_id);
|
||||||
if (!item) {
|
if (!item) {
|
||||||
if (ivrs->item_id != SAYLINK_ITEM_ID) {
|
if (ivrs->item_id != SAYLINK_ITEM_ID) {
|
||||||
Message(13, "Error: The item for the link you have clicked on does not exist!");
|
Message(13, "Error: The item for the link you have clicked on does not exist!");
|
||||||
@ -8181,7 +8181,7 @@ void Client::Handle_OP_ItemLinkClick(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *inst =
|
EQEmu::ItemInstance *inst =
|
||||||
database.CreateItem(item, item->MaxCharges, ivrs->augments[0], ivrs->augments[1], ivrs->augments[2],
|
database.CreateItem(item, item->MaxCharges, ivrs->augments[0], ivrs->augments[1], ivrs->augments[2],
|
||||||
ivrs->augments[3], ivrs->augments[4], ivrs->augments[5]);
|
ivrs->augments[3], ivrs->augments[4], ivrs->augments[5]);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
@ -8198,7 +8198,7 @@ void Client::Handle_OP_ItemLinkResponse(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LDONItemViewRequest_Struct* item = (LDONItemViewRequest_Struct*)app->pBuffer;
|
LDONItemViewRequest_Struct* item = (LDONItemViewRequest_Struct*)app->pBuffer;
|
||||||
ItemInst* inst = database.CreateItem(item->item_id);
|
EQEmu::ItemInstance* inst = database.CreateItem(item->item_id);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
SendItemPacket(0, inst, ItemPacketViewLink);
|
SendItemPacket(0, inst, ItemPacketViewLink);
|
||||||
safe_delete(inst);
|
safe_delete(inst);
|
||||||
@ -8214,7 +8214,7 @@ void Client::Handle_OP_ItemName(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ItemNamePacket_Struct *p = (ItemNamePacket_Struct*)app->pBuffer;
|
ItemNamePacket_Struct *p = (ItemNamePacket_Struct*)app->pBuffer;
|
||||||
const EQEmu::ItemBase *item = 0;
|
const EQEmu::ItemData *item = 0;
|
||||||
if ((item = database.GetItem(p->item_id)) != nullptr) {
|
if ((item = database.GetItem(p->item_id)) != nullptr) {
|
||||||
auto outapp = new EQApplicationPacket(OP_ItemName, sizeof(ItemNamePacket_Struct));
|
auto outapp = new EQApplicationPacket(OP_ItemName, sizeof(ItemNamePacket_Struct));
|
||||||
p = (ItemNamePacket_Struct*)outapp->pBuffer;
|
p = (ItemNamePacket_Struct*)outapp->pBuffer;
|
||||||
@ -8230,7 +8230,7 @@ void Client::Handle_OP_ItemPreview(const EQApplicationPacket *app)
|
|||||||
VERIFY_PACKET_LENGTH(OP_ItemPreview, app, ItemPreview_Struct);
|
VERIFY_PACKET_LENGTH(OP_ItemPreview, app, ItemPreview_Struct);
|
||||||
ItemPreview_Struct *ips = (ItemPreview_Struct *)app->pBuffer;
|
ItemPreview_Struct *ips = (ItemPreview_Struct *)app->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(ips->itemid);
|
const EQEmu::ItemData* item = database.GetItem(ips->itemid);
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
auto outapp = new EQApplicationPacket(OP_ItemPreview, strlen(item->Name) + strlen(item->Lore) +
|
auto outapp = new EQApplicationPacket(OP_ItemPreview, strlen(item->Name) + strlen(item->Lore) +
|
||||||
@ -8441,14 +8441,14 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (!inst) {
|
if (!inst) {
|
||||||
Message(0, "Error: item not found in inventory slot #%i", slot_id);
|
Message(0, "Error: item not found in inventory slot #%i", slot_id);
|
||||||
DeleteItemInInventory(slot_id, 0, true);
|
DeleteItemInInventory(slot_id, 0, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (!item) {
|
if (!item) {
|
||||||
Message(0, "Error: item not found in inventory slot #%i", slot_id);
|
Message(0, "Error: item not found in inventory slot #%i", slot_id);
|
||||||
DeleteItemInInventory(slot_id, 0, true);
|
DeleteItemInInventory(slot_id, 0, true);
|
||||||
@ -8484,7 +8484,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQEmu::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check
|
if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQEmu::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check
|
||||||
{
|
{
|
||||||
ItemInst* p_inst = (ItemInst*)inst;
|
EQEmu::ItemInstance* p_inst = (EQEmu::ItemInstance*)inst;
|
||||||
|
|
||||||
parse->EventItem(EVENT_ITEM_CLICK, this, p_inst, nullptr, "", slot_id);
|
parse->EventItem(EVENT_ITEM_CLICK, this, p_inst, nullptr, "", slot_id);
|
||||||
inst = m_inv[slot_id];
|
inst = m_inv[slot_id];
|
||||||
@ -8495,22 +8495,22 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
int r;
|
int r;
|
||||||
bool tryaug = false;
|
bool tryaug = false;
|
||||||
ItemInst* clickaug = 0;
|
EQEmu::ItemInstance* clickaug = 0;
|
||||||
EQEmu::ItemBase* augitem = 0;
|
EQEmu::ItemData* augitem = 0;
|
||||||
|
|
||||||
for (r = 0; r < EQEmu::legacy::ITEM_COMMON_SIZE; r++) {
|
for (r = 0; r < EQEmu::legacy::ITEM_COMMON_SIZE; r++) {
|
||||||
const ItemInst* aug_i = inst->GetAugment(r);
|
const EQEmu::ItemInstance* aug_i = inst->GetAugment(r);
|
||||||
if (!aug_i)
|
if (!aug_i)
|
||||||
continue;
|
continue;
|
||||||
const EQEmu::ItemBase* aug = aug_i->GetItem();
|
const EQEmu::ItemData* aug = aug_i->GetItem();
|
||||||
if (!aug)
|
if (!aug)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if ((aug->Click.Type == EQEmu::item::ItemEffectClick) || (aug->Click.Type == EQEmu::item::ItemEffectExpendable) || (aug->Click.Type == EQEmu::item::ItemEffectEquipClick) || (aug->Click.Type == EQEmu::item::ItemEffectClick2))
|
if ((aug->Click.Type == EQEmu::item::ItemEffectClick) || (aug->Click.Type == EQEmu::item::ItemEffectExpendable) || (aug->Click.Type == EQEmu::item::ItemEffectEquipClick) || (aug->Click.Type == EQEmu::item::ItemEffectClick2))
|
||||||
{
|
{
|
||||||
tryaug = true;
|
tryaug = true;
|
||||||
clickaug = (ItemInst*)aug_i;
|
clickaug = (EQEmu::ItemInstance*)aug_i;
|
||||||
augitem = (EQEmu::ItemBase*)aug;
|
augitem = (EQEmu::ItemData*)aug;
|
||||||
spell_id = aug->Click.Effect;
|
spell_id = aug->Click.Effect;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -9678,8 +9678,8 @@ void Client::Handle_OP_MoveItem(const EQApplicationPacket *app)
|
|||||||
if (mi->from_slot != mi->to_slot && (mi->from_slot <= EQEmu::legacy::GENERAL_END || mi->from_slot > 39) && IsValidSlot(mi->from_slot) && IsValidSlot(mi->to_slot))
|
if (mi->from_slot != mi->to_slot && (mi->from_slot <= EQEmu::legacy::GENERAL_END || mi->from_slot > 39) && IsValidSlot(mi->from_slot) && IsValidSlot(mi->to_slot))
|
||||||
{
|
{
|
||||||
char *detect = nullptr;
|
char *detect = nullptr;
|
||||||
const ItemInst *itm_from = GetInv().GetItem(mi->from_slot);
|
const EQEmu::ItemInstance *itm_from = GetInv().GetItem(mi->from_slot);
|
||||||
const ItemInst *itm_to = GetInv().GetItem(mi->to_slot);
|
const EQEmu::ItemInstance *itm_to = GetInv().GetItem(mi->to_slot);
|
||||||
MakeAnyLenString(&detect, "Player issued a move item from %u(item id %u) to %u(item id %u) while casting %u.",
|
MakeAnyLenString(&detect, "Player issued a move item from %u(item id %u) to %u(item id %u) while casting %u.",
|
||||||
mi->from_slot,
|
mi->from_slot,
|
||||||
itm_from ? itm_from->GetID() : 0,
|
itm_from ? itm_from->GetID() : 0,
|
||||||
@ -10545,7 +10545,7 @@ void Client::Handle_OP_PotionBelt(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (mptbs->Action == 0) {
|
if (mptbs->Action == 0) {
|
||||||
const EQEmu::ItemBase *BaseItem = database.GetItem(mptbs->ItemID);
|
const EQEmu::ItemData *BaseItem = database.GetItem(mptbs->ItemID);
|
||||||
if (BaseItem) {
|
if (BaseItem) {
|
||||||
m_pp.potionbelt.Items[mptbs->SlotNumber].ID = BaseItem->ID;
|
m_pp.potionbelt.Items[mptbs->SlotNumber].ID = BaseItem->ID;
|
||||||
m_pp.potionbelt.Items[mptbs->SlotNumber].Icon = BaseItem->Icon;
|
m_pp.potionbelt.Items[mptbs->SlotNumber].Icon = BaseItem->Icon;
|
||||||
@ -12031,12 +12031,12 @@ void Client::Handle_OP_Shielding(const EQApplicationPacket *app)
|
|||||||
Shielding_Struct* shield = (Shielding_Struct*)app->pBuffer;
|
Shielding_Struct* shield = (Shielding_Struct*)app->pBuffer;
|
||||||
shield_target = entity_list.GetMob(shield->target_id);
|
shield_target = entity_list.GetMob(shield->target_id);
|
||||||
bool ack = false;
|
bool ack = false;
|
||||||
ItemInst* inst = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
if (!shield_target)
|
if (!shield_target)
|
||||||
return;
|
return;
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* shield = inst->GetItem();
|
const EQEmu::ItemData* shield = inst->GetItem();
|
||||||
if (shield && shield->ItemType == EQEmu::item::ItemTypeShield)
|
if (shield && shield->ItemType == EQEmu::item::ItemTypeShield)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < 2; x++)
|
for (int x = 0; x < 2; x++)
|
||||||
@ -12139,7 +12139,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
uint32 prevcharges = 0;
|
uint32 prevcharges = 0;
|
||||||
if (item_id == 0) { //check to see if its on the temporary table
|
if (item_id == 0) { //check to see if its on the temporary table
|
||||||
std::list<TempMerchantList> tmp_merlist = zone->tmpmerchanttable[tmp->GetNPCTypeID()];
|
std::list<TempMerchantList> tmp_merlist = zone->tmpmerchanttable[tmp->GetNPCTypeID()];
|
||||||
@ -12200,7 +12200,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app)
|
|||||||
else
|
else
|
||||||
charges = item->MaxCharges;
|
charges = item->MaxCharges;
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item, charges);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, charges);
|
||||||
|
|
||||||
int SinglePrice = 0;
|
int SinglePrice = 0;
|
||||||
if (RuleB(Merchant, UsePriceMod))
|
if (RuleB(Merchant, UsePriceMod))
|
||||||
@ -12321,7 +12321,7 @@ void Client::Handle_OP_ShopPlayerBuy(const EQApplicationPacket *app)
|
|||||||
qsaudit->items[0].item_id = item->ID;
|
qsaudit->items[0].item_id = item->ID;
|
||||||
qsaudit->items[0].charges = mpo->quantity;
|
qsaudit->items[0].charges = mpo->quantity;
|
||||||
|
|
||||||
const ItemInst* audit_inst = m_inv[freeslotid];
|
const EQEmu::ItemInstance* audit_inst = m_inv[freeslotid];
|
||||||
|
|
||||||
if (audit_inst) {
|
if (audit_inst) {
|
||||||
qsaudit->items[0].aug_1 = audit_inst->GetAugmentItemID(0);
|
qsaudit->items[0].aug_1 = audit_inst->GetAugmentItemID(0);
|
||||||
@ -12387,8 +12387,8 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
|
|||||||
uint32 itemid = GetItemIDAt(mp->itemslot);
|
uint32 itemid = GetItemIDAt(mp->itemslot);
|
||||||
if (itemid == 0)
|
if (itemid == 0)
|
||||||
return;
|
return;
|
||||||
const EQEmu::ItemBase* item = database.GetItem(itemid);
|
const EQEmu::ItemData* item = database.GetItem(itemid);
|
||||||
ItemInst* inst = GetInv().GetItem(mp->itemslot);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(mp->itemslot);
|
||||||
if (!item || !inst){
|
if (!item || !inst){
|
||||||
Message(13, "You seemed to have misplaced that item..");
|
Message(13, "You seemed to have misplaced that item..");
|
||||||
return;
|
return;
|
||||||
@ -12433,7 +12433,7 @@ void Client::Handle_OP_ShopPlayerSell(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
int freeslot = 0;
|
int freeslot = 0;
|
||||||
if (charges > 0 && (freeslot = zone->SaveTempItem(vendor->CastToNPC()->MerchantType, vendor->GetNPCTypeID(), itemid, charges, true)) > 0){
|
if (charges > 0 && (freeslot = zone->SaveTempItem(vendor->CastToNPC()->MerchantType, vendor->GetNPCTypeID(), itemid, charges, true)) > 0){
|
||||||
ItemInst* inst2 = inst->Clone();
|
EQEmu::ItemInstance* inst2 = inst->Clone();
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (inst2 == nullptr)
|
if (inst2 == nullptr)
|
||||||
@ -13498,7 +13498,7 @@ void Client::Handle_OP_Trader(const EQApplicationPacket *app)
|
|||||||
TradeItemsValid = false;
|
TradeItemsValid = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(gis->Items[i]);
|
const EQEmu::ItemData *Item = database.GetItem(gis->Items[i]);
|
||||||
|
|
||||||
if (!Item) {
|
if (!Item) {
|
||||||
Message(13, "Unexpected error. Unable to start trader mode");
|
Message(13, "Unexpected error. Unable to start trader mode");
|
||||||
|
|||||||
@ -296,7 +296,7 @@ bool Client::Process() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(AutoFireEnabled()){
|
if(AutoFireEnabled()){
|
||||||
ItemInst *ranged = GetInv().GetItem(EQEmu::legacy::SlotRange);
|
EQEmu::ItemInstance *ranged = GetInv().GetItem(EQEmu::legacy::SlotRange);
|
||||||
if(ranged)
|
if(ranged)
|
||||||
{
|
{
|
||||||
if (ranged->GetItem() && ranged->GetItem()->ItemType == EQEmu::item::ItemTypeBow){
|
if (ranged->GetItem() && ranged->GetItem()->ItemType == EQEmu::item::ItemTypeBow){
|
||||||
@ -391,7 +391,7 @@ bool Client::Process() {
|
|||||||
}
|
}
|
||||||
else if (auto_attack_target->GetHP() > -10) // -10 so we can watch people bleed in PvP
|
else if (auto_attack_target->GetHP() > -10) // -10 so we can watch people bleed in PvP
|
||||||
{
|
{
|
||||||
ItemInst *wpn = GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
EQEmu::ItemInstance *wpn = GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
TryWeaponProc(wpn, auto_attack_target, EQEmu::legacy::SlotPrimary);
|
TryWeaponProc(wpn, auto_attack_target, EQEmu::legacy::SlotPrimary);
|
||||||
|
|
||||||
DoAttackRounds(auto_attack_target, EQEmu::legacy::SlotPrimary);
|
DoAttackRounds(auto_attack_target, EQEmu::legacy::SlotPrimary);
|
||||||
@ -430,7 +430,7 @@ bool Client::Process() {
|
|||||||
else if(auto_attack_target->GetHP() > -10) {
|
else if(auto_attack_target->GetHP() > -10) {
|
||||||
CheckIncreaseSkill(EQEmu::skills::SkillDualWield, auto_attack_target, -10);
|
CheckIncreaseSkill(EQEmu::skills::SkillDualWield, auto_attack_target, -10);
|
||||||
if (CheckDualWield()) {
|
if (CheckDualWield()) {
|
||||||
ItemInst *wpn = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance *wpn = GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
TryWeaponProc(wpn, auto_attack_target, EQEmu::legacy::SlotSecondary);
|
TryWeaponProc(wpn, auto_attack_target, EQEmu::legacy::SlotSecondary);
|
||||||
|
|
||||||
DoAttackRounds(auto_attack_target, EQEmu::legacy::SlotSecondary);
|
DoAttackRounds(auto_attack_target, EQEmu::legacy::SlotSecondary);
|
||||||
@ -738,7 +738,7 @@ void Client::BulkSendInventoryItems()
|
|||||||
// LINKDEAD TRADE ITEMS
|
// LINKDEAD TRADE ITEMS
|
||||||
// Move trade slot items back into normal inventory..need them there now for the proceeding validity checks
|
// Move trade slot items back into normal inventory..need them there now for the proceeding validity checks
|
||||||
for (int16 slot_id = EQEmu::legacy::TRADE_BEGIN; slot_id <= EQEmu::legacy::TRADE_END; slot_id++) {
|
for (int16 slot_id = EQEmu::legacy::TRADE_BEGIN; slot_id <= EQEmu::legacy::TRADE_END; slot_id++) {
|
||||||
ItemInst* inst = m_inv.PopItem(slot_id);
|
EQEmu::ItemInstance* inst = m_inv.PopItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
bool is_arrow = (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false;
|
bool is_arrow = (inst->GetItem()->ItemType == EQEmu::item::ItemTypeArrow) ? true : false;
|
||||||
int16 free_slot_id = m_inv.FindFreeSlot(inst->IsClassBag(), true, inst->GetItem()->Size, is_arrow);
|
int16 free_slot_id = m_inv.FindFreeSlot(inst->IsClassBag(), true, inst->GetItem()->Size, is_arrow);
|
||||||
@ -764,7 +764,7 @@ void Client::BulkSendInventoryItems()
|
|||||||
|
|
||||||
// Possessions items
|
// Possessions items
|
||||||
for (int16 slot_id = SLOT_BEGIN; slot_id < EQEmu::legacy::TYPE_POSSESSIONS_SIZE; slot_id++) {
|
for (int16 slot_id = SLOT_BEGIN; slot_id < EQEmu::legacy::TYPE_POSSESSIONS_SIZE; slot_id++) {
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (!inst)
|
if (!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -778,7 +778,7 @@ void Client::BulkSendInventoryItems()
|
|||||||
|
|
||||||
// PowerSource item
|
// PowerSource item
|
||||||
if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) {
|
if (ClientVersion() >= EQEmu::versions::ClientVersion::SoF) {
|
||||||
const ItemInst* inst = m_inv[EQEmu::legacy::SlotPowerSource];
|
const EQEmu::ItemInstance* inst = m_inv[EQEmu::legacy::SlotPowerSource];
|
||||||
if (inst) {
|
if (inst) {
|
||||||
inst->Serialize(ob, EQEmu::legacy::SlotPowerSource);
|
inst->Serialize(ob, EQEmu::legacy::SlotPowerSource);
|
||||||
|
|
||||||
@ -791,7 +791,7 @@ void Client::BulkSendInventoryItems()
|
|||||||
|
|
||||||
// Bank items
|
// Bank items
|
||||||
for (int16 slot_id = EQEmu::legacy::BANK_BEGIN; slot_id <= EQEmu::legacy::BANK_END; slot_id++) {
|
for (int16 slot_id = EQEmu::legacy::BANK_BEGIN; slot_id <= EQEmu::legacy::BANK_END; slot_id++) {
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (!inst)
|
if (!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -805,7 +805,7 @@ void Client::BulkSendInventoryItems()
|
|||||||
|
|
||||||
// SharedBank items
|
// SharedBank items
|
||||||
for (int16 slot_id = EQEmu::legacy::SHARED_BANK_BEGIN; slot_id <= EQEmu::legacy::SHARED_BANK_END; slot_id++) {
|
for (int16 slot_id = EQEmu::legacy::SHARED_BANK_BEGIN; slot_id <= EQEmu::legacy::SHARED_BANK_END; slot_id++) {
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (!inst)
|
if (!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -825,12 +825,12 @@ void Client::BulkSendInventoryItems()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::BulkSendMerchantInventory(int merchant_id, int npcid) {
|
void Client::BulkSendMerchantInventory(int merchant_id, int npcid) {
|
||||||
const EQEmu::ItemBase* handyitem = nullptr;
|
const EQEmu::ItemData* handyitem = nullptr;
|
||||||
uint32 numItemSlots = 80; //The max number of items passed in the transaction.
|
uint32 numItemSlots = 80; //The max number of items passed in the transaction.
|
||||||
if (m_ClientVersionBit & EQEmu::versions::bit_RoFAndLater) { // RoF+ can send 200 items
|
if (m_ClientVersionBit & EQEmu::versions::bit_RoFAndLater) { // RoF+ can send 200 items
|
||||||
numItemSlots = 200;
|
numItemSlots = 200;
|
||||||
}
|
}
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
std::list<MerchantList> merlist = zone->merchanttable[merchant_id];
|
std::list<MerchantList> merlist = zone->merchanttable[merchant_id];
|
||||||
std::list<MerchantList>::const_iterator itr;
|
std::list<MerchantList>::const_iterator itr;
|
||||||
Mob* merch = entity_list.GetMobByNpcTypeID(npcid);
|
Mob* merch = entity_list.GetMobByNpcTypeID(npcid);
|
||||||
@ -879,7 +879,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) {
|
|||||||
int charges = 1;
|
int charges = 1;
|
||||||
if (item->IsClassCommon())
|
if (item->IsClassCommon())
|
||||||
charges = item->MaxCharges;
|
charges = item->MaxCharges;
|
||||||
ItemInst* inst = database.CreateItem(item, charges);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, charges);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
if (RuleB(Merchant, UsePriceMod)) {
|
if (RuleB(Merchant, UsePriceMod)) {
|
||||||
inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false)));
|
inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false)));
|
||||||
@ -920,7 +920,7 @@ void Client::BulkSendMerchantInventory(int merchant_id, int npcid) {
|
|||||||
// charges=ml.charges;
|
// charges=ml.charges;
|
||||||
//else
|
//else
|
||||||
charges = item->MaxCharges;
|
charges = item->MaxCharges;
|
||||||
ItemInst* inst = database.CreateItem(item, charges);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, charges);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
if (RuleB(Merchant, UsePriceMod)) {
|
if (RuleB(Merchant, UsePriceMod)) {
|
||||||
inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false)));
|
inst->SetPrice((item->Price * (RuleR(Merchant, SellCostMod)) * item->SellRate * Client::CalcPriceMod(merch, false)));
|
||||||
@ -1095,11 +1095,11 @@ void Client::OPMemorizeSpell(const EQApplicationPacket* app)
|
|||||||
switch(memspell->scribing)
|
switch(memspell->scribing)
|
||||||
{
|
{
|
||||||
case memSpellScribing: { // scribing spell to book
|
case memSpellScribing: { // scribing spell to book
|
||||||
const ItemInst* inst = m_inv[EQEmu::legacy::SlotCursor];
|
const EQEmu::ItemInstance* inst = m_inv[EQEmu::legacy::SlotCursor];
|
||||||
|
|
||||||
if (inst && inst->IsClassCommon())
|
if (inst && inst->IsClassCommon())
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
|
|
||||||
if (RuleB(Character, RestrictSpellScribing) && !item->IsEquipable(GetRace(), GetClass())) {
|
if (RuleB(Character, RestrictSpellScribing) && !item->IsEquipable(GetRace(), GetClass())) {
|
||||||
Message_StringID(13, CANNOT_USE_ITEM);
|
Message_StringID(13, CANNOT_USE_ITEM);
|
||||||
|
|||||||
@ -2545,9 +2545,9 @@ void command_peekinv(Client *c, const Seperator *sep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Client* targetClient = c->GetTarget()->CastToClient();
|
Client* targetClient = c->GetTarget()->CastToClient();
|
||||||
const ItemInst* inst_main = nullptr;
|
const EQEmu::ItemInstance* inst_main = nullptr;
|
||||||
const ItemInst* inst_sub = nullptr;
|
const EQEmu::ItemInstance* inst_sub = nullptr;
|
||||||
const EQEmu::ItemBase* item_data = nullptr;
|
const EQEmu::ItemData* item_data = nullptr;
|
||||||
std::string item_link;
|
std::string item_link;
|
||||||
EQEmu::SayLinkEngine linker;
|
EQEmu::SayLinkEngine linker;
|
||||||
linker.SetLinkType(EQEmu::saylink::SayLinkItemInst);
|
linker.SetLinkType(EQEmu::saylink::SayLinkItemInst);
|
||||||
@ -2780,7 +2780,7 @@ void command_interrogateinv(Client *c, const Seperator *sep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Client* target = nullptr;
|
Client* target = nullptr;
|
||||||
std::map<int16, const ItemInst*> instmap;
|
std::map<int16, const EQEmu::ItemInstance*> instmap;
|
||||||
bool log = false;
|
bool log = false;
|
||||||
bool silent = false;
|
bool silent = false;
|
||||||
bool error = false;
|
bool error = false;
|
||||||
@ -3146,8 +3146,8 @@ void command_equipitem(Client *c, const Seperator *sep)
|
|||||||
{
|
{
|
||||||
uint32 slot_id = atoi(sep->arg[1]);
|
uint32 slot_id = atoi(sep->arg[1]);
|
||||||
if (sep->IsNumber(1) && ((slot_id >= EQEmu::legacy::EQUIPMENT_BEGIN) && (slot_id <= EQEmu::legacy::EQUIPMENT_END) || (slot_id == EQEmu::legacy::SlotPowerSource))) {
|
if (sep->IsNumber(1) && ((slot_id >= EQEmu::legacy::EQUIPMENT_BEGIN) && (slot_id <= EQEmu::legacy::EQUIPMENT_END) || (slot_id == EQEmu::legacy::SlotPowerSource))) {
|
||||||
const ItemInst* from_inst = c->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
const EQEmu::ItemInstance* from_inst = c->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
||||||
const ItemInst* to_inst = c->GetInv().GetItem(slot_id); // added (desync issue when forcing stack to stack)
|
const EQEmu::ItemInstance* to_inst = c->GetInv().GetItem(slot_id); // added (desync issue when forcing stack to stack)
|
||||||
bool partialmove = false;
|
bool partialmove = false;
|
||||||
int16 movecount;
|
int16 movecount;
|
||||||
|
|
||||||
@ -5519,7 +5519,7 @@ void command_summonitem(Client *c, const Seperator *sep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int16 item_status = 0;
|
int16 item_status = 0;
|
||||||
const EQEmu::ItemBase* item = database.GetItem(itemid);
|
const EQEmu::ItemData* item = database.GetItem(itemid);
|
||||||
if (item) {
|
if (item) {
|
||||||
item_status = static_cast<int16>(item->MinStatus);
|
item_status = static_cast<int16>(item->MinStatus);
|
||||||
}
|
}
|
||||||
@ -5558,7 +5558,7 @@ void command_giveitem(Client *c, const Seperator *sep)
|
|||||||
Client *t = c->GetTarget()->CastToClient();
|
Client *t = c->GetTarget()->CastToClient();
|
||||||
uint32 itemid = atoi(sep->arg[1]);
|
uint32 itemid = atoi(sep->arg[1]);
|
||||||
int16 item_status = 0;
|
int16 item_status = 0;
|
||||||
const EQEmu::ItemBase* item = database.GetItem(itemid);
|
const EQEmu::ItemData* item = database.GetItem(itemid);
|
||||||
if(item) {
|
if(item) {
|
||||||
item_status = static_cast<int16>(item->MinStatus);
|
item_status = static_cast<int16>(item->MinStatus);
|
||||||
}
|
}
|
||||||
@ -5611,7 +5611,7 @@ void command_itemsearch(Client *c, const Seperator *sep)
|
|||||||
{
|
{
|
||||||
const char *search_criteria=sep->argplus[1];
|
const char *search_criteria=sep->argplus[1];
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
std::string item_link;
|
std::string item_link;
|
||||||
EQEmu::SayLinkEngine linker;
|
EQEmu::SayLinkEngine linker;
|
||||||
linker.SetLinkType(EQEmu::saylink::SayLinkItemData);
|
linker.SetLinkType(EQEmu::saylink::SayLinkItemData);
|
||||||
@ -7126,7 +7126,7 @@ void command_path(Client *c, const Seperator *sep)
|
|||||||
void Client::Undye() {
|
void Client::Undye() {
|
||||||
for (int cur_slot = EQEmu::textures::TextureBegin; cur_slot <= EQEmu::textures::LastTexture; cur_slot++) {
|
for (int cur_slot = EQEmu::textures::TextureBegin; cur_slot <= EQEmu::textures::LastTexture; cur_slot++) {
|
||||||
uint8 slot2=SlotConvert(cur_slot);
|
uint8 slot2=SlotConvert(cur_slot);
|
||||||
ItemInst* inst = m_inv.GetItem(slot2);
|
EQEmu::ItemInstance* inst = m_inv.GetItem(slot2);
|
||||||
|
|
||||||
if(inst != nullptr) {
|
if(inst != nullptr) {
|
||||||
inst->SetColor(inst->GetItem()->Color);
|
inst->SetColor(inst->GetItem()->Color);
|
||||||
@ -10235,7 +10235,7 @@ void command_zopp(Client *c, const Seperator *sep)
|
|||||||
uint32 itemid = atoi(sep->arg[3]);
|
uint32 itemid = atoi(sep->arg[3]);
|
||||||
int16 charges = sep->argnum == 4 ? atoi(sep->arg[4]) : 1; // defaults to 1 charge if not specified
|
int16 charges = sep->argnum == 4 ? atoi(sep->arg[4]) : 1; // defaults to 1 charge if not specified
|
||||||
|
|
||||||
const EQEmu::ItemBase* FakeItem = database.GetItem(itemid);
|
const EQEmu::ItemData* FakeItem = database.GetItem(itemid);
|
||||||
|
|
||||||
if (!FakeItem) {
|
if (!FakeItem) {
|
||||||
c->Message(13, "Error: Item [%u] is not a valid item id.", itemid);
|
c->Message(13, "Error: Item [%u] is not a valid item id.", itemid);
|
||||||
@ -10243,7 +10243,7 @@ void command_zopp(Client *c, const Seperator *sep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int16 item_status = 0;
|
int16 item_status = 0;
|
||||||
const EQEmu::ItemBase* item = database.GetItem(itemid);
|
const EQEmu::ItemData* item = database.GetItem(itemid);
|
||||||
if(item) {
|
if(item) {
|
||||||
item_status = static_cast<int16>(item->MinStatus);
|
item_status = static_cast<int16>(item->MinStatus);
|
||||||
}
|
}
|
||||||
@ -10257,7 +10257,7 @@ void command_zopp(Client *c, const Seperator *sep)
|
|||||||
c->Message(0, "Processing request..results may cause unpredictable behavior.");
|
c->Message(0, "Processing request..results may cause unpredictable behavior.");
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* FakeItemInst = database.CreateItem(FakeItem, charges);
|
EQEmu::ItemInstance* FakeItemInst = database.CreateItem(FakeItem, charges);
|
||||||
c->SendItemPacket(slotid, FakeItemInst, packettype);
|
c->SendItemPacket(slotid, FakeItemInst, packettype);
|
||||||
c->Message(0, "Sending zephyr op packet to client - [%s] %s (%u) with %i %s to slot %i.",
|
c->Message(0, "Sending zephyr op packet to client - [%s] %s (%u) with %i %s to slot %i.",
|
||||||
packettype == ItemPacketTrade ? "Trade" : "Summon", FakeItem->Name, itemid, charges,
|
packettype == ItemPacketTrade ? "Trade" : "Summon", FakeItem->Name, itemid, charges,
|
||||||
|
|||||||
@ -568,7 +568,11 @@ struct MercData {
|
|||||||
uint32 NPCID;
|
uint32 NPCID;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ItemInst;
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
class Mob;
|
class Mob;
|
||||||
// All data associated with a single trade
|
// All data associated with a single trade
|
||||||
class Trade
|
class Trade
|
||||||
@ -606,7 +610,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
// Send item data for trade item to other person involved in trade
|
// Send item data for trade item to other person involved in trade
|
||||||
void SendItemData(const ItemInst* inst, int16 dest_slot_id);
|
void SendItemData(const EQEmu::ItemInstance* inst, int16 dest_slot_id);
|
||||||
|
|
||||||
uint32 with_id;
|
uint32 with_id;
|
||||||
Mob* owner;
|
Mob* owner;
|
||||||
|
|||||||
@ -268,7 +268,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob (
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
PlayerProfile_Struct *pp = &client->GetPP();
|
PlayerProfile_Struct *pp = &client->GetPP();
|
||||||
ItemInst *item;
|
EQEmu::ItemInstance *item;
|
||||||
|
|
||||||
/* Check if Zone has Graveyard First */
|
/* Check if Zone has Graveyard First */
|
||||||
if(!zone->HasGraveyard()) {
|
if(!zone->HasGraveyard()) {
|
||||||
@ -387,7 +387,7 @@ Corpse::Corpse(Client* client, int32 in_rezexp) : Mob (
|
|||||||
Save();
|
Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Corpse::MoveItemToCorpse(Client *client, ItemInst *inst, int16 equipSlot, std::list<uint32> &removedList)
|
void Corpse::MoveItemToCorpse(Client *client, EQEmu::ItemInstance *inst, int16 equipSlot, std::list<uint32> &removedList)
|
||||||
{
|
{
|
||||||
AddItem(
|
AddItem(
|
||||||
inst->GetItem()->ID,
|
inst->GetItem()->ID,
|
||||||
@ -979,8 +979,8 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a
|
|||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
if(Loot_Request_Type == 5) {
|
if(Loot_Request_Type == 5) {
|
||||||
int pkitem = GetPlayerKillItem();
|
int pkitem = GetPlayerKillItem();
|
||||||
const EQEmu::ItemBase* item = database.GetItem(pkitem);
|
const EQEmu::ItemData* item = database.GetItem(pkitem);
|
||||||
ItemInst* inst = database.CreateItem(item, item->MaxCharges);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, item->MaxCharges);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
if (item->RecastDelay)
|
if (item->RecastDelay)
|
||||||
inst->SetRecastTimestamp(timestamps.count(item->RecastType) ? timestamps.at(item->RecastType) : 0);
|
inst->SetRecastTimestamp(timestamps.count(item->RecastType) ? timestamps.at(item->RecastType) : 0);
|
||||||
@ -994,7 +994,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a
|
|||||||
}
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
const EQEmu::ItemBase* item = 0;
|
const EQEmu::ItemData* item = 0;
|
||||||
ItemList::iterator cur,end;
|
ItemList::iterator cur,end;
|
||||||
cur = itemlist.begin();
|
cur = itemlist.begin();
|
||||||
end = itemlist.end();
|
end = itemlist.end();
|
||||||
@ -1013,7 +1013,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a
|
|||||||
if(i < corpselootlimit) {
|
if(i < corpselootlimit) {
|
||||||
item = database.GetItem(item_data->item_id);
|
item = database.GetItem(item_data->item_id);
|
||||||
if(client && item) {
|
if(client && item) {
|
||||||
ItemInst* inst = database.CreateItem(item, item_data->charges, item_data->aug_1, item_data->aug_2, item_data->aug_3, item_data->aug_4, item_data->aug_5, item_data->aug_6, item_data->attuned);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, item_data->charges, item_data->aug_1, item_data->aug_2, item_data->aug_3, item_data->aug_4, item_data->aug_5, item_data->aug_6, item_data->attuned);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
if (item->RecastDelay)
|
if (item->RecastDelay)
|
||||||
inst->SetRecastTimestamp(timestamps.count(item->RecastType) ? timestamps.at(item->RecastType) : 0);
|
inst->SetRecastTimestamp(timestamps.count(item->RecastType) ? timestamps.at(item->RecastType) : 0);
|
||||||
@ -1110,8 +1110,8 @@ void Corpse::LootItem(Client* client, const EQApplicationPacket* app) {
|
|||||||
being_looted_by = 0xFFFFFFFF;
|
being_looted_by = 0xFFFFFFFF;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const EQEmu::ItemBase* item = 0;
|
const EQEmu::ItemData* item = 0;
|
||||||
ItemInst *inst = 0;
|
EQEmu::ItemInstance *inst = 0;
|
||||||
ServerLootItem_Struct* item_data = nullptr, *bag_item_data[10];
|
ServerLootItem_Struct* item_data = nullptr, *bag_item_data[10];
|
||||||
|
|
||||||
memset(bag_item_data, 0, sizeof(bag_item_data));
|
memset(bag_item_data, 0, sizeof(bag_item_data));
|
||||||
@ -1149,7 +1149,7 @@ void Corpse::LootItem(Client* client, const EQApplicationPacket* app) {
|
|||||||
|
|
||||||
if (inst->IsAugmented()) {
|
if (inst->IsAugmented()) {
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
||||||
ItemInst *itm = inst->GetAugment(i);
|
EQEmu::ItemInstance *itm = inst->GetAugment(i);
|
||||||
if (itm) {
|
if (itm) {
|
||||||
if (client->CheckLoreConflict(itm->GetItem())) {
|
if (client->CheckLoreConflict(itm->GetItem())) {
|
||||||
client->Message_StringID(0, LOOT_LORE_ERROR);
|
client->Message_StringID(0, LOOT_LORE_ERROR);
|
||||||
@ -1305,7 +1305,7 @@ void Corpse::QueryLoot(Client* to) {
|
|||||||
else
|
else
|
||||||
x < corpselootlimit ? sitem->lootslot = x : sitem->lootslot = 0xFFFF;
|
x < corpselootlimit ? sitem->lootslot = x : sitem->lootslot = 0xFFFF;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(sitem->item_id);
|
const EQEmu::ItemData* item = database.GetItem(sitem->item_id);
|
||||||
|
|
||||||
if (item)
|
if (item)
|
||||||
to->Message((sitem->lootslot == 0xFFFF), "LootSlot: %i (EquipSlot: %i) Item: %s (%d), Count: %i", static_cast<int16>(sitem->lootslot), sitem->equip_slot, item->Name, item->ID, sitem->charges);
|
to->Message((sitem->lootslot == 0xFFFF), "LootSlot: %i (EquipSlot: %i) Item: %s (%d), Count: %i", static_cast<int16>(sitem->lootslot), sitem->equip_slot, item->Name, item->ID, sitem->charges);
|
||||||
@ -1319,7 +1319,7 @@ void Corpse::QueryLoot(Client* to) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sitem->lootslot=y;
|
sitem->lootslot=y;
|
||||||
const EQEmu::ItemBase* item = database.GetItem(sitem->item_id);
|
const EQEmu::ItemData* item = database.GetItem(sitem->item_id);
|
||||||
|
|
||||||
if (item)
|
if (item)
|
||||||
to->Message(0, "LootSlot: %i Item: %s (%d), Count: %i", sitem->lootslot, item->Name, item->ID, sitem->charges);
|
to->Message(0, "LootSlot: %i Item: %s (%d), Count: %i", sitem->lootslot, item->Name, item->ID, sitem->charges);
|
||||||
@ -1414,7 +1414,7 @@ uint32 Corpse::GetEquipment(uint8 material_slot) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32 Corpse::GetEquipmentColor(uint8 material_slot) const {
|
uint32 Corpse::GetEquipmentColor(uint8 material_slot) const {
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
|
|
||||||
if (material_slot > EQEmu::textures::LastTexture) {
|
if (material_slot > EQEmu::textures::LastTexture) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -24,13 +24,17 @@
|
|||||||
class Client;
|
class Client;
|
||||||
class EQApplicationPacket;
|
class EQApplicationPacket;
|
||||||
class Group;
|
class Group;
|
||||||
class ItemInst;
|
|
||||||
class NPC;
|
class NPC;
|
||||||
class Raid;
|
class Raid;
|
||||||
|
|
||||||
struct ExtraAttackOptions;
|
struct ExtraAttackOptions;
|
||||||
struct NPCType;
|
struct NPCType;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
#define MAX_LOOTERS 72
|
#define MAX_LOOTERS 72
|
||||||
|
|
||||||
class Corpse : public Mob {
|
class Corpse : public Mob {
|
||||||
@ -128,7 +132,7 @@ class Corpse : public Mob {
|
|||||||
virtual void UpdateEquipmentLight();
|
virtual void UpdateEquipmentLight();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void MoveItemToCorpse(Client *client, ItemInst *inst, int16 equipSlot, std::list<uint32> &removedList);
|
void MoveItemToCorpse(Client *client, EQEmu::ItemInstance *inst, int16 equipSlot, std::list<uint32> &removedList);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool is_player_corpse; /* Determines if Player Corpse or not */
|
bool is_player_corpse; /* Determines if Player Corpse or not */
|
||||||
|
|||||||
@ -188,7 +188,7 @@ void Doors::HandleClick(Client* sender, uint8 trigger)
|
|||||||
uint8 keepoffkeyring = GetNoKeyring();
|
uint8 keepoffkeyring = GetNoKeyring();
|
||||||
uint32 haskey = 0;
|
uint32 haskey = 0;
|
||||||
uint32 playerkey = 0;
|
uint32 playerkey = 0;
|
||||||
const ItemInst *lockpicks = sender->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
const EQEmu::ItemInstance *lockpicks = sender->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
||||||
|
|
||||||
haskey = sender->GetInv().HasItem(keyneeded, 1);
|
haskey = sender->GetInv().HasItem(keyneeded, 1);
|
||||||
|
|
||||||
|
|||||||
@ -481,7 +481,7 @@ int32 Client::GetActSpellCasttime(uint16 spell_id, int32 casttime)
|
|||||||
bool Client::TrainDiscipline(uint32 itemid) {
|
bool Client::TrainDiscipline(uint32 itemid) {
|
||||||
|
|
||||||
//get the item info
|
//get the item info
|
||||||
const EQEmu::ItemBase *item = database.GetItem(itemid);
|
const EQEmu::ItemData *item = database.GetItem(itemid);
|
||||||
if(item == nullptr) {
|
if(item == nullptr) {
|
||||||
Message(13, "Unable to find the tome you turned in!");
|
Message(13, "Unable to find the tome you turned in!");
|
||||||
Log.Out(Logs::General, Logs::Error, "Unable to find turned in tome id %lu\n", (unsigned long)itemid);
|
Log.Out(Logs::General, Logs::Error, "Unable to find turned in tome id %lu\n", (unsigned long)itemid);
|
||||||
|
|||||||
@ -157,7 +157,7 @@ void PerlembParser::ReloadQuests() {
|
|||||||
spell_quest_status_.clear();
|
spell_quest_status_.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob,
|
int PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob,
|
||||||
uint32 extradata, bool global, std::vector<EQEmu::Any> *extra_pointers)
|
uint32 extradata, bool global, std::vector<EQEmu::Any> *extra_pointers)
|
||||||
{
|
{
|
||||||
if(!perl)
|
if(!perl)
|
||||||
@ -174,9 +174,9 @@ int PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * da
|
|||||||
std::string package_name;
|
std::string package_name;
|
||||||
|
|
||||||
GetQuestTypes(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest,
|
GetQuestTypes(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest,
|
||||||
event, npcmob, iteminst, mob, global);
|
event, npcmob, item_inst, mob, global);
|
||||||
GetQuestPackageName(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest,
|
GetQuestPackageName(isPlayerQuest, isGlobalPlayerQuest, isGlobalNPC, isItemQuest, isSpellQuest,
|
||||||
package_name, event, objid, data, npcmob, iteminst, global);
|
package_name, event, objid, data, npcmob, item_inst, global);
|
||||||
|
|
||||||
const char *sub_name = QuestEventSubroutines[event];
|
const char *sub_name = QuestEventSubroutines[event];
|
||||||
if(!perl->SubExists(package_name.c_str(), sub_name)) {
|
if(!perl->SubExists(package_name.c_str(), sub_name)) {
|
||||||
@ -208,14 +208,14 @@ int PerlembParser::EventCommon(QuestEventID event, uint32 objid, const char * da
|
|||||||
|
|
||||||
/* Check for Event export event enable */
|
/* Check for Event export event enable */
|
||||||
if (parse->perl_event_export_settings[event].event_variables){
|
if (parse->perl_event_export_settings[event].event_variables){
|
||||||
ExportEventVariables(package_name, event, objid, data, npcmob, iteminst, mob, extradata, extra_pointers);
|
ExportEventVariables(package_name, event, objid, data, npcmob, item_inst, mob, extradata, extra_pointers);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isPlayerQuest || isGlobalPlayerQuest){
|
if(isPlayerQuest || isGlobalPlayerQuest){
|
||||||
return SendCommands(package_name.c_str(), sub_name, 0, mob, mob, nullptr);
|
return SendCommands(package_name.c_str(), sub_name, 0, mob, mob, nullptr);
|
||||||
}
|
}
|
||||||
else if(isItemQuest) {
|
else if(isItemQuest) {
|
||||||
return SendCommands(package_name.c_str(), sub_name, 0, mob, mob, iteminst);
|
return SendCommands(package_name.c_str(), sub_name, 0, mob, mob, item_inst);
|
||||||
}
|
}
|
||||||
else if(isSpellQuest){
|
else if(isSpellQuest){
|
||||||
if(mob) {
|
if(mob) {
|
||||||
@ -249,7 +249,7 @@ int PerlembParser::EventGlobalPlayer(QuestEventID evt, Client *client, std::stri
|
|||||||
return EventCommon(evt, 0, data.c_str(), nullptr, nullptr, client, extra_data, true, extra_pointers);
|
return EventCommon(evt, 0, data.c_str(), nullptr, nullptr, client, extra_data, true, extra_pointers);
|
||||||
}
|
}
|
||||||
|
|
||||||
int PerlembParser::EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
int PerlembParser::EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
// needs pointer validation on 'item' argument
|
// needs pointer validation on 'item' argument
|
||||||
return EventCommon(evt, item->GetID(), nullptr, nullptr, item, client, extra_data, false, extra_pointers);
|
return EventCommon(evt, item->GetID(), nullptr, nullptr, item, client, extra_data, false, extra_pointers);
|
||||||
@ -348,7 +348,7 @@ bool PerlembParser::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) {
|
|||||||
return(perl->SubExists(package_name.str().c_str(), subname));
|
return(perl->SubExists(package_name.str().c_str(), subname));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PerlembParser::ItemHasQuestSub(ItemInst *itm, QuestEventID evt) {
|
bool PerlembParser::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) {
|
||||||
std::stringstream package_name;
|
std::stringstream package_name;
|
||||||
package_name << "qst_item_" << itm->GetID();
|
package_name << "qst_item_" << itm->GetID();
|
||||||
|
|
||||||
@ -471,7 +471,7 @@ void PerlembParser::LoadGlobalPlayerScript(std::string filename) {
|
|||||||
global_player_quest_status_ = questLoaded;
|
global_player_quest_status_ = questLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerlembParser::LoadItemScript(std::string filename, ItemInst *item) {
|
void PerlembParser::LoadItemScript(std::string filename, EQEmu::ItemInstance *item) {
|
||||||
if (item == nullptr)
|
if (item == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -642,13 +642,13 @@ void PerlembParser::ExportVar(const char *pkgprefix, const char *varname, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int PerlembParser::SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst* iteminst) {
|
int PerlembParser::SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, EQEmu::ItemInstance* item_inst) {
|
||||||
if(!perl)
|
if(!perl)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int ret_value = 0;
|
int ret_value = 0;
|
||||||
if(mob && mob->IsClient())
|
if(mob && mob->IsClient())
|
||||||
quest_manager.StartQuest(other, mob->CastToClient(), iteminst);
|
quest_manager.StartQuest(other, mob->CastToClient(), item_inst);
|
||||||
else
|
else
|
||||||
quest_manager.StartQuest(other, nullptr, nullptr);
|
quest_manager.StartQuest(other, nullptr, nullptr);
|
||||||
|
|
||||||
@ -711,8 +711,8 @@ int PerlembParser::SendCommands(const char *pkgprefix, const char *event, uint32
|
|||||||
}
|
}
|
||||||
|
|
||||||
//only export QuestItem if it's an item quest
|
//only export QuestItem if it's an item quest
|
||||||
if(iteminst) {
|
if(item_inst) {
|
||||||
ItemInst* curi = quest_manager.GetQuestItem();
|
EQEmu::ItemInstance* curi = quest_manager.GetQuestItem();
|
||||||
snprintf(namebuf, 64, "%s::questitem", pkgprefix);
|
snprintf(namebuf, 64, "%s::questitem", pkgprefix);
|
||||||
SV *questitem = get_sv(namebuf, true);
|
SV *questitem = get_sv(namebuf, true);
|
||||||
sv_setref_pv(questitem, "QuestItem", curi);
|
sv_setref_pv(questitem, "QuestItem", curi);
|
||||||
@ -840,7 +840,7 @@ void PerlembParser::MapFunctions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PerlembParser::GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
void PerlembParser::GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
||||||
bool &isSpellQuest, QuestEventID event, NPC* npcmob, ItemInst* iteminst, Mob* mob, bool global)
|
bool &isSpellQuest, QuestEventID event, NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, bool global)
|
||||||
{
|
{
|
||||||
if(event == EVENT_SPELL_EFFECT_CLIENT ||
|
if(event == EVENT_SPELL_EFFECT_CLIENT ||
|
||||||
event == EVENT_SPELL_EFFECT_NPC ||
|
event == EVENT_SPELL_EFFECT_NPC ||
|
||||||
@ -854,7 +854,7 @@ void PerlembParser::GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(!npcmob && mob) {
|
if(!npcmob && mob) {
|
||||||
if(!iteminst) {
|
if(!item_inst) {
|
||||||
if(global) {
|
if(global) {
|
||||||
isGlobalPlayerQuest = true;
|
isGlobalPlayerQuest = true;
|
||||||
} else {
|
} else {
|
||||||
@ -869,7 +869,7 @@ void PerlembParser::GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest
|
|||||||
|
|
||||||
void PerlembParser::GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
void PerlembParser::GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
||||||
bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
||||||
NPC* npcmob, ItemInst* iteminst, bool global)
|
NPC* npcmob, EQEmu::ItemInstance* item_inst, bool global)
|
||||||
{
|
{
|
||||||
if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) {
|
if(!isPlayerQuest && !isGlobalPlayerQuest && !isItemQuest && !isSpellQuest) {
|
||||||
if(global) {
|
if(global) {
|
||||||
@ -881,8 +881,8 @@ void PerlembParser::GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlaye
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(isItemQuest) {
|
else if(isItemQuest) {
|
||||||
// need a valid ItemInst pointer check here..unsure how to cancel this process
|
// need a valid EQEmu::ItemInstance pointer check here..unsure how to cancel this process
|
||||||
const EQEmu::ItemBase* item = iteminst->GetItem();
|
const EQEmu::ItemData* item = item_inst->GetItem();
|
||||||
package_name = "qst_item_";
|
package_name = "qst_item_";
|
||||||
package_name += itoa(item->ID);
|
package_name += itoa(item->ID);
|
||||||
}
|
}
|
||||||
@ -1141,7 +1141,7 @@ void PerlembParser::ExportItemVariables(std::string &package_name, Mob *mob) {
|
|||||||
#undef HASITEM_ISNULLITEM
|
#undef HASITEM_ISNULLITEM
|
||||||
|
|
||||||
void PerlembParser::ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
void PerlembParser::ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
||||||
NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata, std::vector<EQEmu::Any> *extra_pointers)
|
NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, uint32 extradata, std::vector<EQEmu::Any> *extra_pointers)
|
||||||
{
|
{
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case EVENT_SAY: {
|
case EVENT_SAY: {
|
||||||
@ -1159,7 +1159,7 @@ void PerlembParser::ExportEventVariables(std::string &package_name, QuestEventID
|
|||||||
if(extra_pointers) {
|
if(extra_pointers) {
|
||||||
size_t sz = extra_pointers->size();
|
size_t sz = extra_pointers->size();
|
||||||
for(size_t i = 0; i < sz; ++i) {
|
for(size_t i = 0; i < sz; ++i) {
|
||||||
ItemInst *inst = EQEmu::any_cast<ItemInst*>(extra_pointers->at(i));
|
EQEmu::ItemInstance *inst = EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(i));
|
||||||
|
|
||||||
std::string var_name = "item";
|
std::string var_name = "item";
|
||||||
var_name += std::to_string(i + 1);
|
var_name += std::to_string(i + 1);
|
||||||
@ -1327,19 +1327,19 @@ void PerlembParser::ExportEventVariables(std::string &package_name, QuestEventID
|
|||||||
|
|
||||||
case EVENT_SCALE_CALC:
|
case EVENT_SCALE_CALC:
|
||||||
case EVENT_ITEM_ENTER_ZONE: {
|
case EVENT_ITEM_ENTER_ZONE: {
|
||||||
// need a valid ItemInst pointer check here..unsure how to cancel this process
|
// need a valid EQEmu::ItemInstance pointer check here..unsure how to cancel this process
|
||||||
ExportVar(package_name.c_str(), "itemid", objid);
|
ExportVar(package_name.c_str(), "itemid", objid);
|
||||||
ExportVar(package_name.c_str(), "itemname", iteminst->GetItem()->Name);
|
ExportVar(package_name.c_str(), "itemname", item_inst->GetItem()->Name);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EVENT_ITEM_CLICK_CAST:
|
case EVENT_ITEM_CLICK_CAST:
|
||||||
case EVENT_ITEM_CLICK: {
|
case EVENT_ITEM_CLICK: {
|
||||||
// need a valid ItemInst pointer check here..unsure how to cancel this process
|
// need a valid EQEmu::ItemInstance pointer check here..unsure how to cancel this process
|
||||||
ExportVar(package_name.c_str(), "itemid", objid);
|
ExportVar(package_name.c_str(), "itemid", objid);
|
||||||
ExportVar(package_name.c_str(), "itemname", iteminst->GetItem()->Name);
|
ExportVar(package_name.c_str(), "itemname", item_inst->GetItem()->Name);
|
||||||
ExportVar(package_name.c_str(), "slotid", extradata);
|
ExportVar(package_name.c_str(), "slotid", extradata);
|
||||||
ExportVar(package_name.c_str(), "spell_id", iteminst->GetItem()->Click.Effect);
|
ExportVar(package_name.c_str(), "spell_id", item_inst->GetItem()->Click.Effect);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1419,10 +1419,10 @@ void PerlembParser::ExportEventVariables(std::string &package_name, QuestEventID
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_DROP_ITEM: {
|
case EVENT_DROP_ITEM: {
|
||||||
ExportVar(package_name.c_str(), "quantity", iteminst->IsStackable() ? iteminst->GetCharges() : 1);
|
ExportVar(package_name.c_str(), "quantity", item_inst->IsStackable() ? item_inst->GetCharges() : 1);
|
||||||
ExportVar(package_name.c_str(), "itemname", iteminst->GetItem()->Name);
|
ExportVar(package_name.c_str(), "itemname", item_inst->GetItem()->Name);
|
||||||
ExportVar(package_name.c_str(), "itemid", iteminst->GetItem()->ID);
|
ExportVar(package_name.c_str(), "itemid", item_inst->GetItem()->ID);
|
||||||
ExportVar(package_name.c_str(), "spell_id", iteminst->GetItem()->Click.Effect);
|
ExportVar(package_name.c_str(), "spell_id", item_inst->GetItem()->Click.Effect);
|
||||||
ExportVar(package_name.c_str(), "slotid", extradata);
|
ExportVar(package_name.c_str(), "slotid", extradata);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,11 +27,15 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include "embperl.h"
|
#include "embperl.h"
|
||||||
|
|
||||||
class ItemInst;
|
|
||||||
class Mob;
|
class Mob;
|
||||||
class Client;
|
class Client;
|
||||||
class NPC;
|
class NPC;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
questUnloaded,
|
questUnloaded,
|
||||||
@ -52,7 +56,7 @@ public:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
virtual int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
@ -62,13 +66,13 @@ public:
|
|||||||
virtual bool PlayerHasQuestSub(QuestEventID evt);
|
virtual bool PlayerHasQuestSub(QuestEventID evt);
|
||||||
virtual bool GlobalPlayerHasQuestSub(QuestEventID evt);
|
virtual bool GlobalPlayerHasQuestSub(QuestEventID evt);
|
||||||
virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt);
|
virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt);
|
||||||
virtual bool ItemHasQuestSub(ItemInst *itm, QuestEventID evt);
|
virtual bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt);
|
||||||
|
|
||||||
virtual void LoadNPCScript(std::string filename, int npc_id);
|
virtual void LoadNPCScript(std::string filename, int npc_id);
|
||||||
virtual void LoadGlobalNPCScript(std::string filename);
|
virtual void LoadGlobalNPCScript(std::string filename);
|
||||||
virtual void LoadPlayerScript(std::string filename);
|
virtual void LoadPlayerScript(std::string filename);
|
||||||
virtual void LoadGlobalPlayerScript(std::string filename);
|
virtual void LoadGlobalPlayerScript(std::string filename);
|
||||||
virtual void LoadItemScript(std::string filename, ItemInst *item);
|
virtual void LoadItemScript(std::string filename, EQEmu::ItemInstance *item);
|
||||||
virtual void LoadSpellScript(std::string filename, uint32 spell_id);
|
virtual void LoadSpellScript(std::string filename, uint32 spell_id);
|
||||||
|
|
||||||
virtual void AddVar(std::string name, std::string val);
|
virtual void AddVar(std::string name, std::string val);
|
||||||
@ -86,16 +90,16 @@ private:
|
|||||||
void ExportVar(const char *pkgprefix, const char *varname, float value);
|
void ExportVar(const char *pkgprefix, const char *varname, float value);
|
||||||
void ExportVarComplex(const char *pkgprefix, const char *varname, const char *value);
|
void ExportVarComplex(const char *pkgprefix, const char *varname, const char *value);
|
||||||
|
|
||||||
int EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, ItemInst* iteminst, Mob* mob,
|
int EventCommon(QuestEventID event, uint32 objid, const char * data, NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob,
|
||||||
uint32 extradata, bool global, std::vector<EQEmu::Any> *extra_pointers);
|
uint32 extradata, bool global, std::vector<EQEmu::Any> *extra_pointers);
|
||||||
int SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, ItemInst *iteminst);
|
int SendCommands(const char *pkgprefix, const char *event, uint32 npcid, Mob* other, Mob* mob, EQEmu::ItemInstance *item_inst);
|
||||||
void MapFunctions();
|
void MapFunctions();
|
||||||
|
|
||||||
void GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
void GetQuestTypes(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
||||||
bool &isSpellQuest, QuestEventID event, NPC* npcmob, ItemInst* iteminst, Mob* mob, bool global);
|
bool &isSpellQuest, QuestEventID event, NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, bool global);
|
||||||
void GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
void GetQuestPackageName(bool &isPlayerQuest, bool &isGlobalPlayerQuest, bool &isGlobalNPC, bool &isItemQuest,
|
||||||
bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
bool &isSpellQuest, std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
||||||
NPC* npcmob, ItemInst* iteminst, bool global);
|
NPC* npcmob, EQEmu::ItemInstance* item_inst, bool global);
|
||||||
void ExportCharID(const std::string &package_name, int &char_id, NPC *npcmob, Mob *mob);
|
void ExportCharID(const std::string &package_name, int &char_id, NPC *npcmob, Mob *mob);
|
||||||
void ExportQGlobals(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest,
|
void ExportQGlobals(bool isPlayerQuest, bool isGlobalPlayerQuest, bool isGlobalNPC, bool isItemQuest,
|
||||||
bool isSpellQuest, std::string &package_name, NPC *npcmob, Mob *mob, int char_id);
|
bool isSpellQuest, std::string &package_name, NPC *npcmob, Mob *mob, int char_id);
|
||||||
@ -104,7 +108,7 @@ private:
|
|||||||
void ExportZoneVariables(std::string &package_name);
|
void ExportZoneVariables(std::string &package_name);
|
||||||
void ExportItemVariables(std::string &package_name, Mob *mob);
|
void ExportItemVariables(std::string &package_name, Mob *mob);
|
||||||
void ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
void ExportEventVariables(std::string &package_name, QuestEventID event, uint32 objid, const char * data,
|
||||||
NPC* npcmob, ItemInst* iteminst, Mob* mob, uint32 extradata, std::vector<EQEmu::Any> *extra_pointers);
|
NPC* npcmob, EQEmu::ItemInstance* item_inst, Mob* mob, uint32 extradata, std::vector<EQEmu::Any> *extra_pointers);
|
||||||
|
|
||||||
std::map<uint32, PerlQuestStatus> npc_quest_status_;
|
std::map<uint32, PerlQuestStatus> npc_quest_status_;
|
||||||
PerlQuestStatus global_npc_quest_status_;
|
PerlQuestStatus global_npc_quest_status_;
|
||||||
|
|||||||
@ -110,7 +110,7 @@ XS(XS_QuestItem_new)
|
|||||||
if (items != 1)
|
if (items != 1)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::new()");
|
Perl_croak(aTHX_ "Usage: QuestItem::new()");
|
||||||
|
|
||||||
ItemInst* RETVAL;
|
EQEmu::ItemInstance* RETVAL;
|
||||||
|
|
||||||
RETVAL = quest_manager.GetQuestItem();
|
RETVAL = quest_manager.GetQuestItem();
|
||||||
ST(0) = sv_newmortal();
|
ST(0) = sv_newmortal();
|
||||||
|
|||||||
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
const char *getItemName(unsigned itemid)
|
const char *getItemName(unsigned itemid)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
item = database.GetItem(itemid);
|
item = database.GetItem(itemid);
|
||||||
|
|
||||||
if (item)
|
if (item)
|
||||||
|
|||||||
@ -2009,7 +2009,7 @@ void EntityList::QueueClientsGuildBankItemUpdate(const GuildBankItemUpdate_Struc
|
|||||||
|
|
||||||
memcpy(outgbius, gbius, sizeof(GuildBankItemUpdate_Struct));
|
memcpy(outgbius, gbius, sizeof(GuildBankItemUpdate_Struct));
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(gbius->ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(gbius->ItemID);
|
||||||
|
|
||||||
auto it = client_list.begin();
|
auto it = client_list.begin();
|
||||||
while (it != client_list.end()) {
|
while (it != client_list.end()) {
|
||||||
@ -3878,11 +3878,11 @@ void EntityList::GroupMessage(uint32 gid, const char *from, const char *message)
|
|||||||
|
|
||||||
uint16 EntityList::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time)
|
uint16 EntityList::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *is = database.GetItem(itemid);
|
const EQEmu::ItemData *is = database.GetItem(itemid);
|
||||||
if (!is)
|
if (!is)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
auto i = new ItemInst(is, is->MaxCharges);
|
auto i = new EQEmu::ItemInstance(is, is->MaxCharges);
|
||||||
if (!i)
|
if (!i)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@ -153,9 +153,9 @@ uint32 ZoneDatabase::GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id,
|
|||||||
//we need this function to immediately determine, after we receive OP_Fishing, if we can even try to fish, otherwise we have to wait a while to get the failure
|
//we need this function to immediately determine, after we receive OP_Fishing, if we can even try to fish, otherwise we have to wait a while to get the failure
|
||||||
bool Client::CanFish() {
|
bool Client::CanFish() {
|
||||||
//make sure we still have a fishing pole on:
|
//make sure we still have a fishing pole on:
|
||||||
const ItemInst* Pole = m_inv[EQEmu::legacy::SlotPrimary];
|
const EQEmu::ItemInstance* Pole = m_inv[EQEmu::legacy::SlotPrimary];
|
||||||
int32 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal);
|
int32 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal);
|
||||||
const ItemInst* Bait = nullptr;
|
const EQEmu::ItemInstance* Bait = nullptr;
|
||||||
if (bslot != INVALID_INDEX)
|
if (bslot != INVALID_INDEX)
|
||||||
Bait = m_inv.GetItem(bslot);
|
Bait = m_inv.GetItem(bslot);
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ void Client::GoFish()
|
|||||||
|
|
||||||
//make sure we still have a fishing pole on:
|
//make sure we still have a fishing pole on:
|
||||||
int32 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal);
|
int32 bslot = m_inv.HasItemByUse(EQEmu::item::ItemTypeFishingBait, 1, invWhereWorn | invWherePersonal);
|
||||||
const ItemInst* Bait = nullptr;
|
const EQEmu::ItemInstance* Bait = nullptr;
|
||||||
if (bslot != INVALID_INDEX)
|
if (bslot != INVALID_INDEX)
|
||||||
Bait = m_inv.GetItem(bslot);
|
Bait = m_inv.GetItem(bslot);
|
||||||
|
|
||||||
@ -304,10 +304,10 @@ void Client::GoFish()
|
|||||||
food_id = common_fish_ids[index];
|
food_id = common_fish_ids[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* food_item = database.GetItem(food_id);
|
const EQEmu::ItemData* food_item = database.GetItem(food_id);
|
||||||
|
|
||||||
Message_StringID(MT_Skills, FISHING_SUCCESS);
|
Message_StringID(MT_Skills, FISHING_SUCCESS);
|
||||||
ItemInst* inst = database.CreateItem(food_item, 1);
|
EQEmu::ItemInstance* inst = database.CreateItem(food_item, 1);
|
||||||
if(inst != nullptr) {
|
if(inst != nullptr) {
|
||||||
if(CheckLoreConflict(inst->GetItem()))
|
if(CheckLoreConflict(inst->GetItem()))
|
||||||
{
|
{
|
||||||
@ -396,7 +396,7 @@ void Client::ForageItem(bool guarantee) {
|
|||||||
foragedfood = common_food_ids[index];
|
foragedfood = common_food_ids[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* food_item = database.GetItem(foragedfood);
|
const EQEmu::ItemData* food_item = database.GetItem(foragedfood);
|
||||||
|
|
||||||
if(!food_item) {
|
if(!food_item) {
|
||||||
Log.Out(Logs::General, Logs::Error, "nullptr returned from database.GetItem in ClientForageItem");
|
Log.Out(Logs::General, Logs::Error, "nullptr returned from database.GetItem in ClientForageItem");
|
||||||
@ -421,7 +421,7 @@ void Client::ForageItem(bool guarantee) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Message_StringID(MT_Skills, stringid);
|
Message_StringID(MT_Skills, stringid);
|
||||||
ItemInst* inst = database.CreateItem(food_item, 1);
|
EQEmu::ItemInstance* inst = database.CreateItem(food_item, 1);
|
||||||
if(inst != nullptr) {
|
if(inst != nullptr) {
|
||||||
// check to make sure it isn't a foraged lore item
|
// check to make sure it isn't a foraged lore item
|
||||||
if(CheckLoreConflict(inst->GetItem()))
|
if(CheckLoreConflict(inst->GetItem()))
|
||||||
|
|||||||
@ -694,7 +694,7 @@ void GuildBankManager::SendGuildBank(Client *c)
|
|||||||
if (c->ClientVersionBit() & EQEmu::versions::bit_RoFAndLater) {
|
if (c->ClientVersionBit() & EQEmu::versions::bit_RoFAndLater) {
|
||||||
auto outapp = new EQApplicationPacket(OP_GuildBankItemList, sizeof(GuildBankItemListEntry_Struct) * 240);
|
auto outapp = new EQApplicationPacket(OP_GuildBankItemList, sizeof(GuildBankItemListEntry_Struct) * 240);
|
||||||
for (int i = 0; i < GUILD_BANK_DEPOSIT_AREA_SIZE; ++i) {
|
for (int i = 0; i < GUILD_BANK_DEPOSIT_AREA_SIZE; ++i) {
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID);
|
||||||
if (Item) {
|
if (Item) {
|
||||||
outapp->WriteUInt8(1);
|
outapp->WriteUInt8(1);
|
||||||
outapp->WriteUInt32(guild_bank->Items.DepositArea[i].Permissions);
|
outapp->WriteUInt32(guild_bank->Items.DepositArea[i].Permissions);
|
||||||
@ -718,7 +718,7 @@ void GuildBankManager::SendGuildBank(Client *c)
|
|||||||
outapp->SetWritePosition(outapp->GetWritePosition() + 20); // newer clients have 40 deposit slots, keep them 0 for now
|
outapp->SetWritePosition(outapp->GetWritePosition() + 20); // newer clients have 40 deposit slots, keep them 0 for now
|
||||||
|
|
||||||
for (int i = 0; i < GUILD_BANK_MAIN_AREA_SIZE; ++i) {
|
for (int i = 0; i < GUILD_BANK_MAIN_AREA_SIZE; ++i) {
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID);
|
||||||
if (Item) {
|
if (Item) {
|
||||||
outapp->WriteUInt8(1);
|
outapp->WriteUInt8(1);
|
||||||
outapp->WriteUInt32(guild_bank->Items.MainArea[i].Permissions);
|
outapp->WriteUInt32(guild_bank->Items.MainArea[i].Permissions);
|
||||||
@ -749,7 +749,7 @@ void GuildBankManager::SendGuildBank(Client *c)
|
|||||||
{
|
{
|
||||||
if(guild_bank->Items.DepositArea[i].ItemID > 0)
|
if(guild_bank->Items.DepositArea[i].ItemID > 0)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.DepositArea[i].ItemID);
|
||||||
|
|
||||||
if(!Item)
|
if(!Item)
|
||||||
continue;
|
continue;
|
||||||
@ -785,7 +785,7 @@ void GuildBankManager::SendGuildBank(Client *c)
|
|||||||
{
|
{
|
||||||
if(guild_bank->Items.MainArea[i].ItemID > 0)
|
if(guild_bank->Items.MainArea[i].ItemID > 0)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(guild_bank->Items.MainArea[i].ItemID);
|
||||||
|
|
||||||
if(!Item)
|
if(!Item)
|
||||||
continue;
|
continue;
|
||||||
@ -916,7 +916,7 @@ bool GuildBankManager::AddItem(uint32 GuildID, uint8 Area, uint32 ItemID, int32
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(ItemID);
|
||||||
|
|
||||||
GuildBankItemUpdate_Struct gbius;
|
GuildBankItemUpdate_Struct gbius;
|
||||||
|
|
||||||
@ -982,7 +982,7 @@ int GuildBankManager::Promote(uint32 guildID, int slotID)
|
|||||||
|
|
||||||
(*iter)->Items.DepositArea[slotID].ItemID = 0;
|
(*iter)->Items.DepositArea[slotID].ItemID = 0;
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem((*iter)->Items.MainArea[mainSlot].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem((*iter)->Items.MainArea[mainSlot].ItemID);
|
||||||
|
|
||||||
GuildBankItemUpdate_Struct gbius;
|
GuildBankItemUpdate_Struct gbius;
|
||||||
|
|
||||||
@ -1038,7 +1038,7 @@ void GuildBankManager::SetPermissions(uint32 guildID, uint16 slotID, uint32 perm
|
|||||||
else
|
else
|
||||||
(*iter)->Items.MainArea[slotID].WhoFor[0] = '\0';
|
(*iter)->Items.MainArea[slotID].WhoFor[0] = '\0';
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem((*iter)->Items.MainArea[slotID].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem((*iter)->Items.MainArea[slotID].ItemID);
|
||||||
|
|
||||||
GuildBankItemUpdate_Struct gbius;
|
GuildBankItemUpdate_Struct gbius;
|
||||||
|
|
||||||
@ -1062,7 +1062,7 @@ void GuildBankManager::SetPermissions(uint32 guildID, uint16 slotID, uint32 perm
|
|||||||
entity_list.QueueClientsGuildBankItemUpdate(&gbius, guildID);
|
entity_list.QueueClientsGuildBankItemUpdate(&gbius, guildID);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* GuildBankManager::GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity)
|
EQEmu::ItemInstance* GuildBankManager::GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity)
|
||||||
{
|
{
|
||||||
auto Iterator = GetGuildBank(GuildID);
|
auto Iterator = GetGuildBank(GuildID);
|
||||||
|
|
||||||
@ -1071,7 +1071,7 @@ ItemInst* GuildBankManager::GetItem(uint32 GuildID, uint16 Area, uint16 SlotID,
|
|||||||
|
|
||||||
GuildBankItem* BankArea = nullptr;
|
GuildBankItem* BankArea = nullptr;
|
||||||
|
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
|
|
||||||
if(Area == GuildBankDepositArea)
|
if(Area == GuildBankDepositArea)
|
||||||
{
|
{
|
||||||
@ -1169,7 +1169,7 @@ bool GuildBankManager::DeleteItem(uint32 guildID, uint16 area, uint16 slotID, ui
|
|||||||
|
|
||||||
bool deleted = true;
|
bool deleted = true;
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(BankArea[slotID].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(BankArea[slotID].ItemID);
|
||||||
|
|
||||||
if(!Item->Stackable || (quantity >= BankArea[slotID].Quantity)) {
|
if(!Item->Stackable || (quantity >= BankArea[slotID].Quantity)) {
|
||||||
std::string query = StringFormat("DELETE FROM `guild_bank` WHERE `guildid` = %i "
|
std::string query = StringFormat("DELETE FROM `guild_bank` WHERE `guildid` = %i "
|
||||||
@ -1230,7 +1230,7 @@ bool GuildBankManager::MergeStacks(uint32 GuildID, uint16 SlotID)
|
|||||||
if(BankArea[SlotID].ItemID == 0)
|
if(BankArea[SlotID].ItemID == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(BankArea[SlotID].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(BankArea[SlotID].ItemID);
|
||||||
|
|
||||||
if(!Item->Stackable)
|
if(!Item->Stackable)
|
||||||
return false;
|
return false;
|
||||||
@ -1328,7 +1328,7 @@ bool GuildBankManager::SplitStack(uint32 GuildID, uint16 SlotID, uint32 Quantity
|
|||||||
if(BankArea[SlotID].Quantity <= Quantity || Quantity == 0)
|
if(BankArea[SlotID].Quantity <= Quantity || Quantity == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const EQEmu::ItemBase *Item = database.GetItem(BankArea[SlotID].ItemID);
|
const EQEmu::ItemData *Item = database.GetItem(BankArea[SlotID].ItemID);
|
||||||
|
|
||||||
if(!Item->Stackable)
|
if(!Item->Stackable)
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -117,7 +117,7 @@ public:
|
|||||||
bool AddItem(uint32 GuildID, uint8 Area, uint32 ItemID, int32 QtyOrCharges, const char *Donator, uint8 Permissions, const char *WhoFor);
|
bool AddItem(uint32 GuildID, uint8 Area, uint32 ItemID, int32 QtyOrCharges, const char *Donator, uint8 Permissions, const char *WhoFor);
|
||||||
int Promote(uint32 GuildID, int SlotID);
|
int Promote(uint32 GuildID, int SlotID);
|
||||||
void SetPermissions(uint32 GuildID, uint16 SlotID, uint32 Permissions, const char *MemberName);
|
void SetPermissions(uint32 GuildID, uint16 SlotID, uint32 Permissions, const char *MemberName);
|
||||||
ItemInst* GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity);
|
EQEmu::ItemInstance* GetItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity);
|
||||||
bool DeleteItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity);
|
bool DeleteItem(uint32 GuildID, uint16 Area, uint16 SlotID, uint32 Quantity);
|
||||||
bool HasItem(uint32 GuildID, uint32 ItemID);
|
bool HasItem(uint32 GuildID, uint32 ItemID);
|
||||||
bool IsAreaFull(uint32 GuildID, uint16 Area);
|
bool IsAreaFull(uint32 GuildID, uint16 Area);
|
||||||
|
|||||||
@ -31,7 +31,7 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) {
|
|||||||
if (itemnum == 0)
|
if (itemnum == 0)
|
||||||
return 0;
|
return 0;
|
||||||
uint32 x = 0;
|
uint32 x = 0;
|
||||||
ItemInst *cur = nullptr;
|
EQEmu::ItemInstance *cur = nullptr;
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
if(where_to_check & invWhereWorn) {
|
if(where_to_check & invWhereWorn) {
|
||||||
@ -177,7 +177,7 @@ uint32 Client::NukeItem(uint32 itemnum, uint8 where_to_check) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Client::CheckLoreConflict(const EQEmu::ItemBase* item)
|
bool Client::CheckLoreConflict(const EQEmu::ItemData* item)
|
||||||
{
|
{
|
||||||
if (!item) { return false; }
|
if (!item) { return false; }
|
||||||
if (!item->LoreFlag) { return false; }
|
if (!item->LoreFlag) { return false; }
|
||||||
@ -195,7 +195,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2,
|
|||||||
|
|
||||||
// TODO: update calling methods and script apis to handle a failure return
|
// TODO: update calling methods and script apis to handle a failure return
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(item_id);
|
const EQEmu::ItemData* item = database.GetItem(item_id);
|
||||||
|
|
||||||
// make sure the item exists
|
// make sure the item exists
|
||||||
if(item == nullptr) {
|
if(item == nullptr) {
|
||||||
@ -247,7 +247,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2,
|
|||||||
bool enforceusable = RuleB(Inventory, EnforceAugmentUsability);
|
bool enforceusable = RuleB(Inventory, EnforceAugmentUsability);
|
||||||
|
|
||||||
for (int iter = AUG_INDEX_BEGIN; iter < EQEmu::legacy::ITEM_COMMON_SIZE; ++iter) {
|
for (int iter = AUG_INDEX_BEGIN; iter < EQEmu::legacy::ITEM_COMMON_SIZE; ++iter) {
|
||||||
const EQEmu::ItemBase* augtest = database.GetItem(augments[iter]);
|
const EQEmu::ItemData* augtest = database.GetItem(augments[iter]);
|
||||||
|
|
||||||
if(augtest == nullptr) {
|
if(augtest == nullptr) {
|
||||||
if(augments[iter]) {
|
if(augments[iter]) {
|
||||||
@ -528,7 +528,7 @@ bool Client::SummonItem(uint32 item_id, int16 charges, uint32 aug1, uint32 aug2,
|
|||||||
|
|
||||||
// in any other situation just use charges as passed
|
// in any other situation just use charges as passed
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item, charges);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, charges);
|
||||||
|
|
||||||
if(inst == nullptr) {
|
if(inst == nullptr) {
|
||||||
Message(13, "An unknown server error has occurred and your item was not created.");
|
Message(13, "An unknown server error has occurred and your item was not created.");
|
||||||
@ -604,7 +604,7 @@ void Client::DropItem(int16 slot_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Take control of item in client inventory
|
// Take control of item in client inventory
|
||||||
ItemInst *inst = m_inv.PopItem(slot_id);
|
EQEmu::ItemInstance *inst = m_inv.PopItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
int i = parse->EventItem(EVENT_DROP_ITEM, this, inst, nullptr, "", slot_id);
|
int i = parse->EventItem(EVENT_DROP_ITEM, this, inst, nullptr, "", slot_id);
|
||||||
if(i != 0) {
|
if(i != 0) {
|
||||||
@ -637,7 +637,7 @@ void Client::DropItem(int16 slot_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drop inst
|
// Drop inst
|
||||||
void Client::DropInst(const ItemInst* inst)
|
void Client::DropInst(const EQEmu::ItemInstance* inst)
|
||||||
{
|
{
|
||||||
if (!inst) {
|
if (!inst) {
|
||||||
// Item doesn't exist in inventory!
|
// Item doesn't exist in inventory!
|
||||||
@ -660,7 +660,7 @@ void Client::DropInst(const ItemInst* inst)
|
|||||||
|
|
||||||
// Returns a slot's item ID (returns INVALID_ID if not found)
|
// Returns a slot's item ID (returns INVALID_ID if not found)
|
||||||
int32 Client::GetItemIDAt(int16 slot_id) {
|
int32 Client::GetItemIDAt(int16 slot_id) {
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (inst)
|
if (inst)
|
||||||
return inst->GetItem()->ID;
|
return inst->GetItem()->ID;
|
||||||
|
|
||||||
@ -671,7 +671,7 @@ int32 Client::GetItemIDAt(int16 slot_id) {
|
|||||||
// Returns an augment's ID that's in an item (returns INVALID_ID if not found)
|
// Returns an augment's ID that's in an item (returns INVALID_ID if not found)
|
||||||
// Pass in the slot ID of the item and which augslot you want to check (0-5)
|
// Pass in the slot ID of the item and which augslot you want to check (0-5)
|
||||||
int32 Client::GetAugmentIDAt(int16 slot_id, uint8 augslot) {
|
int32 Client::GetAugmentIDAt(int16 slot_id, uint8 augslot) {
|
||||||
const ItemInst* inst = m_inv[slot_id];
|
const EQEmu::ItemInstance* inst = m_inv[slot_id];
|
||||||
if (inst && inst->GetAugmentItemID(augslot)) {
|
if (inst && inst->GetAugmentItemID(augslot)) {
|
||||||
return inst->GetAugmentItemID(augslot);
|
return inst->GetAugmentItemID(augslot);
|
||||||
}
|
}
|
||||||
@ -764,7 +764,7 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd
|
|||||||
|
|
||||||
if (m_inv[slot_id]->IsClassBag()) {
|
if (m_inv[slot_id]->IsClassBag()) {
|
||||||
for (uint8 bag_idx = SUB_INDEX_BEGIN; bag_idx < m_inv[slot_id]->GetItem()->BagSlots; bag_idx++) {
|
for (uint8 bag_idx = SUB_INDEX_BEGIN; bag_idx < m_inv[slot_id]->GetItem()->BagSlots; bag_idx++) {
|
||||||
ItemInst* bagitem = m_inv[slot_id]->GetItem(bag_idx);
|
EQEmu::ItemInstance* bagitem = m_inv[slot_id]->GetItem(bag_idx);
|
||||||
|
|
||||||
if(bagitem) {
|
if(bagitem) {
|
||||||
int16 bagslot_id = Inventory::CalcSlotId(slot_id, bag_idx);
|
int16 bagslot_id = Inventory::CalcSlotId(slot_id, bag_idx);
|
||||||
@ -789,7 +789,7 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd
|
|||||||
|
|
||||||
bool isDeleted = m_inv.DeleteItem(slot_id, quantity);
|
bool isDeleted = m_inv.DeleteItem(slot_id, quantity);
|
||||||
|
|
||||||
const ItemInst* inst = nullptr;
|
const EQEmu::ItemInstance* inst = nullptr;
|
||||||
if (slot_id == EQEmu::legacy::SlotCursor) {
|
if (slot_id == EQEmu::legacy::SlotCursor) {
|
||||||
auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend();
|
auto s = m_inv.cursor_cbegin(), e = m_inv.cursor_cend();
|
||||||
if(update_db)
|
if(update_db)
|
||||||
@ -836,7 +836,7 @@ void Client::DeleteItemInInventory(int16 slot_id, int8 quantity, bool client_upd
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::PushItemOnCursor(const ItemInst& inst, bool client_update)
|
bool Client::PushItemOnCursor(const EQEmu::ItemInstance& inst, bool client_update)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Putting item %s (%d) on the cursor", inst.GetItem()->Name, inst.GetItem()->ID);
|
Log.Out(Logs::Detail, Logs::Inventory, "Putting item %s (%d) on the cursor", inst.GetItem()->Name, inst.GetItem()->ID);
|
||||||
m_inv.PushCursor(inst);
|
m_inv.PushCursor(inst);
|
||||||
@ -853,7 +853,7 @@ bool Client::PushItemOnCursor(const ItemInst& inst, bool client_update)
|
|||||||
// Any items already there will be removed from user's inventory
|
// Any items already there will be removed from user's inventory
|
||||||
// (Also saves changes back to the database: this may be optimized in the future)
|
// (Also saves changes back to the database: this may be optimized in the future)
|
||||||
// client_update: Sends packet to client
|
// client_update: Sends packet to client
|
||||||
bool Client::PutItemInInventory(int16 slot_id, const ItemInst& inst, bool client_update) {
|
bool Client::PutItemInInventory(int16 slot_id, const EQEmu::ItemInstance& inst, bool client_update) {
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Putting item %s (%d) into slot %d", inst.GetItem()->Name, inst.GetItem()->ID, slot_id);
|
Log.Out(Logs::Detail, Logs::Inventory, "Putting item %s (%d) into slot %d", inst.GetItem()->Name, inst.GetItem()->ID, slot_id);
|
||||||
|
|
||||||
if (slot_id == EQEmu::legacy::SlotCursor) { // don't trust macros before conditional statements...
|
if (slot_id == EQEmu::legacy::SlotCursor) { // don't trust macros before conditional statements...
|
||||||
@ -881,7 +881,7 @@ bool Client::PutItemInInventory(int16 slot_id, const ItemInst& inst, bool client
|
|||||||
// a lot of wasted checks and calls coded above...
|
// a lot of wasted checks and calls coded above...
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::PutLootInInventory(int16 slot_id, const ItemInst &inst, ServerLootItem_Struct** bag_item_data)
|
void Client::PutLootInInventory(int16 slot_id, const EQEmu::ItemInstance &inst, ServerLootItem_Struct** bag_item_data)
|
||||||
{
|
{
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Putting loot item %s (%d) into slot %d", inst.GetItem()->Name, inst.GetItem()->ID, slot_id);
|
Log.Out(Logs::Detail, Logs::Inventory, "Putting loot item %s (%d) into slot %d", inst.GetItem()->Name, inst.GetItem()->ID, slot_id);
|
||||||
|
|
||||||
@ -912,7 +912,7 @@ void Client::PutLootInInventory(int16 slot_id, const ItemInst &inst, ServerLootI
|
|||||||
if (bag_item_data[index] == nullptr)
|
if (bag_item_data[index] == nullptr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const ItemInst *bagitem = database.CreateItem(
|
const EQEmu::ItemInstance *bagitem = database.CreateItem(
|
||||||
bag_item_data[index]->item_id,
|
bag_item_data[index]->item_id,
|
||||||
bag_item_data[index]->charges,
|
bag_item_data[index]->charges,
|
||||||
bag_item_data[index]->aug_1,
|
bag_item_data[index]->aug_1,
|
||||||
@ -948,13 +948,13 @@ void Client::PutLootInInventory(int16 slot_id, const ItemInst &inst, ServerLootI
|
|||||||
|
|
||||||
CalcBonuses();
|
CalcBonuses();
|
||||||
}
|
}
|
||||||
bool Client::TryStacking(ItemInst* item, uint8 type, bool try_worn, bool try_cursor){
|
bool Client::TryStacking(EQEmu::ItemInstance* item, uint8 type, bool try_worn, bool try_cursor){
|
||||||
if(!item || !item->IsStackable() || item->GetCharges()>=item->GetItem()->StackSize)
|
if(!item || !item->IsStackable() || item->GetCharges()>=item->GetItem()->StackSize)
|
||||||
return false;
|
return false;
|
||||||
int16 i;
|
int16 i;
|
||||||
uint32 item_id = item->GetItem()->ID;
|
uint32 item_id = item->GetItem()->ID;
|
||||||
for (i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++) {
|
for (i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++) {
|
||||||
ItemInst* tmp_inst = m_inv.GetItem(i);
|
EQEmu::ItemInstance* tmp_inst = m_inv.GetItem(i);
|
||||||
if(tmp_inst && tmp_inst->GetItem()->ID == item_id && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize){
|
if(tmp_inst && tmp_inst->GetItem()->ID == item_id && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize){
|
||||||
MoveItemCharges(*item, i, type);
|
MoveItemCharges(*item, i, type);
|
||||||
CalcBonuses();
|
CalcBonuses();
|
||||||
@ -967,7 +967,7 @@ bool Client::TryStacking(ItemInst* item, uint8 type, bool try_worn, bool try_cur
|
|||||||
for (i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++) {
|
for (i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++) {
|
||||||
for (uint8 j = SUB_INDEX_BEGIN; j < EQEmu::legacy::ITEM_CONTAINER_SIZE; j++) {
|
for (uint8 j = SUB_INDEX_BEGIN; j < EQEmu::legacy::ITEM_CONTAINER_SIZE; j++) {
|
||||||
uint16 slotid = Inventory::CalcSlotId(i, j);
|
uint16 slotid = Inventory::CalcSlotId(i, j);
|
||||||
ItemInst* tmp_inst = m_inv.GetItem(slotid);
|
EQEmu::ItemInstance* tmp_inst = m_inv.GetItem(slotid);
|
||||||
|
|
||||||
if(tmp_inst && tmp_inst->GetItem()->ID == item_id && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize) {
|
if(tmp_inst && tmp_inst->GetItem()->ID == item_id && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize) {
|
||||||
MoveItemCharges(*item, slotid, type);
|
MoveItemCharges(*item, slotid, type);
|
||||||
@ -985,7 +985,7 @@ bool Client::TryStacking(ItemInst* item, uint8 type, bool try_worn, bool try_cur
|
|||||||
// Locate an available space in inventory to place an item
|
// Locate an available space in inventory to place an item
|
||||||
// and then put the item there
|
// and then put the item there
|
||||||
// The change will be saved to the database
|
// The change will be saved to the database
|
||||||
bool Client::AutoPutLootInInventory(ItemInst& inst, bool try_worn, bool try_cursor, ServerLootItem_Struct** bag_item_data)
|
bool Client::AutoPutLootInInventory(EQEmu::ItemInstance& inst, bool try_worn, bool try_cursor, ServerLootItem_Struct** bag_item_data)
|
||||||
{
|
{
|
||||||
// #1: Try to auto equip
|
// #1: Try to auto equip
|
||||||
if (try_worn && inst.IsEquipable(GetBaseRace(), GetClass()) && inst.GetItem()->ReqLevel <= level && (!inst.GetItem()->Attuneable || inst.IsAttuned()) && inst.GetItem()->ItemType != EQEmu::item::ItemTypeAugmentation) {
|
if (try_worn && inst.IsEquipable(GetBaseRace(), GetClass()) && inst.GetItem()->ReqLevel <= level && (!inst.GetItem()->Attuneable || inst.IsAttuned()) && inst.GetItem()->ItemType != EQEmu::item::ItemTypeAugmentation) {
|
||||||
@ -1048,9 +1048,9 @@ bool Client::AutoPutLootInInventory(ItemInst& inst, bool try_worn, bool try_curs
|
|||||||
}
|
}
|
||||||
|
|
||||||
// helper function for AutoPutLootInInventory
|
// helper function for AutoPutLootInInventory
|
||||||
void Client::MoveItemCharges(ItemInst &from, int16 to_slot, uint8 type)
|
void Client::MoveItemCharges(EQEmu::ItemInstance &from, int16 to_slot, uint8 type)
|
||||||
{
|
{
|
||||||
ItemInst *tmp_inst = m_inv.GetItem(to_slot);
|
EQEmu::ItemInstance *tmp_inst = m_inv.GetItem(to_slot);
|
||||||
|
|
||||||
if(tmp_inst && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize) {
|
if(tmp_inst && tmp_inst->GetCharges() < tmp_inst->GetItem()->StackSize) {
|
||||||
// this is how much room is left on the item we're stacking onto
|
// this is how much room is left on the item we're stacking onto
|
||||||
@ -1074,7 +1074,7 @@ void Client::MoveItemCharges(ItemInst &from, int16 to_slot, uint8 type)
|
|||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// TODO: needs clean-up to save references
|
// TODO: needs clean-up to save references
|
||||||
bool MakeItemLink(char* &ret_link, const ItemBase *item, uint32 aug0, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint8 evolving, uint8 evolvedlevel) {
|
bool MakeItemLink(char* &ret_link, const ItemData *item, uint32 aug0, uint32 aug1, uint32 aug2, uint32 aug3, uint32 aug4, uint32 aug5, uint8 evolving, uint8 evolvedlevel) {
|
||||||
//we're sending back the entire "link", minus the null characters & item name
|
//we're sending back the entire "link", minus the null characters & item name
|
||||||
//that way, we can use it for regular links & Task links
|
//that way, we can use it for regular links & Task links
|
||||||
//note: initiator needs to pass us ret_link
|
//note: initiator needs to pass us ret_link
|
||||||
@ -1183,13 +1183,13 @@ bool MakeItemLink(char* &ret_link, const ItemBase *item, uint32 aug0, uint32 aug
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int Client::GetItemLinkHash(const ItemInst* inst) {
|
int Client::GetItemLinkHash(const EQEmu::ItemInstance* inst) {
|
||||||
//pre-Titanium: http://eqitems.13th-floor.org/phpBB2/viewtopic.php?t=70&postdays=0&postorder=asc
|
//pre-Titanium: http://eqitems.13th-floor.org/phpBB2/viewtopic.php?t=70&postdays=0&postorder=asc
|
||||||
//Titanium: http://eqitems.13th-floor.org/phpBB2/viewtopic.php?t=145
|
//Titanium: http://eqitems.13th-floor.org/phpBB2/viewtopic.php?t=145
|
||||||
if (!inst) //have to have an item to make the hash
|
if (!inst) //have to have an item to make the hash
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
char* hash_str = 0;
|
char* hash_str = 0;
|
||||||
/*register */int hash = 0;
|
/*register */int hash = 0;
|
||||||
|
|
||||||
@ -1272,7 +1272,7 @@ int Client::GetItemLinkHash(const ItemInst* inst) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// This appears to still be in use... The core of this should be incorporated into class Client::TextLink
|
// This appears to still be in use... The core of this should be incorporated into class Client::TextLink
|
||||||
void Client::SendItemLink(const ItemInst* inst, bool send_to_all)
|
void Client::SendItemLink(const EQEmu::ItemInstance* inst, bool send_to_all)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -1283,7 +1283,7 @@ packet with the item number in it, but I cant seem to find it right now
|
|||||||
if (!inst)
|
if (!inst)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
const char* name2 = &item->Name[0];
|
const char* name2 = &item->Name[0];
|
||||||
auto outapp = new EQApplicationPacket(OP_ItemLinkText, strlen(name2) + 68);
|
auto outapp = new EQApplicationPacket(OP_ItemLinkText, strlen(name2) + 68);
|
||||||
char buffer2[135] = {0};
|
char buffer2[135] = {0};
|
||||||
@ -1312,7 +1312,7 @@ packet with the item number in it, but I cant seem to find it right now
|
|||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::SendLootItemInPacket(const ItemInst* inst, int16 slot_id)
|
void Client::SendLootItemInPacket(const EQEmu::ItemInstance* inst, int16 slot_id)
|
||||||
{
|
{
|
||||||
SendItemPacket(slot_id,inst, ItemPacketTrade);
|
SendItemPacket(slot_id,inst, ItemPacketTrade);
|
||||||
}
|
}
|
||||||
@ -1409,7 +1409,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
Log.Out(Logs::Detail, Logs::Inventory, "Client destroyed item from cursor slot %d", move_in->from_slot);
|
Log.Out(Logs::Detail, Logs::Inventory, "Client destroyed item from cursor slot %d", move_in->from_slot);
|
||||||
if(RuleB(QueryServ, PlayerLogMoves)) { QSSwapItemAuditor(move_in); } // QS Audit
|
if(RuleB(QueryServ, PlayerLogMoves)) { QSSwapItemAuditor(move_in); } // QS Audit
|
||||||
|
|
||||||
ItemInst *inst = m_inv.GetItem(EQEmu::legacy::SlotCursor);
|
EQEmu::ItemInstance *inst = m_inv.GetItem(EQEmu::legacy::SlotCursor);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
parse->EventItem(EVENT_DESTROY_ITEM, this, inst, nullptr, "", 0);
|
parse->EventItem(EVENT_DESTROY_ITEM, this, inst, nullptr, "", 0);
|
||||||
}
|
}
|
||||||
@ -1453,8 +1453,8 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
//Setup
|
//Setup
|
||||||
uint32 srcitemid = 0;
|
uint32 srcitemid = 0;
|
||||||
uint32 dstitemid = 0;
|
uint32 dstitemid = 0;
|
||||||
ItemInst* src_inst = m_inv.GetItem(src_slot_id);
|
EQEmu::ItemInstance* src_inst = m_inv.GetItem(src_slot_id);
|
||||||
ItemInst* dst_inst = m_inv.GetItem(dst_slot_id);
|
EQEmu::ItemInstance* dst_inst = m_inv.GetItem(dst_slot_id);
|
||||||
if (src_inst){
|
if (src_inst){
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Src slot %d has item %s (%d) with %d charges in it.", src_slot_id, src_inst->GetItem()->Name, src_inst->GetItem()->ID, src_inst->GetCharges());
|
Log.Out(Logs::Detail, Logs::Inventory, "Src slot %d has item %s (%d) with %d charges in it.", src_slot_id, src_inst->GetItem()->Name, src_inst->GetItem()->ID, src_inst->GetCharges());
|
||||||
srcitemid = src_inst->GetItem()->ID;
|
srcitemid = src_inst->GetItem()->ID;
|
||||||
@ -1470,8 +1470,8 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
dstitemid = dst_inst->GetItem()->ID;
|
dstitemid = dst_inst->GetItem()->ID;
|
||||||
}
|
}
|
||||||
if (Trader && srcitemid>0){
|
if (Trader && srcitemid>0){
|
||||||
ItemInst* srcbag;
|
EQEmu::ItemInstance* srcbag;
|
||||||
ItemInst* dstbag;
|
EQEmu::ItemInstance* dstbag;
|
||||||
uint32 srcbagid =0;
|
uint32 srcbagid =0;
|
||||||
uint32 dstbagid = 0;
|
uint32 dstbagid = 0;
|
||||||
|
|
||||||
@ -1517,7 +1517,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
}
|
}
|
||||||
if (src_slot_id >= EQEmu::legacy::SHARED_BANK_BEGIN && src_slot_id <= EQEmu::legacy::SHARED_BANK_END && src_inst->IsClassBag()){
|
if (src_slot_id >= EQEmu::legacy::SHARED_BANK_BEGIN && src_slot_id <= EQEmu::legacy::SHARED_BANK_END && src_inst->IsClassBag()){
|
||||||
for (uint8 idx = SUB_INDEX_BEGIN; idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
for (uint8 idx = SUB_INDEX_BEGIN; idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
||||||
const ItemInst* baginst = src_inst->GetItem(idx);
|
const EQEmu::ItemInstance* baginst = src_inst->GetItem(idx);
|
||||||
if(baginst && !database.VerifyInventory(account_id, Inventory::CalcSlotId(src_slot_id, idx), baginst)){
|
if(baginst && !database.VerifyInventory(account_id, Inventory::CalcSlotId(src_slot_id, idx), baginst)){
|
||||||
DeleteItemInInventory(Inventory::CalcSlotId(src_slot_id, idx),0,false);
|
DeleteItemInInventory(Inventory::CalcSlotId(src_slot_id, idx),0,false);
|
||||||
}
|
}
|
||||||
@ -1532,7 +1532,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
}
|
}
|
||||||
if (dst_slot_id >= EQEmu::legacy::SHARED_BANK_BEGIN && dst_slot_id <= EQEmu::legacy::SHARED_BANK_END && dst_inst->IsClassBag()){
|
if (dst_slot_id >= EQEmu::legacy::SHARED_BANK_BEGIN && dst_slot_id <= EQEmu::legacy::SHARED_BANK_END && dst_inst->IsClassBag()){
|
||||||
for (uint8 idx = SUB_INDEX_BEGIN; idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
for (uint8 idx = SUB_INDEX_BEGIN; idx < EQEmu::legacy::ITEM_CONTAINER_SIZE; idx++) {
|
||||||
const ItemInst* baginst = dst_inst->GetItem(idx);
|
const EQEmu::ItemInstance* baginst = dst_inst->GetItem(idx);
|
||||||
if(baginst && !database.VerifyInventory(account_id, Inventory::CalcSlotId(dst_slot_id, idx), baginst)){
|
if(baginst && !database.VerifyInventory(account_id, Inventory::CalcSlotId(dst_slot_id, idx), baginst)){
|
||||||
DeleteItemInInventory(Inventory::CalcSlotId(dst_slot_id, idx),0,false);
|
DeleteItemInInventory(Inventory::CalcSlotId(dst_slot_id, idx),0,false);
|
||||||
}
|
}
|
||||||
@ -1550,12 +1550,12 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
auto ndh_inst = m_inv[src_slot_id];
|
auto ndh_inst = m_inv[src_slot_id];
|
||||||
std::string ndh_item_data;
|
std::string ndh_item_data;
|
||||||
if (ndh_inst == nullptr) {
|
if (ndh_inst == nullptr) {
|
||||||
ndh_item_data.append("[nullptr on ItemInst*]");
|
ndh_item_data.append("[nullptr on EQEmu::ItemInstance*]");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
auto ndh_item = ndh_inst->GetItem();
|
auto ndh_item = ndh_inst->GetItem();
|
||||||
if (ndh_item == nullptr) {
|
if (ndh_item == nullptr) {
|
||||||
ndh_item_data.append("[nullptr on ItemBase*]");
|
ndh_item_data.append("[nullptr on ItemData*]");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ndh_item_data.append(StringFormat("name=%s", ndh_item->Name));
|
ndh_item_data.append(StringFormat("name=%s", ndh_item->Name));
|
||||||
@ -1576,7 +1576,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
if(m_tradeskill_object != nullptr) {
|
if(m_tradeskill_object != nullptr) {
|
||||||
if (src_slot_id >= EQEmu::legacy::WORLD_BEGIN && src_slot_id <= EQEmu::legacy::WORLD_END) {
|
if (src_slot_id >= EQEmu::legacy::WORLD_BEGIN && src_slot_id <= EQEmu::legacy::WORLD_END) {
|
||||||
// Picking up item from world container
|
// Picking up item from world container
|
||||||
ItemInst* inst = m_tradeskill_object->PopItem(Inventory::CalcBagIdx(src_slot_id));
|
EQEmu::ItemInstance* inst = m_tradeskill_object->PopItem(Inventory::CalcBagIdx(src_slot_id));
|
||||||
if (inst) {
|
if (inst) {
|
||||||
PutItemInInventory(dst_slot_id, *inst, false);
|
PutItemInInventory(dst_slot_id, *inst, false);
|
||||||
safe_delete(inst);
|
safe_delete(inst);
|
||||||
@ -1589,7 +1589,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
else if (dst_slot_id >= EQEmu::legacy::WORLD_BEGIN && dst_slot_id <= EQEmu::legacy::WORLD_END) {
|
else if (dst_slot_id >= EQEmu::legacy::WORLD_BEGIN && dst_slot_id <= EQEmu::legacy::WORLD_END) {
|
||||||
// Putting item into world container, which may swap (or pile onto) with existing item
|
// Putting item into world container, which may swap (or pile onto) with existing item
|
||||||
uint8 world_idx = Inventory::CalcBagIdx(dst_slot_id);
|
uint8 world_idx = Inventory::CalcBagIdx(dst_slot_id);
|
||||||
ItemInst* world_inst = m_tradeskill_object->PopItem(world_idx);
|
EQEmu::ItemInstance* world_inst = m_tradeskill_object->PopItem(world_idx);
|
||||||
|
|
||||||
// Case 1: No item in container, unidirectional "Put"
|
// Case 1: No item in container, unidirectional "Put"
|
||||||
if (world_inst == nullptr) {
|
if (world_inst == nullptr) {
|
||||||
@ -1597,8 +1597,8 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
m_inv.DeleteItem(src_slot_id);
|
m_inv.DeleteItem(src_slot_id);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const EQEmu::ItemBase* world_item = world_inst->GetItem();
|
const EQEmu::ItemData* world_item = world_inst->GetItem();
|
||||||
const EQEmu::ItemBase* src_item = src_inst->GetItem();
|
const EQEmu::ItemData* src_item = src_inst->GetItem();
|
||||||
if (world_item && src_item) {
|
if (world_item && src_item) {
|
||||||
// Case 2: Same item on cursor, stacks, transfer of charges needed
|
// Case 2: Same item on cursor, stacks, transfer of charges needed
|
||||||
if ((world_item->ID == src_item->ID) && src_inst->IsStackable()) {
|
if ((world_item->ID == src_item->ID) && src_inst->IsStackable()) {
|
||||||
@ -1629,7 +1629,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
else {
|
else {
|
||||||
// Case 3: Swap the item on user with item in world container
|
// Case 3: Swap the item on user with item in world container
|
||||||
// World containers don't follow normal rules for swapping
|
// World containers don't follow normal rules for swapping
|
||||||
ItemInst* inv_inst = m_inv.PopItem(src_slot_id);
|
EQEmu::ItemInstance* inv_inst = m_inv.PopItem(src_slot_id);
|
||||||
m_tradeskill_object->PutItem(world_idx, inv_inst);
|
m_tradeskill_object->PutItem(world_idx, inv_inst);
|
||||||
m_inv.PutItem(src_slot_id, *world_inst);
|
m_inv.PutItem(src_slot_id, *world_inst);
|
||||||
safe_delete(inv_inst);
|
safe_delete(inv_inst);
|
||||||
@ -1744,7 +1744,7 @@ bool Client::SwapItem(MoveItem_Struct* move_in) {
|
|||||||
// Split into two
|
// Split into two
|
||||||
src_inst->SetCharges(src_inst->GetCharges() - move_in->number_in_stack);
|
src_inst->SetCharges(src_inst->GetCharges() - move_in->number_in_stack);
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Split stack of %s (%d) from slot %d to %d with stack size %d. Src keeps %d.", src_inst->GetItem()->Name, src_inst->GetItem()->ID, src_slot_id, dst_slot_id, move_in->number_in_stack, src_inst->GetCharges());
|
Log.Out(Logs::Detail, Logs::Inventory, "Split stack of %s (%d) from slot %d to %d with stack size %d. Src keeps %d.", src_inst->GetItem()->Name, src_inst->GetItem()->ID, src_slot_id, dst_slot_id, move_in->number_in_stack, src_inst->GetCharges());
|
||||||
ItemInst* inst = database.CreateItem(src_inst->GetItem(), move_in->number_in_stack);
|
EQEmu::ItemInstance* inst = database.CreateItem(src_inst->GetItem(), move_in->number_in_stack);
|
||||||
m_inv.PutItem(dst_slot_id, *inst);
|
m_inv.PutItem(dst_slot_id, *inst);
|
||||||
safe_delete(inst);
|
safe_delete(inst);
|
||||||
}
|
}
|
||||||
@ -1838,8 +1838,8 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) {
|
|||||||
int16 resync_slot = (Inventory::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : Inventory::CalcSlotId(move_slots->from_slot);
|
int16 resync_slot = (Inventory::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : Inventory::CalcSlotId(move_slots->from_slot);
|
||||||
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
||||||
// This prevents the client from crashing when closing any 'phantom' bags
|
// This prevents the client from crashing when closing any 'phantom' bags
|
||||||
const EQEmu::ItemBase* token_struct = database.GetItem(22292); // 'Copper Coin'
|
const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin'
|
||||||
ItemInst* token_inst = database.CreateItem(token_struct, 1);
|
EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1);
|
||||||
|
|
||||||
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
||||||
|
|
||||||
@ -1863,8 +1863,8 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) {
|
|||||||
int16 resync_slot = (Inventory::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : Inventory::CalcSlotId(move_slots->from_slot);
|
int16 resync_slot = (Inventory::CalcSlotId(move_slots->from_slot) == INVALID_INDEX) ? move_slots->from_slot : Inventory::CalcSlotId(move_slots->from_slot);
|
||||||
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
||||||
if(m_inv[resync_slot]) {
|
if(m_inv[resync_slot]) {
|
||||||
const EQEmu::ItemBase* token_struct = database.GetItem(22292); // 'Copper Coin'
|
const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin'
|
||||||
ItemInst* token_inst = database.CreateItem(token_struct, 1);
|
EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1);
|
||||||
|
|
||||||
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
||||||
SendItemPacket(resync_slot, m_inv[resync_slot], ItemPacketTrade);
|
SendItemPacket(resync_slot, m_inv[resync_slot], ItemPacketTrade);
|
||||||
@ -1880,8 +1880,8 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) {
|
|||||||
if ((move_slots->to_slot >= EQEmu::legacy::EQUIPMENT_BEGIN && move_slots->to_slot <= EQEmu::legacy::CURSOR_BAG_END) || move_slots->to_slot == EQEmu::legacy::SlotPowerSource) {
|
if ((move_slots->to_slot >= EQEmu::legacy::EQUIPMENT_BEGIN && move_slots->to_slot <= EQEmu::legacy::CURSOR_BAG_END) || move_slots->to_slot == EQEmu::legacy::SlotPowerSource) {
|
||||||
int16 resync_slot = (Inventory::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : Inventory::CalcSlotId(move_slots->to_slot);
|
int16 resync_slot = (Inventory::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : Inventory::CalcSlotId(move_slots->to_slot);
|
||||||
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
||||||
const EQEmu::ItemBase* token_struct = database.GetItem(22292); // 'Copper Coin'
|
const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin'
|
||||||
ItemInst* token_inst = database.CreateItem(token_struct, 1);
|
EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1);
|
||||||
|
|
||||||
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
||||||
|
|
||||||
@ -1905,8 +1905,8 @@ void Client::SwapItemResync(MoveItem_Struct* move_slots) {
|
|||||||
int16 resync_slot = (Inventory::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : Inventory::CalcSlotId(move_slots->to_slot);
|
int16 resync_slot = (Inventory::CalcSlotId(move_slots->to_slot) == INVALID_INDEX) ? move_slots->to_slot : Inventory::CalcSlotId(move_slots->to_slot);
|
||||||
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
if (IsValidSlot(resync_slot) && resync_slot != INVALID_INDEX) {
|
||||||
if(m_inv[resync_slot]) {
|
if(m_inv[resync_slot]) {
|
||||||
const EQEmu::ItemBase* token_struct = database.GetItem(22292); // 'Copper Coin'
|
const EQEmu::ItemData* token_struct = database.GetItem(22292); // 'Copper Coin'
|
||||||
ItemInst* token_inst = database.CreateItem(token_struct, 1);
|
EQEmu::ItemInstance* token_inst = database.CreateItem(token_struct, 1);
|
||||||
|
|
||||||
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
SendItemPacket(resync_slot, token_inst, ItemPacketTrade);
|
||||||
SendItemPacket(resync_slot, m_inv[resync_slot], ItemPacketTrade);
|
SendItemPacket(resync_slot, m_inv[resync_slot], ItemPacketTrade);
|
||||||
@ -1945,7 +1945,7 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) {
|
|||||||
|
|
||||||
move_count = 0;
|
move_count = 0;
|
||||||
|
|
||||||
const ItemInst* from_inst = m_inv[postaction_call?to_slot_id:from_slot_id];
|
const EQEmu::ItemInstance* from_inst = m_inv[postaction_call?to_slot_id:from_slot_id];
|
||||||
|
|
||||||
if(from_inst) {
|
if(from_inst) {
|
||||||
qsaudit->items[move_count].from_slot = from_slot_id;
|
qsaudit->items[move_count].from_slot = from_slot_id;
|
||||||
@ -1960,7 +1960,7 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) {
|
|||||||
|
|
||||||
if (from_inst->IsType(EQEmu::item::ItemClassBag)) {
|
if (from_inst->IsType(EQEmu::item::ItemClassBag)) {
|
||||||
for (uint8 bag_idx = SUB_INDEX_BEGIN; bag_idx < from_inst->GetItem()->BagSlots; bag_idx++) {
|
for (uint8 bag_idx = SUB_INDEX_BEGIN; bag_idx < from_inst->GetItem()->BagSlots; bag_idx++) {
|
||||||
const ItemInst* from_baginst = from_inst->GetItem(bag_idx);
|
const EQEmu::ItemInstance* from_baginst = from_inst->GetItem(bag_idx);
|
||||||
|
|
||||||
if(from_baginst) {
|
if(from_baginst) {
|
||||||
qsaudit->items[move_count].from_slot = Inventory::CalcSlotId(from_slot_id, bag_idx);
|
qsaudit->items[move_count].from_slot = Inventory::CalcSlotId(from_slot_id, bag_idx);
|
||||||
@ -1978,7 +1978,7 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(to_slot_id != from_slot_id) {
|
if(to_slot_id != from_slot_id) {
|
||||||
const ItemInst* to_inst = m_inv[postaction_call?from_slot_id:to_slot_id];
|
const EQEmu::ItemInstance* to_inst = m_inv[postaction_call?from_slot_id:to_slot_id];
|
||||||
|
|
||||||
if(to_inst) {
|
if(to_inst) {
|
||||||
qsaudit->items[move_count].from_slot = to_slot_id;
|
qsaudit->items[move_count].from_slot = to_slot_id;
|
||||||
@ -1993,7 +1993,7 @@ void Client::QSSwapItemAuditor(MoveItem_Struct* move_in, bool postaction_call) {
|
|||||||
|
|
||||||
if (to_inst->IsType(EQEmu::item::ItemClassBag)) {
|
if (to_inst->IsType(EQEmu::item::ItemClassBag)) {
|
||||||
for (uint8 bag_idx = SUB_INDEX_BEGIN; bag_idx < to_inst->GetItem()->BagSlots; bag_idx++) {
|
for (uint8 bag_idx = SUB_INDEX_BEGIN; bag_idx < to_inst->GetItem()->BagSlots; bag_idx++) {
|
||||||
const ItemInst* to_baginst = to_inst->GetItem(bag_idx);
|
const EQEmu::ItemInstance* to_baginst = to_inst->GetItem(bag_idx);
|
||||||
|
|
||||||
if(to_baginst) {
|
if(to_baginst) {
|
||||||
qsaudit->items[move_count].from_slot = Inventory::CalcSlotId(to_slot_id, bag_idx);
|
qsaudit->items[move_count].from_slot = Inventory::CalcSlotId(to_slot_id, bag_idx);
|
||||||
@ -2027,7 +2027,7 @@ void Client::DyeArmor(EQEmu::TintProfile* dye){
|
|||||||
if (slot != INVALID_INDEX){
|
if (slot != INVALID_INDEX){
|
||||||
DeleteItemInInventory(slot,1,true);
|
DeleteItemInInventory(slot,1,true);
|
||||||
uint8 slot2=SlotConvert(i);
|
uint8 slot2=SlotConvert(i);
|
||||||
ItemInst* inst = this->m_inv.GetItem(slot2);
|
EQEmu::ItemInstance* inst = this->m_inv.GetItem(slot2);
|
||||||
if(inst){
|
if(inst){
|
||||||
uint32 armor_color = ((uint32)dye->Slot[i].Red << 16) | ((uint32)dye->Slot[i].Green << 8) | ((uint32)dye->Slot[i].Blue);
|
uint32 armor_color = ((uint32)dye->Slot[i].Red << 16) | ((uint32)dye->Slot[i].Green << 8) | ((uint32)dye->Slot[i].Blue);
|
||||||
inst->SetColor(armor_color);
|
inst->SetColor(armor_color);
|
||||||
@ -2057,8 +2057,8 @@ void Client::DyeArmor(EQEmu::TintProfile* dye){
|
|||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
bool Client::DecreaseByItemType(uint32 type, uint8 amt) {
|
bool Client::DecreaseByItemType(uint32 type, uint8 amt) {
|
||||||
const ItemBase* TempItem = 0;
|
const ItemData* TempItem = 0;
|
||||||
ItemInst* ins;
|
EQEmu::ItemInstance* ins;
|
||||||
int x;
|
int x;
|
||||||
for(x=EQEmu::legacy::POSSESSIONS_BEGIN; x <= EQEmu::legacy::POSSESSIONS_END; x++)
|
for(x=EQEmu::legacy::POSSESSIONS_BEGIN; x <= EQEmu::legacy::POSSESSIONS_END; x++)
|
||||||
{
|
{
|
||||||
@ -2109,8 +2109,8 @@ bool Client::DecreaseByItemType(uint32 type, uint8 amt) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool Client::DecreaseByID(uint32 type, uint8 amt) {
|
bool Client::DecreaseByID(uint32 type, uint8 amt) {
|
||||||
const EQEmu::ItemBase* TempItem = nullptr;
|
const EQEmu::ItemData* TempItem = nullptr;
|
||||||
ItemInst* ins = nullptr;
|
EQEmu::ItemInstance* ins = nullptr;
|
||||||
int x;
|
int x;
|
||||||
int num = 0;
|
int num = 0;
|
||||||
for(x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::GENERAL_BAGS_END; x++)
|
for(x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::GENERAL_BAGS_END; x++)
|
||||||
@ -2204,7 +2204,7 @@ static uint32 GetDisenchantedBagID(uint8 bag_slots)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool CopyBagContents(ItemInst* new_bag, const ItemInst* old_bag)
|
static bool CopyBagContents(EQEmu::ItemInstance* new_bag, const EQEmu::ItemInstance* old_bag)
|
||||||
{
|
{
|
||||||
if (!new_bag || !old_bag) { return false; }
|
if (!new_bag || !old_bag) { return false; }
|
||||||
if (new_bag->GetItem()->BagSlots < old_bag->GetItem()->BagSlots) { return false; }
|
if (new_bag->GetItem()->BagSlots < old_bag->GetItem()->BagSlots) { return false; }
|
||||||
@ -2308,7 +2308,7 @@ void Client::DisenchantSummonedBags(bool client_update)
|
|||||||
|
|
||||||
if (CopyBagContents(new_inst, inst)) {
|
if (CopyBagContents(new_inst, inst)) {
|
||||||
Log.Out(Logs::General, Logs::Inventory, "Disenchant Summoned Bags: Replacing %s with %s in slot %i", inst->GetItem()->Name, new_inst->GetItem()->Name, EQEmu::legacy::SlotCursor);
|
Log.Out(Logs::General, Logs::Inventory, "Disenchant Summoned Bags: Replacing %s with %s in slot %i", inst->GetItem()->Name, new_inst->GetItem()->Name, EQEmu::legacy::SlotCursor);
|
||||||
std::list<ItemInst*> local;
|
std::list<EQEmu::ItemInstance*> local;
|
||||||
local.push_front(new_inst);
|
local.push_front(new_inst);
|
||||||
m_inv.PopItem(EQEmu::legacy::SlotCursor);
|
m_inv.PopItem(EQEmu::legacy::SlotCursor);
|
||||||
safe_delete(inst);
|
safe_delete(inst);
|
||||||
@ -2405,7 +2405,7 @@ void Client::RemoveNoRent(bool client_update)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!m_inv.CursorEmpty()) {
|
if (!m_inv.CursorEmpty()) {
|
||||||
std::list<ItemInst*> local;
|
std::list<EQEmu::ItemInstance*> local;
|
||||||
|
|
||||||
while (!m_inv.CursorEmpty()) {
|
while (!m_inv.CursorEmpty()) {
|
||||||
auto inst = m_inv.PopItem(EQEmu::legacy::SlotCursor);
|
auto inst = m_inv.PopItem(EQEmu::legacy::SlotCursor);
|
||||||
@ -2516,8 +2516,8 @@ void Client::RemoveDuplicateLore(bool client_update)
|
|||||||
// Shared Bank and Shared Bank Containers are not checked due to their allowing duplicate lore items
|
// Shared Bank and Shared Bank Containers are not checked due to their allowing duplicate lore items
|
||||||
|
|
||||||
if (!m_inv.CursorEmpty()) {
|
if (!m_inv.CursorEmpty()) {
|
||||||
std::list<ItemInst*> local_1;
|
std::list<EQEmu::ItemInstance*> local_1;
|
||||||
std::list<ItemInst*> local_2;
|
std::list<EQEmu::ItemInstance*> local_2;
|
||||||
|
|
||||||
while (!m_inv.CursorEmpty()) {
|
while (!m_inv.CursorEmpty()) {
|
||||||
auto inst = m_inv.PopItem(EQEmu::legacy::SlotCursor);
|
auto inst = m_inv.PopItem(EQEmu::legacy::SlotCursor);
|
||||||
@ -2591,7 +2591,7 @@ void Client::MoveSlotNotAllowed(bool client_update)
|
|||||||
uint32 Client::GetEquipment(uint8 material_slot) const
|
uint32 Client::GetEquipment(uint8 material_slot) const
|
||||||
{
|
{
|
||||||
int16 invslot;
|
int16 invslot;
|
||||||
const ItemInst *item;
|
const EQEmu::ItemInstance *item;
|
||||||
|
|
||||||
if(material_slot > EQEmu::textures::LastTexture)
|
if(material_slot > EQEmu::textures::LastTexture)
|
||||||
{
|
{
|
||||||
@ -2617,7 +2617,7 @@ uint32 Client::GetEquipment(uint8 material_slot) const
|
|||||||
#if 0
|
#if 0
|
||||||
int32 Client::GetEquipmentMaterial(uint8 material_slot)
|
int32 Client::GetEquipmentMaterial(uint8 material_slot)
|
||||||
{
|
{
|
||||||
const ItemBase *item;
|
const ItemData *item;
|
||||||
|
|
||||||
item = database.GetItem(GetEquipment(material_slot));
|
item = database.GetItem(GetEquipment(material_slot));
|
||||||
if(item != 0)
|
if(item != 0)
|
||||||
@ -2634,7 +2634,7 @@ uint32 Client::GetEquipmentColor(uint8 material_slot) const
|
|||||||
if (material_slot > EQEmu::textures::LastTexture)
|
if (material_slot > EQEmu::textures::LastTexture)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(GetEquipment(material_slot));
|
const EQEmu::ItemData *item = database.GetItem(GetEquipment(material_slot));
|
||||||
if(item != nullptr)
|
if(item != nullptr)
|
||||||
return ((m_pp.item_tint.Slot[material_slot].UseTint) ? m_pp.item_tint.Slot[material_slot].Color : item->Color);
|
return ((m_pp.item_tint.Slot[material_slot].UseTint) ? m_pp.item_tint.Slot[material_slot].Color : item->Color);
|
||||||
|
|
||||||
@ -2642,7 +2642,7 @@ uint32 Client::GetEquipmentColor(uint8 material_slot) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send an item packet (including all subitems of the item)
|
// Send an item packet (including all subitems of the item)
|
||||||
void Client::SendItemPacket(int16 slot_id, const ItemInst* inst, ItemPacketType packet_type)
|
void Client::SendItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type)
|
||||||
{
|
{
|
||||||
if (!inst)
|
if (!inst)
|
||||||
return;
|
return;
|
||||||
@ -2667,7 +2667,7 @@ void Client::SendItemPacket(int16 slot_id, const ItemInst* inst, ItemPacketType
|
|||||||
FastQueuePacket(&outapp);
|
FastQueuePacket(&outapp);
|
||||||
}
|
}
|
||||||
|
|
||||||
EQApplicationPacket* Client::ReturnItemPacket(int16 slot_id, const ItemInst* inst, ItemPacketType packet_type)
|
EQApplicationPacket* Client::ReturnItemPacket(int16 slot_id, const EQEmu::ItemInstance* inst, ItemPacketType packet_type)
|
||||||
{
|
{
|
||||||
if (!inst)
|
if (!inst)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -2717,8 +2717,8 @@ void Client::CreateBandolier(const EQApplicationPacket *app)
|
|||||||
Log.Out(Logs::Detail, Logs::Inventory, "Char: %s Creating Bandolier Set %i, Set Name: %s", GetName(), bs->Number, bs->Name);
|
Log.Out(Logs::Detail, Logs::Inventory, "Char: %s Creating Bandolier Set %i, Set Name: %s", GetName(), bs->Number, bs->Name);
|
||||||
strcpy(m_pp.bandoliers[bs->Number].Name, bs->Name);
|
strcpy(m_pp.bandoliers[bs->Number].Name, bs->Name);
|
||||||
|
|
||||||
const ItemInst* InvItem = nullptr;
|
const EQEmu::ItemInstance* InvItem = nullptr;
|
||||||
const EQEmu::ItemBase *BaseItem = nullptr;
|
const EQEmu::ItemData *BaseItem = nullptr;
|
||||||
int16 WeaponSlot = 0;
|
int16 WeaponSlot = 0;
|
||||||
|
|
||||||
database.DeleteCharacterBandolier(this->CharacterID(), bs->Number);
|
database.DeleteCharacterBandolier(this->CharacterID(), bs->Number);
|
||||||
@ -2762,7 +2762,7 @@ void Client::SetBandolier(const EQApplicationPacket *app)
|
|||||||
Log.Out(Logs::Detail, Logs::Inventory, "Char: %s activating set %i", GetName(), bss->Number);
|
Log.Out(Logs::Detail, Logs::Inventory, "Char: %s activating set %i", GetName(), bss->Number);
|
||||||
int16 slot = 0;
|
int16 slot = 0;
|
||||||
int16 WeaponSlot = 0;
|
int16 WeaponSlot = 0;
|
||||||
ItemInst *BandolierItems[4]; // Temporary holding area for the weapons we pull out of their inventory
|
EQEmu::ItemInstance *BandolierItems[4]; // Temporary holding area for the weapons we pull out of their inventory
|
||||||
|
|
||||||
// First we pull the items for this bandolier set out of their inventory, this makes space to put the
|
// First we pull the items for this bandolier set out of their inventory, this makes space to put the
|
||||||
// currently equipped items back.
|
// currently equipped items back.
|
||||||
@ -2827,7 +2827,7 @@ void Client::SetBandolier(const EQApplicationPacket *app)
|
|||||||
BandolierItems[BandolierSlot] = 0;
|
BandolierItems[BandolierSlot] = 0;
|
||||||
if (slot == INVALID_INDEX) {
|
if (slot == INVALID_INDEX) {
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Character does not have required bandolier item for slot %i", WeaponSlot);
|
Log.Out(Logs::Detail, Logs::Inventory, "Character does not have required bandolier item for slot %i", WeaponSlot);
|
||||||
ItemInst *InvItem = m_inv.PopItem(WeaponSlot);
|
EQEmu::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot);
|
||||||
if(InvItem) {
|
if(InvItem) {
|
||||||
// If there was an item in that weapon slot, put it in the inventory
|
// If there was an item in that weapon slot, put it in the inventory
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "returning item %s in weapon slot %i to inventory",
|
Log.Out(Logs::Detail, Logs::Inventory, "returning item %s in weapon slot %i to inventory",
|
||||||
@ -2861,7 +2861,7 @@ void Client::SetBandolier(const EQApplicationPacket *app)
|
|||||||
// if the player has this item in their inventory, and it is not already where it needs to be
|
// if the player has this item in their inventory, and it is not already where it needs to be
|
||||||
if(BandolierItems[BandolierSlot]) {
|
if(BandolierItems[BandolierSlot]) {
|
||||||
// Pull the item that we are going to replace
|
// Pull the item that we are going to replace
|
||||||
ItemInst *InvItem = m_inv.PopItem(WeaponSlot);
|
EQEmu::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot);
|
||||||
// Put the item specified in the bandolier where it needs to be
|
// Put the item specified in the bandolier where it needs to be
|
||||||
m_inv.PutItem(WeaponSlot, *BandolierItems[BandolierSlot]);
|
m_inv.PutItem(WeaponSlot, *BandolierItems[BandolierSlot]);
|
||||||
|
|
||||||
@ -2881,7 +2881,7 @@ void Client::SetBandolier(const EQApplicationPacket *app)
|
|||||||
else {
|
else {
|
||||||
// This bandolier set has no item for this slot, so take whatever is in the weapon slot and
|
// This bandolier set has no item for this slot, so take whatever is in the weapon slot and
|
||||||
// put it in the player's inventory.
|
// put it in the player's inventory.
|
||||||
ItemInst *InvItem = m_inv.PopItem(WeaponSlot);
|
EQEmu::ItemInstance *InvItem = m_inv.PopItem(WeaponSlot);
|
||||||
if(InvItem) {
|
if(InvItem) {
|
||||||
Log.Out(Logs::Detail, Logs::Inventory, "Bandolier has no item for slot %i, returning item %s to inventory", WeaponSlot, InvItem->GetItem()->Name);
|
Log.Out(Logs::Detail, Logs::Inventory, "Bandolier has no item for slot %i, returning item %s to inventory", WeaponSlot, InvItem->GetItem()->Name);
|
||||||
// If there was an item in that weapon slot, put it in the inventory
|
// If there was an item in that weapon slot, put it in the inventory
|
||||||
@ -2899,7 +2899,7 @@ void Client::SetBandolier(const EQApplicationPacket *app)
|
|||||||
CalcBonuses();
|
CalcBonuses();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::MoveItemToInventory(ItemInst *ItemToReturn, bool UpdateClient) {
|
bool Client::MoveItemToInventory(EQEmu::ItemInstance *ItemToReturn, bool UpdateClient) {
|
||||||
|
|
||||||
// This is a support function for Client::SetBandolier, however it can be used anywhere it's functionality is required.
|
// This is a support function for Client::SetBandolier, however it can be used anywhere it's functionality is required.
|
||||||
//
|
//
|
||||||
@ -2932,7 +2932,7 @@ bool Client::MoveItemToInventory(ItemInst *ItemToReturn, bool UpdateClient) {
|
|||||||
|
|
||||||
for (int16 i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::SlotCursor; i++) { // changed slot max to 30 from 29. client will stack into slot 30 (bags too) before moving.
|
for (int16 i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::SlotCursor; i++) { // changed slot max to 30 from 29. client will stack into slot 30 (bags too) before moving.
|
||||||
|
|
||||||
ItemInst* InvItem = m_inv.GetItem(i);
|
EQEmu::ItemInstance* InvItem = m_inv.GetItem(i);
|
||||||
|
|
||||||
if(InvItem && (InvItem->GetItem()->ID == ItemID) && (InvItem->GetCharges() < InvItem->GetItem()->StackSize)) {
|
if(InvItem && (InvItem->GetItem()->ID == ItemID) && (InvItem->GetCharges() < InvItem->GetItem()->StackSize)) {
|
||||||
|
|
||||||
@ -2991,7 +2991,7 @@ bool Client::MoveItemToInventory(ItemInst *ItemToReturn, bool UpdateClient) {
|
|||||||
|
|
||||||
for (int16 i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::SlotCursor; i++) { // changed slot max to 30 from 29. client will move into slot 30 (bags too) before pushing onto cursor.
|
for (int16 i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::SlotCursor; i++) { // changed slot max to 30 from 29. client will move into slot 30 (bags too) before pushing onto cursor.
|
||||||
|
|
||||||
ItemInst* InvItem = m_inv.GetItem(i);
|
EQEmu::ItemInstance* InvItem = m_inv.GetItem(i);
|
||||||
|
|
||||||
if (!InvItem) {
|
if (!InvItem) {
|
||||||
// Found available slot in personal inventory
|
// Found available slot in personal inventory
|
||||||
@ -3047,7 +3047,7 @@ bool Client::InterrogateInventory(Client* requester, bool log, bool silent, bool
|
|||||||
if (!requester)
|
if (!requester)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
std::map<int16, const ItemInst*> instmap;
|
std::map<int16, const EQEmu::ItemInstance*> instmap;
|
||||||
|
|
||||||
// build reference map
|
// build reference map
|
||||||
for (int16 index = SLOT_BEGIN; index < EQEmu::legacy::TYPE_POSSESSIONS_SIZE; ++index) {
|
for (int16 index = SLOT_BEGIN; index < EQEmu::legacy::TYPE_POSSESSIONS_SIZE; ++index) {
|
||||||
@ -3140,7 +3140,7 @@ bool Client::InterrogateInventory(Client* requester, bool log, bool silent, bool
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const ItemInst* inst, const ItemInst* parent, bool log, bool silent, bool &error, int depth)
|
void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, bool log, bool silent, bool &error, int depth)
|
||||||
{
|
{
|
||||||
if (depth >= 10) {
|
if (depth >= 10) {
|
||||||
Log.Out(Logs::Detail, Logs::None, "[CLIENT] Client::InterrogateInventory_() - Recursion count has exceeded the maximum allowable (You have a REALLY BIG PROBLEM!!)");
|
Log.Out(Logs::Detail, Logs::None, "[CLIENT] Client::InterrogateInventory_() - Recursion count has exceeded the maximum allowable (You have a REALLY BIG PROBLEM!!)");
|
||||||
@ -3153,7 +3153,7 @@ void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 hea
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (inst) {
|
if (inst) {
|
||||||
for (int16 sub = SUB_INDEX_BEGIN; (sub < EQEmu::legacy::ITEM_CONTAINER_SIZE) && (!error); ++sub) { // treat any ItemInst as having the max internal slots available
|
for (int16 sub = SUB_INDEX_BEGIN; (sub < EQEmu::legacy::ITEM_CONTAINER_SIZE) && (!error); ++sub) { // treat any EQEmu::ItemInstance as having the max internal slots available
|
||||||
if (inst->GetItem(sub))
|
if (inst->GetItem(sub))
|
||||||
InterrogateInventory_(true, requester, head, sub, inst->GetItem(sub), inst, log, silent, error, depth + 1);
|
InterrogateInventory_(true, requester, head, sub, inst->GetItem(sub), inst, log, silent, error, depth + 1);
|
||||||
}
|
}
|
||||||
@ -3193,7 +3193,7 @@ void Client::InterrogateInventory_(bool errorcheck, Client* requester, int16 hea
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::InterrogateInventory_error(int16 head, int16 index, const ItemInst* inst, const ItemInst* parent, int depth)
|
bool Client::InterrogateInventory_error(int16 head, int16 index, const EQEmu::ItemInstance* inst, const EQEmu::ItemInstance* parent, int depth)
|
||||||
{
|
{
|
||||||
// very basic error checking - can be elaborated upon if more in-depth testing is needed...
|
// very basic error checking - can be elaborated upon if more in-depth testing is needed...
|
||||||
|
|
||||||
@ -3273,7 +3273,7 @@ bool Client::InterrogateInventory_error(int16 head, int16 index, const ItemInst*
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, std::string value) {
|
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, std::string value) {
|
||||||
ItemInst *inst = GetItem(slot_id);
|
EQEmu::ItemInstance *inst = GetItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
inst->SetCustomData(identifier, value);
|
inst->SetCustomData(identifier, value);
|
||||||
database.SaveInventory(character_id, inst, slot_id);
|
database.SaveInventory(character_id, inst, slot_id);
|
||||||
@ -3281,7 +3281,7 @@ void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, int value) {
|
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, int value) {
|
||||||
ItemInst *inst = GetItem(slot_id);
|
EQEmu::ItemInstance *inst = GetItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
inst->SetCustomData(identifier, value);
|
inst->SetCustomData(identifier, value);
|
||||||
database.SaveInventory(character_id, inst, slot_id);
|
database.SaveInventory(character_id, inst, slot_id);
|
||||||
@ -3289,7 +3289,7 @@ void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, float value) {
|
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, float value) {
|
||||||
ItemInst *inst = GetItem(slot_id);
|
EQEmu::ItemInstance *inst = GetItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
inst->SetCustomData(identifier, value);
|
inst->SetCustomData(identifier, value);
|
||||||
database.SaveInventory(character_id, inst, slot_id);
|
database.SaveInventory(character_id, inst, slot_id);
|
||||||
@ -3297,7 +3297,7 @@ void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, bool value) {
|
void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::string identifier, bool value) {
|
||||||
ItemInst *inst = GetItem(slot_id);
|
EQEmu::ItemInstance *inst = GetItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
inst->SetCustomData(identifier, value);
|
inst->SetCustomData(identifier, value);
|
||||||
database.SaveInventory(character_id, inst, slot_id);
|
database.SaveInventory(character_id, inst, slot_id);
|
||||||
@ -3305,7 +3305,7 @@ void Inventory::SetCustomItemData(uint32 character_id, int16 slot_id, std::strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string Inventory::GetCustomItemData(int16 slot_id, std::string identifier) {
|
std::string Inventory::GetCustomItemData(int16 slot_id, std::string identifier) {
|
||||||
ItemInst *inst = GetItem(slot_id);
|
EQEmu::ItemInstance *inst = GetItem(slot_id);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
return inst->GetCustomData(identifier);
|
return inst->GetCustomData(identifier);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -119,7 +119,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml
|
|||||||
int charges = lds->Entries[i].multiplier;
|
int charges = lds->Entries[i].multiplier;
|
||||||
for(int j = 0; j < charges; ++j) {
|
for(int j = 0; j < charges; ++j) {
|
||||||
if(zone->random.Real(0.0, 100.0) <= lds->Entries[i].chance) {
|
if(zone->random.Real(0.0, 100.0) <= lds->Entries[i].chance) {
|
||||||
const EQEmu::ItemBase* dbitem = GetItem(lds->Entries[i].item_id);
|
const EQEmu::ItemData* dbitem = GetItem(lds->Entries[i].item_id);
|
||||||
npc->AddLootDrop(dbitem, itemlist, lds->Entries[i].item_charges, lds->Entries[i].minlevel,
|
npc->AddLootDrop(dbitem, itemlist, lds->Entries[i].item_charges, lds->Entries[i].minlevel,
|
||||||
lds->Entries[i].maxlevel, lds->Entries[i].equip_item > 0 ? true : false, false);
|
lds->Entries[i].maxlevel, lds->Entries[i].equip_item > 0 ? true : false, false);
|
||||||
}
|
}
|
||||||
@ -140,7 +140,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml
|
|||||||
float roll_t_min = 0.0f;
|
float roll_t_min = 0.0f;
|
||||||
bool active_item_list = false;
|
bool active_item_list = false;
|
||||||
for(uint32 i = 0; i < lds->NumEntries; ++i) {
|
for(uint32 i = 0; i < lds->NumEntries; ++i) {
|
||||||
const EQEmu::ItemBase* db_item = GetItem(lds->Entries[i].item_id);
|
const EQEmu::ItemData* db_item = GetItem(lds->Entries[i].item_id);
|
||||||
if(db_item) {
|
if(db_item) {
|
||||||
roll_t += lds->Entries[i].chance;
|
roll_t += lds->Entries[i].chance;
|
||||||
active_item_list = true;
|
active_item_list = true;
|
||||||
@ -157,7 +157,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml
|
|||||||
for(int i = 0; i < mindrop; ++i) {
|
for(int i = 0; i < mindrop; ++i) {
|
||||||
float roll = (float)zone->random.Real(0.0, roll_t_min);
|
float roll = (float)zone->random.Real(0.0, roll_t_min);
|
||||||
for(uint32 j = 0; j < lds->NumEntries; ++j) {
|
for(uint32 j = 0; j < lds->NumEntries; ++j) {
|
||||||
const EQEmu::ItemBase* db_item = GetItem(lds->Entries[j].item_id);
|
const EQEmu::ItemData* db_item = GetItem(lds->Entries[j].item_id);
|
||||||
if(db_item) {
|
if(db_item) {
|
||||||
if(roll < lds->Entries[j].chance) {
|
if(roll < lds->Entries[j].chance) {
|
||||||
npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel,
|
npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel,
|
||||||
@ -187,7 +187,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml
|
|||||||
for(int i = mindrop; i < droplimit; ++i) {
|
for(int i = mindrop; i < droplimit; ++i) {
|
||||||
float roll = (float)zone->random.Real(0.0, roll_t);
|
float roll = (float)zone->random.Real(0.0, roll_t);
|
||||||
for(uint32 j = 0; j < lds->NumEntries; ++j) {
|
for(uint32 j = 0; j < lds->NumEntries; ++j) {
|
||||||
const EQEmu::ItemBase* db_item = GetItem(lds->Entries[j].item_id);
|
const EQEmu::ItemData* db_item = GetItem(lds->Entries[j].item_id);
|
||||||
if(db_item) {
|
if(db_item) {
|
||||||
if(roll < lds->Entries[j].chance) {
|
if(roll < lds->Entries[j].chance) {
|
||||||
npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel,
|
npc->AddLootDrop(db_item, itemlist, lds->Entries[j].item_charges, lds->Entries[j].minlevel,
|
||||||
@ -221,7 +221,7 @@ void ZoneDatabase::AddLootDropToNPC(NPC* npc,uint32 lootdrop_id, ItemList* iteml
|
|||||||
}
|
}
|
||||||
|
|
||||||
//if itemlist is null, just send wear changes
|
//if itemlist is null, just send wear changes
|
||||||
void NPC::AddLootDrop(const EQEmu::ItemBase *item2, ItemList* itemlist, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange) {
|
void NPC::AddLootDrop(const EQEmu::ItemData *item2, ItemList* itemlist, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange) {
|
||||||
if(item2 == nullptr)
|
if(item2 == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -258,7 +258,7 @@ void NPC::AddLootDrop(const EQEmu::ItemBase *item2, ItemList* itemlist, int16 ch
|
|||||||
if (equipit) {
|
if (equipit) {
|
||||||
uint8 eslot = 0xFF;
|
uint8 eslot = 0xFF;
|
||||||
char newid[20];
|
char newid[20];
|
||||||
const EQEmu::ItemBase* compitem = nullptr;
|
const EQEmu::ItemData* compitem = nullptr;
|
||||||
bool found = false; // track if we found an empty slot we fit into
|
bool found = false; // track if we found an empty slot we fit into
|
||||||
int32 foundslot = -1; // for multi-slot items
|
int32 foundslot = -1; // for multi-slot items
|
||||||
|
|
||||||
@ -415,14 +415,14 @@ void NPC::AddLootDrop(const EQEmu::ItemBase *item2, ItemList* itemlist, int16 ch
|
|||||||
SendAppearancePacket(AT_Light, GetActiveLightType());
|
SendAppearancePacket(AT_Light, GetActiveLightType());
|
||||||
}
|
}
|
||||||
|
|
||||||
void NPC::AddItem(const EQEmu::ItemBase* item, uint16 charges, bool equipitem) {
|
void NPC::AddItem(const EQEmu::ItemData* item, uint16 charges, bool equipitem) {
|
||||||
//slot isnt needed, its determined from the item.
|
//slot isnt needed, its determined from the item.
|
||||||
AddLootDrop(item, &itemlist, charges, 1, 255, equipitem, equipitem);
|
AddLootDrop(item, &itemlist, charges, 1, 255, equipitem, equipitem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem) {
|
void NPC::AddItem(uint32 itemid, uint16 charges, bool equipitem) {
|
||||||
//slot isnt needed, its determined from the item.
|
//slot isnt needed, its determined from the item.
|
||||||
const EQEmu::ItemBase * i = database.GetItem(itemid);
|
const EQEmu::ItemData * i = database.GetItem(itemid);
|
||||||
if(i == nullptr)
|
if(i == nullptr)
|
||||||
return;
|
return;
|
||||||
AddLootDrop(i, &itemlist, charges, 1, 255, equipitem, equipitem);
|
AddLootDrop(i, &itemlist, charges, 1, 255, equipitem, equipitem);
|
||||||
|
|||||||
@ -1219,13 +1219,13 @@ Lua_Raid Lua_Client::GetRaid() {
|
|||||||
|
|
||||||
bool Lua_Client::PutItemInInventory(int slot_id, Lua_ItemInst inst) {
|
bool Lua_Client::PutItemInInventory(int slot_id, Lua_ItemInst inst) {
|
||||||
Lua_Safe_Call_Bool();
|
Lua_Safe_Call_Bool();
|
||||||
ItemInst *rinst = inst;
|
EQEmu::ItemInstance *rinst = inst;
|
||||||
return self->PutItemInInventory(slot_id, *rinst, true);
|
return self->PutItemInInventory(slot_id, *rinst, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Lua_Client::PushItemOnCursor(Lua_ItemInst inst) {
|
bool Lua_Client::PushItemOnCursor(Lua_ItemInst inst) {
|
||||||
Lua_Safe_Call_Bool();
|
Lua_Safe_Call_Bool();
|
||||||
ItemInst *rinst = inst;
|
EQEmu::ItemInstance *rinst = inst;
|
||||||
return self->PushItemOnCursor(*rinst, true);
|
return self->PushItemOnCursor(*rinst, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@ Lua_ItemInst Lua_Inventory::GetItem(int slot_id, int bag_slot) {
|
|||||||
|
|
||||||
int Lua_Inventory::PutItem(int slot_id, Lua_ItemInst item) {
|
int Lua_Inventory::PutItem(int slot_id, Lua_ItemInst item) {
|
||||||
Lua_Safe_Call_Int();
|
Lua_Safe_Call_Int();
|
||||||
ItemInst *inst = item;
|
EQEmu::ItemInstance *inst = item;
|
||||||
if(!inst) {
|
if(!inst) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -30,7 +30,7 @@ int Lua_Inventory::PutItem(int slot_id, Lua_ItemInst item) {
|
|||||||
|
|
||||||
int Lua_Inventory::PushCursor(Lua_ItemInst item) {
|
int Lua_Inventory::PushCursor(Lua_ItemInst item) {
|
||||||
Lua_Safe_Call_Int();
|
Lua_Safe_Call_Int();
|
||||||
ItemInst *inst = item;
|
EQEmu::ItemInstance *inst = item;
|
||||||
if(!inst) {
|
if(!inst) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
#include "lua_item.h"
|
#include "lua_item.h"
|
||||||
|
|
||||||
Lua_Item::Lua_Item(uint32 item_id) {
|
Lua_Item::Lua_Item(uint32 item_id) {
|
||||||
const EQEmu::ItemBase *t = database.GetItem(item_id);
|
const EQEmu::ItemData *t = database.GetItem(item_id);
|
||||||
SetLuaPtrData(t);
|
SetLuaPtrData(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace luabind {
|
namespace luabind {
|
||||||
@ -15,17 +15,17 @@ namespace luabind {
|
|||||||
|
|
||||||
luabind::scope lua_register_item();
|
luabind::scope lua_register_item();
|
||||||
|
|
||||||
class Lua_Item : public Lua_Ptr<const EQEmu::ItemBase>
|
class Lua_Item : public Lua_Ptr<const EQEmu::ItemData>
|
||||||
{
|
{
|
||||||
typedef const EQEmu::ItemBase NativeType;
|
typedef const EQEmu::ItemData NativeType;
|
||||||
public:
|
public:
|
||||||
Lua_Item(uint32 item_id);
|
Lua_Item(uint32 item_id);
|
||||||
Lua_Item() : Lua_Ptr(nullptr) { }
|
Lua_Item() : Lua_Ptr(nullptr) { }
|
||||||
Lua_Item(const EQEmu::ItemBase *d) : Lua_Ptr(d) { }
|
Lua_Item(const EQEmu::ItemData *d) : Lua_Ptr(d) { }
|
||||||
virtual ~Lua_Item() { }
|
virtual ~Lua_Item() { }
|
||||||
|
|
||||||
operator const EQEmu::ItemBase*() {
|
operator const EQEmu::ItemData*() {
|
||||||
return reinterpret_cast<const EQEmu::ItemBase*>(GetLuaPtrData());
|
return reinterpret_cast<const EQEmu::ItemData*>(GetLuaPtrData());
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetMinStatus();
|
int GetMinStatus();
|
||||||
|
|||||||
@ -21,7 +21,7 @@ Lua_ItemInst::Lua_ItemInst(int item_id, int charges) {
|
|||||||
Lua_ItemInst& Lua_ItemInst::operator=(const Lua_ItemInst& o) {
|
Lua_ItemInst& Lua_ItemInst::operator=(const Lua_ItemInst& o) {
|
||||||
if(o.cloned_) {
|
if(o.cloned_) {
|
||||||
cloned_ = true;
|
cloned_ = true;
|
||||||
d_ = new ItemInst(*o.d_);
|
d_ = new EQEmu::ItemInstance(*o.d_);
|
||||||
} else {
|
} else {
|
||||||
cloned_ = false;
|
cloned_ = false;
|
||||||
d_ = o.d_;
|
d_ = o.d_;
|
||||||
@ -32,7 +32,7 @@ Lua_ItemInst& Lua_ItemInst::operator=(const Lua_ItemInst& o) {
|
|||||||
Lua_ItemInst::Lua_ItemInst(const Lua_ItemInst& o) {
|
Lua_ItemInst::Lua_ItemInst(const Lua_ItemInst& o) {
|
||||||
if(o.cloned_) {
|
if(o.cloned_) {
|
||||||
cloned_ = true;
|
cloned_ = true;
|
||||||
d_ = new ItemInst(*o.d_);
|
d_ = new EQEmu::ItemInstance(*o.d_);
|
||||||
} else {
|
} else {
|
||||||
cloned_ = false;
|
cloned_ = false;
|
||||||
d_ = o.d_;
|
d_ = o.d_;
|
||||||
|
|||||||
@ -4,30 +4,34 @@
|
|||||||
|
|
||||||
#include "lua_ptr.h"
|
#include "lua_ptr.h"
|
||||||
|
|
||||||
class ItemInst;
|
|
||||||
class Lua_Item;
|
class Lua_Item;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
namespace luabind {
|
namespace luabind {
|
||||||
struct scope;
|
struct scope;
|
||||||
}
|
}
|
||||||
|
|
||||||
luabind::scope lua_register_iteminst();
|
luabind::scope lua_register_iteminst();
|
||||||
|
|
||||||
class Lua_ItemInst : public Lua_Ptr<ItemInst>
|
class Lua_ItemInst : public Lua_Ptr<EQEmu::ItemInstance>
|
||||||
{
|
{
|
||||||
typedef ItemInst NativeType;
|
typedef EQEmu::ItemInstance NativeType;
|
||||||
public:
|
public:
|
||||||
Lua_ItemInst(int item_id);
|
Lua_ItemInst(int item_id);
|
||||||
Lua_ItemInst(int item_id, int charges);
|
Lua_ItemInst(int item_id, int charges);
|
||||||
Lua_ItemInst() : Lua_Ptr(nullptr), cloned_(false) { }
|
Lua_ItemInst() : Lua_Ptr(nullptr), cloned_(false) { }
|
||||||
Lua_ItemInst(ItemInst *d) : Lua_Ptr(d), cloned_(false) { }
|
Lua_ItemInst(EQEmu::ItemInstance *d) : Lua_Ptr(d), cloned_(false) { }
|
||||||
Lua_ItemInst(ItemInst *d, bool cloned) : Lua_Ptr(d), cloned_(cloned) { }
|
Lua_ItemInst(EQEmu::ItemInstance *d, bool cloned) : Lua_Ptr(d), cloned_(cloned) { }
|
||||||
Lua_ItemInst& operator=(const Lua_ItemInst& o);
|
Lua_ItemInst& operator=(const Lua_ItemInst& o);
|
||||||
Lua_ItemInst(const Lua_ItemInst& o);
|
Lua_ItemInst(const Lua_ItemInst& o);
|
||||||
virtual ~Lua_ItemInst() { if(cloned_) { ItemInst *ptr = GetLuaPtrData(); if(ptr) { delete ptr; } } }
|
virtual ~Lua_ItemInst() { if(cloned_) { EQEmu::ItemInstance *ptr = GetLuaPtrData(); if(ptr) { delete ptr; } } }
|
||||||
|
|
||||||
operator ItemInst*() {
|
operator EQEmu::ItemInstance*() {
|
||||||
return reinterpret_cast<ItemInst*>(GetLuaPtrData());
|
return reinterpret_cast<EQEmu::ItemInstance*>(GetLuaPtrData());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsType(int item_class);
|
bool IsType(int item_class);
|
||||||
|
|||||||
@ -422,7 +422,7 @@ int LuaParser::_EventPlayer(std::string package_name, QuestEventID evt, Client *
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaParser::EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
int LuaParser::EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
evt = ConvertLuaEvent(evt);
|
evt = ConvertLuaEvent(evt);
|
||||||
if(evt >= _LargestEventID) {
|
if(evt >= _LargestEventID) {
|
||||||
@ -442,7 +442,7 @@ int LuaParser::EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *
|
|||||||
return _EventItem(package_name, evt, client, item, mob, data, extra_data, extra_pointers);
|
return _EventItem(package_name, evt, client, item, mob, data, extra_data, extra_pointers);
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaParser::_EventItem(std::string package_name, QuestEventID evt, Client *client, ItemInst *item, Mob *mob,
|
int LuaParser::_EventItem(std::string package_name, QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob,
|
||||||
std::string data, uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func) {
|
std::string data, uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func) {
|
||||||
const char *sub_name = LuaEvents[evt];
|
const char *sub_name = LuaEvents[evt];
|
||||||
|
|
||||||
@ -706,7 +706,7 @@ bool LuaParser::SpellHasQuestSub(uint32 spell_id, QuestEventID evt) {
|
|||||||
return HasFunction(subname, package_name);
|
return HasFunction(subname, package_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LuaParser::ItemHasQuestSub(ItemInst *itm, QuestEventID evt) {
|
bool LuaParser::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) {
|
||||||
if (itm == nullptr) {
|
if (itm == nullptr) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -752,7 +752,7 @@ void LuaParser::LoadGlobalPlayerScript(std::string filename) {
|
|||||||
LoadScript(filename, "global_player");
|
LoadScript(filename, "global_player");
|
||||||
}
|
}
|
||||||
|
|
||||||
void LuaParser::LoadItemScript(std::string filename, ItemInst *item) {
|
void LuaParser::LoadItemScript(std::string filename, EQEmu::ItemInstance *item) {
|
||||||
if (item == nullptr)
|
if (item == nullptr)
|
||||||
return;
|
return;
|
||||||
std::string package_name = "item_";
|
std::string package_name = "item_";
|
||||||
@ -1129,7 +1129,7 @@ int LuaParser::DispatchEventPlayer(QuestEventID evt, Client *client, std::string
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaParser::DispatchEventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
int LuaParser::DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
evt = ConvertLuaEvent(evt);
|
evt = ConvertLuaEvent(evt);
|
||||||
if(evt >= _LargestEventID) {
|
if(evt >= _LargestEventID) {
|
||||||
|
|||||||
@ -13,10 +13,14 @@
|
|||||||
extern const ZoneConfig *Config;
|
extern const ZoneConfig *Config;
|
||||||
|
|
||||||
struct lua_State;
|
struct lua_State;
|
||||||
class ItemInst;
|
|
||||||
class Client;
|
class Client;
|
||||||
class NPC;
|
class NPC;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
#include "lua_parser_events.h"
|
#include "lua_parser_events.h"
|
||||||
|
|
||||||
struct lua_registered_event;
|
struct lua_registered_event;
|
||||||
@ -39,7 +43,7 @@ public:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
virtual int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
@ -51,14 +55,14 @@ public:
|
|||||||
virtual bool PlayerHasQuestSub(QuestEventID evt);
|
virtual bool PlayerHasQuestSub(QuestEventID evt);
|
||||||
virtual bool GlobalPlayerHasQuestSub(QuestEventID evt);
|
virtual bool GlobalPlayerHasQuestSub(QuestEventID evt);
|
||||||
virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt);
|
virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt);
|
||||||
virtual bool ItemHasQuestSub(ItemInst *itm, QuestEventID evt);
|
virtual bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt);
|
||||||
virtual bool EncounterHasQuestSub(std::string encounter_name, QuestEventID evt);
|
virtual bool EncounterHasQuestSub(std::string encounter_name, QuestEventID evt);
|
||||||
|
|
||||||
virtual void LoadNPCScript(std::string filename, int npc_id);
|
virtual void LoadNPCScript(std::string filename, int npc_id);
|
||||||
virtual void LoadGlobalNPCScript(std::string filename);
|
virtual void LoadGlobalNPCScript(std::string filename);
|
||||||
virtual void LoadPlayerScript(std::string filename);
|
virtual void LoadPlayerScript(std::string filename);
|
||||||
virtual void LoadGlobalPlayerScript(std::string filename);
|
virtual void LoadGlobalPlayerScript(std::string filename);
|
||||||
virtual void LoadItemScript(std::string filename, ItemInst *item);
|
virtual void LoadItemScript(std::string filename, EQEmu::ItemInstance *item);
|
||||||
virtual void LoadSpellScript(std::string filename, uint32 spell_id);
|
virtual void LoadSpellScript(std::string filename, uint32 spell_id);
|
||||||
virtual void LoadEncounterScript(std::string filename, std::string encounter_name);
|
virtual void LoadEncounterScript(std::string filename, std::string encounter_name);
|
||||||
|
|
||||||
@ -72,7 +76,7 @@ public:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
virtual int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int DispatchEventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
virtual int DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
virtual int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
virtual int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
@ -82,7 +86,7 @@ private:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
||||||
int _EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
int _EventPlayer(std::string package_name, QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
||||||
int _EventItem(std::string package_name, QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data,
|
int _EventItem(std::string package_name, QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data,
|
||||||
uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
||||||
int _EventSpell(std::string package_name, QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
int _EventSpell(std::string package_name, QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers, luabind::adl::object *l_func = nullptr);
|
||||||
|
|||||||
@ -58,7 +58,7 @@ void handle_npc_event_trade(QuestInterface *parse, lua_State* L, NPC* npc, Mob *
|
|||||||
size_t sz = extra_pointers->size();
|
size_t sz = extra_pointers->size();
|
||||||
for(size_t i = 0; i < sz; ++i) {
|
for(size_t i = 0; i < sz; ++i) {
|
||||||
std::string prefix = "item" + std::to_string(i + 1);
|
std::string prefix = "item" + std::to_string(i + 1);
|
||||||
ItemInst *inst = EQEmu::any_cast<ItemInst*>(extra_pointers->at(i));
|
EQEmu::ItemInstance *inst = EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(i));
|
||||||
|
|
||||||
Lua_ItemInst l_inst = inst;
|
Lua_ItemInst l_inst = inst;
|
||||||
luabind::adl::object l_inst_o = luabind::adl::object(L, l_inst);
|
luabind::adl::object l_inst_o = luabind::adl::object(L, l_inst);
|
||||||
@ -298,7 +298,7 @@ void handle_player_timer(QuestInterface *parse, lua_State* L, Client* client, st
|
|||||||
|
|
||||||
void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
const EQEmu::ItemBase *item = database.GetItem(extra_data);
|
const EQEmu::ItemData *item = database.GetItem(extra_data);
|
||||||
if(item) {
|
if(item) {
|
||||||
Lua_Item l_item(item);
|
Lua_Item l_item(item);
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
@ -314,7 +314,7 @@ void handle_player_discover_item(QuestInterface *parse, lua_State* L, Client* cl
|
|||||||
|
|
||||||
void handle_player_fish_forage_success(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
void handle_player_fish_forage_success(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
Lua_ItemInst l_item(EQEmu::any_cast<ItemInst*>(extra_pointers->at(0)));
|
Lua_ItemInst l_item(EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(0)));
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
l_item_o.push(L);
|
l_item_o.push(L);
|
||||||
lua_setfield(L, -2, "item");
|
lua_setfield(L, -2, "item");
|
||||||
@ -350,7 +350,7 @@ void handle_player_popup_response(QuestInterface *parse, lua_State* L, Client* c
|
|||||||
|
|
||||||
void handle_player_pick_up(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
void handle_player_pick_up(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
Lua_ItemInst l_item(EQEmu::any_cast<ItemInst*>(extra_pointers->at(0)));
|
Lua_ItemInst l_item(EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(0)));
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
l_item_o.push(L);
|
l_item_o.push(L);
|
||||||
lua_setfield(L, -2, "item");
|
lua_setfield(L, -2, "item");
|
||||||
@ -402,7 +402,7 @@ void handle_player_duel_loss(QuestInterface *parse, lua_State* L, Client* client
|
|||||||
|
|
||||||
void handle_player_loot(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
void handle_player_loot(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
Lua_ItemInst l_item(EQEmu::any_cast<ItemInst*>(extra_pointers->at(0)));
|
Lua_ItemInst l_item(EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(0)));
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
l_item_o.push(L);
|
l_item_o.push(L);
|
||||||
lua_setfield(L, -2, "item");
|
lua_setfield(L, -2, "item");
|
||||||
@ -506,19 +506,19 @@ void handle_player_null(QuestInterface *parse, lua_State* L, Client* client, std
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Item
|
//Item
|
||||||
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
lua_pushinteger(L, extra_data);
|
lua_pushinteger(L, extra_data);
|
||||||
lua_setfield(L, -2, "slot_id");
|
lua_setfield(L, -2, "slot_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
lua_pushstring(L, data.c_str());
|
lua_pushstring(L, data.c_str());
|
||||||
lua_setfield(L, -2, "timer");
|
lua_setfield(L, -2, "timer");
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
|
|
||||||
Lua_Mob l_mob(mob);
|
Lua_Mob l_mob(mob);
|
||||||
@ -539,7 +539,7 @@ void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, ItemI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
if(mob && mob->IsCorpse()) {
|
if(mob && mob->IsCorpse()) {
|
||||||
Lua_Corpse l_corpse(mob->CastToCorpse());
|
Lua_Corpse l_corpse(mob->CastToCorpse());
|
||||||
@ -554,15 +554,15 @@ void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, ItemI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
lua_pushinteger(L, extra_data);
|
lua_pushinteger(L, extra_data);
|
||||||
lua_setfield(L, -2, "slot_id");
|
lua_setfield(L, -2, "slot_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
Lua_ItemInst l_item(EQEmu::any_cast<ItemInst*>(extra_pointers->at(0)));
|
Lua_ItemInst l_item(EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(0)));
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
l_item_o.push(L);
|
l_item_o.push(L);
|
||||||
lua_setfield(L, -2, "aug");
|
lua_setfield(L, -2, "aug");
|
||||||
@ -571,9 +571,9 @@ void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, It
|
|||||||
lua_setfield(L, -2, "slot_id");
|
lua_setfield(L, -2, "slot_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
Lua_ItemInst l_item(EQEmu::any_cast<ItemInst*>(extra_pointers->at(0)));
|
Lua_ItemInst l_item(EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(0)));
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
l_item_o.push(L);
|
l_item_o.push(L);
|
||||||
lua_setfield(L, -2, "item");
|
lua_setfield(L, -2, "item");
|
||||||
@ -582,9 +582,9 @@ void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* cli
|
|||||||
lua_setfield(L, -2, "slot_id");
|
lua_setfield(L, -2, "slot_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
Lua_ItemInst l_item(EQEmu::any_cast<ItemInst*>(extra_pointers->at(0)));
|
Lua_ItemInst l_item(EQEmu::any_cast<EQEmu::ItemInstance*>(extra_pointers->at(0)));
|
||||||
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
luabind::adl::object l_item_o = luabind::adl::object(L, l_item);
|
||||||
l_item_o.push(L);
|
l_item_o.push(L);
|
||||||
lua_setfield(L, -2, "item");
|
lua_setfield(L, -2, "item");
|
||||||
@ -596,7 +596,7 @@ void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* cli
|
|||||||
lua_setfield(L, -2, "destroyed");
|
lua_setfield(L, -2, "destroyed");
|
||||||
}
|
}
|
||||||
|
|
||||||
void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
typedef void(*NPCArgumentHandler)(QuestInterface*, lua_State*, NPC*, Mob*, std::string, uint32, std::vector<EQEmu::Any>*);
|
typedef void(*NPCArgumentHandler)(QuestInterface*, lua_State*, NPC*, Mob*, std::string, uint32, std::vector<EQEmu::Any>*);
|
||||||
typedef void(*PlayerArgumentHandler)(QuestInterface*, lua_State*, Client*, std::string, uint32, std::vector<EQEmu::Any>*);
|
typedef void(*PlayerArgumentHandler)(QuestInterface*, lua_State*, Client*, std::string, uint32, std::vector<EQEmu::Any>*);
|
||||||
typedef void(*ItemArgumentHandler)(QuestInterface*, lua_State*, Client*, ItemInst*, Mob*, std::string, uint32, std::vector<EQEmu::Any>*);
|
typedef void(*ItemArgumentHandler)(QuestInterface*, lua_State*, Client*, EQEmu::ItemInstance*, Mob*, std::string, uint32, std::vector<EQEmu::Any>*);
|
||||||
typedef void(*SpellArgumentHandler)(QuestInterface*, lua_State*, NPC*, Client*, uint32, uint32, std::vector<EQEmu::Any>*);
|
typedef void(*SpellArgumentHandler)(QuestInterface*, lua_State*, NPC*, Client*, uint32, uint32, std::vector<EQEmu::Any>*);
|
||||||
typedef void(*EncounterArgumentHandler)(QuestInterface*, lua_State*, Encounter* encounter, std::string, uint32, std::vector<EQEmu::Any>*);
|
typedef void(*EncounterArgumentHandler)(QuestInterface*, lua_State*, Encounter* encounter, std::string, uint32, std::vector<EQEmu::Any>*);
|
||||||
|
|
||||||
@ -97,23 +97,23 @@ void handle_player_null(QuestInterface *parse, lua_State* L, Client* client, std
|
|||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
|
|
||||||
//Item
|
//Item
|
||||||
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_timer(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_proc(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_loot(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_equip(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_augment(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_augment_insert(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_augment_remove(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, ItemInst* item, Mob *mob, std::string data, uint32 extra_data,
|
void handle_item_null(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
|
|
||||||
//Spell
|
//Spell
|
||||||
|
|||||||
@ -217,7 +217,7 @@ void Merc::CalcItemBonuses(StatBonuses* newbon) {
|
|||||||
for (i = 0; i < EQEmu::legacy::SlotAmmo; i++) {
|
for (i = 0; i < EQEmu::legacy::SlotAmmo; i++) {
|
||||||
if(equipment[i] == 0)
|
if(equipment[i] == 0)
|
||||||
continue;
|
continue;
|
||||||
const EQEmu::ItemBase * itm = database.GetItem(equipment[i]);
|
const EQEmu::ItemData * itm = database.GetItem(equipment[i]);
|
||||||
if(itm)
|
if(itm)
|
||||||
AddItemBonuses(itm, newbon);
|
AddItemBonuses(itm, newbon);
|
||||||
}
|
}
|
||||||
@ -225,7 +225,7 @@ void Merc::CalcItemBonuses(StatBonuses* newbon) {
|
|||||||
//Power Source Slot
|
//Power Source Slot
|
||||||
/*if (GetClientVersion() >= EQClientSoF)
|
/*if (GetClientVersion() >= EQClientSoF)
|
||||||
{
|
{
|
||||||
const ItemInst* inst = m_inv[MainPowerSource];
|
const EQEmu::ItemInstance* inst = m_inv[MainPowerSource];
|
||||||
if(inst)
|
if(inst)
|
||||||
AddItemBonuses(inst, newbon);
|
AddItemBonuses(inst, newbon);
|
||||||
}*/
|
}*/
|
||||||
@ -243,7 +243,7 @@ void Merc::CalcItemBonuses(StatBonuses* newbon) {
|
|||||||
SetAttackTimer();
|
SetAttackTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Merc::AddItemBonuses(const EQEmu::ItemBase *item, StatBonuses* newbon) {
|
void Merc::AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon) {
|
||||||
|
|
||||||
if(GetLevel() < item->ReqLevel)
|
if(GetLevel() < item->ReqLevel)
|
||||||
{
|
{
|
||||||
@ -1221,7 +1221,7 @@ void Merc::FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho) {
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const ItemBase* item = database.GetItem(equipment[i]);
|
const ItemData* item = database.GetItem(equipment[i]);
|
||||||
if(item)
|
if(item)
|
||||||
{
|
{
|
||||||
ns->spawn.equipment[i].material = item->Material;
|
ns->spawn.equipment[i].material = item->Material;
|
||||||
@ -2547,8 +2547,8 @@ int16 Merc::GetFocusEffect(focusType type, uint16 spell_id) {
|
|||||||
//Check if item focus effect exists for the client.
|
//Check if item focus effect exists for the client.
|
||||||
if (itembonuses.FocusEffects[type]){
|
if (itembonuses.FocusEffects[type]){
|
||||||
|
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
const EQEmu::ItemBase* UsedItem = 0;
|
const EQEmu::ItemData* UsedItem = 0;
|
||||||
uint16 UsedFocusID = 0;
|
uint16 UsedFocusID = 0;
|
||||||
int16 Total = 0;
|
int16 Total = 0;
|
||||||
int16 focus_max = 0;
|
int16 focus_max = 0;
|
||||||
@ -4428,7 +4428,7 @@ void Merc::DoClassAttacks(Mob *target) {
|
|||||||
DoAnim(animKick);
|
DoAnim(animKick);
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
|
|
||||||
if (GetWeaponDamage(target, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
dmg = -5;
|
dmg = -5;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -4450,7 +4450,7 @@ void Merc::DoClassAttacks(Mob *target) {
|
|||||||
DoAnim(animTailRake);
|
DoAnim(animTailRake);
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
|
|
||||||
if (GetWeaponDamage(target, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
dmg = -5;
|
dmg = -5;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
|||||||
@ -14,7 +14,7 @@ struct NewSpawn_Struct;
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAXMERCS 1
|
#define MAXMERCS 1
|
||||||
@ -283,7 +283,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void CalcItemBonuses(StatBonuses* newbon);
|
void CalcItemBonuses(StatBonuses* newbon);
|
||||||
void AddItemBonuses(const EQEmu::ItemBase *item, StatBonuses* newbon);
|
void AddItemBonuses(const EQEmu::ItemData *item, StatBonuses* newbon);
|
||||||
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
|
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
|
||||||
|
|
||||||
int16 GetFocusEffect(focusType type, uint16 spell_id);
|
int16 GetFocusEffect(focusType type, uint16 spell_id);
|
||||||
|
|||||||
40
zone/mob.cpp
40
zone/mob.cpp
@ -2374,12 +2374,12 @@ bool Mob::CanThisClassDualWield(void) const {
|
|||||||
return(GetSkill(EQEmu::skills::SkillDualWield) > 0);
|
return(GetSkill(EQEmu::skills::SkillDualWield) > 0);
|
||||||
}
|
}
|
||||||
else if (CastToClient()->HasSkill(EQEmu::skills::SkillDualWield)) {
|
else if (CastToClient()->HasSkill(EQEmu::skills::SkillDualWield)) {
|
||||||
const ItemInst* pinst = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
const EQEmu::ItemInstance* pinst = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
const ItemInst* sinst = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
const EQEmu::ItemInstance* sinst = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
|
|
||||||
// 2HS, 2HB, or 2HP
|
// 2HS, 2HB, or 2HP
|
||||||
if(pinst && pinst->IsWeapon()) {
|
if(pinst && pinst->IsWeapon()) {
|
||||||
const EQEmu::ItemBase* item = pinst->GetItem();
|
const EQEmu::ItemData* item = pinst->GetItem();
|
||||||
|
|
||||||
if (item->IsType2HWeapon())
|
if (item->IsType2HWeapon())
|
||||||
return false;
|
return false;
|
||||||
@ -2749,7 +2749,7 @@ void Mob::SendArmorAppearance(Client *one_client)
|
|||||||
{
|
{
|
||||||
if (!IsClient())
|
if (!IsClient())
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
for (int i = 0; i < 7; ++i)
|
for (int i = 0; i < 7; ++i)
|
||||||
{
|
{
|
||||||
item = database.GetItem(GetEquipment(i));
|
item = database.GetItem(GetEquipment(i));
|
||||||
@ -2852,7 +2852,7 @@ int32 Mob::GetEquipmentMaterial(uint8 material_slot) const
|
|||||||
{
|
{
|
||||||
uint32 equipmaterial = 0;
|
uint32 equipmaterial = 0;
|
||||||
int32 ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
int32 ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
item = database.GetItem(GetEquipment(material_slot));
|
item = database.GetItem(GetEquipment(material_slot));
|
||||||
|
|
||||||
if (item != 0)
|
if (item != 0)
|
||||||
@ -2867,7 +2867,7 @@ int32 Mob::GetEquipmentMaterial(uint8 material_slot) const
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
const ItemInst* inst = CastToClient()->m_inv[invslot];
|
const EQEmu::ItemInstance* inst = CastToClient()->m_inv[invslot];
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
if (inst->GetOrnamentationAug(ornamentationAugtype))
|
if (inst->GetOrnamentationAug(ornamentationAugtype))
|
||||||
@ -2905,7 +2905,7 @@ int32 Mob::GetHerosForgeModel(uint8 material_slot) const
|
|||||||
if (material_slot >= 0 && material_slot < EQEmu::textures::TexturePrimary)
|
if (material_slot >= 0 && material_slot < EQEmu::textures::TexturePrimary)
|
||||||
{
|
{
|
||||||
uint32 ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
uint32 ornamentationAugtype = RuleI(Character, OrnamentationAugmentType);
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
item = database.GetItem(GetEquipment(material_slot));
|
item = database.GetItem(GetEquipment(material_slot));
|
||||||
int16 invslot = Inventory::CalcSlotFromMaterial(material_slot);
|
int16 invslot = Inventory::CalcSlotFromMaterial(material_slot);
|
||||||
|
|
||||||
@ -2913,7 +2913,7 @@ int32 Mob::GetHerosForgeModel(uint8 material_slot) const
|
|||||||
{
|
{
|
||||||
if (IsClient())
|
if (IsClient())
|
||||||
{
|
{
|
||||||
const ItemInst* inst = CastToClient()->m_inv[invslot];
|
const EQEmu::ItemInstance* inst = CastToClient()->m_inv[invslot];
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
if (inst->GetOrnamentationAug(ornamentationAugtype))
|
if (inst->GetOrnamentationAug(ornamentationAugtype))
|
||||||
@ -2959,7 +2959,7 @@ int32 Mob::GetHerosForgeModel(uint8 material_slot) const
|
|||||||
|
|
||||||
uint32 Mob::GetEquipmentColor(uint8 material_slot) const
|
uint32 Mob::GetEquipmentColor(uint8 material_slot) const
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
|
|
||||||
if (armor_tint.Slot[material_slot].Color)
|
if (armor_tint.Slot[material_slot].Color)
|
||||||
{
|
{
|
||||||
@ -2975,7 +2975,7 @@ uint32 Mob::GetEquipmentColor(uint8 material_slot) const
|
|||||||
|
|
||||||
uint32 Mob::IsEliteMaterialItem(uint8 material_slot) const
|
uint32 Mob::IsEliteMaterialItem(uint8 material_slot) const
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
|
|
||||||
item = database.GetItem(GetEquipment(material_slot));
|
item = database.GetItem(GetEquipment(material_slot));
|
||||||
if(item != 0)
|
if(item != 0)
|
||||||
@ -3187,7 +3187,7 @@ int32 Mob::GetActSpellCasttime(uint16 spell_id, int32 casttime) {
|
|||||||
return casttime;
|
return casttime;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::ExecWeaponProc(const ItemInst *inst, uint16 spell_id, Mob *on, int level_override) {
|
void Mob::ExecWeaponProc(const EQEmu::ItemInstance *inst, uint16 spell_id, Mob *on, int level_override) {
|
||||||
// Changed proc targets to look up based on the spells goodEffect flag.
|
// Changed proc targets to look up based on the spells goodEffect flag.
|
||||||
// This should work for the majority of weapons.
|
// This should work for the majority of weapons.
|
||||||
if(spell_id == SPELL_UNKNOWN || on->GetSpecialAbility(NO_HARM_FROM_CLIENT)) {
|
if(spell_id == SPELL_UNKNOWN || on->GetSpecialAbility(NO_HARM_FROM_CLIENT)) {
|
||||||
@ -3208,9 +3208,9 @@ void Mob::ExecWeaponProc(const ItemInst *inst, uint16 spell_id, Mob *on, int lev
|
|||||||
|
|
||||||
if(inst && IsClient()) {
|
if(inst && IsClient()) {
|
||||||
//const cast is dirty but it would require redoing a ton of interfaces at this point
|
//const cast is dirty but it would require redoing a ton of interfaces at this point
|
||||||
//It should be safe as we don't have any truly const ItemInst floating around anywhere.
|
//It should be safe as we don't have any truly const EQEmu::ItemInstance floating around anywhere.
|
||||||
//So we'll live with it for now
|
//So we'll live with it for now
|
||||||
int i = parse->EventItem(EVENT_WEAPON_PROC, CastToClient(), const_cast<ItemInst*>(inst), on, "", spell_id);
|
int i = parse->EventItem(EVENT_WEAPON_PROC, CastToClient(), const_cast<EQEmu::ItemInstance*>(inst), on, "", spell_id);
|
||||||
if(i != 0) {
|
if(i != 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -3888,11 +3888,11 @@ void Mob::TrySympatheticProc(Mob *target, uint32 spell_id)
|
|||||||
|
|
||||||
int32 Mob::GetItemStat(uint32 itemid, const char *identifier)
|
int32 Mob::GetItemStat(uint32 itemid, const char *identifier)
|
||||||
{
|
{
|
||||||
const ItemInst* inst = database.CreateItem(itemid);
|
const EQEmu::ItemInstance* inst = database.CreateItem(itemid);
|
||||||
if (!inst)
|
if (!inst)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (!item)
|
if (!item)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -5623,7 +5623,7 @@ int32 Mob::GetSpellStat(uint32 spell_id, const char *identifier, uint8 slot)
|
|||||||
|
|
||||||
bool Mob::CanClassEquipItem(uint32 item_id)
|
bool Mob::CanClassEquipItem(uint32 item_id)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* itm = nullptr;
|
const EQEmu::ItemData* itm = nullptr;
|
||||||
itm = database.GetItem(item_id);
|
itm = database.GetItem(item_id);
|
||||||
|
|
||||||
if (!itm)
|
if (!itm)
|
||||||
@ -5692,9 +5692,9 @@ int32 Mob::GetMeleeMitigation() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* this is the mob being attacked.
|
/* this is the mob being attacked.
|
||||||
* Pass in the weapon's ItemInst
|
* Pass in the weapon's EQEmu::ItemInstance
|
||||||
*/
|
*/
|
||||||
int Mob::ResistElementalWeaponDmg(const ItemInst *item)
|
int Mob::ResistElementalWeaponDmg(const EQEmu::ItemInstance *item)
|
||||||
{
|
{
|
||||||
if (!item)
|
if (!item)
|
||||||
return 0;
|
return 0;
|
||||||
@ -5844,9 +5844,9 @@ int Mob::ResistElementalWeaponDmg(const ItemInst *item)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* this is the mob being attacked.
|
/* this is the mob being attacked.
|
||||||
* Pass in the weapon's ItemInst
|
* Pass in the weapon's EQEmu::ItemInstance
|
||||||
*/
|
*/
|
||||||
int Mob::CheckBaneDamage(const ItemInst *item)
|
int Mob::CheckBaneDamage(const EQEmu::ItemInstance *item)
|
||||||
{
|
{
|
||||||
if (!item)
|
if (!item)
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
38
zone/mob.h
38
zone/mob.h
@ -43,7 +43,6 @@ class EGNode;
|
|||||||
class Client;
|
class Client;
|
||||||
class EQApplicationPacket;
|
class EQApplicationPacket;
|
||||||
class Group;
|
class Group;
|
||||||
class ItemInst;
|
|
||||||
class NPC;
|
class NPC;
|
||||||
class Raid;
|
class Raid;
|
||||||
struct NewSpawn_Struct;
|
struct NewSpawn_Struct;
|
||||||
@ -51,7 +50,8 @@ struct PlayerPositionUpdateServer_Struct;
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
|
class ItemInstance;
|
||||||
}
|
}
|
||||||
|
|
||||||
class Mob : public Entity {
|
class Mob : public Entity {
|
||||||
@ -215,7 +215,7 @@ public:
|
|||||||
inline bool SeeImprovedHide() const { return see_improved_hide; }
|
inline bool SeeImprovedHide() const { return see_improved_hide; }
|
||||||
bool IsInvisible(Mob* other = 0) const;
|
bool IsInvisible(Mob* other = 0) const;
|
||||||
void SetInvisible(uint8 state);
|
void SetInvisible(uint8 state);
|
||||||
bool AttackAnimation(EQEmu::skills::SkillType &skillinuse, int Hand, const ItemInst* weapon);
|
bool AttackAnimation(EQEmu::skills::SkillType &skillinuse, int Hand, const EQEmu::ItemInstance* weapon);
|
||||||
|
|
||||||
//Song
|
//Song
|
||||||
bool UseBardSpellLogic(uint16 spell_id = 0xffff, int slot = -1);
|
bool UseBardSpellLogic(uint16 spell_id = 0xffff, int slot = -1);
|
||||||
@ -242,8 +242,8 @@ public:
|
|||||||
int resist_override = 0, bool CharismaCheck = false, bool CharmTick = false, bool IsRoot = false,
|
int resist_override = 0, bool CharismaCheck = false, bool CharmTick = false, bool IsRoot = false,
|
||||||
int level_override = -1);
|
int level_override = -1);
|
||||||
int ResistPhysical(int level_diff, uint8 caster_level);
|
int ResistPhysical(int level_diff, uint8 caster_level);
|
||||||
int ResistElementalWeaponDmg(const ItemInst *item);
|
int ResistElementalWeaponDmg(const EQEmu::ItemInstance *item);
|
||||||
int CheckBaneDamage(const ItemInst *item);
|
int CheckBaneDamage(const EQEmu::ItemInstance *item);
|
||||||
uint16 GetSpecializeSkillValue(uint16 spell_id) const;
|
uint16 GetSpecializeSkillValue(uint16 spell_id) const;
|
||||||
void SendSpellBarDisable();
|
void SendSpellBarDisable();
|
||||||
void SendSpellBarEnable(uint16 spellid);
|
void SendSpellBarEnable(uint16 spellid);
|
||||||
@ -774,7 +774,7 @@ public:
|
|||||||
virtual int GetHaste();
|
virtual int GetHaste();
|
||||||
int32 GetMeleeMitigation();
|
int32 GetMeleeMitigation();
|
||||||
|
|
||||||
uint8 GetWeaponDamageBonus(const EQEmu::ItemBase* weapon, bool offhand = false);
|
uint8 GetWeaponDamageBonus(const EQEmu::ItemData* weapon, bool offhand = false);
|
||||||
uint16 GetDamageTable(EQEmu::skills::SkillType skillinuse);
|
uint16 GetDamageTable(EQEmu::skills::SkillType skillinuse);
|
||||||
virtual int GetHandToHandDamage(void);
|
virtual int GetHandToHandDamage(void);
|
||||||
|
|
||||||
@ -799,10 +799,10 @@ public:
|
|||||||
int32 ReduceAllDamage(int32 damage);
|
int32 ReduceAllDamage(int32 damage);
|
||||||
|
|
||||||
virtual void DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 max_damage, int32 min_damage = 1, int32 hate_override = -1, int ReuseTime = 10, bool CheckHitChance = false, bool CanAvoid = true);
|
virtual void DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32 max_damage, int32 min_damage = 1, int32 hate_override = -1, int ReuseTime = 10, bool CheckHitChance = false, bool CanAvoid = true);
|
||||||
virtual void DoThrowingAttackDmg(Mob* other, const ItemInst* RangeWeapon = nullptr, const EQEmu::ItemBase* AmmoItem = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, int AmmoSlot = 0, float speed = 4.0f);
|
virtual void DoThrowingAttackDmg(Mob* other, const EQEmu::ItemInstance* RangeWeapon = nullptr, const EQEmu::ItemData* AmmoItem = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, int AmmoSlot = 0, float speed = 4.0f);
|
||||||
virtual void DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills::SkillType skillinuse, int16 chance_mod = 0, int16 focus = 0, bool CanRiposte = false, int ReuseTime = 0);
|
virtual void DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills::SkillType skillinuse, int16 chance_mod = 0, int16 focus = 0, bool CanRiposte = false, int ReuseTime = 0);
|
||||||
virtual void DoArcheryAttackDmg(Mob* other, const ItemInst* RangeWeapon = nullptr, const ItemInst* Ammo = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, uint32 ammo_id = 0, const EQEmu::ItemBase *AmmoItem = nullptr, int AmmoSlot = 0, float speed = 4.0f);
|
virtual void DoArcheryAttackDmg(Mob* other, const EQEmu::ItemInstance* RangeWeapon = nullptr, const EQEmu::ItemInstance* Ammo = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, uint32 ammo_id = 0, const EQEmu::ItemData *AmmoItem = nullptr, int AmmoSlot = 0, float speed = 4.0f);
|
||||||
bool TryProjectileAttack(Mob* other, const EQEmu::ItemBase *item, EQEmu::skills::SkillType skillInUse, uint16 weapon_dmg, const ItemInst* RangeWeapon, const ItemInst* Ammo, int AmmoSlot, float speed);
|
bool TryProjectileAttack(Mob* other, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, uint16 weapon_dmg, const EQEmu::ItemInstance* RangeWeapon, const EQEmu::ItemInstance* Ammo, int AmmoSlot, float speed);
|
||||||
void ProjectileAttack();
|
void ProjectileAttack();
|
||||||
inline bool HasProjectileAttack() const { return ActiveProjectileATK; }
|
inline bool HasProjectileAttack() const { return ActiveProjectileATK; }
|
||||||
inline void SetProjectileAttack(bool value) { ActiveProjectileATK = value; }
|
inline void SetProjectileAttack(bool value) { ActiveProjectileATK = value; }
|
||||||
@ -921,7 +921,7 @@ public:
|
|||||||
// HP Event
|
// HP Event
|
||||||
inline int GetNextHPEvent() const { return nexthpevent; }
|
inline int GetNextHPEvent() const { return nexthpevent; }
|
||||||
void SetNextHPEvent( int hpevent );
|
void SetNextHPEvent( int hpevent );
|
||||||
void SendItemAnimation(Mob *to, const EQEmu::ItemBase *item, EQEmu::skills::SkillType skillInUse, float velocity = 4.0);
|
void SendItemAnimation(Mob *to, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, float velocity = 4.0);
|
||||||
inline int& GetNextIncHPEvent() { return nextinchpevent; }
|
inline int& GetNextIncHPEvent() { return nextinchpevent; }
|
||||||
void SetNextIncHPEvent( int inchpevent );
|
void SetNextIncHPEvent( int inchpevent );
|
||||||
|
|
||||||
@ -985,9 +985,9 @@ public:
|
|||||||
int32 mod_frenzy_damage(int32 dmg);
|
int32 mod_frenzy_damage(int32 dmg);
|
||||||
int32 mod_monk_special_damage(int32 ndamage, EQEmu::skills::SkillType skill_type);
|
int32 mod_monk_special_damage(int32 ndamage, EQEmu::skills::SkillType skill_type);
|
||||||
int32 mod_backstab_damage(int32 ndamage);
|
int32 mod_backstab_damage(int32 ndamage);
|
||||||
int mod_archery_bonus_chance(int bonuschance, const ItemInst* RangeWeapon);
|
int mod_archery_bonus_chance(int bonuschance, const EQEmu::ItemInstance* RangeWeapon);
|
||||||
uint32 mod_archery_bonus_damage(uint32 MaxDmg, const ItemInst* RangeWeapon);
|
uint32 mod_archery_bonus_damage(uint32 MaxDmg, const EQEmu::ItemInstance* RangeWeapon);
|
||||||
int32 mod_archery_damage(int32 TotalDmg, bool hasbonus, const ItemInst* RangeWeapon);
|
int32 mod_archery_damage(int32 TotalDmg, bool hasbonus, const EQEmu::ItemInstance* RangeWeapon);
|
||||||
uint16 mod_throwing_damage(uint16 MaxDmg);
|
uint16 mod_throwing_damage(uint16 MaxDmg);
|
||||||
int32 mod_cast_time(int32 cast_time);
|
int32 mod_cast_time(int32 cast_time);
|
||||||
int mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id);
|
int mod_buff_duration(int res, Mob* caster, Mob* target, uint16 spell_id);
|
||||||
@ -1159,18 +1159,18 @@ protected:
|
|||||||
bool PassLimitToSkill(uint16 spell_id, uint16 skill);
|
bool PassLimitToSkill(uint16 spell_id, uint16 skill);
|
||||||
bool PassLimitClass(uint32 Classes_, uint16 Class_);
|
bool PassLimitClass(uint32 Classes_, uint16 Class_);
|
||||||
void TryDefensiveProc(Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
void TryDefensiveProc(Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
||||||
void TryWeaponProc(const ItemInst* inst, const EQEmu::ItemBase* weapon, Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
void TryWeaponProc(const EQEmu::ItemInstance* inst, const EQEmu::ItemData* weapon, Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
||||||
void TrySpellProc(const ItemInst* inst, const EQEmu::ItemBase* weapon, Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
void TrySpellProc(const EQEmu::ItemInstance* inst, const EQEmu::ItemData* weapon, Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
||||||
void TryWeaponProc(const ItemInst* weapon, Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
void TryWeaponProc(const EQEmu::ItemInstance* weapon, Mob *on, uint16 hand = EQEmu::legacy::SlotPrimary);
|
||||||
void ExecWeaponProc(const ItemInst* weapon, uint16 spell_id, Mob *on, int level_override = -1);
|
void ExecWeaponProc(const EQEmu::ItemInstance* weapon, uint16 spell_id, Mob *on, int level_override = -1);
|
||||||
virtual float GetProcChances(float ProcBonus, uint16 hand = EQEmu::legacy::SlotPrimary);
|
virtual float GetProcChances(float ProcBonus, uint16 hand = EQEmu::legacy::SlotPrimary);
|
||||||
virtual float GetDefensiveProcChances(float &ProcBonus, float &ProcChance, uint16 hand = EQEmu::legacy::SlotPrimary, Mob *on = nullptr);
|
virtual float GetDefensiveProcChances(float &ProcBonus, float &ProcChance, uint16 hand = EQEmu::legacy::SlotPrimary, Mob *on = nullptr);
|
||||||
virtual float GetSpecialProcChances(uint16 hand);
|
virtual float GetSpecialProcChances(uint16 hand);
|
||||||
virtual float GetAssassinateProcChances(uint16 ReuseTime);
|
virtual float GetAssassinateProcChances(uint16 ReuseTime);
|
||||||
virtual float GetSkillProcChances(uint16 ReuseTime, uint16 hand = 0); // hand = MainCharm?
|
virtual float GetSkillProcChances(uint16 ReuseTime, uint16 hand = 0); // hand = MainCharm?
|
||||||
uint16 GetWeaponSpeedbyHand(uint16 hand);
|
uint16 GetWeaponSpeedbyHand(uint16 hand);
|
||||||
int GetWeaponDamage(Mob *against, const EQEmu::ItemBase *weapon_item);
|
int GetWeaponDamage(Mob *against, const EQEmu::ItemData *weapon_item);
|
||||||
int GetWeaponDamage(Mob *against, const ItemInst *weapon_item, uint32 *hate = nullptr);
|
int GetWeaponDamage(Mob *against, const EQEmu::ItemInstance *weapon_item, uint32 *hate = nullptr);
|
||||||
int GetKickDamage();
|
int GetKickDamage();
|
||||||
int GetBashDamage();
|
int GetBashDamage();
|
||||||
virtual void ApplySpecialAttackMod(EQEmu::skills::SkillType skill, int32 &dmg, int32 &mindmg);
|
virtual void ApplySpecialAttackMod(EQEmu::skills::SkillType skill, int32 &dmg, int32 &mindmg);
|
||||||
|
|||||||
@ -5,11 +5,15 @@
|
|||||||
#include "worldserver.h"
|
#include "worldserver.h"
|
||||||
#include "zone.h"
|
#include "zone.h"
|
||||||
|
|
||||||
class ItemInst;
|
|
||||||
class Spawn2;
|
class Spawn2;
|
||||||
struct Consider_Struct;
|
struct Consider_Struct;
|
||||||
struct DBTradeskillRecipe_Struct;
|
struct DBTradeskillRecipe_Struct;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
extern EntityList entity_list;
|
extern EntityList entity_list;
|
||||||
extern Zone* zone;
|
extern Zone* zone;
|
||||||
|
|
||||||
@ -25,7 +29,7 @@ void Zone::mod_repop() { return; }
|
|||||||
void NPC::mod_prespawn(Spawn2 *sp) { return; }
|
void NPC::mod_prespawn(Spawn2 *sp) { return; }
|
||||||
|
|
||||||
//Base damage from NPC::Attack
|
//Base damage from NPC::Attack
|
||||||
int NPC::mod_npc_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemBase* weapon, Mob* other) { return(damage); }
|
int NPC::mod_npc_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemData* weapon, Mob* other) { return(damage); }
|
||||||
|
|
||||||
//Mob c has been given credit for a kill. This is called after the regular EVENT_KILLED_MERIT event.
|
//Mob c has been given credit for a kill. This is called after the regular EVENT_KILLED_MERIT event.
|
||||||
void NPC::mod_npc_killed_merit(Mob* c) { return; }
|
void NPC::mod_npc_killed_merit(Mob* c) { return; }
|
||||||
@ -34,7 +38,7 @@ void NPC::mod_npc_killed_merit(Mob* c) { return; }
|
|||||||
void NPC::mod_npc_killed(Mob* oos) { return; }
|
void NPC::mod_npc_killed(Mob* oos) { return; }
|
||||||
|
|
||||||
//Base damage from Client::Attack - can cover myriad skill types
|
//Base damage from Client::Attack - can cover myriad skill types
|
||||||
int Client::mod_client_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const ItemInst* weapon, Mob* other) { return(damage); }
|
int Client::mod_client_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemInstance* weapon, Mob* other) { return(damage); }
|
||||||
|
|
||||||
//message is char[4096], don't screw it up. Return true for normal behavior, false to return immediately.
|
//message is char[4096], don't screw it up. Return true for normal behavior, false to return immediately.
|
||||||
// Channels:
|
// Channels:
|
||||||
@ -87,7 +91,7 @@ float Client::mod_tradeskill_chance(float chance, DBTradeskillRecipe_Struct *spe
|
|||||||
float Client::mod_tradeskill_skillup(float chance_stage2) { return(chance_stage2); }
|
float Client::mod_tradeskill_skillup(float chance_stage2) { return(chance_stage2); }
|
||||||
|
|
||||||
//Tribute value override
|
//Tribute value override
|
||||||
int32 Client::mod_tribute_item_value(int32 pts, const ItemInst* item) { return(pts); }
|
int32 Client::mod_tribute_item_value(int32 pts, const EQEmu::ItemInstance* item) { return(pts); }
|
||||||
|
|
||||||
//Death reporting
|
//Death reporting
|
||||||
void Client::mod_client_death_npc(Mob* killerMob) { return; }
|
void Client::mod_client_death_npc(Mob* killerMob) { return; }
|
||||||
@ -103,8 +107,8 @@ int32 Client::mod_client_xp(int32 in_xp, NPC *npc) { return(in_xp); }
|
|||||||
uint32 Client::mod_client_xp_for_level(uint32 xp, uint16 check_level) { return(xp); }
|
uint32 Client::mod_client_xp_for_level(uint32 xp, uint16 check_level) { return(xp); }
|
||||||
|
|
||||||
//Food and drink values as computed by consume requests. Return < 0 to abort the request.
|
//Food and drink values as computed by consume requests. Return < 0 to abort the request.
|
||||||
int Client::mod_food_value(const EQEmu::ItemBase *item, int change) { return(change); }
|
int Client::mod_food_value(const EQEmu::ItemData *item, int change) { return(change); }
|
||||||
int Client::mod_drink_value(const EQEmu::ItemBase *item, int change) { return(change); }
|
int Client::mod_drink_value(const EQEmu::ItemData *item, int change) { return(change); }
|
||||||
|
|
||||||
//effect_vallue - Spell effect value as calculated by default formulas. You will want to ignore effects that don't lend themselves to scaling - pet ID's, gate coords, etc.
|
//effect_vallue - Spell effect value as calculated by default formulas. You will want to ignore effects that don't lend themselves to scaling - pet ID's, gate coords, etc.
|
||||||
int Mob::mod_effect_value(int effect_value, uint16 spell_id, int effect_type, Mob* caster, uint16 caster_id) { return(effect_value); }
|
int Mob::mod_effect_value(int effect_value, uint16 spell_id, int effect_type, Mob* caster, uint16 caster_id) { return(effect_value); }
|
||||||
@ -148,13 +152,13 @@ int32 Mob::mod_monk_special_damage(int32 ndamage, EQEmu::skills::SkillType skill
|
|||||||
int32 Mob::mod_backstab_damage(int32 ndamage) { return(ndamage); }
|
int32 Mob::mod_backstab_damage(int32 ndamage) { return(ndamage); }
|
||||||
|
|
||||||
//Chance for 50+ archery bonus damage if Combat:UseArcheryBonusRoll is true. Base is Combat:ArcheryBonusChance
|
//Chance for 50+ archery bonus damage if Combat:UseArcheryBonusRoll is true. Base is Combat:ArcheryBonusChance
|
||||||
int Mob::mod_archery_bonus_chance(int bonuschance, const ItemInst* RangeWeapon) { return(bonuschance); }
|
int Mob::mod_archery_bonus_chance(int bonuschance, const EQEmu::ItemInstance* RangeWeapon) { return(bonuschance); }
|
||||||
|
|
||||||
//Archery bonus damage
|
//Archery bonus damage
|
||||||
uint32 Mob::mod_archery_bonus_damage(uint32 MaxDmg, const ItemInst* RangeWeapon) { return(MaxDmg); }
|
uint32 Mob::mod_archery_bonus_damage(uint32 MaxDmg, const EQEmu::ItemInstance* RangeWeapon) { return(MaxDmg); }
|
||||||
|
|
||||||
//Final archery damage including bonus if it was applied.
|
//Final archery damage including bonus if it was applied.
|
||||||
int32 Mob::mod_archery_damage(int32 TotalDmg, bool hasbonus, const ItemInst* RangeWeapon) { return(TotalDmg); }
|
int32 Mob::mod_archery_damage(int32 TotalDmg, bool hasbonus, const EQEmu::ItemInstance* RangeWeapon) { return(TotalDmg); }
|
||||||
|
|
||||||
//Thrown weapon damage after all other calcs
|
//Thrown weapon damage after all other calcs
|
||||||
uint16 Mob::mod_throwing_damage(uint16 MaxDmg) { return(MaxDmg); }
|
uint16 Mob::mod_throwing_damage(uint16 MaxDmg) { return(MaxDmg); }
|
||||||
|
|||||||
@ -525,7 +525,7 @@ void NPC::QueryLoot(Client* to)
|
|||||||
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
for (auto cur = itemlist.begin(); cur != itemlist.end(); ++cur, ++x) {
|
for (auto cur = itemlist.begin(); cur != itemlist.end(); ++cur, ++x) {
|
||||||
const EQEmu::ItemBase* item = database.GetItem((*cur)->item_id);
|
const EQEmu::ItemData* item = database.GetItem((*cur)->item_id);
|
||||||
if (item == nullptr) {
|
if (item == nullptr) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Database error, invalid item");
|
Log.Out(Logs::General, Logs::Error, "Database error, invalid item");
|
||||||
continue;
|
continue;
|
||||||
@ -1462,7 +1462,7 @@ void NPC::PickPocket(Client* thief)
|
|||||||
|
|
||||||
// still needs to have FindFreeSlot vs PutItemInInventory issue worked out
|
// still needs to have FindFreeSlot vs PutItemInInventory issue worked out
|
||||||
while (steal_item) {
|
while (steal_item) {
|
||||||
std::vector<std::pair<const EQEmu::ItemBase*, uint16>> loot_selection; // <const ItemBase*, charges>
|
std::vector<std::pair<const EQEmu::ItemData*, uint16>> loot_selection; // <const ItemData*, charges>
|
||||||
for (auto item_iter : itemlist) {
|
for (auto item_iter : itemlist) {
|
||||||
if (!item_iter || !item_iter->item_id)
|
if (!item_iter || !item_iter->item_id)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@ -93,7 +93,7 @@ class Spawn2;
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
struct ItemBase;
|
struct ItemData;
|
||||||
}
|
}
|
||||||
|
|
||||||
class NPC : public Mob
|
class NPC : public Mob
|
||||||
@ -178,7 +178,7 @@ public:
|
|||||||
virtual void SpellProcess();
|
virtual void SpellProcess();
|
||||||
virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho);
|
virtual void FillSpawnStruct(NewSpawn_Struct* ns, Mob* ForWho);
|
||||||
|
|
||||||
void AddItem(const EQEmu::ItemBase* item, uint16 charges, bool equipitem = true);
|
void AddItem(const EQEmu::ItemData* item, uint16 charges, bool equipitem = true);
|
||||||
void AddItem(uint32 itemid, uint16 charges, bool equipitem = true);
|
void AddItem(uint32 itemid, uint16 charges, bool equipitem = true);
|
||||||
void AddLootTable();
|
void AddLootTable();
|
||||||
void AddLootTable(uint32 ldid);
|
void AddLootTable(uint32 ldid);
|
||||||
@ -270,7 +270,7 @@ public:
|
|||||||
bool IsTaunting() const { return taunting; }
|
bool IsTaunting() const { return taunting; }
|
||||||
void PickPocket(Client* thief);
|
void PickPocket(Client* thief);
|
||||||
void StartSwarmTimer(uint32 duration) { swarm_timer.Start(duration); }
|
void StartSwarmTimer(uint32 duration) { swarm_timer.Start(duration); }
|
||||||
void AddLootDrop(const EQEmu::ItemBase*dbitem, ItemList* itemlistconst, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange = false);
|
void AddLootDrop(const EQEmu::ItemData*dbitem, ItemList* itemlistconst, int16 charges, uint8 minlevel, uint8 maxlevel, bool equipit, bool wearchange = false);
|
||||||
virtual void DoClassAttacks(Mob *target);
|
virtual void DoClassAttacks(Mob *target);
|
||||||
void CheckSignal();
|
void CheckSignal();
|
||||||
inline bool IsNotTargetableWithHotkey() const { return no_target_hotkey; }
|
inline bool IsNotTargetableWithHotkey() const { return no_target_hotkey; }
|
||||||
@ -403,7 +403,7 @@ public:
|
|||||||
void SetMerchantProbability(uint8 amt) { probability = amt; }
|
void SetMerchantProbability(uint8 amt) { probability = amt; }
|
||||||
uint8 GetMerchantProbability() { return probability; }
|
uint8 GetMerchantProbability() { return probability; }
|
||||||
void mod_prespawn(Spawn2 *sp);
|
void mod_prespawn(Spawn2 *sp);
|
||||||
int mod_npc_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemBase* weapon, Mob* other);
|
int mod_npc_damage(int damage, EQEmu::skills::SkillType skillinuse, int hand, const EQEmu::ItemData* weapon, Mob* other);
|
||||||
void mod_npc_killed_merit(Mob* c);
|
void mod_npc_killed_merit(Mob* c);
|
||||||
void mod_npc_killed(Mob* oos);
|
void mod_npc_killed(Mob* oos);
|
||||||
void AISpellsList(Client *c);
|
void AISpellsList(Client *c);
|
||||||
|
|||||||
@ -37,7 +37,7 @@ extern Zone* zone;
|
|||||||
extern EntityList entity_list;
|
extern EntityList entity_list;
|
||||||
|
|
||||||
// Loading object from database
|
// Loading object from database
|
||||||
Object::Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const ItemInst* inst)
|
Object::Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst)
|
||||||
: respawn_timer(0), decay_timer(300000)
|
: respawn_timer(0), decay_timer(300000)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ Object::Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& object,
|
|||||||
}
|
}
|
||||||
|
|
||||||
//creating a re-ocurring ground spawn.
|
//creating a re-ocurring ground spawn.
|
||||||
Object::Object(const ItemInst* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer)
|
Object::Object(const EQEmu::ItemInstance* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer)
|
||||||
: respawn_timer(respawntimer), decay_timer(300000)
|
: respawn_timer(respawntimer), decay_timer(300000)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ Object::Object(const ItemInst* inst, char* name,float max_x,float min_x,float ma
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Loading object from client dropping item on ground
|
// Loading object from client dropping item on ground
|
||||||
Object::Object(Client* client, const ItemInst* inst)
|
Object::Object(Client* client, const EQEmu::ItemInstance* inst)
|
||||||
: respawn_timer(0), decay_timer(300000)
|
: respawn_timer(0), decay_timer(300000)
|
||||||
{
|
{
|
||||||
user = nullptr;
|
user = nullptr;
|
||||||
@ -141,7 +141,7 @@ Object::Object(Client* client, const ItemInst* inst)
|
|||||||
|
|
||||||
// Set object name
|
// Set object name
|
||||||
if (inst) {
|
if (inst) {
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (item && item->IDFile) {
|
if (item && item->IDFile) {
|
||||||
if (strlen(item->IDFile) == 0) {
|
if (strlen(item->IDFile) == 0) {
|
||||||
strcpy(m_data.object_name, DEFAULT_OBJECT_NAME);
|
strcpy(m_data.object_name, DEFAULT_OBJECT_NAME);
|
||||||
@ -164,7 +164,7 @@ Object::Object(Client* client, const ItemInst* inst)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Object::Object(const ItemInst *inst, float x, float y, float z, float heading, uint32 decay_time)
|
Object::Object(const EQEmu::ItemInstance *inst, float x, float y, float z, float heading, uint32 decay_time)
|
||||||
: respawn_timer(0), decay_timer(decay_time)
|
: respawn_timer(0), decay_timer(decay_time)
|
||||||
{
|
{
|
||||||
user = nullptr;
|
user = nullptr;
|
||||||
@ -197,7 +197,7 @@ Object::Object(const ItemInst *inst, float x, float y, float z, float heading, u
|
|||||||
|
|
||||||
// Set object name
|
// Set object name
|
||||||
if (inst) {
|
if (inst) {
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (item && item->IDFile) {
|
if (item && item->IDFile) {
|
||||||
if (strlen(item->IDFile) == 0) {
|
if (strlen(item->IDFile) == 0) {
|
||||||
strcpy(m_data.object_name, DEFAULT_OBJECT_NAME);
|
strcpy(m_data.object_name, DEFAULT_OBJECT_NAME);
|
||||||
@ -225,8 +225,8 @@ Object::Object(const char *model, float x, float y, float z, float heading, uint
|
|||||||
{
|
{
|
||||||
user = nullptr;
|
user = nullptr;
|
||||||
last_user = nullptr;
|
last_user = nullptr;
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
inst = new ItemInst(ItemInstWorldContainer);
|
inst = new EQEmu::ItemInstance(ItemInstWorldContainer);
|
||||||
|
|
||||||
// Initialize members
|
// Initialize members
|
||||||
m_id = 0;
|
m_id = 0;
|
||||||
@ -326,7 +326,7 @@ void Object::Delete(bool reset_state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* Object::GetItem(uint8 index) {
|
const EQEmu::ItemInstance* Object::GetItem(uint8 index) {
|
||||||
if (index < EQEmu::legacy::TYPE_WORLD_SIZE) {
|
if (index < EQEmu::legacy::TYPE_WORLD_SIZE) {
|
||||||
return m_inst->GetItem(index);
|
return m_inst->GetItem(index);
|
||||||
}
|
}
|
||||||
@ -335,7 +335,7 @@ const ItemInst* Object::GetItem(uint8 index) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add item to object (only logical for world tradeskill containers
|
// Add item to object (only logical for world tradeskill containers
|
||||||
void Object::PutItem(uint8 index, const ItemInst* inst)
|
void Object::PutItem(uint8 index, const EQEmu::ItemInstance* inst)
|
||||||
{
|
{
|
||||||
if (index > 9) {
|
if (index > 9) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Object::PutItem: Invalid index specified (%i)", index);
|
Log.Out(Logs::General, Logs::Error, "Object::PutItem: Invalid index specified (%i)", index);
|
||||||
@ -362,12 +362,12 @@ void Object::Close() {
|
|||||||
last_user = user;
|
last_user = user;
|
||||||
// put any remaining items from the world container back into the player's inventory to avoid item loss
|
// put any remaining items from the world container back into the player's inventory to avoid item loss
|
||||||
// if they close the container without removing all items
|
// if they close the container without removing all items
|
||||||
ItemInst* container = this->m_inst;
|
EQEmu::ItemInstance* container = this->m_inst;
|
||||||
if(container != nullptr)
|
if(container != nullptr)
|
||||||
{
|
{
|
||||||
for (uint8 i = SUB_INDEX_BEGIN; i < EQEmu::legacy::ITEM_CONTAINER_SIZE; i++)
|
for (uint8 i = SUB_INDEX_BEGIN; i < EQEmu::legacy::ITEM_CONTAINER_SIZE; i++)
|
||||||
{
|
{
|
||||||
ItemInst* inst = container->PopItem(i);
|
EQEmu::ItemInstance* inst = container->PopItem(i);
|
||||||
if(inst != nullptr)
|
if(inst != nullptr)
|
||||||
{
|
{
|
||||||
user->MoveItemToInventory(inst, true);
|
user->MoveItemToInventory(inst, true);
|
||||||
@ -392,9 +392,9 @@ void Object::DeleteItem(uint8 index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Pop item out of container
|
// Pop item out of container
|
||||||
ItemInst* Object::PopItem(uint8 index)
|
EQEmu::ItemInstance* Object::PopItem(uint8 index)
|
||||||
{
|
{
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
|
|
||||||
if (m_inst && m_inst->IsType(EQEmu::item::ItemClassBag)) {
|
if (m_inst && m_inst->IsType(EQEmu::item::ItemClassBag)) {
|
||||||
inst = m_inst->PopItem(index);
|
inst = m_inst->PopItem(index);
|
||||||
@ -603,7 +603,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object)
|
|||||||
sender->QueuePacket(outapp);
|
sender->QueuePacket(outapp);
|
||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
for (uint8 i = SUB_INDEX_BEGIN; i < EQEmu::legacy::ITEM_CONTAINER_SIZE; i++) {
|
for (uint8 i = SUB_INDEX_BEGIN; i < EQEmu::legacy::ITEM_CONTAINER_SIZE; i++) {
|
||||||
const ItemInst* inst = m_inst->GetItem(i);
|
const EQEmu::ItemInstance* inst = m_inst->GetItem(i);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
//sender->GetInv().PutItem(i+4000,inst);
|
//sender->GetInv().PutItem(i+4000,inst);
|
||||||
sender->SendItemPacket(i, inst, ItemPacketWorldContainer);
|
sender->SendItemPacket(i, inst, ItemPacketWorldContainer);
|
||||||
@ -616,7 +616,7 @@ bool Object::HandleClick(Client* sender, const ClickObject_Struct* click_object)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Add new Zone Object (theoretically only called for items dropped to ground)
|
// Add new Zone Object (theoretically only called for items dropped to ground)
|
||||||
uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& object, const ItemInst* inst)
|
uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst)
|
||||||
{
|
{
|
||||||
uint32 database_id = 0;
|
uint32 database_id = 0;
|
||||||
uint32 item_id = 0;
|
uint32 item_id = 0;
|
||||||
@ -654,7 +654,7 @@ uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& ob
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update information about existing object in database
|
// Update information about existing object in database
|
||||||
void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const ItemInst* inst)
|
void ZoneDatabase::UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst)
|
||||||
{
|
{
|
||||||
uint32 item_id = 0;
|
uint32 item_id = 0;
|
||||||
int16 charges = 0;
|
int16 charges = 0;
|
||||||
@ -945,7 +945,7 @@ uint32 Object::GetItemID()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = this->m_inst->GetItem();
|
const EQEmu::ItemData* item = this->m_inst->GetItem();
|
||||||
|
|
||||||
if (item == 0)
|
if (item == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -29,7 +29,11 @@
|
|||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
class EQApplicationPacket;
|
class EQApplicationPacket;
|
||||||
class ItemInst;
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
item icon numbers (showeq)
|
item icon numbers (showeq)
|
||||||
@ -89,11 +93,11 @@ class Object: public Entity
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Loading object from database
|
// Loading object from database
|
||||||
Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& data, const ItemInst* inst);
|
Object(uint32 id, uint32 type, uint32 icon, const Object_Struct& data, const EQEmu::ItemInstance* inst);
|
||||||
Object(const ItemInst* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer);
|
Object(const EQEmu::ItemInstance* inst, char* name,float max_x,float min_x,float max_y,float min_y,float z,float heading,uint32 respawntimer);
|
||||||
// Loading object from client dropping item on ground
|
// Loading object from client dropping item on ground
|
||||||
Object(Client* client, const ItemInst* inst);
|
Object(Client* client, const EQEmu::ItemInstance* inst);
|
||||||
Object(const ItemInst *inst, float x, float y, float z, float heading, uint32 decay_time = 300000);
|
Object(const EQEmu::ItemInstance *inst, float x, float y, float z, float heading, uint32 decay_time = 300000);
|
||||||
Object(const char *model, float x, float y, float z, float heading, uint8 type, uint32 decay_time = 0);
|
Object(const char *model, float x, float y, float z, float heading, uint8 type, uint32 decay_time = 0);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
@ -120,10 +124,10 @@ public:
|
|||||||
void StartDecay() {decay_timer.Start();}
|
void StartDecay() {decay_timer.Start();}
|
||||||
|
|
||||||
// Container functions
|
// Container functions
|
||||||
const ItemInst* GetItem(uint8 index);
|
const EQEmu::ItemInstance* GetItem(uint8 index);
|
||||||
void PutItem(uint8 index, const ItemInst* inst);
|
void PutItem(uint8 index, const EQEmu::ItemInstance* inst);
|
||||||
void DeleteItem(uint8 index); // Item inside container
|
void DeleteItem(uint8 index); // Item inside container
|
||||||
ItemInst* PopItem(uint8 index); // Pop item out of container
|
EQEmu::ItemInstance* PopItem(uint8 index); // Pop item out of container
|
||||||
|
|
||||||
// Override base class implementations
|
// Override base class implementations
|
||||||
virtual bool IsObject() const { return true; }
|
virtual bool IsObject() const { return true; }
|
||||||
@ -176,7 +180,7 @@ protected:
|
|||||||
void RandomSpawn(bool send_packet = false); //spawn this ground spawn at a random place
|
void RandomSpawn(bool send_packet = false); //spawn this ground spawn at a random place
|
||||||
|
|
||||||
Object_Struct m_data; // Packet data
|
Object_Struct m_data; // Packet data
|
||||||
ItemInst* m_inst; // Item representing object
|
EQEmu::ItemInstance* m_inst; // Item representing object
|
||||||
bool m_inuse; // Currently in use by a client?
|
bool m_inuse; // Currently in use by a client?
|
||||||
uint32 m_id; // Database key, different than drop_id
|
uint32 m_id; // Database key, different than drop_id
|
||||||
uint32 m_type; // Object Type, ie, forge, oven, dropped item, etc (ref: ContainerUseTypes)
|
uint32 m_type; // Object Type, ie, forge, oven, dropped item, etc (ref: ContainerUseTypes)
|
||||||
|
|||||||
@ -4324,7 +4324,7 @@ XS(XS_Client_GetItemAt)
|
|||||||
Perl_croak(aTHX_ "Usage: Client::GetItemAt(THIS, slot)");
|
Perl_croak(aTHX_ "Usage: Client::GetItemAt(THIS, slot)");
|
||||||
{
|
{
|
||||||
Client * THIS;
|
Client * THIS;
|
||||||
ItemInst * RETVAL;
|
EQEmu::ItemInstance * RETVAL;
|
||||||
uint32 slot = (int32)SvIV(ST(1));
|
uint32 slot = (int32)SvIV(ST(1));
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "Client")) {
|
if (sv_derived_from(ST(0), "Client")) {
|
||||||
@ -4351,7 +4351,7 @@ XS(XS_Client_GetAugmentAt)
|
|||||||
Perl_croak(aTHX_ "Usage: Client::GetAugmentAt(THIS, slot, aug_slot)");
|
Perl_croak(aTHX_ "Usage: Client::GetAugmentAt(THIS, slot, aug_slot)");
|
||||||
{
|
{
|
||||||
Client * THIS;
|
Client * THIS;
|
||||||
ItemInst * RETVAL;
|
EQEmu::ItemInstance * RETVAL;
|
||||||
uint32 slot = (int32)SvIV(ST(1));
|
uint32 slot = (int32)SvIV(ST(1));
|
||||||
uint32 aug_slot = (int32)SvIV(ST(1));
|
uint32 aug_slot = (int32)SvIV(ST(1));
|
||||||
|
|
||||||
@ -4364,7 +4364,7 @@ XS(XS_Client_GetAugmentAt)
|
|||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
ItemInst * inst = THIS->GetInv().GetItem(slot);
|
EQEmu::ItemInstance * inst = THIS->GetInv().GetItem(slot);
|
||||||
if(inst)
|
if(inst)
|
||||||
{
|
{
|
||||||
RETVAL = inst->GetAugment(aug_slot);
|
RETVAL = inst->GetAugment(aug_slot);
|
||||||
@ -5627,7 +5627,7 @@ XS(XS_Client_GetItemInInventory)
|
|||||||
{
|
{
|
||||||
Client * THIS;
|
Client * THIS;
|
||||||
int16 slot_id = (int16)SvIV(ST(1));
|
int16 slot_id = (int16)SvIV(ST(1));
|
||||||
ItemInst *RETVAL = nullptr;
|
EQEmu::ItemInstance *RETVAL = nullptr;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "Client")) {
|
if (sv_derived_from(ST(0), "Client")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
|
|||||||
@ -8092,8 +8092,8 @@ XS(XS_Mob_DoArcheryAttackDmg)
|
|||||||
{
|
{
|
||||||
Mob * THIS;
|
Mob * THIS;
|
||||||
Mob* target;
|
Mob* target;
|
||||||
ItemInst* RangeWeapon = nullptr;
|
EQEmu::ItemInstance* RangeWeapon = nullptr;
|
||||||
ItemInst* Ammo = nullptr;
|
EQEmu::ItemInstance* Ammo = nullptr;
|
||||||
uint16 weapon_damage = (uint16)SvIV(ST(4));
|
uint16 weapon_damage = (uint16)SvIV(ST(4));
|
||||||
int16 chance_mod = (int16)SvIV(ST(5));
|
int16 chance_mod = (int16)SvIV(ST(5));
|
||||||
int16 focus = (int16)SvIV(ST(6));
|
int16 focus = (int16)SvIV(ST(6));
|
||||||
@ -8130,8 +8130,8 @@ XS(XS_Mob_DoThrowingAttackDmg)
|
|||||||
{
|
{
|
||||||
Mob * THIS;
|
Mob * THIS;
|
||||||
Mob* target;
|
Mob* target;
|
||||||
ItemInst* RangeWeapon = nullptr;
|
EQEmu::ItemInstance* RangeWeapon = nullptr;
|
||||||
EQEmu::ItemBase* item = nullptr;
|
EQEmu::ItemData* item = nullptr;
|
||||||
uint16 weapon_damage = (uint16)SvIV(ST(4));
|
uint16 weapon_damage = (uint16)SvIV(ST(4));
|
||||||
int16 chance_mod = (int16)SvIV(ST(5));
|
int16 chance_mod = (int16)SvIV(ST(5));
|
||||||
int16 focus = (int16)SvIV(ST(6));
|
int16 focus = (int16)SvIV(ST(6));
|
||||||
|
|||||||
@ -38,16 +38,16 @@ XS(XS_QuestItem_GetName) {
|
|||||||
if (items != 1)
|
if (items != 1)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::GetName(THIS)");
|
Perl_croak(aTHX_ "Usage: QuestItem::GetName(THIS)");
|
||||||
{
|
{
|
||||||
ItemInst * THIS;
|
EQEmu::ItemInstance * THIS;
|
||||||
Const_char * RETVAL;
|
Const_char * RETVAL;
|
||||||
dXSTARG;
|
dXSTARG;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -64,15 +64,15 @@ XS(XS_QuestItem_SetScale)
|
|||||||
if (items != 2)
|
if (items != 2)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::SetScale(THIS, scale factor)");
|
Perl_croak(aTHX_ "Usage: QuestItem::SetScale(THIS, scale factor)");
|
||||||
{
|
{
|
||||||
ItemInst * THIS;
|
EQEmu::ItemInstance * THIS;
|
||||||
float Mult;
|
float Mult;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -92,16 +92,16 @@ XS(XS_QuestItem_ItemSay)
|
|||||||
if (items != 2 && items != 3)
|
if (items != 2 && items != 3)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::ItemSay(THIS, text [, language])");
|
Perl_croak(aTHX_ "Usage: QuestItem::ItemSay(THIS, text [, language])");
|
||||||
{
|
{
|
||||||
ItemInst* THIS;
|
EQEmu::ItemInstance* THIS;
|
||||||
Const_char* text;
|
Const_char* text;
|
||||||
int lang = 0;
|
int lang = 0;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -121,16 +121,16 @@ XS(XS_QuestItem_IsType)
|
|||||||
if (items != 2)
|
if (items != 2)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::IsType(THIS, type)");
|
Perl_croak(aTHX_ "Usage: QuestItem::IsType(THIS, type)");
|
||||||
{
|
{
|
||||||
ItemInst* THIS;
|
EQEmu::ItemInstance* THIS;
|
||||||
bool RETVAL;
|
bool RETVAL;
|
||||||
uint32 type = (int32)SvIV(ST(1));
|
uint32 type = (int32)SvIV(ST(1));
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -148,15 +148,15 @@ XS(XS_QuestItem_IsAttuned)
|
|||||||
if (items != 1)
|
if (items != 1)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::IsAttuned(THIS)");
|
Perl_croak(aTHX_ "Usage: QuestItem::IsAttuned(THIS)");
|
||||||
{
|
{
|
||||||
ItemInst* THIS;
|
EQEmu::ItemInstance* THIS;
|
||||||
bool RETVAL;
|
bool RETVAL;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -174,16 +174,16 @@ XS(XS_QuestItem_GetCharges)
|
|||||||
if (items != 1)
|
if (items != 1)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::GetCharges(THIS)");
|
Perl_croak(aTHX_ "Usage: QuestItem::GetCharges(THIS)");
|
||||||
{
|
{
|
||||||
ItemInst* THIS;
|
EQEmu::ItemInstance* THIS;
|
||||||
int16 RETVAL;
|
int16 RETVAL;
|
||||||
dXSTARG;
|
dXSTARG;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -200,16 +200,16 @@ XS(XS_QuestItem_GetAugment)
|
|||||||
if (items != 2)
|
if (items != 2)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::GetAugment(THIS, augment_id)");
|
Perl_croak(aTHX_ "Usage: QuestItem::GetAugment(THIS, augment_id)");
|
||||||
{
|
{
|
||||||
ItemInst* THIS;
|
EQEmu::ItemInstance* THIS;
|
||||||
int16 slot_id = (int16)SvIV(ST(1));
|
int16 slot_id = (int16)SvIV(ST(1));
|
||||||
ItemInst* RETVAL;
|
EQEmu::ItemInstance* RETVAL;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
@ -227,16 +227,16 @@ XS(XS_QuestItem_GetID)
|
|||||||
if (items != 1)
|
if (items != 1)
|
||||||
Perl_croak(aTHX_ "Usage: QuestItem::GetID(THIS)");
|
Perl_croak(aTHX_ "Usage: QuestItem::GetID(THIS)");
|
||||||
{
|
{
|
||||||
ItemInst* THIS;
|
EQEmu::ItemInstance* THIS;
|
||||||
uint32 RETVAL;
|
uint32 RETVAL;
|
||||||
dXSTARG;
|
dXSTARG;
|
||||||
|
|
||||||
if (sv_derived_from(ST(0), "QuestItem")) {
|
if (sv_derived_from(ST(0), "QuestItem")) {
|
||||||
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
IV tmp = SvIV((SV*)SvRV(ST(0)));
|
||||||
THIS = INT2PTR(ItemInst *,tmp);
|
THIS = INT2PTR(EQEmu::ItemInstance *,tmp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Perl_croak(aTHX_ "THIS is not of type ItemInst");
|
Perl_croak(aTHX_ "THIS is not of type EQEmu::ItemInstance");
|
||||||
if(THIS == nullptr)
|
if(THIS == nullptr)
|
||||||
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
Perl_croak(aTHX_ "THIS is nullptr, avoiding crash.");
|
||||||
|
|
||||||
|
|||||||
@ -420,7 +420,7 @@ void Mob::MakePoweredPet(uint16 spell_id, const char* pettype, int16 petpower,
|
|||||||
// like the special back items some focused pets may receive.
|
// like the special back items some focused pets may receive.
|
||||||
uint32 petinv[EQEmu::legacy::EQUIPMENT_SIZE];
|
uint32 petinv[EQEmu::legacy::EQUIPMENT_SIZE];
|
||||||
memset(petinv, 0, sizeof(petinv));
|
memset(petinv, 0, sizeof(petinv));
|
||||||
const EQEmu::ItemBase *item = 0;
|
const EQEmu::ItemData *item = 0;
|
||||||
|
|
||||||
if (database.GetBasePetItems(record.equipmentset, petinv)) {
|
if (database.GetBasePetItems(record.equipmentset, petinv)) {
|
||||||
for (int i = 0; i < EQEmu::legacy::EQUIPMENT_SIZE; i++)
|
for (int i = 0; i < EQEmu::legacy::EQUIPMENT_SIZE; i++)
|
||||||
@ -665,7 +665,7 @@ void NPC::SetPetState(SpellBuff_Struct *pet_buffs, uint32 *items) {
|
|||||||
if(items[i] == 0)
|
if(items[i] == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item2 = database.GetItem(items[i]);
|
const EQEmu::ItemData* item2 = database.GetItem(items[i]);
|
||||||
if (item2 && item2->NoDrop != 0) {
|
if (item2 && item2->NoDrop != 0) {
|
||||||
//dont bother saving item charges for now, NPCs never use them
|
//dont bother saving item charges for now, NPCs never use them
|
||||||
//and nobody should be able to get them off the corpse..?
|
//and nobody should be able to get them off the corpse..?
|
||||||
|
|||||||
@ -23,10 +23,14 @@
|
|||||||
#include "../common/any.h"
|
#include "../common/any.h"
|
||||||
#include "event_codes.h"
|
#include "event_codes.h"
|
||||||
|
|
||||||
class ItemInst;
|
|
||||||
class Client;
|
class Client;
|
||||||
class NPC;
|
class NPC;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
class QuestInterface {
|
class QuestInterface {
|
||||||
public:
|
public:
|
||||||
virtual int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data,
|
virtual int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data,
|
||||||
@ -37,7 +41,7 @@ public:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
virtual int EventGlobalPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
virtual int EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
virtual int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
virtual int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
@ -49,14 +53,14 @@ public:
|
|||||||
virtual bool PlayerHasQuestSub(QuestEventID evt) { return false; }
|
virtual bool PlayerHasQuestSub(QuestEventID evt) { return false; }
|
||||||
virtual bool GlobalPlayerHasQuestSub(QuestEventID evt) { return false; }
|
virtual bool GlobalPlayerHasQuestSub(QuestEventID evt) { return false; }
|
||||||
virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt) { return false; }
|
virtual bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt) { return false; }
|
||||||
virtual bool ItemHasQuestSub(ItemInst *itm, QuestEventID evt) { return false; }
|
virtual bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) { return false; }
|
||||||
virtual bool EncounterHasQuestSub(std::string encounter_name, QuestEventID evt) { return false; }
|
virtual bool EncounterHasQuestSub(std::string encounter_name, QuestEventID evt) { return false; }
|
||||||
|
|
||||||
virtual void LoadNPCScript(std::string filename, int npc_id) { }
|
virtual void LoadNPCScript(std::string filename, int npc_id) { }
|
||||||
virtual void LoadGlobalNPCScript(std::string filename) { }
|
virtual void LoadGlobalNPCScript(std::string filename) { }
|
||||||
virtual void LoadPlayerScript(std::string filename) { }
|
virtual void LoadPlayerScript(std::string filename) { }
|
||||||
virtual void LoadGlobalPlayerScript(std::string filename) { }
|
virtual void LoadGlobalPlayerScript(std::string filename) { }
|
||||||
virtual void LoadItemScript(std::string filename, ItemInst *item) { }
|
virtual void LoadItemScript(std::string filename, EQEmu::ItemInstance *item) { }
|
||||||
virtual void LoadSpellScript(std::string filename, uint32 spell_id) { }
|
virtual void LoadSpellScript(std::string filename, uint32 spell_id) { }
|
||||||
virtual void LoadEncounterScript(std::string filename, std::string encounter_name) { }
|
virtual void LoadEncounterScript(std::string filename, std::string encounter_name) { }
|
||||||
|
|
||||||
@ -64,7 +68,7 @@ public:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
virtual int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
virtual int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
virtual int DispatchEventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
virtual int DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
virtual int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
virtual int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
std::vector<EQEmu::Any> *extra_pointers) { return 0; }
|
||||||
|
|||||||
@ -200,7 +200,7 @@ bool QuestParserCollection::SpellHasQuestSub(uint32 spell_id, QuestEventID evt)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QuestParserCollection::ItemHasQuestSub(ItemInst *itm, QuestEventID evt) {
|
bool QuestParserCollection::ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt) {
|
||||||
if (itm == nullptr)
|
if (itm == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@ -352,7 +352,7 @@ int QuestParserCollection::EventPlayerGlobal(QuestEventID evt, Client *client, s
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QuestParserCollection::EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
int QuestParserCollection::EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers) {
|
std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
// needs pointer validation check on 'item' argument
|
// needs pointer validation check on 'item' argument
|
||||||
|
|
||||||
@ -1013,7 +1013,7 @@ int QuestParserCollection::DispatchEventPlayer(QuestEventID evt, Client *client,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QuestParserCollection::DispatchEventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data,
|
int QuestParserCollection::DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data,
|
||||||
uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers) {
|
uint32 extra_data, std::vector<EQEmu::Any> *extra_pointers) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
auto iter = _load_precedence.begin();
|
auto iter = _load_precedence.begin();
|
||||||
|
|||||||
@ -44,11 +44,15 @@
|
|||||||
|
|
||||||
extern const ZoneConfig *Config;
|
extern const ZoneConfig *Config;
|
||||||
class Client;
|
class Client;
|
||||||
class ItemInst;
|
|
||||||
class Mob;
|
class Mob;
|
||||||
class NPC;
|
class NPC;
|
||||||
class QuestInterface;
|
class QuestInterface;
|
||||||
namespace EQEmu { class Any; }
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class Any;
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
class QuestParserCollection {
|
class QuestParserCollection {
|
||||||
public:
|
public:
|
||||||
@ -65,13 +69,13 @@ public:
|
|||||||
bool HasQuestSub(uint32 npcid, QuestEventID evt);
|
bool HasQuestSub(uint32 npcid, QuestEventID evt);
|
||||||
bool PlayerHasQuestSub(QuestEventID evt);
|
bool PlayerHasQuestSub(QuestEventID evt);
|
||||||
bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt);
|
bool SpellHasQuestSub(uint32 spell_id, QuestEventID evt);
|
||||||
bool ItemHasQuestSub(ItemInst *itm, QuestEventID evt);
|
bool ItemHasQuestSub(EQEmu::ItemInstance *itm, QuestEventID evt);
|
||||||
|
|
||||||
int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data,
|
int EventNPC(QuestEventID evt, NPC* npc, Mob *init, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
||||||
int EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
int EventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
||||||
int EventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
int EventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
||||||
int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
int EventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
std::vector<EQEmu::Any> *extra_pointers = nullptr);
|
||||||
@ -124,7 +128,7 @@ private:
|
|||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
int DispatchEventPlayer(QuestEventID evt, Client *client, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
int DispatchEventItem(QuestEventID evt, Client *client, ItemInst *item, Mob *mob, std::string data, uint32 extra_data,
|
int DispatchEventItem(QuestEventID evt, Client *client, EQEmu::ItemInstance *item, Mob *mob, std::string data, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
int DispatchEventSpell(QuestEventID evt, NPC* npc, Client *client, uint32 spell_id, uint32 extra_data,
|
||||||
std::vector<EQEmu::Any> *extra_pointers);
|
std::vector<EQEmu::Any> *extra_pointers);
|
||||||
|
|||||||
@ -54,7 +54,7 @@ QuestManager quest_manager;
|
|||||||
#define QuestManagerCurrentQuestVars() \
|
#define QuestManagerCurrentQuestVars() \
|
||||||
Mob *owner = nullptr; \
|
Mob *owner = nullptr; \
|
||||||
Client *initiator = nullptr; \
|
Client *initiator = nullptr; \
|
||||||
ItemInst* questitem = nullptr; \
|
EQEmu::ItemInstance* questitem = nullptr; \
|
||||||
bool depop_npc = false; \
|
bool depop_npc = false; \
|
||||||
std::string encounter; \
|
std::string encounter; \
|
||||||
do { \
|
do { \
|
||||||
@ -116,7 +116,7 @@ void QuestManager::Process() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::StartQuest(Mob *_owner, Client *_initiator, ItemInst* _questitem, std::string encounter) {
|
void QuestManager::StartQuest(Mob *_owner, Client *_initiator, EQEmu::ItemInstance* _questitem, std::string encounter) {
|
||||||
running_quest run;
|
running_quest run;
|
||||||
run.owner = _owner;
|
run.owner = _owner;
|
||||||
run.initiator = _initiator;
|
run.initiator = _initiator;
|
||||||
@ -450,7 +450,7 @@ void QuestManager::settimerMS(const char *timer_name, int milliseconds) {
|
|||||||
QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name));
|
QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::settimerMS(const char *timer_name, int milliseconds, ItemInst *inst) {
|
void QuestManager::settimerMS(const char *timer_name, int milliseconds, EQEmu::ItemInstance *inst) {
|
||||||
if (inst) {
|
if (inst) {
|
||||||
inst->SetTimer(timer_name, milliseconds);
|
inst->SetTimer(timer_name, milliseconds);
|
||||||
}
|
}
|
||||||
@ -493,7 +493,7 @@ void QuestManager::stoptimer(const char *timer_name) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::stoptimer(const char *timer_name, ItemInst *inst) {
|
void QuestManager::stoptimer(const char *timer_name, EQEmu::ItemInstance *inst) {
|
||||||
if (inst) {
|
if (inst) {
|
||||||
inst->StopTimer(timer_name);
|
inst->StopTimer(timer_name);
|
||||||
}
|
}
|
||||||
@ -531,7 +531,7 @@ void QuestManager::stopalltimers() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuestManager::stopalltimers(ItemInst *inst) {
|
void QuestManager::stopalltimers(EQEmu::ItemInstance *inst) {
|
||||||
if (inst) {
|
if (inst) {
|
||||||
inst->ClearTimers();
|
inst->ClearTimers();
|
||||||
}
|
}
|
||||||
@ -814,7 +814,7 @@ void QuestManager::traindisc(int discipline_tome_item_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool QuestManager::isdisctome(int item_id) {
|
bool QuestManager::isdisctome(int item_id) {
|
||||||
const EQEmu::ItemBase *item = database.GetItem(item_id);
|
const EQEmu::ItemData *item = database.GetItem(item_id);
|
||||||
if(item == nullptr) {
|
if(item == nullptr) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
@ -1305,7 +1305,7 @@ void QuestManager::settime(uint8 new_hour, uint8 new_min, bool update_world /*=
|
|||||||
void QuestManager::itemlink(int item_id) {
|
void QuestManager::itemlink(int item_id) {
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
if (initiator) {
|
if (initiator) {
|
||||||
const EQEmu::ItemBase* item = database.GetItem(item_id);
|
const EQEmu::ItemData* item = database.GetItem(item_id);
|
||||||
if (item == nullptr)
|
if (item == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2408,7 +2408,7 @@ int QuestManager::collectitems_processSlot(int16 slot_id, uint32 item_id,
|
|||||||
bool remove)
|
bool remove)
|
||||||
{
|
{
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
ItemInst *item = nullptr;
|
EQEmu::ItemInstance *item = nullptr;
|
||||||
int quantity = 0;
|
int quantity = 0;
|
||||||
|
|
||||||
item = initiator->GetInv().GetItem(slot_id);
|
item = initiator->GetInv().GetItem(slot_id);
|
||||||
@ -2497,7 +2497,7 @@ void QuestManager::MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity)
|
|||||||
if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT))
|
if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT))
|
||||||
return; // don't do anything if NPCid isn't a merchant
|
return; // don't do anything if NPCid isn't a merchant
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
item = database.GetItem(itemid);
|
item = database.GetItem(itemid);
|
||||||
if (!item) return; // if the item id doesn't correspond to a real item, do nothing
|
if (!item) return; // if the item id doesn't correspond to a real item, do nothing
|
||||||
|
|
||||||
@ -2510,7 +2510,7 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) {
|
|||||||
if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT))
|
if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT))
|
||||||
return 0; // if it isn't a merchant, it doesn't have any items
|
return 0; // if it isn't a merchant, it doesn't have any items
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
item = database.GetItem(itemid);
|
item = database.GetItem(itemid);
|
||||||
if (!item)
|
if (!item)
|
||||||
return 0; // if it isn't a valid item, the merchant doesn't have any
|
return 0; // if it isn't a valid item, the merchant doesn't have any
|
||||||
@ -2533,7 +2533,7 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) {
|
|||||||
// Item Link for use in Variables - "my $example_link = quest::varlink(item_id);"
|
// Item Link for use in Variables - "my $example_link = quest::varlink(item_id);"
|
||||||
const char* QuestManager::varlink(char* perltext, int item_id) {
|
const char* QuestManager::varlink(char* perltext, int item_id) {
|
||||||
QuestManagerCurrentQuestVars();
|
QuestManagerCurrentQuestVars();
|
||||||
const EQEmu::ItemBase* item = database.GetItem(item_id);
|
const EQEmu::ItemData* item = database.GetItem(item_id);
|
||||||
if (!item)
|
if (!item)
|
||||||
return "INVALID ITEM ID IN VARLINK";
|
return "INVALID ITEM ID IN VARLINK";
|
||||||
|
|
||||||
@ -3087,7 +3087,7 @@ Mob *QuestManager::GetOwner() const {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *QuestManager::GetQuestItem() const {
|
EQEmu::ItemInstance *QuestManager::GetQuestItem() const {
|
||||||
if(!quests_running_.empty()) {
|
if(!quests_running_.empty()) {
|
||||||
running_quest e = quests_running_.top();
|
running_quest e = quests_running_.top();
|
||||||
return e.questitem;
|
return e.questitem;
|
||||||
|
|||||||
@ -25,15 +25,19 @@
|
|||||||
#include <stack>
|
#include <stack>
|
||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
class ItemInst;
|
|
||||||
class Mob;
|
class Mob;
|
||||||
class NPC;
|
class NPC;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
class QuestManager {
|
class QuestManager {
|
||||||
struct running_quest {
|
struct running_quest {
|
||||||
Mob *owner;
|
Mob *owner;
|
||||||
Client *initiator;
|
Client *initiator;
|
||||||
ItemInst* questitem;
|
EQEmu::ItemInstance* questitem;
|
||||||
bool depop_npc;
|
bool depop_npc;
|
||||||
std::string encounter;
|
std::string encounter;
|
||||||
};
|
};
|
||||||
@ -41,7 +45,7 @@ public:
|
|||||||
QuestManager();
|
QuestManager();
|
||||||
virtual ~QuestManager();
|
virtual ~QuestManager();
|
||||||
|
|
||||||
void StartQuest(Mob *_owner, Client *_initiator = nullptr, ItemInst* _questitem = nullptr, std::string encounter = "");
|
void StartQuest(Mob *_owner, Client *_initiator = nullptr, EQEmu::ItemInstance* _questitem = nullptr, std::string encounter = "");
|
||||||
void EndQuest();
|
void EndQuest();
|
||||||
bool QuestsRunning() { return !quests_running_.empty(); }
|
bool QuestsRunning() { return !quests_running_.empty(); }
|
||||||
|
|
||||||
@ -70,13 +74,13 @@ public:
|
|||||||
void Zone(const char *zone_name);
|
void Zone(const char *zone_name);
|
||||||
void settimer(const char *timer_name, int seconds);
|
void settimer(const char *timer_name, int seconds);
|
||||||
void settimerMS(const char *timer_name, int milliseconds);
|
void settimerMS(const char *timer_name, int milliseconds);
|
||||||
void settimerMS(const char *timer_name, int milliseconds, ItemInst *inst);
|
void settimerMS(const char *timer_name, int milliseconds, EQEmu::ItemInstance *inst);
|
||||||
void settimerMS(const char *timer_name, int milliseconds, Mob *mob);
|
void settimerMS(const char *timer_name, int milliseconds, Mob *mob);
|
||||||
void stoptimer(const char *timer_name);
|
void stoptimer(const char *timer_name);
|
||||||
void stoptimer(const char *timer_name, ItemInst *inst);
|
void stoptimer(const char *timer_name, EQEmu::ItemInstance *inst);
|
||||||
void stoptimer(const char *timer_name, Mob *mob);
|
void stoptimer(const char *timer_name, Mob *mob);
|
||||||
void stopalltimers();
|
void stopalltimers();
|
||||||
void stopalltimers(ItemInst *inst);
|
void stopalltimers(EQEmu::ItemInstance *inst);
|
||||||
void stopalltimers(Mob *mob);
|
void stopalltimers(Mob *mob);
|
||||||
void emote(const char *str);
|
void emote(const char *str);
|
||||||
void shout(const char *str);
|
void shout(const char *str);
|
||||||
@ -261,7 +265,7 @@ public:
|
|||||||
Client *GetInitiator() const;
|
Client *GetInitiator() const;
|
||||||
NPC *GetNPC() const;
|
NPC *GetNPC() const;
|
||||||
Mob *GetOwner() const;
|
Mob *GetOwner() const;
|
||||||
ItemInst *GetQuestItem() const;
|
EQEmu::ItemInstance *GetQuestItem() const;
|
||||||
std::string GetEncounter() const;
|
std::string GetEncounter() const;
|
||||||
inline bool ProximitySayInUse() { return HaveProximitySays; }
|
inline bool ProximitySayInUse() { return HaveProximitySays; }
|
||||||
|
|
||||||
|
|||||||
@ -83,7 +83,7 @@ void Mob::ApplySpecialAttackMod(EQEmu::skills::SkillType skill, int32 &dmg, int3
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (item_slot >= 0){
|
if (item_slot >= 0){
|
||||||
const ItemInst* itm = nullptr;
|
const EQEmu::ItemInstance* itm = nullptr;
|
||||||
itm = CastToClient()->GetInv().GetItem(item_slot);
|
itm = CastToClient()->GetInv().GetItem(item_slot);
|
||||||
if(itm)
|
if(itm)
|
||||||
dmg += itm->GetItem()->AC * (RuleI(Combat, SpecialAttackACBonus))/100;
|
dmg += itm->GetItem()->AC * (RuleI(Combat, SpecialAttackACBonus))/100;
|
||||||
@ -111,14 +111,14 @@ void Mob::DoSpecialAttackDamage(Mob *who, EQEmu::skills::SkillType skill, int32
|
|||||||
|
|
||||||
if (skill == EQEmu::skills::SkillBash){
|
if (skill == EQEmu::skills::SkillBash){
|
||||||
if(IsClient()){
|
if(IsClient()){
|
||||||
ItemInst *item = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance *item = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
if(item)
|
if(item)
|
||||||
{
|
{
|
||||||
if (item->GetItem()->ItemType == EQEmu::item::ItemTypeShield)
|
if (item->GetItem()->ItemType == EQEmu::item::ItemTypeShield)
|
||||||
{
|
{
|
||||||
hate += item->GetItem()->AC;
|
hate += item->GetItem()->AC;
|
||||||
}
|
}
|
||||||
const EQEmu::ItemBase *itm = item->GetItem();
|
const EQEmu::ItemData *itm = item->GetItem();
|
||||||
auto fbash = GetFuriousBash(itm->Focus.Effect);
|
auto fbash = GetFuriousBash(itm->Focus.Effect);
|
||||||
hate = hate * (100 + fbash) / 100;
|
hate = hate * (100 + fbash) / 100;
|
||||||
if (fbash)
|
if (fbash)
|
||||||
@ -463,7 +463,7 @@ int Mob::MonkSpecialAttack(Mob* other, uint8 unchecked_type)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
if (GetWeaponDamage(other, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(other, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
ndamage = -5;
|
ndamage = -5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -498,7 +498,7 @@ void Mob::TryBackstab(Mob *other, int ReuseTime) {
|
|||||||
|
|
||||||
//make sure we have a proper weapon if we are a client.
|
//make sure we have a proper weapon if we are a client.
|
||||||
if(IsClient()) {
|
if(IsClient()) {
|
||||||
const ItemInst *wpn = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
const EQEmu::ItemInstance *wpn = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
if (!wpn || (wpn->GetItem()->ItemType != EQEmu::item::ItemType1HPiercing)){
|
if (!wpn || (wpn->GetItem()->ItemType != EQEmu::item::ItemType1HPiercing)){
|
||||||
Message_StringID(13, BACKSTAB_WEAPON);
|
Message_StringID(13, BACKSTAB_WEAPON);
|
||||||
return;
|
return;
|
||||||
@ -577,7 +577,7 @@ void Mob::RogueBackstab(Mob* other, bool min_damage, int ReuseTime)
|
|||||||
int32 backstab_dmg = 0;
|
int32 backstab_dmg = 0;
|
||||||
|
|
||||||
if (IsClient()) {
|
if (IsClient()) {
|
||||||
const ItemInst *wpn = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
const EQEmu::ItemInstance *wpn = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
if (wpn) {
|
if (wpn) {
|
||||||
primaryweapondamage = GetWeaponDamage(other, wpn);
|
primaryweapondamage = GetWeaponDamage(other, wpn);
|
||||||
if (primaryweapondamage) {
|
if (primaryweapondamage) {
|
||||||
@ -650,7 +650,7 @@ void Mob::RogueAssassinate(Mob* other)
|
|||||||
{
|
{
|
||||||
//can you dodge, parry, etc.. an assassinate??
|
//can you dodge, parry, etc.. an assassinate??
|
||||||
//if so, use DoSpecialAttackDamage(other, BACKSTAB, 32000); instead
|
//if so, use DoSpecialAttackDamage(other, BACKSTAB, 32000); instead
|
||||||
if (GetWeaponDamage(other, IsClient() ? CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary) : (const ItemInst*)nullptr) > 0){
|
if (GetWeaponDamage(other, IsClient() ? CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary) : (const EQEmu::ItemInstance*)nullptr) > 0){
|
||||||
other->Damage(this, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab);
|
other->Damage(this, 32000, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab);
|
||||||
}else{
|
}else{
|
||||||
other->Damage(this, -5, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab);
|
other->Damage(this, -5, SPELL_UNKNOWN, EQEmu::skills::SkillBackstab);
|
||||||
@ -670,11 +670,11 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
|||||||
//Message(0, "Error: Timer not up. Attack %d, ranged %d", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime());
|
//Message(0, "Error: Timer not up. Attack %d, ranged %d", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const ItemInst* RangeWeapon = m_inv[EQEmu::legacy::SlotRange];
|
const EQEmu::ItemInstance* RangeWeapon = m_inv[EQEmu::legacy::SlotRange];
|
||||||
|
|
||||||
//locate ammo
|
//locate ammo
|
||||||
int ammo_slot = EQEmu::legacy::SlotAmmo;
|
int ammo_slot = EQEmu::legacy::SlotAmmo;
|
||||||
const ItemInst* Ammo = m_inv[EQEmu::legacy::SlotAmmo];
|
const EQEmu::ItemInstance* Ammo = m_inv[EQEmu::legacy::SlotAmmo];
|
||||||
|
|
||||||
if (!RangeWeapon || !RangeWeapon->IsClassCommon()) {
|
if (!RangeWeapon || !RangeWeapon->IsClassCommon()) {
|
||||||
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Missing or invalid ranged weapon (%d) in slot %d", GetItemIDAt(EQEmu::legacy::SlotRange), EQEmu::legacy::SlotRange);
|
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Missing or invalid ranged weapon (%d) in slot %d", GetItemIDAt(EQEmu::legacy::SlotRange), EQEmu::legacy::SlotRange);
|
||||||
@ -687,8 +687,8 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* RangeItem = RangeWeapon->GetItem();
|
const EQEmu::ItemData* RangeItem = RangeWeapon->GetItem();
|
||||||
const EQEmu::ItemBase* AmmoItem = Ammo->GetItem();
|
const EQEmu::ItemData* AmmoItem = Ammo->GetItem();
|
||||||
|
|
||||||
if (RangeItem->ItemType != EQEmu::item::ItemTypeBow) {
|
if (RangeItem->ItemType != EQEmu::item::ItemTypeBow) {
|
||||||
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Ranged item is not a bow. type %d.", RangeItem->ItemType);
|
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Ranged item is not a bow. type %d.", RangeItem->ItemType);
|
||||||
@ -709,17 +709,17 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
|||||||
int r;
|
int r;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (r = EQEmu::legacy::GENERAL_BEGIN; r <= EQEmu::legacy::GENERAL_END; r++) {
|
for (r = EQEmu::legacy::GENERAL_BEGIN; r <= EQEmu::legacy::GENERAL_END; r++) {
|
||||||
const ItemInst *pi = m_inv[r];
|
const EQEmu::ItemInstance *pi = m_inv[r];
|
||||||
if (pi == nullptr || !pi->IsClassBag())
|
if (pi == nullptr || !pi->IsClassBag())
|
||||||
continue;
|
continue;
|
||||||
const EQEmu::ItemBase* bagitem = pi->GetItem();
|
const EQEmu::ItemData* bagitem = pi->GetItem();
|
||||||
if (!bagitem || bagitem->BagType != EQEmu::item::BagTypeQuiver)
|
if (!bagitem || bagitem->BagType != EQEmu::item::BagTypeQuiver)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//we found a quiver, look for the ammo in it
|
//we found a quiver, look for the ammo in it
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < bagitem->BagSlots; i++) {
|
for (i = 0; i < bagitem->BagSlots; i++) {
|
||||||
ItemInst* baginst = pi->GetItem(i);
|
EQEmu::ItemInstance* baginst = pi->GetItem(i);
|
||||||
if(!baginst)
|
if(!baginst)
|
||||||
continue; //empty
|
continue; //empty
|
||||||
if(baginst->GetID() == Ammo->GetID()) {
|
if(baginst->GetID() == Ammo->GetID()) {
|
||||||
@ -790,8 +790,8 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
|||||||
CommonBreakInvisibleFromCombat();
|
CommonBreakInvisibleFromCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::DoArcheryAttackDmg(Mob* other, const ItemInst* RangeWeapon, const ItemInst* Ammo, uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime,
|
void Mob::DoArcheryAttackDmg(Mob* other, const EQEmu::ItemInstance* RangeWeapon, const EQEmu::ItemInstance* Ammo, uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime,
|
||||||
uint32 range_id, uint32 ammo_id, const EQEmu::ItemBase *AmmoItem, int AmmoSlot, float speed) {
|
uint32 range_id, uint32 ammo_id, const EQEmu::ItemData *AmmoItem, int AmmoSlot, float speed) {
|
||||||
|
|
||||||
if ((other == nullptr ||
|
if ((other == nullptr ||
|
||||||
((IsClient() && CastToClient()->dead) ||
|
((IsClient() && CastToClient()->dead) ||
|
||||||
@ -804,9 +804,9 @@ void Mob::DoArcheryAttackDmg(Mob* other, const ItemInst* RangeWeapon, const Ite
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* _RangeWeapon = nullptr;
|
const EQEmu::ItemInstance* _RangeWeapon = nullptr;
|
||||||
const ItemInst* _Ammo = nullptr;
|
const EQEmu::ItemInstance* _Ammo = nullptr;
|
||||||
const EQEmu::ItemBase* ammo_lost = nullptr;
|
const EQEmu::ItemData* ammo_lost = nullptr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If LaunchProjectile is false this function will do archery damage on target,
|
If LaunchProjectile is false this function will do archery damage on target,
|
||||||
@ -1002,7 +1002,7 @@ void Mob::DoArcheryAttackDmg(Mob* other, const ItemInst* RangeWeapon, const Ite
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mob::TryProjectileAttack(Mob* other, const EQEmu::ItemBase *item, EQEmu::skills::SkillType skillInUse, uint16 weapon_dmg, const ItemInst* RangeWeapon, const ItemInst* Ammo, int AmmoSlot, float speed){
|
bool Mob::TryProjectileAttack(Mob* other, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, uint16 weapon_dmg, const EQEmu::ItemInstance* RangeWeapon, const EQEmu::ItemInstance* Ammo, int AmmoSlot, float speed){
|
||||||
|
|
||||||
if (!other)
|
if (!other)
|
||||||
return false;
|
return false;
|
||||||
@ -1306,7 +1306,7 @@ void NPC::DoRangedAttackDmg(Mob* other, bool Launch, int16 damage_mod, int16 cha
|
|||||||
|
|
||||||
//try proc on hits and misses
|
//try proc on hits and misses
|
||||||
if(other && !other->HasDied())
|
if(other && !other->HasDied())
|
||||||
TrySpellProc(nullptr, (const EQEmu::ItemBase*)nullptr, other, EQEmu::legacy::SlotRange);
|
TrySpellProc(nullptr, (const EQEmu::ItemData*)nullptr, other, EQEmu::legacy::SlotRange);
|
||||||
|
|
||||||
if (HasSkillProcs() && other && !other->HasDied())
|
if (HasSkillProcs() && other && !other->HasDied())
|
||||||
TrySkillProc(other, skillInUse, 0, false, EQEmu::legacy::SlotRange);
|
TrySkillProc(other, skillInUse, 0, false, EQEmu::legacy::SlotRange);
|
||||||
@ -1352,7 +1352,7 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ammo_slot = EQEmu::legacy::SlotRange;
|
int ammo_slot = EQEmu::legacy::SlotRange;
|
||||||
const ItemInst* RangeWeapon = m_inv[EQEmu::legacy::SlotRange];
|
const EQEmu::ItemInstance* RangeWeapon = m_inv[EQEmu::legacy::SlotRange];
|
||||||
|
|
||||||
if (!RangeWeapon || !RangeWeapon->IsClassCommon()) {
|
if (!RangeWeapon || !RangeWeapon->IsClassCommon()) {
|
||||||
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Missing or invalid ranged weapon (%d) in slot %d", GetItemIDAt(EQEmu::legacy::SlotRange), EQEmu::legacy::SlotRange);
|
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Missing or invalid ranged weapon (%d) in slot %d", GetItemIDAt(EQEmu::legacy::SlotRange), EQEmu::legacy::SlotRange);
|
||||||
@ -1360,7 +1360,7 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = RangeWeapon->GetItem();
|
const EQEmu::ItemData* item = RangeWeapon->GetItem();
|
||||||
if (item->ItemType != EQEmu::item::ItemTypeLargeThrowing && item->ItemType != EQEmu::item::ItemTypeSmallThrowing) {
|
if (item->ItemType != EQEmu::item::ItemTypeLargeThrowing && item->ItemType != EQEmu::item::ItemTypeSmallThrowing) {
|
||||||
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Ranged item %d is not a throwing weapon. type %d.", item->ItemType);
|
Log.Out(Logs::Detail, Logs::Combat, "Ranged attack canceled. Ranged item %d is not a throwing weapon. type %d.", item->ItemType);
|
||||||
Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have nothing useful to throw!", GetItemIDAt(EQEmu::legacy::SlotRange));
|
Message(0, "Error: Rangeweapon: GetItem(%i)==0, you have nothing useful to throw!", GetItemIDAt(EQEmu::legacy::SlotRange));
|
||||||
@ -1371,7 +1371,7 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51
|
|||||||
|
|
||||||
if(RangeWeapon->GetCharges() == 1) {
|
if(RangeWeapon->GetCharges() == 1) {
|
||||||
//first check ammo
|
//first check ammo
|
||||||
const ItemInst* AmmoItem = m_inv[EQEmu::legacy::SlotAmmo];
|
const EQEmu::ItemInstance* AmmoItem = m_inv[EQEmu::legacy::SlotAmmo];
|
||||||
if(AmmoItem != nullptr && AmmoItem->GetID() == RangeWeapon->GetID()) {
|
if(AmmoItem != nullptr && AmmoItem->GetID() == RangeWeapon->GetID()) {
|
||||||
//more in the ammo slot, use it
|
//more in the ammo slot, use it
|
||||||
RangeWeapon = AmmoItem;
|
RangeWeapon = AmmoItem;
|
||||||
@ -1421,7 +1421,7 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51
|
|||||||
CommonBreakInvisibleFromCombat();
|
CommonBreakInvisibleFromCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::DoThrowingAttackDmg(Mob* other, const ItemInst* RangeWeapon, const EQEmu::ItemBase* AmmoItem, uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id, int AmmoSlot, float speed)
|
void Mob::DoThrowingAttackDmg(Mob* other, const EQEmu::ItemInstance* RangeWeapon, const EQEmu::ItemData* AmmoItem, uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id, int AmmoSlot, float speed)
|
||||||
{
|
{
|
||||||
if ((other == nullptr ||
|
if ((other == nullptr ||
|
||||||
((IsClient() && CastToClient()->dead) ||
|
((IsClient() && CastToClient()->dead) ||
|
||||||
@ -1434,8 +1434,8 @@ void Mob::DoThrowingAttackDmg(Mob* other, const ItemInst* RangeWeapon, const EQE
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* _RangeWeapon = nullptr;
|
const EQEmu::ItemInstance* _RangeWeapon = nullptr;
|
||||||
const EQEmu::ItemBase* ammo_lost = nullptr;
|
const EQEmu::ItemData* ammo_lost = nullptr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If LaunchProjectile is false this function will do archery damage on target,
|
If LaunchProjectile is false this function will do archery damage on target,
|
||||||
@ -1559,7 +1559,7 @@ void Mob::DoThrowingAttackDmg(Mob* other, const ItemInst* RangeWeapon, const EQE
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mob::SendItemAnimation(Mob *to, const EQEmu::ItemBase *item, EQEmu::skills::SkillType skillInUse, float velocity) {
|
void Mob::SendItemAnimation(Mob *to, const EQEmu::ItemData *item, EQEmu::skills::SkillType skillInUse, float velocity) {
|
||||||
auto outapp = new EQApplicationPacket(OP_SomeItemPacketMaybe, sizeof(Arrow_Struct));
|
auto outapp = new EQApplicationPacket(OP_SomeItemPacketMaybe, sizeof(Arrow_Struct));
|
||||||
Arrow_Struct *as = (Arrow_Struct *) outapp->pBuffer;
|
Arrow_Struct *as = (Arrow_Struct *) outapp->pBuffer;
|
||||||
as->type = 1;
|
as->type = 1;
|
||||||
@ -1609,7 +1609,7 @@ void Mob::ProjectileAnimation(Mob* to, int item_id, bool IsArrow, float speed, f
|
|||||||
if (!to)
|
if (!to)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
uint8 item_type = 0;
|
uint8 item_type = 0;
|
||||||
|
|
||||||
if(!item_id) {
|
if(!item_id) {
|
||||||
@ -1750,7 +1750,7 @@ void NPC::DoClassAttacks(Mob *target) {
|
|||||||
DoAnim(animKick);
|
DoAnim(animKick);
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
|
|
||||||
if (GetWeaponDamage(target, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
dmg = -5;
|
dmg = -5;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -1771,7 +1771,7 @@ void NPC::DoClassAttacks(Mob *target) {
|
|||||||
DoAnim(animTailRake);
|
DoAnim(animTailRake);
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
|
|
||||||
if (GetWeaponDamage(target, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
dmg = -5;
|
dmg = -5;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -1824,7 +1824,7 @@ void NPC::DoClassAttacks(Mob *target) {
|
|||||||
DoAnim(animKick);
|
DoAnim(animKick);
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
|
|
||||||
if (GetWeaponDamage(target, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
dmg = -5;
|
dmg = -5;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -1849,7 +1849,7 @@ void NPC::DoClassAttacks(Mob *target) {
|
|||||||
DoAnim(animTailRake);
|
DoAnim(animTailRake);
|
||||||
int32 dmg = 0;
|
int32 dmg = 0;
|
||||||
|
|
||||||
if (GetWeaponDamage(target, (const EQEmu::ItemBase*)nullptr) <= 0){
|
if (GetWeaponDamage(target, (const EQEmu::ItemData*)nullptr) <= 0){
|
||||||
dmg = -5;
|
dmg = -5;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -2361,7 +2361,7 @@ void Mob::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills:
|
|||||||
int32 max_hit = (2 * weapon_damage*GetDamageTable(skillinuse)) / 100;
|
int32 max_hit = (2 * weapon_damage*GetDamageTable(skillinuse)) / 100;
|
||||||
|
|
||||||
if(GetLevel() >= 28 && IsWarriorClass() ) {
|
if(GetLevel() >= 28 && IsWarriorClass() ) {
|
||||||
int ucDamageBonus = GetWeaponDamageBonus((const EQEmu::ItemBase*) nullptr);
|
int ucDamageBonus = GetWeaponDamageBonus((const EQEmu::ItemData*) nullptr);
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
hate += ucDamageBonus;
|
hate += ucDamageBonus;
|
||||||
@ -2369,12 +2369,12 @@ void Mob::DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQEmu::skills:
|
|||||||
|
|
||||||
if (skillinuse == EQEmu::skills::SkillBash){
|
if (skillinuse == EQEmu::skills::SkillBash){
|
||||||
if(IsClient()){
|
if(IsClient()){
|
||||||
ItemInst *item = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
EQEmu::ItemInstance *item = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotSecondary);
|
||||||
if(item){
|
if(item){
|
||||||
if (item->GetItem()->ItemType == EQEmu::item::ItemTypeShield) {
|
if (item->GetItem()->ItemType == EQEmu::item::ItemTypeShield) {
|
||||||
hate += item->GetItem()->AC;
|
hate += item->GetItem()->AC;
|
||||||
}
|
}
|
||||||
const EQEmu::ItemBase *itm = item->GetItem();
|
const EQEmu::ItemData *itm = item->GetItem();
|
||||||
hate = hate * (100 + GetFuriousBash(itm->Focus.Effect)) / 100;
|
hate = hate * (100 + GetFuriousBash(itm->Focus.Effect)) / 100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,7 +48,7 @@ extern WorldServer worldserver;
|
|||||||
bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_override)
|
bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_override)
|
||||||
{
|
{
|
||||||
int caster_level, buffslot, effect, effect_value, i;
|
int caster_level, buffslot, effect, effect_value, i;
|
||||||
ItemInst *SummonedItem=nullptr;
|
EQEmu::ItemInstance *SummonedItem=nullptr;
|
||||||
#ifdef SPELL_EFFECT_SPAM
|
#ifdef SPELL_EFFECT_SPAM
|
||||||
#define _EDLEN 200
|
#define _EDLEN 200
|
||||||
char effect_desc[_EDLEN];
|
char effect_desc[_EDLEN];
|
||||||
@ -61,7 +61,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
|
|
||||||
bool c_override = false;
|
bool c_override = false;
|
||||||
if (caster && caster->IsClient() && GetCastedSpellInvSlot() > 0) {
|
if (caster && caster->IsClient() && GetCastedSpellInvSlot() > 0) {
|
||||||
const ItemInst *inst = caster->CastToClient()->GetInv().GetItem(GetCastedSpellInvSlot());
|
const EQEmu::ItemInstance *inst = caster->CastToClient()->GetInv().GetItem(GetCastedSpellInvSlot());
|
||||||
if (inst) {
|
if (inst) {
|
||||||
if (inst->GetItem()->Click.Level > 0) {
|
if (inst->GetItem()->Click.Level > 0) {
|
||||||
caster_level = inst->GetItem()->Click.Level;
|
caster_level = inst->GetItem()->Click.Level;
|
||||||
@ -622,7 +622,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
snprintf(effect_desc, _EDLEN, "Flesh To Bone");
|
snprintf(effect_desc, _EDLEN, "Flesh To Bone");
|
||||||
#endif
|
#endif
|
||||||
if(IsClient()){
|
if(IsClient()){
|
||||||
ItemInst* transI = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
EQEmu::ItemInstance* transI = CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
||||||
if (transI && transI->IsClassCommon() && transI->IsStackable()){
|
if (transI && transI->IsClassCommon() && transI->IsStackable()){
|
||||||
uint32 fcharges = transI->GetCharges();
|
uint32 fcharges = transI->GetCharges();
|
||||||
//Does it sound like meat... maybe should check if it looks like meat too...
|
//Does it sound like meat... maybe should check if it looks like meat too...
|
||||||
@ -1148,7 +1148,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
|
|
||||||
case SE_SummonItem:
|
case SE_SummonItem:
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = database.GetItem(spell.base[i]);
|
const EQEmu::ItemData *item = database.GetItem(spell.base[i]);
|
||||||
#ifdef SPELL_EFFECT_SPAM
|
#ifdef SPELL_EFFECT_SPAM
|
||||||
const char *itemname = item ? item->Name : "*Unknown Item*";
|
const char *itemname = item ? item->Name : "*Unknown Item*";
|
||||||
snprintf(effect_desc, _EDLEN, "Summon Item: %s (id %d)", itemname, spell.base[i]);
|
snprintf(effect_desc, _EDLEN, "Summon Item: %s (id %d)", itemname, spell.base[i]);
|
||||||
@ -1184,7 +1184,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
}
|
}
|
||||||
case SE_SummonItemIntoBag:
|
case SE_SummonItemIntoBag:
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase *item = database.GetItem(spell.base[i]);
|
const EQEmu::ItemData *item = database.GetItem(spell.base[i]);
|
||||||
#ifdef SPELL_EFFECT_SPAM
|
#ifdef SPELL_EFFECT_SPAM
|
||||||
const char *itemname = item ? item->Name : "*Unknown Item*";
|
const char *itemname = item ? item->Name : "*Unknown Item*";
|
||||||
snprintf(effect_desc, _EDLEN, "Summon Item In Bag: %s (id %d)", itemname, spell.base[i]);
|
snprintf(effect_desc, _EDLEN, "Summon Item In Bag: %s (id %d)", itemname, spell.base[i]);
|
||||||
@ -1213,7 +1213,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
if (charges < 1)
|
if (charges < 1)
|
||||||
charges = 1;
|
charges = 1;
|
||||||
|
|
||||||
ItemInst *SubItem = database.CreateItem(spell.base[i], charges);
|
EQEmu::ItemInstance *SubItem = database.CreateItem(spell.base[i], charges);
|
||||||
if (SubItem != nullptr) {
|
if (SubItem != nullptr) {
|
||||||
SummonedItem->PutItem(slot, *SubItem);
|
SummonedItem->PutItem(slot, *SubItem);
|
||||||
safe_delete(SubItem);
|
safe_delete(SubItem);
|
||||||
@ -5172,7 +5172,7 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) {
|
|||||||
//item focus
|
//item focus
|
||||||
if (itembonuses.FocusEffects[type]){
|
if (itembonuses.FocusEffects[type]){
|
||||||
|
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
|
|
||||||
for (int x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::EQUIPMENT_END; x++)
|
for (int x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::EQUIPMENT_END; x++)
|
||||||
{
|
{
|
||||||
@ -5180,7 +5180,7 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
TempItem = nullptr;
|
TempItem = nullptr;
|
||||||
ItemInst* ins = GetInv().GetItem(x);
|
EQEmu::ItemInstance* ins = GetInv().GetItem(x);
|
||||||
if (!ins)
|
if (!ins)
|
||||||
continue;
|
continue;
|
||||||
TempItem = ins->GetItem();
|
TempItem = ins->GetItem();
|
||||||
@ -5199,11 +5199,11 @@ uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) {
|
|||||||
if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS)
|
if (SympatheticProcList.size() > MAX_SYMPATHETIC_PROCS)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ItemInst *aug = nullptr;
|
EQEmu::ItemInstance *aug = nullptr;
|
||||||
aug = ins->GetAugment(y);
|
aug = ins->GetAugment(y);
|
||||||
if(aug)
|
if(aug)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* TempItemAug = aug->GetItem();
|
const EQEmu::ItemData* TempItemAug = aug->GetItem();
|
||||||
if (TempItemAug && TempItemAug->Focus.Effect > 0 && IsValidSpell(TempItemAug->Focus.Effect)) {
|
if (TempItemAug && TempItemAug->Focus.Effect > 0 && IsValidSpell(TempItemAug->Focus.Effect)) {
|
||||||
proc_spellid = CalcFocusEffect(type, TempItemAug->Focus.Effect, spell_id);
|
proc_spellid = CalcFocusEffect(type, TempItemAug->Focus.Effect, spell_id);
|
||||||
if (IsValidSpell(proc_spellid)){
|
if (IsValidSpell(proc_spellid)){
|
||||||
@ -5301,8 +5301,8 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id)
|
|||||||
//Check if item focus effect exists for the client.
|
//Check if item focus effect exists for the client.
|
||||||
if (itembonuses.FocusEffects[type]){
|
if (itembonuses.FocusEffects[type]){
|
||||||
|
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
const EQEmu::ItemBase* UsedItem = 0;
|
const EQEmu::ItemData* UsedItem = 0;
|
||||||
uint16 UsedFocusID = 0;
|
uint16 UsedFocusID = 0;
|
||||||
int16 Total = 0;
|
int16 Total = 0;
|
||||||
int16 focus_max = 0;
|
int16 focus_max = 0;
|
||||||
@ -5312,7 +5312,7 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id)
|
|||||||
for (int x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::EQUIPMENT_END; x++)
|
for (int x = EQEmu::legacy::EQUIPMENT_BEGIN; x <= EQEmu::legacy::EQUIPMENT_END; x++)
|
||||||
{
|
{
|
||||||
TempItem = nullptr;
|
TempItem = nullptr;
|
||||||
ItemInst* ins = GetInv().GetItem(x);
|
EQEmu::ItemInstance* ins = GetInv().GetItem(x);
|
||||||
if (!ins)
|
if (!ins)
|
||||||
continue;
|
continue;
|
||||||
TempItem = ins->GetItem();
|
TempItem = ins->GetItem();
|
||||||
@ -5345,11 +5345,11 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id)
|
|||||||
|
|
||||||
for (int y = AUG_INDEX_BEGIN; y < EQEmu::legacy::ITEM_COMMON_SIZE; ++y)
|
for (int y = AUG_INDEX_BEGIN; y < EQEmu::legacy::ITEM_COMMON_SIZE; ++y)
|
||||||
{
|
{
|
||||||
ItemInst *aug = nullptr;
|
EQEmu::ItemInstance *aug = nullptr;
|
||||||
aug = ins->GetAugment(y);
|
aug = ins->GetAugment(y);
|
||||||
if(aug)
|
if(aug)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* TempItemAug = aug->GetItem();
|
const EQEmu::ItemData* TempItemAug = aug->GetItem();
|
||||||
if (TempItemAug && TempItemAug->Focus.Effect > 0 && TempItemAug->Focus.Effect != SPELL_UNKNOWN) {
|
if (TempItemAug && TempItemAug->Focus.Effect > 0 && TempItemAug->Focus.Effect != SPELL_UNKNOWN) {
|
||||||
if(rand_effectiveness) {
|
if(rand_effectiveness) {
|
||||||
focus_max = CalcFocusEffect(type, TempItemAug->Focus.Effect, spell_id, true);
|
focus_max = CalcFocusEffect(type, TempItemAug->Focus.Effect, spell_id, true);
|
||||||
@ -5384,7 +5384,7 @@ int16 Client::GetFocusEffect(focusType type, uint16 spell_id)
|
|||||||
for (int x = EQEmu::legacy::TRIBUTE_BEGIN; x <= EQEmu::legacy::TRIBUTE_END; ++x)
|
for (int x = EQEmu::legacy::TRIBUTE_BEGIN; x <= EQEmu::legacy::TRIBUTE_END; ++x)
|
||||||
{
|
{
|
||||||
TempItem = nullptr;
|
TempItem = nullptr;
|
||||||
ItemInst* ins = GetInv().GetItem(x);
|
EQEmu::ItemInstance* ins = GetInv().GetItem(x);
|
||||||
if (!ins)
|
if (!ins)
|
||||||
continue;
|
continue;
|
||||||
TempItem = ins->GetItem();
|
TempItem = ins->GetItem();
|
||||||
@ -5573,8 +5573,8 @@ int16 NPC::GetFocusEffect(focusType type, uint16 spell_id) {
|
|||||||
|
|
||||||
if (RuleB(Spells, NPC_UseFocusFromItems) && itembonuses.FocusEffects[type]){
|
if (RuleB(Spells, NPC_UseFocusFromItems) && itembonuses.FocusEffects[type]){
|
||||||
|
|
||||||
const EQEmu::ItemBase* TempItem = 0;
|
const EQEmu::ItemData* TempItem = 0;
|
||||||
const EQEmu::ItemBase* UsedItem = 0;
|
const EQEmu::ItemData* UsedItem = 0;
|
||||||
uint16 UsedFocusID = 0;
|
uint16 UsedFocusID = 0;
|
||||||
int16 Total = 0;
|
int16 Total = 0;
|
||||||
int16 focus_max = 0;
|
int16 focus_max = 0;
|
||||||
@ -5582,7 +5582,7 @@ int16 NPC::GetFocusEffect(focusType type, uint16 spell_id) {
|
|||||||
|
|
||||||
//item focus
|
//item focus
|
||||||
for (int i = 0; i < EQEmu::legacy::EQUIPMENT_SIZE; i++){
|
for (int i = 0; i < EQEmu::legacy::EQUIPMENT_SIZE; i++){
|
||||||
const EQEmu::ItemBase *cur = database.GetItem(equipment[i]);
|
const EQEmu::ItemData *cur = database.GetItem(equipment[i]);
|
||||||
|
|
||||||
if(!cur)
|
if(!cur)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@ -256,7 +256,7 @@ bool Mob::CastSpell(uint16 spell_id, uint16 target_id, CastingSlot slot,
|
|||||||
//Added to prevent MQ2 exploitation of equipping normally-unequippable/clickable items with effects and clicking them for benefits.
|
//Added to prevent MQ2 exploitation of equipping normally-unequippable/clickable items with effects and clicking them for benefits.
|
||||||
if(item_slot && IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
|
if(item_slot && IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
|
||||||
{
|
{
|
||||||
ItemInst *itm = CastToClient()->GetInv().GetItem(item_slot);
|
EQEmu::ItemInstance *itm = CastToClient()->GetInv().GetItem(item_slot);
|
||||||
int bitmask = 1;
|
int bitmask = 1;
|
||||||
bitmask = bitmask << (CastToClient()->GetClass() - 1);
|
bitmask = bitmask << (CastToClient()->GetClass() - 1);
|
||||||
if( itm && itm->GetItem()->Classes != 65535 ) {
|
if( itm && itm->GetItem()->Classes != 65535 ) {
|
||||||
@ -936,7 +936,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo
|
|||||||
if(IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
|
if(IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
|
||||||
{
|
{
|
||||||
IsFromItem = true;
|
IsFromItem = true;
|
||||||
ItemInst *itm = CastToClient()->GetInv().GetItem(inventory_slot);
|
EQEmu::ItemInstance *itm = CastToClient()->GetInv().GetItem(inventory_slot);
|
||||||
if(itm && itm->GetItem()->RecastDelay > 0)
|
if(itm && itm->GetItem()->RecastDelay > 0)
|
||||||
{
|
{
|
||||||
if(!CastToClient()->GetPTimers().Expired(&database, (pTimerItemStart + itm->GetItem()->RecastType), false)) {
|
if(!CastToClient()->GetPTimers().Expired(&database, (pTimerItemStart + itm->GetItem()->RecastType), false)) {
|
||||||
@ -1174,7 +1174,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo
|
|||||||
missingreags=true;
|
missingreags=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(component);
|
const EQEmu::ItemData *item = database.GetItem(component);
|
||||||
if(item) {
|
if(item) {
|
||||||
c->Message_StringID(13, MISSING_SPELL_COMP_ITEM, item->Name);
|
c->Message_StringID(13, MISSING_SPELL_COMP_ITEM, item->Name);
|
||||||
Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Canceled. Missing required reagent %s (%d)", spell_id, item->Name, component);
|
Log.Out(Logs::Detail, Logs::Spells, "Spell %d: Canceled. Missing required reagent %s (%d)", spell_id, item->Name, component);
|
||||||
@ -1235,8 +1235,8 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo
|
|||||||
&& inventory_slot != 0xFFFFFFFF) // 10 is an item
|
&& inventory_slot != 0xFFFFFFFF) // 10 is an item
|
||||||
{
|
{
|
||||||
bool fromaug = false;
|
bool fromaug = false;
|
||||||
const ItemInst* inst = CastToClient()->GetInv()[inventory_slot];
|
const EQEmu::ItemInstance* inst = CastToClient()->GetInv()[inventory_slot];
|
||||||
EQEmu::ItemBase* augitem = 0;
|
EQEmu::ItemData* augitem = 0;
|
||||||
uint32 recastdelay = 0;
|
uint32 recastdelay = 0;
|
||||||
uint32 recasttype = 0;
|
uint32 recasttype = 0;
|
||||||
|
|
||||||
@ -1245,11 +1245,11 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
for (int r = AUG_INDEX_BEGIN; r < EQEmu::legacy::ITEM_COMMON_SIZE; r++) {
|
for (int r = AUG_INDEX_BEGIN; r < EQEmu::legacy::ITEM_COMMON_SIZE; r++) {
|
||||||
const ItemInst* aug_i = inst->GetAugment(r);
|
const EQEmu::ItemInstance* aug_i = inst->GetAugment(r);
|
||||||
|
|
||||||
if (!aug_i)
|
if (!aug_i)
|
||||||
continue;
|
continue;
|
||||||
const EQEmu::ItemBase* aug = aug_i->GetItem();
|
const EQEmu::ItemData* aug = aug_i->GetItem();
|
||||||
if (!aug)
|
if (!aug)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1285,7 +1285,7 @@ void Mob::CastedSpellFinished(uint16 spell_id, uint32 target_id, CastingSlot slo
|
|||||||
|
|
||||||
if (inst && inst->IsClassCommon() && (inst->GetItem()->Click.Effect == spell_id) && inst->GetCharges() || fromaug)
|
if (inst && inst->IsClassCommon() && (inst->GetItem()->Click.Effect == spell_id) && inst->GetCharges() || fromaug)
|
||||||
{
|
{
|
||||||
//const ItemBase* item = inst->GetItem();
|
//const ItemData* item = inst->GetItem();
|
||||||
int16 charges = inst->GetItem()->MaxCharges;
|
int16 charges = inst->GetItem()->MaxCharges;
|
||||||
|
|
||||||
if(fromaug) { charges = -1; } //Don't destroy the parent item
|
if(fromaug) { charges = -1; } //Don't destroy the parent item
|
||||||
@ -2385,7 +2385,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, ui
|
|||||||
|
|
||||||
if(IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
|
if(IsClient() && (slot == CastingSlot::Item || slot == CastingSlot::PotionBelt))
|
||||||
{
|
{
|
||||||
ItemInst *itm = CastToClient()->GetInv().GetItem(inventory_slot);
|
EQEmu::ItemInstance *itm = CastToClient()->GetInv().GetItem(inventory_slot);
|
||||||
if(itm && itm->GetItem()->RecastDelay > 0){
|
if(itm && itm->GetItem()->RecastDelay > 0){
|
||||||
auto recast_type = itm->GetItem()->RecastType;
|
auto recast_type = itm->GetItem()->RecastType;
|
||||||
CastToClient()->GetPTimers().Start((pTimerItemStart + recast_type), itm->GetItem()->RecastDelay);
|
CastToClient()->GetPTimers().Start((pTimerItemStart + recast_type), itm->GetItem()->RecastDelay);
|
||||||
|
|||||||
@ -1708,7 +1708,7 @@ void ClientTaskState::UpdateTasksOnExplore(Client *c, int ExploreID) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClientTaskState::UpdateTasksOnDeliver(Client *c, std::list<ItemInst*>& Items, int Cash, int NPCTypeID) {
|
bool ClientTaskState::UpdateTasksOnDeliver(Client *c, std::list<EQEmu::ItemInstance*>& Items, int Cash, int NPCTypeID) {
|
||||||
|
|
||||||
bool Ret = false;
|
bool Ret = false;
|
||||||
|
|
||||||
@ -1900,7 +1900,7 @@ void ClientTaskState::RewardTask(Client *c, TaskInformation *Task) {
|
|||||||
|
|
||||||
if(!Task || !c) return;
|
if(!Task || !c) return;
|
||||||
|
|
||||||
const EQEmu::ItemBase* Item;
|
const EQEmu::ItemData* Item;
|
||||||
std::vector<int> RewardList;
|
std::vector<int> RewardList;
|
||||||
|
|
||||||
switch(Task->RewardMethod) {
|
switch(Task->RewardMethod) {
|
||||||
@ -2791,7 +2791,7 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(ItemID) {
|
if(ItemID) {
|
||||||
const EQEmu::ItemBase* reward_item = database.GetItem(ItemID);
|
const EQEmu::ItemData* reward_item = database.GetItem(ItemID);
|
||||||
|
|
||||||
EQEmu::SayLinkEngine linker;
|
EQEmu::SayLinkEngine linker;
|
||||||
linker.SetLinkType(EQEmu::saylink::SayLinkItemData);
|
linker.SetLinkType(EQEmu::saylink::SayLinkItemData);
|
||||||
|
|||||||
@ -45,7 +45,11 @@ Copyright (C) 2001-2004 EQEMu Development Team (http://eqemulator.net)
|
|||||||
|
|
||||||
class Client;
|
class Client;
|
||||||
class Mob;
|
class Mob;
|
||||||
class ItemInst;
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
struct TaskGoalList_Struct {
|
struct TaskGoalList_Struct {
|
||||||
int ListID;
|
int ListID;
|
||||||
@ -187,7 +191,7 @@ public:
|
|||||||
void UpdateTasksForItem(Client *c, ActivityType Type, int ItemID, int Count=1);
|
void UpdateTasksForItem(Client *c, ActivityType Type, int ItemID, int Count=1);
|
||||||
void UpdateTasksOnExplore(Client *c, int ExploreID);
|
void UpdateTasksOnExplore(Client *c, int ExploreID);
|
||||||
bool UpdateTasksOnSpeakWith(Client *c, int NPCTypeID);
|
bool UpdateTasksOnSpeakWith(Client *c, int NPCTypeID);
|
||||||
bool UpdateTasksOnDeliver(Client *c, std::list<ItemInst*>& Items, int Cash, int NPCTypeID);
|
bool UpdateTasksOnDeliver(Client *c, std::list<EQEmu::ItemInstance*>& Items, int Cash, int NPCTypeID);
|
||||||
void UpdateTasksOnTouch(Client *c, int ZoneID);
|
void UpdateTasksOnTouch(Client *c, int ZoneID);
|
||||||
void ProcessTaskProximities(Client *c, float X, float Y, float Z);
|
void ProcessTaskProximities(Client *c, float X, float Y, float Z);
|
||||||
bool TaskOutOfTime(int Index);
|
bool TaskOutOfTime(int Index);
|
||||||
|
|||||||
@ -46,7 +46,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* container = nullptr;
|
EQEmu::ItemInstance* container = nullptr;
|
||||||
|
|
||||||
if (worldo)
|
if (worldo)
|
||||||
{
|
{
|
||||||
@ -56,12 +56,12 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
{
|
{
|
||||||
// Check to see if they have an inventory container type 53 that is used for this.
|
// Check to see if they have an inventory container type 53 that is used for this.
|
||||||
Inventory& user_inv = user->GetInv();
|
Inventory& user_inv = user->GetInv();
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
|
|
||||||
inst = user_inv.GetItem(in_augment->container_slot);
|
inst = user_inv.GetItem(in_augment->container_slot);
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (item && inst->IsType(EQEmu::item::ItemClassBag) && item->BagType == 53)
|
if (item && inst->IsType(EQEmu::item::ItemClassBag) && item->BagType == 53)
|
||||||
{
|
{
|
||||||
// We have found an appropriate inventory augmentation sealer
|
// We have found an appropriate inventory augmentation sealer
|
||||||
@ -71,7 +71,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
uint8 itemsFound = 0;
|
uint8 itemsFound = 0;
|
||||||
for (uint8 i = SLOT_BEGIN; i < EQEmu::legacy::TYPE_WORLD_SIZE; i++)
|
for (uint8 i = SLOT_BEGIN; i < EQEmu::legacy::TYPE_WORLD_SIZE; i++)
|
||||||
{
|
{
|
||||||
const ItemInst* inst = container->GetItem(i);
|
const EQEmu::ItemInstance* inst = container->GetItem(i);
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
itemsFound++;
|
itemsFound++;
|
||||||
@ -94,7 +94,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *tobe_auged = nullptr, *auged_with = nullptr;
|
EQEmu::ItemInstance *tobe_auged = nullptr, *auged_with = nullptr;
|
||||||
int8 slot=-1;
|
int8 slot=-1;
|
||||||
|
|
||||||
// Verify 2 items in the augmentation device
|
// Verify 2 items in the augmentation device
|
||||||
@ -135,7 +135,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
|
|
||||||
bool deleteItems = false;
|
bool deleteItems = false;
|
||||||
|
|
||||||
ItemInst *itemOneToPush = nullptr, *itemTwoToPush = nullptr;
|
EQEmu::ItemInstance *itemOneToPush = nullptr, *itemTwoToPush = nullptr;
|
||||||
|
|
||||||
// Adding augment
|
// Adding augment
|
||||||
if (in_augment->augment_slot == -1)
|
if (in_augment->augment_slot == -1)
|
||||||
@ -145,7 +145,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
{
|
{
|
||||||
tobe_auged->PutAugment(slot, *auged_with);
|
tobe_auged->PutAugment(slot, *auged_with);
|
||||||
|
|
||||||
ItemInst *aug = tobe_auged->GetAugment(slot);
|
EQEmu::ItemInstance *aug = tobe_auged->GetAugment(slot);
|
||||||
if(aug) {
|
if(aug) {
|
||||||
std::vector<EQEmu::Any> args;
|
std::vector<EQEmu::Any> args;
|
||||||
args.push_back(aug);
|
args.push_back(aug);
|
||||||
@ -165,7 +165,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ItemInst *old_aug = nullptr;
|
EQEmu::ItemInstance *old_aug = nullptr;
|
||||||
bool isSolvent = auged_with->GetItem()->ItemType == EQEmu::item::ItemTypeAugmentationSolvent;
|
bool isSolvent = auged_with->GetItem()->ItemType == EQEmu::item::ItemTypeAugmentationSolvent;
|
||||||
if (!isSolvent && auged_with->GetItem()->ItemType != EQEmu::item::ItemTypeAugmentationDistiller)
|
if (!isSolvent && auged_with->GetItem()->ItemType != EQEmu::item::ItemTypeAugmentationDistiller)
|
||||||
{
|
{
|
||||||
@ -175,7 +175,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *aug = tobe_auged->GetAugment(in_augment->augment_slot);
|
EQEmu::ItemInstance *aug = tobe_auged->GetAugment(in_augment->augment_slot);
|
||||||
if (aug) {
|
if (aug) {
|
||||||
if (!isSolvent && auged_with->GetItem()->ID != aug->GetItem()->AugDistiller)
|
if (!isSolvent && auged_with->GetItem()->ID != aug->GetItem()->AugDistiller)
|
||||||
{
|
{
|
||||||
@ -224,7 +224,7 @@ void Object::HandleAugmentation(Client* user, const AugmentItem_Struct* in_augme
|
|||||||
// Delete items in our inventory container...
|
// Delete items in our inventory container...
|
||||||
for (uint8 i = SLOT_BEGIN; i < EQEmu::legacy::TYPE_WORLD_SIZE; i++)
|
for (uint8 i = SLOT_BEGIN; i < EQEmu::legacy::TYPE_WORLD_SIZE; i++)
|
||||||
{
|
{
|
||||||
const ItemInst* inst = container->GetItem(i);
|
const EQEmu::ItemInstance* inst = container->GetItem(i);
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
user->DeleteItemInInventory(Inventory::CalcSlotId(in_augment->container_slot,i),0,true);
|
user->DeleteItemInInventory(Inventory::CalcSlotId(in_augment->container_slot,i),0,true);
|
||||||
@ -258,8 +258,8 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob
|
|||||||
|
|
||||||
Inventory& user_inv = user->GetInv();
|
Inventory& user_inv = user->GetInv();
|
||||||
PlayerProfile_Struct& user_pp = user->GetPP();
|
PlayerProfile_Struct& user_pp = user->GetPP();
|
||||||
ItemInst* container = nullptr;
|
EQEmu::ItemInstance* container = nullptr;
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
uint8 c_type = 0xE8;
|
uint8 c_type = 0xE8;
|
||||||
uint32 some_id = 0;
|
uint32 some_id = 0;
|
||||||
bool worldcontainer=false;
|
bool worldcontainer=false;
|
||||||
@ -276,7 +276,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob
|
|||||||
else {
|
else {
|
||||||
inst = user_inv.GetItem(in_combine->container_slot);
|
inst = user_inv.GetItem(in_combine->container_slot);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if (item && inst->IsType(EQEmu::item::ItemClassBag)) {
|
if (item && inst->IsType(EQEmu::item::ItemClassBag)) {
|
||||||
c_type = item->BagType;
|
c_type = item->BagType;
|
||||||
some_id = item->ID;
|
some_id = item->ID;
|
||||||
@ -291,10 +291,10 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob
|
|||||||
|
|
||||||
container = inst;
|
container = inst;
|
||||||
if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeTransformationmold) {
|
if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeTransformationmold) {
|
||||||
const ItemInst* inst = container->GetItem(0);
|
const EQEmu::ItemInstance* inst = container->GetItem(0);
|
||||||
bool AllowAll = RuleB(Inventory, AllowAnyWeaponTransformation);
|
bool AllowAll = RuleB(Inventory, AllowAnyWeaponTransformation);
|
||||||
if (inst && ItemInst::CanTransform(inst->GetItem(), container->GetItem(), AllowAll)) {
|
if (inst && EQEmu::ItemInstance::CanTransform(inst->GetItem(), container->GetItem(), AllowAll)) {
|
||||||
const EQEmu::ItemBase* new_weapon = inst->GetItem();
|
const EQEmu::ItemData* new_weapon = inst->GetItem();
|
||||||
user->DeleteItemInInventory(Inventory::CalcSlotId(in_combine->container_slot, 0), 0, true);
|
user->DeleteItemInInventory(Inventory::CalcSlotId(in_combine->container_slot, 0), 0, true);
|
||||||
container->Clear();
|
container->Clear();
|
||||||
user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::legacy::SlotCursor, container->GetItem()->Icon, atoi(container->GetItem()->IDFile + 2));
|
user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::legacy::SlotCursor, container->GetItem()->Icon, atoi(container->GetItem()->IDFile + 2));
|
||||||
@ -312,9 +312,9 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeDetransformationmold) {
|
if (container->GetItem() && container->GetItem()->BagType == EQEmu::item::BagTypeDetransformationmold) {
|
||||||
const ItemInst* inst = container->GetItem(0);
|
const EQEmu::ItemInstance* inst = container->GetItem(0);
|
||||||
if (inst && inst->GetOrnamentationIcon() && inst->GetOrnamentationIcon()) {
|
if (inst && inst->GetOrnamentationIcon() && inst->GetOrnamentationIcon()) {
|
||||||
const EQEmu::ItemBase* new_weapon = inst->GetItem();
|
const EQEmu::ItemData* new_weapon = inst->GetItem();
|
||||||
user->DeleteItemInInventory(Inventory::CalcSlotId(in_combine->container_slot, 0), 0, true);
|
user->DeleteItemInInventory(Inventory::CalcSlotId(in_combine->container_slot, 0), 0, true);
|
||||||
container->Clear();
|
container->Clear();
|
||||||
user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::legacy::SlotCursor, 0, 0);
|
user->SummonItem(new_weapon->ID, inst->GetCharges(), inst->GetAugmentItemID(0), inst->GetAugmentItemID(1), inst->GetAugmentItemID(2), inst->GetAugmentItemID(3), inst->GetAugmentItemID(4), inst->GetAugmentItemID(5), inst->IsAttuned(), EQEmu::legacy::SlotCursor, 0, 0);
|
||||||
@ -402,7 +402,7 @@ void Object::HandleCombine(Client* user, const NewCombine_Struct* in_combine, Ob
|
|||||||
database.DeleteWorldContainer(worldo->m_id, zone->GetZoneID());
|
database.DeleteWorldContainer(worldo->m_id, zone->GetZoneID());
|
||||||
} else{
|
} else{
|
||||||
for (uint8 i = SLOT_BEGIN; i < EQEmu::legacy::TYPE_WORLD_SIZE; i++) {
|
for (uint8 i = SLOT_BEGIN; i < EQEmu::legacy::TYPE_WORLD_SIZE; i++) {
|
||||||
const ItemInst* inst = container->GetItem(i);
|
const EQEmu::ItemInstance* inst = container->GetItem(i);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
user->DeleteItemInInventory(Inventory::CalcSlotId(in_combine->container_slot,i),0,true);
|
user->DeleteItemInInventory(Inventory::CalcSlotId(in_combine->container_slot,i),0,true);
|
||||||
}
|
}
|
||||||
@ -537,7 +537,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac
|
|||||||
user->Message_StringID(MT_Skills, TRADESKILL_MISSING_COMPONENTS);
|
user->Message_StringID(MT_Skills, TRADESKILL_MISSING_COMPONENTS);
|
||||||
|
|
||||||
for (auto it = MissingItems.begin(); it != MissingItems.end(); ++it) {
|
for (auto it = MissingItems.begin(); it != MissingItems.end(); ++it) {
|
||||||
const EQEmu::ItemBase* item = database.GetItem(*it);
|
const EQEmu::ItemData* item = database.GetItem(*it);
|
||||||
|
|
||||||
if(item)
|
if(item)
|
||||||
user->Message_StringID(MT_Skills, TRADESKILL_MISSING_ITEM, item->Name);
|
user->Message_StringID(MT_Skills, TRADESKILL_MISSING_ITEM, item->Name);
|
||||||
@ -566,7 +566,7 @@ void Object::HandleAutoCombine(Client* user, const RecipeAutoCombine_Struct* rac
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ItemInst* inst = user_inv.GetItem(slot);
|
const EQEmu::ItemInstance* inst = user_inv.GetItem(slot);
|
||||||
|
|
||||||
if (inst && !inst->IsStackable())
|
if (inst && !inst->IsStackable())
|
||||||
user->DeleteItemInInventory(slot, 0, true);
|
user->DeleteItemInInventory(slot, 0, true);
|
||||||
@ -962,7 +962,7 @@ bool Client::TradeskillExecute(DBTradeskillRecipe_Struct *spec) {
|
|||||||
|
|
||||||
aa_chance = spellbonuses.ReduceTradeskillFail[spec->tradeskill] + itembonuses.ReduceTradeskillFail[spec->tradeskill] + aabonuses.ReduceTradeskillFail[spec->tradeskill];
|
aa_chance = spellbonuses.ReduceTradeskillFail[spec->tradeskill] + itembonuses.ReduceTradeskillFail[spec->tradeskill] + aabonuses.ReduceTradeskillFail[spec->tradeskill];
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = nullptr;
|
const EQEmu::ItemData* item = nullptr;
|
||||||
|
|
||||||
chance = mod_tradeskill_chance(chance, spec);
|
chance = mod_tradeskill_chance(chance, spec);
|
||||||
|
|
||||||
@ -1090,7 +1090,7 @@ void Client::CheckIncreaseTradeskill(int16 bonusstat, int16 stat_modifier, float
|
|||||||
Log.Out(Logs::Detail, Logs::Tradeskills, "...Stage2 chance was: %f percent. 0 percent means stage1 failed", chance_stage2);
|
Log.Out(Logs::Detail, Logs::Tradeskills, "...Stage2 chance was: %f percent. 0 percent means stage1 failed", chance_stage2);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ZoneDatabase::GetTradeRecipe(const ItemInst* container, uint8 c_type, uint32 some_id,
|
bool ZoneDatabase::GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_type, uint32 some_id,
|
||||||
uint32 char_id, DBTradeskillRecipe_Struct *spec)
|
uint32 char_id, DBTradeskillRecipe_Struct *spec)
|
||||||
{
|
{
|
||||||
if (container == nullptr)
|
if (container == nullptr)
|
||||||
@ -1109,11 +1109,11 @@ bool ZoneDatabase::GetTradeRecipe(const ItemInst* container, uint8 c_type, uint3
|
|||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
uint32 sum = 0;
|
uint32 sum = 0;
|
||||||
for (uint8 i = 0; i < 10; i++) { // <watch> TODO: need to determine if this is bound to world/item container size
|
for (uint8 i = 0; i < 10; i++) { // <watch> TODO: need to determine if this is bound to world/item container size
|
||||||
const ItemInst* inst = container->GetItem(i);
|
const EQEmu::ItemInstance* inst = container->GetItem(i);
|
||||||
if (!inst)
|
if (!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = GetItem(inst->GetItem()->ID);
|
const EQEmu::ItemData* item = GetItem(inst->GetItem()->ID);
|
||||||
if (!item)
|
if (!item)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -1238,11 +1238,11 @@ bool ZoneDatabase::GetTradeRecipe(const ItemInst* container, uint8 c_type, uint3
|
|||||||
int ccnt = 0;
|
int ccnt = 0;
|
||||||
|
|
||||||
for (int x = SLOT_BEGIN; x < EQEmu::legacy::TYPE_WORLD_SIZE; x++) {
|
for (int x = SLOT_BEGIN; x < EQEmu::legacy::TYPE_WORLD_SIZE; x++) {
|
||||||
const ItemInst* inst = container->GetItem(x);
|
const EQEmu::ItemInstance* inst = container->GetItem(x);
|
||||||
if(!inst)
|
if(!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = GetItem(inst->GetItem()->ID);
|
const EQEmu::ItemData* item = GetItem(inst->GetItem()->ID);
|
||||||
if (!item)
|
if (!item)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
112
zone/trading.cpp
112
zone/trading.cpp
@ -98,14 +98,14 @@ void Trade::AddEntity(uint16 trade_slot_id, uint32 stack_size) {
|
|||||||
|
|
||||||
// Item always goes into trade bucket from cursor
|
// Item always goes into trade bucket from cursor
|
||||||
Client* client = owner->CastToClient();
|
Client* client = owner->CastToClient();
|
||||||
ItemInst* inst = client->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
EQEmu::ItemInstance* inst = client->GetInv().GetItem(EQEmu::legacy::SlotCursor);
|
||||||
|
|
||||||
if (!inst) {
|
if (!inst) {
|
||||||
client->Message(13, "Error: Could not find item on your cursor!");
|
client->Message(13, "Error: Could not find item on your cursor!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* inst2 = client->GetInv().GetItem(trade_slot_id);
|
EQEmu::ItemInstance* inst2 = client->GetInv().GetItem(trade_slot_id);
|
||||||
|
|
||||||
// it looks like the original code attempted to allow stacking...
|
// it looks like the original code attempted to allow stacking...
|
||||||
// (it just didn't handle partial stack move actions)
|
// (it just didn't handle partial stack move actions)
|
||||||
@ -158,7 +158,7 @@ Mob* Trade::With()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Private Method: Send item data for trade item to other person involved in trade
|
// Private Method: Send item data for trade item to other person involved in trade
|
||||||
void Trade::SendItemData(const ItemInst* inst, int16 dest_slot_id)
|
void Trade::SendItemData(const EQEmu::ItemInstance* inst, int16 dest_slot_id)
|
||||||
{
|
{
|
||||||
if (inst == nullptr)
|
if (inst == nullptr)
|
||||||
return;
|
return;
|
||||||
@ -175,7 +175,7 @@ void Trade::SendItemData(const ItemInst* inst, int16 dest_slot_id)
|
|||||||
if (inst->GetItem()->ItemClass == 1) {
|
if (inst->GetItem()->ItemClass == 1) {
|
||||||
for (uint16 i = SUB_INDEX_BEGIN; i < EQEmu::legacy::ITEM_CONTAINER_SIZE; i++) {
|
for (uint16 i = SUB_INDEX_BEGIN; i < EQEmu::legacy::ITEM_CONTAINER_SIZE; i++) {
|
||||||
uint16 bagslot_id = Inventory::CalcSlotId(dest_slot_id, i);
|
uint16 bagslot_id = Inventory::CalcSlotId(dest_slot_id, i);
|
||||||
const ItemInst* bagitem = trader->GetInv().GetItem(bagslot_id);
|
const EQEmu::ItemInstance* bagitem = trader->GetInv().GetItem(bagslot_id);
|
||||||
if (bagitem) {
|
if (bagitem) {
|
||||||
with->SendItemPacket(bagslot_id - EQEmu::legacy::TRADE_BEGIN, bagitem, ItemPacketTradeView);
|
with->SendItemPacket(bagslot_id - EQEmu::legacy::TRADE_BEGIN, bagitem, ItemPacketTradeView);
|
||||||
}
|
}
|
||||||
@ -252,7 +252,7 @@ void Trade::LogTrade()
|
|||||||
strcat(logtext, "items {");
|
strcat(logtext, "items {");
|
||||||
|
|
||||||
for (uint16 i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_END; i++) {
|
for (uint16 i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_END; i++) {
|
||||||
const ItemInst* inst = trader->GetInv().GetItem(i);
|
const EQEmu::ItemInstance* inst = trader->GetInv().GetItem(i);
|
||||||
|
|
||||||
if (!comma)
|
if (!comma)
|
||||||
comma = true;
|
comma = true;
|
||||||
@ -304,7 +304,7 @@ void Trade::DumpTrade()
|
|||||||
|
|
||||||
Client* trader = owner->CastToClient();
|
Client* trader = owner->CastToClient();
|
||||||
for (uint16 i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_END; i++) {
|
for (uint16 i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_END; i++) {
|
||||||
const ItemInst* inst = trader->GetInv().GetItem(i);
|
const EQEmu::ItemInstance* inst = trader->GetInv().GetItem(i);
|
||||||
|
|
||||||
if (inst) {
|
if (inst) {
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Item %i (Charges=%i, Slot=%i, IsBag=%s)",
|
Log.Out(Logs::Detail, Logs::Trading, "Item %i (Charges=%i, Slot=%i, IsBag=%s)",
|
||||||
@ -333,7 +333,7 @@ void Client::ResetTrade() {
|
|||||||
|
|
||||||
// step 1: process bags
|
// step 1: process bags
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
||||||
const ItemInst* inst = m_inv[trade_slot];
|
const EQEmu::ItemInstance* inst = m_inv[trade_slot];
|
||||||
|
|
||||||
if (inst && inst->IsClassBag()) {
|
if (inst && inst->IsClassBag()) {
|
||||||
int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst);
|
int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst);
|
||||||
@ -352,7 +352,7 @@ void Client::ResetTrade() {
|
|||||||
|
|
||||||
// step 2a: process stackables
|
// step 2a: process stackables
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
||||||
ItemInst* inst = GetInv().GetItem(trade_slot);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot);
|
||||||
|
|
||||||
if (inst && inst->IsStackable()) {
|
if (inst && inst->IsStackable()) {
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -362,7 +362,7 @@ void Client::ResetTrade() {
|
|||||||
if ((free_slot == EQEmu::legacy::SlotCursor) || (free_slot == INVALID_INDEX))
|
if ((free_slot == EQEmu::legacy::SlotCursor) || (free_slot == INVALID_INDEX))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ItemInst* partial_inst = GetInv().GetItem(free_slot);
|
EQEmu::ItemInstance* partial_inst = GetInv().GetItem(free_slot);
|
||||||
|
|
||||||
if (!partial_inst)
|
if (!partial_inst)
|
||||||
break;
|
break;
|
||||||
@ -399,14 +399,14 @@ void Client::ResetTrade() {
|
|||||||
// step 2b: adjust trade stack bias
|
// step 2b: adjust trade stack bias
|
||||||
// (if any partial stacks exist before the final stack, FindFreeSlotForTradeItem() will return that slot in step 3 and an overwrite will occur)
|
// (if any partial stacks exist before the final stack, FindFreeSlotForTradeItem() will return that slot in step 3 and an overwrite will occur)
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_END; trade_slot >= EQEmu::legacy::TRADE_BEGIN; --trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_END; trade_slot >= EQEmu::legacy::TRADE_BEGIN; --trade_slot) {
|
||||||
ItemInst* inst = GetInv().GetItem(trade_slot);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot);
|
||||||
|
|
||||||
if (inst && inst->IsStackable()) {
|
if (inst && inst->IsStackable()) {
|
||||||
for (int16 bias_slot = EQEmu::legacy::TRADE_BEGIN; bias_slot <= EQEmu::legacy::TRADE_END; ++bias_slot) {
|
for (int16 bias_slot = EQEmu::legacy::TRADE_BEGIN; bias_slot <= EQEmu::legacy::TRADE_END; ++bias_slot) {
|
||||||
if (bias_slot >= trade_slot)
|
if (bias_slot >= trade_slot)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ItemInst* bias_inst = GetInv().GetItem(bias_slot);
|
EQEmu::ItemInstance* bias_inst = GetInv().GetItem(bias_slot);
|
||||||
|
|
||||||
if (!bias_inst || (bias_inst->GetID() != inst->GetID()) || (bias_inst->GetCharges() >= bias_inst->GetItem()->StackSize))
|
if (!bias_inst || (bias_inst->GetID() != inst->GetID()) || (bias_inst->GetCharges() >= bias_inst->GetItem()->StackSize))
|
||||||
continue;
|
continue;
|
||||||
@ -433,7 +433,7 @@ void Client::ResetTrade() {
|
|||||||
|
|
||||||
// step 3: process everything else
|
// step 3: process everything else
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
||||||
const ItemInst* inst = m_inv[trade_slot];
|
const EQEmu::ItemInstance* inst = m_inv[trade_slot];
|
||||||
|
|
||||||
if (inst) {
|
if (inst) {
|
||||||
int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst);
|
int16 free_slot = m_inv.FindFreeSlotForTradeItem(inst);
|
||||||
@ -488,7 +488,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
|
|
||||||
// step 1: process bags
|
// step 1: process bags
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
||||||
const ItemInst* inst = m_inv[trade_slot];
|
const EQEmu::ItemInstance* inst = m_inv[trade_slot];
|
||||||
|
|
||||||
if (inst && inst->IsClassBag()) {
|
if (inst && inst->IsClassBag()) {
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Giving container %s (%d) in slot %d to %s", inst->GetItem()->Name, inst->GetItem()->ID, trade_slot, other->GetName());
|
Log.Out(Logs::Detail, Logs::Trading, "Giving container %s (%d) in slot %d to %s", inst->GetItem()->Name, inst->GetItem()->ID, trade_slot, other->GetName());
|
||||||
@ -524,7 +524,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
|
|
||||||
//for (uint8 sub_slot = SUB_BEGIN; ((sub_slot < inst->GetItem()->BagSlots) && (sub_slot < EmuConstants::ITEM_CONTAINER_SIZE)); ++sub_slot) {
|
//for (uint8 sub_slot = SUB_BEGIN; ((sub_slot < inst->GetItem()->BagSlots) && (sub_slot < EmuConstants::ITEM_CONTAINER_SIZE)); ++sub_slot) {
|
||||||
for (uint8 sub_slot = SUB_INDEX_BEGIN; (sub_slot < EQEmu::legacy::ITEM_CONTAINER_SIZE); ++sub_slot) { // this is to catch ALL items
|
for (uint8 sub_slot = SUB_INDEX_BEGIN; (sub_slot < EQEmu::legacy::ITEM_CONTAINER_SIZE); ++sub_slot) { // this is to catch ALL items
|
||||||
const ItemInst* bag_inst = inst->GetItem(sub_slot);
|
const EQEmu::ItemInstance* bag_inst = inst->GetItem(sub_slot);
|
||||||
|
|
||||||
if (bag_inst) {
|
if (bag_inst) {
|
||||||
detail = new QSTradeItems_Struct;
|
detail = new QSTradeItems_Struct;
|
||||||
@ -572,7 +572,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
|
|
||||||
// step 2a: process stackables
|
// step 2a: process stackables
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
||||||
ItemInst* inst = GetInv().GetItem(trade_slot);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot);
|
||||||
|
|
||||||
if (inst && inst->IsStackable()) {
|
if (inst && inst->IsStackable()) {
|
||||||
while (true) {
|
while (true) {
|
||||||
@ -582,7 +582,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
if ((partial_slot == EQEmu::legacy::SlotCursor) || (partial_slot == INVALID_INDEX))
|
if ((partial_slot == EQEmu::legacy::SlotCursor) || (partial_slot == INVALID_INDEX))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ItemInst* partial_inst = other->GetInv().GetItem(partial_slot);
|
EQEmu::ItemInstance* partial_inst = other->GetInv().GetItem(partial_slot);
|
||||||
|
|
||||||
if (!partial_inst)
|
if (!partial_inst)
|
||||||
break;
|
break;
|
||||||
@ -654,14 +654,14 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
// step 2b: adjust trade stack bias
|
// step 2b: adjust trade stack bias
|
||||||
// (if any partial stacks exist before the final stack, FindFreeSlotForTradeItem() will return that slot in step 3 and an overwrite will occur)
|
// (if any partial stacks exist before the final stack, FindFreeSlotForTradeItem() will return that slot in step 3 and an overwrite will occur)
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_END; trade_slot >= EQEmu::legacy::TRADE_BEGIN; --trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_END; trade_slot >= EQEmu::legacy::TRADE_BEGIN; --trade_slot) {
|
||||||
ItemInst* inst = GetInv().GetItem(trade_slot);
|
EQEmu::ItemInstance* inst = GetInv().GetItem(trade_slot);
|
||||||
|
|
||||||
if (inst && inst->IsStackable()) {
|
if (inst && inst->IsStackable()) {
|
||||||
for (int16 bias_slot = EQEmu::legacy::TRADE_BEGIN; bias_slot <= EQEmu::legacy::TRADE_END; ++bias_slot) {
|
for (int16 bias_slot = EQEmu::legacy::TRADE_BEGIN; bias_slot <= EQEmu::legacy::TRADE_END; ++bias_slot) {
|
||||||
if (bias_slot >= trade_slot)
|
if (bias_slot >= trade_slot)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ItemInst* bias_inst = GetInv().GetItem(bias_slot);
|
EQEmu::ItemInstance* bias_inst = GetInv().GetItem(bias_slot);
|
||||||
|
|
||||||
if (!bias_inst || (bias_inst->GetID() != inst->GetID()) || (bias_inst->GetCharges() >= bias_inst->GetItem()->StackSize))
|
if (!bias_inst || (bias_inst->GetID() != inst->GetID()) || (bias_inst->GetCharges() >= bias_inst->GetItem()->StackSize))
|
||||||
continue;
|
continue;
|
||||||
@ -707,7 +707,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
|
|
||||||
// step 3: process everything else
|
// step 3: process everything else
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_END; ++trade_slot) {
|
||||||
const ItemInst* inst = m_inv[trade_slot];
|
const EQEmu::ItemInstance* inst = m_inv[trade_slot];
|
||||||
|
|
||||||
if (inst) {
|
if (inst) {
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Giving item %s (%d) in slot %d to %s", inst->GetItem()->Name, inst->GetItem()->ID, trade_slot, other->GetName());
|
Log.Out(Logs::Detail, Logs::Trading, "Giving item %s (%d) in slot %d to %s", inst->GetItem()->Name, inst->GetItem()->ID, trade_slot, other->GetName());
|
||||||
@ -744,7 +744,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
// 'step 3' should never really see containers..but, just in case...
|
// 'step 3' should never really see containers..but, just in case...
|
||||||
//for (uint8 sub_slot = SUB_BEGIN; ((sub_slot < inst->GetItem()->BagSlots) && (sub_slot < EmuConstants::ITEM_CONTAINER_SIZE)); ++sub_slot) {
|
//for (uint8 sub_slot = SUB_BEGIN; ((sub_slot < inst->GetItem()->BagSlots) && (sub_slot < EmuConstants::ITEM_CONTAINER_SIZE)); ++sub_slot) {
|
||||||
for (uint8 sub_slot = SUB_INDEX_BEGIN; (sub_slot < EQEmu::legacy::ITEM_CONTAINER_SIZE); ++sub_slot) { // this is to catch ALL items
|
for (uint8 sub_slot = SUB_INDEX_BEGIN; (sub_slot < EQEmu::legacy::ITEM_CONTAINER_SIZE); ++sub_slot) { // this is to catch ALL items
|
||||||
const ItemInst* bag_inst = inst->GetItem(sub_slot);
|
const EQEmu::ItemInstance* bag_inst = inst->GetItem(sub_slot);
|
||||||
|
|
||||||
if (bag_inst) {
|
if (bag_inst) {
|
||||||
detail = new QSTradeItems_Struct;
|
detail = new QSTradeItems_Struct;
|
||||||
@ -821,7 +821,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
|
|
||||||
if(qs_log) { // This can be incorporated below when revisions are made
|
if(qs_log) { // This can be incorporated below when revisions are made
|
||||||
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_NPC_END; ++trade_slot) {
|
for (int16 trade_slot = EQEmu::legacy::TRADE_BEGIN; trade_slot <= EQEmu::legacy::TRADE_NPC_END; ++trade_slot) {
|
||||||
const ItemInst* trade_inst = m_inv[trade_slot];
|
const EQEmu::ItemInstance* trade_inst = m_inv[trade_slot];
|
||||||
|
|
||||||
if(trade_inst) {
|
if(trade_inst) {
|
||||||
auto detail = new QSHandinItems_Struct;
|
auto detail = new QSHandinItems_Struct;
|
||||||
@ -842,7 +842,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
|
|
||||||
if (trade_inst->IsClassBag()) {
|
if (trade_inst->IsClassBag()) {
|
||||||
for (uint8 sub_slot = SUB_INDEX_BEGIN; sub_slot < trade_inst->GetItem()->BagSlots; ++sub_slot) {
|
for (uint8 sub_slot = SUB_INDEX_BEGIN; sub_slot < trade_inst->GetItem()->BagSlots; ++sub_slot) {
|
||||||
const ItemInst* trade_baginst = trade_inst->GetItem(sub_slot);
|
const EQEmu::ItemInstance* trade_baginst = trade_inst->GetItem(sub_slot);
|
||||||
|
|
||||||
if(trade_baginst) {
|
if(trade_baginst) {
|
||||||
detail = new QSHandinItems_Struct;
|
detail = new QSHandinItems_Struct;
|
||||||
@ -874,27 +874,27 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<EQEmu::Any> item_list;
|
std::vector<EQEmu::Any> item_list;
|
||||||
std::list<ItemInst*> items;
|
std::list<EQEmu::ItemInstance*> items;
|
||||||
for (int i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_NPC_END; ++i) {
|
for (int i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_NPC_END; ++i) {
|
||||||
ItemInst *inst = m_inv.GetItem(i);
|
EQEmu::ItemInstance *inst = m_inv.GetItem(i);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
items.push_back(inst);
|
items.push_back(inst);
|
||||||
item_list.push_back(inst);
|
item_list.push_back(inst);
|
||||||
} else {
|
} else {
|
||||||
item_list.push_back((ItemInst*)nullptr);
|
item_list.push_back((EQEmu::ItemInstance*)nullptr);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = inst->GetItem();
|
const EQEmu::ItemData* item = inst->GetItem();
|
||||||
if(item && quest_npc == false) {
|
if(item && quest_npc == false) {
|
||||||
// if it was not a NO DROP or Attuned item (or if a GM is trading), let the NPC have it
|
// if it was not a NO DROP or Attuned item (or if a GM is trading), let the NPC have it
|
||||||
if(GetGM() || (item->NoDrop != 0 && inst->IsAttuned() == false)) {
|
if(GetGM() || (item->NoDrop != 0 && inst->IsAttuned() == false)) {
|
||||||
// pets need to look inside bags and try to equip items found there
|
// pets need to look inside bags and try to equip items found there
|
||||||
if (item->IsClassBag() && item->BagSlots > 0) {
|
if (item->IsClassBag() && item->BagSlots > 0) {
|
||||||
for (int16 bslot = SUB_INDEX_BEGIN; bslot < item->BagSlots; bslot++) {
|
for (int16 bslot = SUB_INDEX_BEGIN; bslot < item->BagSlots; bslot++) {
|
||||||
const ItemInst* baginst = inst->GetItem(bslot);
|
const EQEmu::ItemInstance* baginst = inst->GetItem(bslot);
|
||||||
if (baginst) {
|
if (baginst) {
|
||||||
const EQEmu::ItemBase* bagitem = baginst->GetItem();
|
const EQEmu::ItemData* bagitem = baginst->GetItem();
|
||||||
if (bagitem && (GetGM() || (bagitem->NoDrop != 0 && baginst->IsAttuned() == false))) {
|
if (bagitem && (GetGM() || (bagitem->NoDrop != 0 && baginst->IsAttuned() == false))) {
|
||||||
tradingWith->CastToNPC()->AddLootDrop(bagitem, &tradingWith->CastToNPC()->itemlist,
|
tradingWith->CastToNPC()->AddLootDrop(bagitem, &tradingWith->CastToNPC()->itemlist,
|
||||||
baginst->GetCharges(), 1, 127, true, true);
|
baginst->GetCharges(), 1, 127, true, true);
|
||||||
@ -947,7 +947,7 @@ void Client::FinishTrade(Mob* tradingWith, bool finalizer, void* event_entry, st
|
|||||||
tradingWith->FaceTarget(this);
|
tradingWith->FaceTarget(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst *insts[4] = { 0 };
|
EQEmu::ItemInstance *insts[4] = { 0 };
|
||||||
for (int i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_NPC_END; ++i) {
|
for (int i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_NPC_END; ++i) {
|
||||||
insts[i - EQEmu::legacy::TRADE_BEGIN] = m_inv.PopItem(i);
|
insts[i - EQEmu::legacy::TRADE_BEGIN] = m_inv.PopItem(i);
|
||||||
database.SaveInventory(CharacterID(), nullptr, i);
|
database.SaveInventory(CharacterID(), nullptr, i);
|
||||||
@ -969,7 +969,7 @@ bool Client::CheckTradeLoreConflict(Client* other)
|
|||||||
return true;
|
return true;
|
||||||
// Move each trade slot into free inventory slot
|
// Move each trade slot into free inventory slot
|
||||||
for (int16 i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_END; i++){
|
for (int16 i = EQEmu::legacy::TRADE_BEGIN; i <= EQEmu::legacy::TRADE_END; i++){
|
||||||
const ItemInst* inst = m_inv[i];
|
const EQEmu::ItemInstance* inst = m_inv[i];
|
||||||
|
|
||||||
if (inst && inst->GetItem()) {
|
if (inst && inst->GetItem()) {
|
||||||
if (other->CheckLoreConflict(inst->GetItem()))
|
if (other->CheckLoreConflict(inst->GetItem()))
|
||||||
@ -978,7 +978,7 @@ bool Client::CheckTradeLoreConflict(Client* other)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int16 i = EQEmu::legacy::TRADE_BAGS_BEGIN; i <= EQEmu::legacy::TRADE_BAGS_END; i++){
|
for (int16 i = EQEmu::legacy::TRADE_BAGS_BEGIN; i <= EQEmu::legacy::TRADE_BAGS_END; i++){
|
||||||
const ItemInst* inst = m_inv[i];
|
const EQEmu::ItemInstance* inst = m_inv[i];
|
||||||
|
|
||||||
if (inst && inst->GetItem()) {
|
if (inst && inst->GetItem()) {
|
||||||
if (other->CheckLoreConflict(inst->GetItem()))
|
if (other->CheckLoreConflict(inst->GetItem()))
|
||||||
@ -1158,14 +1158,14 @@ void Client::SendTraderItem(uint32 ItemID, uint16 Quantity) {
|
|||||||
std::string Packet;
|
std::string Packet;
|
||||||
int16 FreeSlotID=0;
|
int16 FreeSlotID=0;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(ItemID);
|
const EQEmu::ItemData* item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item){
|
if(!item){
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Bogus item deleted in Client::SendTraderItem!\n");
|
Log.Out(Logs::Detail, Logs::Trading, "Bogus item deleted in Client::SendTraderItem!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item, Quantity);
|
EQEmu::ItemInstance* inst = database.CreateItem(item, Quantity);
|
||||||
|
|
||||||
if (inst)
|
if (inst)
|
||||||
{
|
{
|
||||||
@ -1183,7 +1183,7 @@ void Client::SendTraderItem(uint32 ItemID, uint16 Quantity) {
|
|||||||
|
|
||||||
void Client::SendSingleTraderItem(uint32 CharID, int SerialNumber) {
|
void Client::SendSingleTraderItem(uint32 CharID, int SerialNumber) {
|
||||||
|
|
||||||
ItemInst* inst= database.LoadSingleTraderItem(CharID, SerialNumber);
|
EQEmu::ItemInstance* inst= database.LoadSingleTraderItem(CharID, SerialNumber);
|
||||||
if(inst) {
|
if(inst) {
|
||||||
SendItemPacket(30, inst, ItemPacketMerchant); // MainCursor?
|
SendItemPacket(30, inst, ItemPacketMerchant); // MainCursor?
|
||||||
safe_delete(inst);
|
safe_delete(inst);
|
||||||
@ -1192,7 +1192,7 @@ void Client::SendSingleTraderItem(uint32 CharID, int SerialNumber) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Client::BulkSendTraderInventory(uint32 char_id) {
|
void Client::BulkSendTraderInventory(uint32 char_id) {
|
||||||
const EQEmu::ItemBase *item;
|
const EQEmu::ItemData *item;
|
||||||
|
|
||||||
TraderCharges_Struct* TraderItems = database.LoadTraderItemWithCharges(char_id);
|
TraderCharges_Struct* TraderItems = database.LoadTraderItemWithCharges(char_id);
|
||||||
|
|
||||||
@ -1204,7 +1204,7 @@ void Client::BulkSendTraderInventory(uint32 char_id) {
|
|||||||
item=database.GetItem(TraderItems->ItemID[i]);
|
item=database.GetItem(TraderItems->ItemID[i]);
|
||||||
|
|
||||||
if (item && (item->NoDrop!=0)) {
|
if (item && (item->NoDrop!=0)) {
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
if (inst) {
|
if (inst) {
|
||||||
inst->SetSerialNumber(TraderItems->SerialNumber[i]);
|
inst->SetSerialNumber(TraderItems->SerialNumber[i]);
|
||||||
if(TraderItems->Charges[i] > 0)
|
if(TraderItems->Charges[i] > 0)
|
||||||
@ -1230,7 +1230,7 @@ void Client::BulkSendTraderInventory(uint32 char_id) {
|
|||||||
|
|
||||||
uint32 Client::FindTraderItemSerialNumber(int32 ItemID) {
|
uint32 Client::FindTraderItemSerialNumber(int32 ItemID) {
|
||||||
|
|
||||||
ItemInst* item = nullptr;
|
EQEmu::ItemInstance* item = nullptr;
|
||||||
uint16 SlotID = 0;
|
uint16 SlotID = 0;
|
||||||
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++){
|
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++){
|
||||||
item = this->GetInv().GetItem(i);
|
item = this->GetInv().GetItem(i);
|
||||||
@ -1251,9 +1251,9 @@ uint32 Client::FindTraderItemSerialNumber(int32 ItemID) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* Client::FindTraderItemBySerialNumber(int32 SerialNumber){
|
EQEmu::ItemInstance* Client::FindTraderItemBySerialNumber(int32 SerialNumber){
|
||||||
|
|
||||||
ItemInst* item = nullptr;
|
EQEmu::ItemInstance* item = nullptr;
|
||||||
uint16 SlotID = 0;
|
uint16 SlotID = 0;
|
||||||
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++){
|
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++){
|
||||||
item = this->GetInv().GetItem(i);
|
item = this->GetInv().GetItem(i);
|
||||||
@ -1277,7 +1277,7 @@ ItemInst* Client::FindTraderItemBySerialNumber(int32 SerialNumber){
|
|||||||
|
|
||||||
GetItems_Struct* Client::GetTraderItems(){
|
GetItems_Struct* Client::GetTraderItems(){
|
||||||
|
|
||||||
const ItemInst* item = nullptr;
|
const EQEmu::ItemInstance* item = nullptr;
|
||||||
uint16 SlotID = 0;
|
uint16 SlotID = 0;
|
||||||
|
|
||||||
auto gis = new GetItems_Struct;
|
auto gis = new GetItems_Struct;
|
||||||
@ -1308,7 +1308,7 @@ GetItems_Struct* Client::GetTraderItems(){
|
|||||||
|
|
||||||
uint16 Client::FindTraderItem(int32 SerialNumber, uint16 Quantity){
|
uint16 Client::FindTraderItem(int32 SerialNumber, uint16 Quantity){
|
||||||
|
|
||||||
const ItemInst* item= nullptr;
|
const EQEmu::ItemInstance* item= nullptr;
|
||||||
uint16 SlotID = 0;
|
uint16 SlotID = 0;
|
||||||
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++) {
|
for (int i = EQEmu::legacy::GENERAL_BEGIN; i <= EQEmu::legacy::GENERAL_END; i++) {
|
||||||
item = this->GetInv().GetItem(i);
|
item = this->GetInv().GetItem(i);
|
||||||
@ -1370,7 +1370,7 @@ void Client::NukeTraderItem(uint16 Slot,int16 Charges,uint16 Quantity,Client* Cu
|
|||||||
}
|
}
|
||||||
// This updates the trader. Removes it from his trading bags.
|
// This updates the trader. Removes it from his trading bags.
|
||||||
//
|
//
|
||||||
const ItemInst* Inst = m_inv[Slot];
|
const EQEmu::ItemInstance* Inst = m_inv[Slot];
|
||||||
|
|
||||||
database.SaveInventory(CharacterID(), Inst, Slot);
|
database.SaveInventory(CharacterID(), Inst, Slot);
|
||||||
|
|
||||||
@ -1412,7 +1412,7 @@ void Client::TraderUpdate(uint16 SlotID,uint32 TraderID){
|
|||||||
|
|
||||||
void Client::FindAndNukeTraderItem(int32 SerialNumber, uint16 Quantity, Client* Customer, uint16 TraderSlot){
|
void Client::FindAndNukeTraderItem(int32 SerialNumber, uint16 Quantity, Client* Customer, uint16 TraderSlot){
|
||||||
|
|
||||||
const ItemInst* item= nullptr;
|
const EQEmu::ItemInstance* item= nullptr;
|
||||||
bool Stackable = false;
|
bool Stackable = false;
|
||||||
int16 Charges=0;
|
int16 Charges=0;
|
||||||
|
|
||||||
@ -1564,7 +1564,7 @@ void Client::BuyTraderItem(TraderBuy_Struct* tbs, Client* Trader, const EQApplic
|
|||||||
|
|
||||||
outtbs->ItemID = tbs->ItemID;
|
outtbs->ItemID = tbs->ItemID;
|
||||||
|
|
||||||
const ItemInst* BuyItem = nullptr;
|
const EQEmu::ItemInstance* BuyItem = nullptr;
|
||||||
uint32 ItemID = 0;
|
uint32 ItemID = 0;
|
||||||
|
|
||||||
if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF)
|
if (ClientVersion() >= EQEmu::versions::ClientVersion::RoF)
|
||||||
@ -2027,11 +2027,11 @@ static void UpdateTraderCustomerItemsAdded(uint32 CustomerID, TraderCharges_Stru
|
|||||||
|
|
||||||
if(!Customer) return;
|
if(!Customer) return;
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item) return;
|
if(!item) return;
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
|
|
||||||
if(!inst) return;
|
if(!inst) return;
|
||||||
|
|
||||||
@ -2071,7 +2071,7 @@ static void UpdateTraderCustomerPriceChanged(uint32 CustomerID, TraderCharges_St
|
|||||||
|
|
||||||
if(!Customer) return;
|
if(!Customer) return;
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item) return;
|
if(!item) return;
|
||||||
|
|
||||||
@ -2112,7 +2112,7 @@ static void UpdateTraderCustomerPriceChanged(uint32 CustomerID, TraderCharges_St
|
|||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Sending price updates to customer %s", Customer->GetName());
|
Log.Out(Logs::Detail, Logs::Trading, "Sending price updates to customer %s", Customer->GetName());
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
|
|
||||||
if(!inst) return;
|
if(!inst) return;
|
||||||
|
|
||||||
@ -2230,7 +2230,7 @@ void Client::HandleTraderPriceUpdate(const EQApplicationPacket *app) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = 0;
|
const EQEmu::ItemData *item = 0;
|
||||||
|
|
||||||
if(IDOfItemToAdd)
|
if(IDOfItemToAdd)
|
||||||
item = database.GetItem(IDOfItemToAdd);
|
item = database.GetItem(IDOfItemToAdd);
|
||||||
@ -2396,7 +2396,7 @@ void Client::SendBuyerResults(char* searchString, uint32 searchID) {
|
|||||||
|
|
||||||
char *buf = (char *)outapp->pBuffer;
|
char *buf = (char *)outapp->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(itemID);
|
const EQEmu::ItemData* item = database.GetItem(itemID);
|
||||||
|
|
||||||
if(!item) {
|
if(!item) {
|
||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
@ -2492,7 +2492,7 @@ void Client::ShowBuyLines(const EQApplicationPacket *app) {
|
|||||||
|
|
||||||
char *Buf = (char *)outapp->pBuffer;
|
char *Buf = (char *)outapp->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = database.GetItem(ItemID);
|
const EQEmu::ItemData* item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item) {
|
if(!item) {
|
||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
@ -2536,7 +2536,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) {
|
|||||||
/*uint32 BuyerID2 =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused
|
/*uint32 BuyerID2 =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused
|
||||||
/*uint32 Unknown3 =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused
|
/*uint32 Unknown3 =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item || !Quantity || !Price || !QtyBuyerWants) return;
|
if(!item || !Quantity || !Price || !QtyBuyerWants) return;
|
||||||
|
|
||||||
@ -2602,7 +2602,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* ItemToTransfer = m_inv.PopItem(SellerSlot);
|
EQEmu::ItemInstance* ItemToTransfer = m_inv.PopItem(SellerSlot);
|
||||||
|
|
||||||
if(!ItemToTransfer || !Buyer->MoveItemToInventory(ItemToTransfer, true)) {
|
if(!ItemToTransfer || !Buyer->MoveItemToInventory(ItemToTransfer, true)) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Unexpected error while moving item from seller to buyer.");
|
Log.Out(Logs::General, Logs::Error, "Unexpected error while moving item from seller to buyer.");
|
||||||
@ -2648,7 +2648,7 @@ void Client::SellToBuyer(const EQApplicationPacket *app) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* ItemToTransfer = m_inv.PopItem(SellerSlot);
|
EQEmu::ItemInstance* ItemToTransfer = m_inv.PopItem(SellerSlot);
|
||||||
|
|
||||||
if(!ItemToTransfer) {
|
if(!ItemToTransfer) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Unexpected error while moving item from seller to buyer.");
|
Log.Out(Logs::General, Logs::Error, "Unexpected error while moving item from seller to buyer.");
|
||||||
@ -2927,7 +2927,7 @@ void Client::UpdateBuyLine(const EQApplicationPacket *app) {
|
|||||||
/*uint32 UnknownZ =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused
|
/*uint32 UnknownZ =*/ VARSTRUCT_SKIP_TYPE(uint32, Buf); //unused
|
||||||
uint32 ItemCount = VARSTRUCT_DECODE_TYPE(uint32, Buf);
|
uint32 ItemCount = VARSTRUCT_DECODE_TYPE(uint32, Buf);
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item) return;
|
if(!item) return;
|
||||||
|
|
||||||
@ -2991,7 +2991,7 @@ void Client::BuyerItemSearch(const EQApplicationPacket *app) {
|
|||||||
|
|
||||||
BuyerItemSearchResults_Struct* bisr = (BuyerItemSearchResults_Struct*)outapp->pBuffer;
|
BuyerItemSearchResults_Struct* bisr = (BuyerItemSearchResults_Struct*)outapp->pBuffer;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item = 0;
|
const EQEmu::ItemData* item = 0;
|
||||||
|
|
||||||
int Count=0;
|
int Count=0;
|
||||||
|
|
||||||
|
|||||||
@ -161,7 +161,7 @@ void Client::DoTributeUpdate() {
|
|||||||
uint32 item_id = tier.tribute_item_id;
|
uint32 item_id = tier.tribute_item_id;
|
||||||
|
|
||||||
//summon the item for them
|
//summon the item for them
|
||||||
const ItemInst* inst = database.CreateItem(item_id, 1);
|
const EQEmu::ItemInstance* inst = database.CreateItem(item_id, 1);
|
||||||
if(inst == nullptr)
|
if(inst == nullptr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -239,7 +239,7 @@ void Client::SendTributeDetails(uint32 client_id, uint32 tribute_id) {
|
|||||||
|
|
||||||
//returns the number of points received from the tribute
|
//returns the number of points received from the tribute
|
||||||
int32 Client::TributeItem(uint32 slot, uint32 quantity) {
|
int32 Client::TributeItem(uint32 slot, uint32 quantity) {
|
||||||
const ItemInst*inst = m_inv[slot];
|
const EQEmu::ItemInstance*inst = m_inv[slot];
|
||||||
|
|
||||||
if(inst == nullptr)
|
if(inst == nullptr)
|
||||||
return(0);
|
return(0);
|
||||||
|
|||||||
@ -587,7 +587,7 @@ int32 Client::GetMeleeDamage(Mob* other, bool GetMinDamage)
|
|||||||
if (!other)
|
if (!other)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ItemInst* weapon;
|
EQEmu::ItemInstance* weapon;
|
||||||
weapon = GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
weapon = GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
|
|
||||||
if(weapon != nullptr) {
|
if(weapon != nullptr) {
|
||||||
@ -630,7 +630,7 @@ int32 Client::GetMeleeDamage(Mob* other, bool GetMinDamage)
|
|||||||
|
|
||||||
if (Hand == EQEmu::legacy::SlotPrimary && GetLevel() >= 28 && IsWarriorClass())
|
if (Hand == EQEmu::legacy::SlotPrimary && GetLevel() >= 28 && IsWarriorClass())
|
||||||
{
|
{
|
||||||
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemBase*) nullptr);
|
ucDamageBonus = GetWeaponDamageBonus(weapon ? weapon->GetItem() : (const EQEmu::ItemData*) nullptr);
|
||||||
|
|
||||||
min_hit += (int) ucDamageBonus;
|
min_hit += (int) ucDamageBonus;
|
||||||
max_hit += (int) ucDamageBonus;
|
max_hit += (int) ucDamageBonus;
|
||||||
@ -661,7 +661,7 @@ void Mob::Tune_FindAccuaryByHitChance(Mob* defender, Mob *attacker, float hit_ch
|
|||||||
EQEmu::skills::SkillType skillinuse = EQEmu::skills::SkillHandtoHand;
|
EQEmu::skills::SkillType skillinuse = EQEmu::skills::SkillHandtoHand;
|
||||||
if (attacker->IsClient())
|
if (attacker->IsClient())
|
||||||
{//Will check first equiped weapon for skill. Ie. remove wepaons to assess bow.
|
{//Will check first equiped weapon for skill. Ie. remove wepaons to assess bow.
|
||||||
ItemInst* weapon;
|
EQEmu::ItemInstance* weapon;
|
||||||
weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
|
|
||||||
if(weapon && weapon->IsWeapon()){
|
if(weapon && weapon->IsWeapon()){
|
||||||
@ -741,7 +741,7 @@ void Mob::Tune_FindAvoidanceByHitChance(Mob* defender, Mob *attacker, float hit_
|
|||||||
EQEmu::skills::SkillType skillinuse = EQEmu::skills::SkillHandtoHand;
|
EQEmu::skills::SkillType skillinuse = EQEmu::skills::SkillHandtoHand;
|
||||||
if (attacker->IsClient())
|
if (attacker->IsClient())
|
||||||
{//Will check first equiped weapon for skill. Ie. remove wepaons to assess bow.
|
{//Will check first equiped weapon for skill. Ie. remove wepaons to assess bow.
|
||||||
ItemInst* weapon;
|
EQEmu::ItemInstance* weapon;
|
||||||
weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
weapon = attacker->CastToClient()->GetInv().GetItem(EQEmu::legacy::SlotPrimary);
|
||||||
|
|
||||||
if(weapon && weapon->IsWeapon()){
|
if(weapon && weapon->IsWeapon()){
|
||||||
|
|||||||
@ -248,12 +248,12 @@ bool Zone::LoadZoneObjects()
|
|||||||
data.tilt_y = atof(row[18]);
|
data.tilt_y = atof(row[18]);
|
||||||
data.unknown084 = 0;
|
data.unknown084 = 0;
|
||||||
|
|
||||||
ItemInst *inst = nullptr;
|
EQEmu::ItemInstance *inst = nullptr;
|
||||||
// FatherNitwit: this dosent seem to work...
|
// FatherNitwit: this dosent seem to work...
|
||||||
// tradeskill containers do not have an itemid of 0... at least what I am seeing
|
// tradeskill containers do not have an itemid of 0... at least what I am seeing
|
||||||
if (itemid == 0) {
|
if (itemid == 0) {
|
||||||
// Generic tradeskill container
|
// Generic tradeskill container
|
||||||
inst = new ItemInst(ItemInstWorldContainer);
|
inst = new EQEmu::ItemInstance(ItemInstWorldContainer);
|
||||||
} else {
|
} else {
|
||||||
// Groundspawn object
|
// Groundspawn object
|
||||||
inst = database.CreateItem(itemid);
|
inst = database.CreateItem(itemid);
|
||||||
@ -261,7 +261,7 @@ bool Zone::LoadZoneObjects()
|
|||||||
|
|
||||||
// Father Nitwit's fix... not perfect...
|
// Father Nitwit's fix... not perfect...
|
||||||
if (inst == nullptr && type != OT_DROPPEDITEM) {
|
if (inst == nullptr && type != OT_DROPPEDITEM) {
|
||||||
inst = new ItemInst(ItemInstWorldContainer);
|
inst = new EQEmu::ItemInstance(ItemInstWorldContainer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load child objects if container
|
// Load child objects if container
|
||||||
@ -294,7 +294,7 @@ bool Zone::LoadGroundSpawns() {
|
|||||||
uint32 gsnumber=0;
|
uint32 gsnumber=0;
|
||||||
for(gsindex=0;gsindex<50;gsindex++){
|
for(gsindex=0;gsindex<50;gsindex++){
|
||||||
if(groundspawn.spawn[gsindex].item>0 && groundspawn.spawn[gsindex].item<SAYLINK_ITEM_ID){
|
if(groundspawn.spawn[gsindex].item>0 && groundspawn.spawn[gsindex].item<SAYLINK_ITEM_ID){
|
||||||
ItemInst* inst = nullptr;
|
EQEmu::ItemInstance* inst = nullptr;
|
||||||
inst = database.CreateItem(groundspawn.spawn[gsindex].item);
|
inst = database.CreateItem(groundspawn.spawn[gsindex].item);
|
||||||
gsnumber=groundspawn.spawn[gsindex].max_allowed;
|
gsnumber=groundspawn.spawn[gsindex].max_allowed;
|
||||||
ix=0;
|
ix=0;
|
||||||
|
|||||||
@ -468,7 +468,7 @@ void ZoneDatabase::GetEventLogs(const char* name,char* target,uint32 account_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load child objects for a world container (i.e., forge, bag dropped to ground, etc)
|
// Load child objects for a world container (i.e., forge, bag dropped to ground, etc)
|
||||||
void ZoneDatabase::LoadWorldContainer(uint32 parentid, ItemInst* container)
|
void ZoneDatabase::LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* container)
|
||||||
{
|
{
|
||||||
if (!container) {
|
if (!container) {
|
||||||
Log.Out(Logs::General, Logs::Error, "Programming error: LoadWorldContainer passed nullptr pointer");
|
Log.Out(Logs::General, Logs::Error, "Programming error: LoadWorldContainer passed nullptr pointer");
|
||||||
@ -495,7 +495,7 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, ItemInst* container)
|
|||||||
aug[4] = (uint32)atoi(row[7]);
|
aug[4] = (uint32)atoi(row[7]);
|
||||||
aug[5] = (uint32)atoi(row[8]);
|
aug[5] = (uint32)atoi(row[8]);
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item_id, charges);
|
EQEmu::ItemInstance* inst = database.CreateItem(item_id, charges);
|
||||||
if (inst && inst->GetItem()->IsClassCommon()) {
|
if (inst && inst->GetItem()->IsClassCommon()) {
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++)
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++)
|
||||||
if (aug[i])
|
if (aug[i])
|
||||||
@ -509,7 +509,7 @@ void ZoneDatabase::LoadWorldContainer(uint32 parentid, ItemInst* container)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Save child objects for a world container (i.e., forge, bag dropped to ground, etc)
|
// Save child objects for a world container (i.e., forge, bag dropped to ground, etc)
|
||||||
void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const ItemInst* container)
|
void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQEmu::ItemInstance* container)
|
||||||
{
|
{
|
||||||
// Since state is not saved for each world container action, we'll just delete
|
// Since state is not saved for each world container action, we'll just delete
|
||||||
// all and save from scratch .. we may come back later to optimize
|
// all and save from scratch .. we may come back later to optimize
|
||||||
@ -522,7 +522,7 @@ void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const It
|
|||||||
// Save all 10 items, if they exist
|
// Save all 10 items, if they exist
|
||||||
for (uint8 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; index++) {
|
for (uint8 index = SUB_INDEX_BEGIN; index < EQEmu::legacy::ITEM_CONTAINER_SIZE; index++) {
|
||||||
|
|
||||||
ItemInst* inst = container->GetItem(index);
|
EQEmu::ItemInstance* inst = container->GetItem(index);
|
||||||
if (!inst)
|
if (!inst)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -531,7 +531,7 @@ void ZoneDatabase::SaveWorldContainer(uint32 zone_id, uint32 parent_id, const It
|
|||||||
|
|
||||||
if (inst->IsType(EQEmu::item::ItemClassCommon)) {
|
if (inst->IsType(EQEmu::item::ItemClassCommon)) {
|
||||||
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
for (int i = AUG_INDEX_BEGIN; i < EQEmu::legacy::ITEM_COMMON_SIZE; i++) {
|
||||||
ItemInst *auginst=inst->GetAugment(i);
|
EQEmu::ItemInstance *auginst=inst->GetAugment(i);
|
||||||
augslot[i]=(auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0;
|
augslot[i]=(auginst && auginst->GetItem()) ? auginst->GetItem()->ID : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -611,7 +611,7 @@ TraderCharges_Struct* ZoneDatabase::LoadTraderItemWithCharges(uint32 char_id)
|
|||||||
return loadti;
|
return loadti;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemInst* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int SerialNumber) {
|
EQEmu::ItemInstance* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int SerialNumber) {
|
||||||
std::string query = StringFormat("SELECT * FROM trader WHERE char_id = %i AND serialnumber = %i "
|
std::string query = StringFormat("SELECT * FROM trader WHERE char_id = %i AND serialnumber = %i "
|
||||||
"ORDER BY slot_id LIMIT 80", CharID, SerialNumber);
|
"ORDER BY slot_id LIMIT 80", CharID, SerialNumber);
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
@ -629,7 +629,7 @@ ItemInst* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int SerialNumber) {
|
|||||||
int Charges = atoi(row[3]);
|
int Charges = atoi(row[3]);
|
||||||
int Cost = atoi(row[4]);
|
int Cost = atoi(row[4]);
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item) {
|
if(!item) {
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Unable to create item\n");
|
Log.Out(Logs::Detail, Logs::Trading, "Unable to create item\n");
|
||||||
@ -640,7 +640,7 @@ ItemInst* ZoneDatabase::LoadSingleTraderItem(uint32 CharID, int SerialNumber) {
|
|||||||
if (item->NoDrop == 0)
|
if (item->NoDrop == 0)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
ItemInst* inst = database.CreateItem(item);
|
EQEmu::ItemInstance* inst = database.CreateItem(item);
|
||||||
if(!inst) {
|
if(!inst) {
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "Unable to create item instance\n");
|
Log.Out(Logs::Detail, Logs::Trading, "Unable to create item instance\n");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
@ -684,7 +684,7 @@ void ZoneDatabase::UpdateTraderItemPrice(int CharID, uint32 ItemID, uint32 Charg
|
|||||||
|
|
||||||
Log.Out(Logs::Detail, Logs::Trading, "ZoneDatabase::UpdateTraderPrice(%i, %i, %i, %i)", CharID, ItemID, Charges, NewPrice);
|
Log.Out(Logs::Detail, Logs::Trading, "ZoneDatabase::UpdateTraderPrice(%i, %i, %i, %i)", CharID, ItemID, Charges, NewPrice);
|
||||||
|
|
||||||
const EQEmu::ItemBase *item = database.GetItem(ItemID);
|
const EQEmu::ItemData *item = database.GetItem(ItemID);
|
||||||
|
|
||||||
if(!item)
|
if(!item)
|
||||||
return;
|
return;
|
||||||
@ -1197,7 +1197,7 @@ bool ZoneDatabase::LoadCharacterBandolier(uint32 character_id, PlayerProfile_Str
|
|||||||
i = atoi(row[r]); /* Bandolier ID */ r++;
|
i = atoi(row[r]); /* Bandolier ID */ r++;
|
||||||
si = atoi(row[r]); /* Bandolier Slot */ r++;
|
si = atoi(row[r]); /* Bandolier Slot */ r++;
|
||||||
|
|
||||||
const EQEmu::ItemBase* item_data = database.GetItem(atoi(row[r]));
|
const EQEmu::ItemData* item_data = database.GetItem(atoi(row[r]));
|
||||||
if (item_data) {
|
if (item_data) {
|
||||||
pp->bandoliers[i].Items[si].ID = item_data->ID; r++;
|
pp->bandoliers[i].Items[si].ID = item_data->ID; r++;
|
||||||
pp->bandoliers[i].Items[si].Icon = atoi(row[r]); r++; // Must use db value in case an Ornamentation is assigned
|
pp->bandoliers[i].Items[si].Icon = atoi(row[r]); r++; // Must use db value in case an Ornamentation is assigned
|
||||||
@ -1249,7 +1249,7 @@ bool ZoneDatabase::LoadCharacterPotions(uint32 character_id, PlayerProfile_Struc
|
|||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
i = atoi(row[0]);
|
i = atoi(row[0]);
|
||||||
const EQEmu::ItemBase *item_data = database.GetItem(atoi(row[1]));
|
const EQEmu::ItemData *item_data = database.GetItem(atoi(row[1]));
|
||||||
if (!item_data)
|
if (!item_data)
|
||||||
continue;
|
continue;
|
||||||
pp->potionbelt.Items[i].ID = item_data->ID;
|
pp->potionbelt.Items[i].ID = item_data->ID;
|
||||||
|
|||||||
@ -16,7 +16,6 @@ class NPC;
|
|||||||
class Petition;
|
class Petition;
|
||||||
class Spawn2;
|
class Spawn2;
|
||||||
class SpawnGroupList;
|
class SpawnGroupList;
|
||||||
class ItemInst;
|
|
||||||
struct CharacterEventLog_Struct;
|
struct CharacterEventLog_Struct;
|
||||||
struct Door;
|
struct Door;
|
||||||
struct ExtendedProfile_Struct;
|
struct ExtendedProfile_Struct;
|
||||||
@ -24,6 +23,12 @@ struct NPCType;
|
|||||||
struct PlayerCorpse_Struct;
|
struct PlayerCorpse_Struct;
|
||||||
struct ZonePoint;
|
struct ZonePoint;
|
||||||
struct npcDecayTimes_Struct;
|
struct npcDecayTimes_Struct;
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
class ItemInstance;
|
||||||
|
}
|
||||||
|
|
||||||
template <class TYPE> class LinkedList;
|
template <class TYPE> class LinkedList;
|
||||||
|
|
||||||
//#include "doors.h"
|
//#include "doors.h"
|
||||||
@ -224,11 +229,11 @@ public:
|
|||||||
virtual ~ZoneDatabase();
|
virtual ~ZoneDatabase();
|
||||||
|
|
||||||
/* Objects and World Containers */
|
/* Objects and World Containers */
|
||||||
void LoadWorldContainer(uint32 parentid, ItemInst* container);
|
void LoadWorldContainer(uint32 parentid, EQEmu::ItemInstance* container);
|
||||||
void SaveWorldContainer(uint32 zone_id, uint32 parent_id, const ItemInst* container);
|
void SaveWorldContainer(uint32 zone_id, uint32 parent_id, const EQEmu::ItemInstance* container);
|
||||||
void DeleteWorldContainer(uint32 parent_id,uint32 zone_id);
|
void DeleteWorldContainer(uint32 parent_id,uint32 zone_id);
|
||||||
uint32 AddObject(uint32 type, uint32 icon, const Object_Struct& object, const ItemInst* inst);
|
uint32 AddObject(uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst);
|
||||||
void UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const ItemInst* inst);
|
void UpdateObject(uint32 id, uint32 type, uint32 icon, const Object_Struct& object, const EQEmu::ItemInstance* inst);
|
||||||
void DeleteObject(uint32 id);
|
void DeleteObject(uint32 id);
|
||||||
Ground_Spawns* LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs);
|
Ground_Spawns* LoadGroundSpawns(uint32 zone_id, int16 version, Ground_Spawns* gs);
|
||||||
|
|
||||||
@ -239,7 +244,7 @@ public:
|
|||||||
void DeleteTraderItem(uint32 char_id);
|
void DeleteTraderItem(uint32 char_id);
|
||||||
void DeleteTraderItem(uint32 char_id,uint16 slot_id);
|
void DeleteTraderItem(uint32 char_id,uint16 slot_id);
|
||||||
|
|
||||||
ItemInst* LoadSingleTraderItem(uint32 char_id, int uniqueid);
|
EQEmu::ItemInstance* LoadSingleTraderItem(uint32 char_id, int uniqueid);
|
||||||
Trader_Struct* LoadTraderItem(uint32 char_id);
|
Trader_Struct* LoadTraderItem(uint32 char_id);
|
||||||
TraderCharges_Struct* LoadTraderItemWithCharges(uint32 char_id);
|
TraderCharges_Struct* LoadTraderItemWithCharges(uint32 char_id);
|
||||||
|
|
||||||
@ -427,7 +432,7 @@ public:
|
|||||||
void DeleteMerchantTemp(uint32 npcid, uint32 slot);
|
void DeleteMerchantTemp(uint32 npcid, uint32 slot);
|
||||||
|
|
||||||
/* Tradeskills */
|
/* Tradeskills */
|
||||||
bool GetTradeRecipe(const ItemInst* container, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec);
|
bool GetTradeRecipe(const EQEmu::ItemInstance* container, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec);
|
||||||
bool GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec);
|
bool GetTradeRecipe(uint32 recipe_id, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec);
|
||||||
uint32 GetZoneForage(uint32 ZoneID, uint8 skill); /* for foraging */
|
uint32 GetZoneForage(uint32 ZoneID, uint8 skill); /* for foraging */
|
||||||
uint32 GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, uint8 &npc_chance);
|
uint32 GetZoneFishing(uint32 ZoneID, uint8 skill, uint32 &npc_id, uint8 &npc_chance);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user