mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-06 04:42:28 +00:00
Initial commit of a mostly working ornament implementation
This commit is contained in:
parent
451d422b8a
commit
6d2eb6d03f
@ -392,6 +392,35 @@ void ItemInst::PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ItemInst::HasOrnamentation() const
|
||||||
|
{
|
||||||
|
const ItemInst *item;
|
||||||
|
for (int i = 0; i < MAX_AUGMENT_SLOTS; ++i)
|
||||||
|
{
|
||||||
|
uint32 id = 0;
|
||||||
|
if ((item = GetItem(i)) != nullptr)
|
||||||
|
{
|
||||||
|
if (item->GetItem()->AugType == 524288)return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemInst* ItemInst::GetOrnamentation() const
|
||||||
|
{
|
||||||
|
if (m_item->ItemClass == ItemClassCommon)
|
||||||
|
{
|
||||||
|
ItemInst *item;
|
||||||
|
for (int i = 0; i < MAX_AUGMENT_SLOTS; ++i)
|
||||||
|
{
|
||||||
|
|
||||||
|
uint32 id = 0;
|
||||||
|
if ((item = GetItem(i)) != nullptr && item->GetItem()->AugType == 524288) return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// Retrieve item inside container
|
// Retrieve item inside container
|
||||||
ItemInst* ItemInst::GetItem(uint8 index) const
|
ItemInst* ItemInst::GetItem(uint8 index) const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -303,7 +303,8 @@ public:
|
|||||||
bool AvailableWearSlot(uint32 aug_wear_slots) const;
|
bool AvailableWearSlot(uint32 aug_wear_slots) const;
|
||||||
int8 AvailableAugmentSlot(int32 augtype) const;
|
int8 AvailableAugmentSlot(int32 augtype) const;
|
||||||
inline int32 GetAugmentType() const { return m_item->AugType; }
|
inline int32 GetAugmentType() const { return m_item->AugType; }
|
||||||
|
bool HasOrnamentation() const;
|
||||||
|
ItemInst* GetOrnamentation() const;
|
||||||
inline bool IsExpendable() const { return ((m_item->Click.Type == ET_Expendable ) || (m_item->ItemType == ItemTypePotion)); }
|
inline bool IsExpendable() const { return ((m_item->Click.Type == ET_Expendable ) || (m_item->ItemType == ItemTypePotion)); }
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@ -4926,13 +4926,27 @@ char* SerializeItem(const ItemInst *inst, int16 slot_id_in, uint32 *length, uint
|
|||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(item->IDFile) > 0)
|
// Moofta: if the item has an aug of type 20 (ornamentation) then we use the ID file of that when serializing.
|
||||||
|
// the only thing we should probably worry about is generating a wear change packet to all cl;ients in zone if someone adds a type 20 aug.
|
||||||
|
if (inst && inst->HasOrnamentation()) //instance is not null and does have an ornament aug (slot 20)
|
||||||
|
{
|
||||||
|
ItemInst* ornamentation = inst->GetOrnamentation();
|
||||||
|
if (ornamentation) //paranoid!
|
||||||
|
{
|
||||||
|
ss.write(ornamentation->GetItem()->IDFile, strlen(ornamentation->GetItem()->IDFile));
|
||||||
|
}
|
||||||
|
else if (strlen(item->IDFile) > 0)
|
||||||
{
|
{
|
||||||
ss.write(item->IDFile, strlen(item->IDFile));
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
else
|
else //original code although I shortened it
|
||||||
{
|
{
|
||||||
|
if (strlen(item->IDFile) > 0)
|
||||||
|
{
|
||||||
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3119,13 +3119,27 @@ char* SerializeItem(const ItemInst *inst, int16 slot_id_in, uint32 *length, uint
|
|||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(item->IDFile) > 0)
|
// Moofta: if the item has an aug of type 20 (ornamentation) then we use the ID file of that when serializing.
|
||||||
|
// the only thing we should probably worry about is generating a wear change packet to all cl;ients in zone if someone adds a type 20 aug.
|
||||||
|
if (inst && inst->HasOrnamentation()) //instance is not null and does have an ornament aug (slot 20)
|
||||||
|
{
|
||||||
|
ItemInst* ornamentation = inst->GetOrnamentation();
|
||||||
|
if (ornamentation) //paranoid!
|
||||||
|
{
|
||||||
|
ss.write(ornamentation->GetItem()->IDFile, strlen(ornamentation->GetItem()->IDFile));
|
||||||
|
}
|
||||||
|
else if (strlen(item->IDFile) > 0)
|
||||||
{
|
{
|
||||||
ss.write(item->IDFile, strlen(item->IDFile));
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
else
|
else //original code although I shortened it
|
||||||
{
|
{
|
||||||
|
if (strlen(item->IDFile) > 0)
|
||||||
|
{
|
||||||
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2437,13 +2437,27 @@ char* SerializeItem(const ItemInst *inst, int16 slot_id_in, uint32 *length, uint
|
|||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(item->IDFile) > 0)
|
// Moofta: if the item has an aug of type 20/524288 (ornamentation) then we use the ID file of that when serializing.
|
||||||
|
// the only thing we should probably worry about is generating a wear change packet to all cl;ients in zone if someone adds a type 20 aug.
|
||||||
|
if (inst && inst->HasOrnamentation()) //instance is not null and does have an ornament aug (slot 20)
|
||||||
|
{
|
||||||
|
ItemInst* ornamentation = inst->GetOrnamentation();
|
||||||
|
if (ornamentation) //paranoid!
|
||||||
|
{
|
||||||
|
ss.write(ornamentation->GetItem()->IDFile, strlen(ornamentation->GetItem()->IDFile));
|
||||||
|
}
|
||||||
|
else if (strlen(item->IDFile) > 0)
|
||||||
{
|
{
|
||||||
ss.write(item->IDFile, strlen(item->IDFile));
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
else
|
else //original code although I shortened it
|
||||||
{
|
{
|
||||||
|
if (strlen(item->IDFile) > 0)
|
||||||
|
{
|
||||||
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3530,13 +3530,27 @@ char* SerializeItem(const ItemInst *inst, int16 slot_id_in, uint32 *length, uint
|
|||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(item->IDFile) > 0)
|
// Moofta: if the item has an aug of type 20 (ornamentation) then we use the ID file of that when serializing.
|
||||||
|
// the only thing we should probably worry about is generating a wear change packet to all cl;ients in zone if someone adds a type 20 aug.
|
||||||
|
if (inst && inst->HasOrnamentation()) //instance is not null and does have an ornament aug (slot 20)
|
||||||
|
{
|
||||||
|
ItemInst* ornamentation = inst->GetOrnamentation();
|
||||||
|
if (ornamentation) //paranoid!
|
||||||
|
{
|
||||||
|
ss.write(ornamentation->GetItem()->IDFile, strlen(ornamentation->GetItem()->IDFile));
|
||||||
|
}
|
||||||
|
else if (strlen(item->IDFile) > 0)
|
||||||
{
|
{
|
||||||
ss.write(item->IDFile, strlen(item->IDFile));
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
else
|
else //original code although I shortened it
|
||||||
{
|
{
|
||||||
|
if (strlen(item->IDFile) > 0)
|
||||||
|
{
|
||||||
|
ss.write(item->IDFile, strlen(item->IDFile));
|
||||||
|
}
|
||||||
ss.write((const char*)&null_term, sizeof(uint8));
|
ss.write((const char*)&null_term, sizeof(uint8));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -197,14 +197,26 @@ void WorldDatabase::GetCharSelectInfo(uint32 account_id, CharacterSelect_Struct*
|
|||||||
cs->cs_colors[char_num][material].color = color;
|
cs->cs_colors[char_num][material].color = color;
|
||||||
|
|
||||||
// the weapons are kept elsewhere
|
// the weapons are kept elsewhere
|
||||||
if ((material==MaterialPrimary) || (material==MaterialSecondary))
|
if ((material == MaterialPrimary) || (material == MaterialSecondary))
|
||||||
{
|
{
|
||||||
if(strlen(item->GetItem()->IDFile) > 2) {
|
if (strlen(item->GetItem()->IDFile) > 2) {
|
||||||
uint32 idfile=atoi(&item->GetItem()->IDFile[2]);
|
uint32 idfile = 0;
|
||||||
if (material==MaterialPrimary)
|
if (item->HasOrnamentation())
|
||||||
cs->primary[char_num]=idfile;
|
{
|
||||||
|
ItemInst* ornament = item->GetOrnamentation();
|
||||||
|
if (strlen(ornament->GetItem()->IDFile) > 2)
|
||||||
|
{
|
||||||
|
idfile = atoi(&ornament->GetItem()->IDFile[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
cs->secondary[char_num]=idfile;
|
{
|
||||||
|
idfile = atoi(&item->GetItem()->IDFile[2]);
|
||||||
|
}
|
||||||
|
if (material == MaterialPrimary)
|
||||||
|
cs->primary[char_num] = idfile;
|
||||||
|
else
|
||||||
|
cs->secondary[char_num] = idfile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user