Tweak for Titanium::SerializeItem() rework

This commit is contained in:
Uleat 2016-05-08 23:43:47 -04:00
parent 1a1f5ae619
commit 59728c5115

View File

@ -2080,192 +2080,284 @@ namespace Titanium
std::string SerializeItem(const ItemInst *inst, int16 slot_id_in, uint8 depth) std::string SerializeItem(const ItemInst *inst, int16 slot_id_in, uint8 depth)
{ {
std::string serialization; std::string serialization;
std::string instance; const char* protection = "\\\\\\\\\\";
std::string protection = "\\\\\\\\\\";
const Item_Struct* item = inst->GetUnscaledItem(); const Item_Struct* item = inst->GetUnscaledItem();
instance = StringFormat("%i|", (inst->IsStackable() ? inst->GetCharges() : 0)); // stack count serialization = StringFormat("%.*s%s", (depth ? (depth - 1) : 0), protection, (depth ? "\"" : "")); // For leading quotes (and protection) if a subitem;
instance.append("0|"); // unknown
instance.append(StringFormat("%i|", (!inst->GetMerchantSlot() ? slot_id_in : inst->GetMerchantSlot()))); // inst slot/merchant slot
instance.append(StringFormat("%i|", inst->GetPrice())); // merchant price
instance.append(StringFormat("%i|", (!inst->GetMerchantSlot() ? 1 : inst->GetMerchantCount()))); // inst count/merchant count
instance.append(StringFormat("%i|", (inst->IsScaling() ? (inst->GetExp() / 100) : 0))); // inst experience
instance.append(StringFormat("%i|", (!inst->GetMerchantSlot() ? inst->GetSerialNumber() : inst->GetMerchantSlot()))); // merchant serial number
instance.append(StringFormat("%i|", inst->GetRecastTimestamp())); // recast timestamp
instance.append(StringFormat("%i|", ((inst->IsStackable() ? ((inst->GetItem()->ItemType == ItemTypePotion) ? 1 : 0) : inst->GetCharges())))); // charge count
instance.append(StringFormat("%i|", (inst->IsAttuned() ? 1 : 0))); // inst attuned
instance.append("0|"); // unknown
serialization = StringFormat("%.*s%s", (depth ? (depth - 1) : 0), protection.c_str(), (depth ? "\"" : "")); // For leading quotes (and protection) if a subitem; // Instance data
serialization.append(StringFormat("%s", instance.c_str())); // Instance data serialization.append(
serialization.append(StringFormat("%.*s\"", depth, protection.c_str())); // Quotes (and protection, if needed) around static data StringFormat(
"%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|",
(inst->IsStackable() ? inst->GetCharges() : 0), // stack count
0, // unknown
(!inst->GetMerchantSlot() ? slot_id_in : inst->GetMerchantSlot()), // inst slot/merchant slot
inst->GetPrice(), // merchant price
(!inst->GetMerchantSlot() ? 1 : inst->GetMerchantCount()), // inst count/merchant count
(inst->IsScaling() ? (inst->GetExp() / 100) : 0), // inst experience
(!inst->GetMerchantSlot() ? inst->GetSerialNumber() : inst->GetMerchantSlot()), // merchant serial number
inst->GetRecastTimestamp(), // recast timestamp
((inst->IsStackable() ? ((inst->GetItem()->ItemType == ItemTypePotion) ? 1 : 0) : inst->GetCharges())), // charge count
(inst->IsAttuned() ? 1 : 0), // inst attuned
0 // unknown
)
);
serialization.append(StringFormat("%.*s\"", depth, protection)); // Quotes (and protection, if needed) around static data
serialization.append(StringFormat("%i", item->ItemClass)); // item->ItemClass so we can do |%s instead of %s| serialization.append(StringFormat("%i", item->ItemClass)); // item->ItemClass so we can do |%s instead of %s|
//#include "titanium_itemfields_a.h" - begin serialization.append(
serialization.append(StringFormat("|%s", item->Name)); StringFormat(
serialization.append(StringFormat("|%s", item->Lore)); "|%s|%s|%s|%i|%i|%i|%i|%i|%i|%i|%i|%s|%s|%i|%i",
serialization.append(StringFormat("|%s", item->IDFile)); item->Name,
serialization.append(StringFormat("|%i", item->ID)); item->Lore,
//#include "titanium_itemfields_a.h" - end item->IDFile,
serialization.append(StringFormat("|%i", ((item->Weight > 255) ? 255 : item->Weight))); item->ID,
//#include "titanium_itemfields_b.h" - begin ((item->Weight > 255) ? 255 : item->Weight),
serialization.append(StringFormat("|%i", item->NoRent)); item->NoRent,
serialization.append(StringFormat("|%i", item->NoDrop)); item->NoDrop,
serialization.append(StringFormat("|%i", item->Size)); item->Size,
serialization.append(StringFormat("|%i", item->Slots)); item->Slots,
serialization.append(StringFormat("|%i", item->Price)); item->Price,
serialization.append(StringFormat("|%i", item->Icon)); item->Icon,
serialization.append("|0"); // unknown "0", // unknown
serialization.append("|0"); // unknown "0", // unknown
serialization.append(StringFormat("|%i", item->BenefitFlag)); item->BenefitFlag,
serialization.append(StringFormat("|%i", item->Tradeskills)); item->Tradeskills
serialization.append(StringFormat("|%i", item->CR)); )
serialization.append(StringFormat("|%i", item->DR)); );
serialization.append(StringFormat("|%i", item->PR));
serialization.append(StringFormat("|%i", item->MR)); serialization.append(
serialization.append(StringFormat("|%i", item->FR)); StringFormat(
serialization.append(StringFormat("|%i", item->AStr)); "|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i",
serialization.append(StringFormat("|%i", item->ASta)); item->CR,
serialization.append(StringFormat("|%i", item->AAgi)); item->DR,
serialization.append(StringFormat("|%i", item->ADex)); item->PR,
serialization.append(StringFormat("|%i", item->ACha)); item->MR,
serialization.append(StringFormat("|%i", item->AInt)); item->FR,
serialization.append(StringFormat("|%i", item->AWis)); item->AStr,
serialization.append(StringFormat("|%i", item->HP)); item->ASta,
serialization.append(StringFormat("|%i", item->Mana)); item->AAgi,
serialization.append(StringFormat("|%i", item->AC)); item->ADex,
serialization.append(StringFormat("|%i", item->Deity)); item->ACha,
serialization.append(StringFormat("|%i", item->SkillModValue)); item->AInt,
serialization.append(StringFormat("|%i", item->SkillModMax)); item->AWis,
serialization.append(StringFormat("|%i", item->SkillModType)); item->HP,
serialization.append(StringFormat("|%i", item->BaneDmgRace)); item->Mana,
serialization.append(StringFormat("|%i", item->BaneDmgAmt)); item->AC
serialization.append(StringFormat("|%i", item->BaneDmgBody)); )
serialization.append(StringFormat("|%i", item->Magic)); );
serialization.append(StringFormat("|%i", item->CastTime_));
serialization.append(StringFormat("|%i", item->ReqLevel));
serialization.append(StringFormat("|%i", item->BardType)); serialization.append(
serialization.append(StringFormat("|%i", item->BardValue)); StringFormat(
serialization.append(StringFormat("|%i", item->Light)); "|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i",
serialization.append(StringFormat("|%i", item->Delay)); item->Deity,
serialization.append(StringFormat("|%i", item->RecLevel)); item->SkillModValue,
serialization.append(StringFormat("|%i", item->RecSkill)); item->SkillModMax,
serialization.append(StringFormat("|%i", item->ElemDmgType)); item->SkillModType,
serialization.append(StringFormat("|%i", item->ElemDmgAmt)); item->BaneDmgRace,
serialization.append(StringFormat("|%i", item->Range)); item->BaneDmgAmt,
serialization.append(StringFormat("|%i", item->Damage)); item->BaneDmgBody,
serialization.append(StringFormat("|%i", item->Color)); item->Magic,
serialization.append(StringFormat("|%i", item->Classes)); item->CastTime_,
serialization.append(StringFormat("|%i", item->Races)); item->ReqLevel,
serialization.append("|0"); // unknown item->BardType,
serialization.append(StringFormat("|%i", item->MaxCharges)); item->BardValue,
serialization.append(StringFormat("|%i", item->ItemType)); item->Light,
serialization.append(StringFormat("|%i", item->Material)); item->Delay
serialization.append(StringFormat("|%i", item->SellRate)); )
serialization.append("|0"); // unknown );
serialization.append(StringFormat("|%i", item->CastTime_));
serialization.append("|0"); // unknown serialization.append(
serialization.append(StringFormat("|%i", item->ProcRate)); StringFormat(
serialization.append(StringFormat("|%i", item->CombatEffects)); "|%i|%i|%i|%i|%i|%i|%i|%i|%i|%s|%i|%i|%i|%i",
serialization.append(StringFormat("|%i", item->Shielding)); item->RecLevel,
serialization.append(StringFormat("|%i", item->StunResist)); item->RecSkill,
serialization.append(StringFormat("|%i", item->StrikeThrough)); item->ElemDmgType,
serialization.append(StringFormat("|%i", item->ExtraDmgSkill)); item->ElemDmgAmt,
serialization.append(StringFormat("|%i", item->ExtraDmgAmt)); item->Range,
serialization.append(StringFormat("|%i", item->SpellShield)); item->Damage,
serialization.append(StringFormat("|%i", item->Avoidance)); item->Color,
serialization.append(StringFormat("|%i", item->Accuracy)); item->Classes,
serialization.append(StringFormat("|%i", item->CharmFileID)); item->Races,
serialization.append(StringFormat("|%i", item->FactionMod1)); "0", // unknown
serialization.append(StringFormat("|%i", item->FactionMod2)); item->MaxCharges,
serialization.append(StringFormat("|%i", item->FactionMod3)); item->ItemType,
serialization.append(StringFormat("|%i", item->FactionMod4)); item->Material,
serialization.append(StringFormat("|%i", item->FactionAmt1)); item->SellRate
serialization.append(StringFormat("|%i", item->FactionAmt2)); )
serialization.append(StringFormat("|%i", item->FactionAmt3)); );
serialization.append(StringFormat("|%i", item->FactionAmt4));
serialization.append(StringFormat("|%s", item->CharmFile)); serialization.append(
serialization.append(StringFormat("|%i", item->AugType)); StringFormat(
serialization.append(StringFormat("|%i", item->AugSlotType[0])); "|%s|%i|%s|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i",
serialization.append(StringFormat("|%i", item->AugSlotVisible[0])); "0", // unknown
serialization.append(StringFormat("|%i", item->AugSlotType[1])); item->CastTime_,
serialization.append(StringFormat("|%i", item->AugSlotVisible[1])); "0", // unknown
serialization.append(StringFormat("|%i", item->AugSlotType[2])); item->ProcRate,
serialization.append(StringFormat("|%i", item->AugSlotVisible[2])); item->CombatEffects,
serialization.append(StringFormat("|%i", item->AugSlotType[3])); item->Shielding,
serialization.append(StringFormat("|%i", item->AugSlotVisible[3])); item->StunResist,
serialization.append(StringFormat("|%i", item->AugSlotType[4])); item->StrikeThrough,
serialization.append(StringFormat("|%i", item->AugSlotVisible[4])); item->ExtraDmgSkill,
serialization.append(StringFormat("|%i", item->LDoNTheme)); item->ExtraDmgAmt,
serialization.append(StringFormat("|%i", item->LDoNPrice)); item->SpellShield,
serialization.append(StringFormat("|%i", item->LDoNSold)); item->Avoidance,
serialization.append(StringFormat("|%i", item->BagType)); item->Accuracy,
serialization.append(StringFormat("|%i", item->BagSlots)); item->CharmFileID
serialization.append(StringFormat("|%i", item->BagSize)); )
serialization.append(StringFormat("|%i", item->BagWR)); );
serialization.append(StringFormat("|%i", item->Book));
serialization.append(StringFormat("|%i", item->BookType)); serialization.append(
serialization.append(StringFormat("|%s", item->Filename)); StringFormat(
serialization.append(StringFormat("|%i", item->BaneDmgRaceAmt)); "|%i|%i|%i|%i|%i|%i|%i|%i|%s",
serialization.append(StringFormat("|%i", item->AugRestrict)); item->FactionMod1,
serialization.append(StringFormat("|%i", item->LoreGroup)); item->FactionMod2,
serialization.append(StringFormat("|%i", item->PendingLoreFlag)); item->FactionMod3,
serialization.append(StringFormat("|%i", item->ArtifactFlag)); item->FactionMod4,
serialization.append(StringFormat("|%i", item->SummonedFlag)); item->FactionAmt1,
serialization.append(StringFormat("|%i", item->Favor)); item->FactionAmt2,
serialization.append(StringFormat("|%i", item->FVNoDrop)); item->FactionAmt3,
serialization.append(StringFormat("|%i", item->Endur)); item->FactionAmt4,
serialization.append(StringFormat("|%i", item->DotShielding)); item->CharmFile
serialization.append(StringFormat("|%i", item->Attack)); )
serialization.append(StringFormat("|%i", item->Regen)); );
serialization.append(StringFormat("|%i", item->ManaRegen));
serialization.append(StringFormat("|%i", item->EnduranceRegen)); serialization.append(
serialization.append(StringFormat("|%i", item->Haste)); StringFormat(
serialization.append(StringFormat("|%i", item->DamageShield)); "|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i",
serialization.append(StringFormat("|%i", item->RecastDelay)); item->AugType,
serialization.append(StringFormat("|%i", item->RecastType)); item->AugSlotType[0],
serialization.append(StringFormat("|%i", item->GuildFavor)); item->AugSlotVisible[0],
serialization.append(StringFormat("|%i", item->AugDistiller)); item->AugSlotType[1],
serialization.append("|0"); // unknown item->AugSlotVisible[1],
serialization.append("|0"); // unknown item->AugSlotType[2],
serialization.append(StringFormat("|%i", item->Attuneable)); item->AugSlotVisible[2],
serialization.append(StringFormat("|%i", item->NoPet)); item->AugSlotType[3],
serialization.append("|0"); // unknown item->AugSlotVisible[3],
serialization.append(StringFormat("|%i", item->PointType)); item->AugSlotType[4],
serialization.append(StringFormat("|%i", item->PotionBelt)); item->AugSlotVisible[4]
serialization.append(StringFormat("|%i", item->PotionBeltSlots)); )
serialization.append(StringFormat("|%i", item->StackSize)); );
serialization.append(StringFormat("|%i", item->NoTransfer));
serialization.append(StringFormat("|%i", item->Stackable)); serialization.append(
serialization.append(StringFormat("|%i", item->Click.Effect)); StringFormat(
serialization.append(StringFormat("|%i", item->Click.Type)); "|%i|%i|%i|%i|%i|%i|%i|%i|%i|%s|%i|%i|%i|%i|%i|%i",
serialization.append(StringFormat("|%i", item->Click.Level2)); item->LDoNTheme,
serialization.append(StringFormat("|%i", item->Click.Level)); item->LDoNPrice,
serialization.append("|0"); // Click name item->LDoNSold,
serialization.append(StringFormat("|%i", item->Proc.Effect)); item->BagType,
serialization.append(StringFormat("|%i", item->Proc.Type)); item->BagSlots,
serialization.append(StringFormat("|%i", item->Proc.Level2)); item->BagSize,
serialization.append(StringFormat("|%i", item->Proc.Level)); item->BagWR,
serialization.append("|0"); // Proc name item->Book,
serialization.append(StringFormat("|%i", item->Worn.Effect)); item->BookType,
serialization.append(StringFormat("|%i", item->Worn.Type)); item->Filename,
serialization.append(StringFormat("|%i", item->Worn.Level2)); item->BaneDmgRaceAmt,
serialization.append(StringFormat("|%i", item->Worn.Level)); item->AugRestrict,
serialization.append("|0"); // Worn name item->LoreGroup,
serialization.append(StringFormat("|%i", item->Focus.Effect)); item->PendingLoreFlag,
serialization.append(StringFormat("|%i", item->Focus.Type)); item->ArtifactFlag,
serialization.append(StringFormat("|%i", item->Focus.Level2)); item->SummonedFlag
serialization.append(StringFormat("|%i", item->Focus.Level)); )
serialization.append("|0"); // Focus name );
serialization.append(StringFormat("|%i", item->Scroll.Effect));
serialization.append(StringFormat("|%i", item->Scroll.Type)); serialization.append(
serialization.append(StringFormat("|%i", item->Scroll.Level2)); StringFormat(
serialization.append(StringFormat("|%i", item->Scroll.Level)); "|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i|%i",
serialization.append("|0"); // Scroll name item->Favor,
//#include "titanium_itemfields_b.h" - end item->FVNoDrop,
item->Endur,
item->DotShielding,
item->Attack,
item->Regen,
item->ManaRegen,
item->EnduranceRegen,
item->Haste,
item->DamageShield,
item->RecastDelay,
item->RecastType,
item->GuildFavor,
item->AugDistiller
)
);
serialization.append(
StringFormat(
"|%s|%s|%i|%i|%s|%i|%i|%i|%i|%i|%i",
"0", // unknown
"0", // unknown
item->Attuneable,
item->NoPet,
"0", // unknown
item->PointType,
item->PotionBelt,
item->PotionBeltSlots,
item->StackSize,
item->NoTransfer,
item->Stackable
)
);
serialization.append(
StringFormat(
"|%i|%i|%i|%i|%s",
item->Click.Effect,
item->Click.Type,
item->Click.Level2,
item->Click.Level,
"0" // Click name
)
);
serialization.append(
StringFormat(
"|%i|%i|%i|%i|%s",
item->Proc.Effect,
item->Proc.Type,
item->Proc.Level2,
item->Proc.Level,
"0" // Proc name
)
);
serialization.append(
StringFormat(
"|%i|%i|%i|%i|%s",
item->Worn.Effect,
item->Worn.Type,
item->Worn.Level2,
item->Worn.Level,
"0" // Worn name
)
);
serialization.append(
StringFormat(
"|%i|%i|%i|%i|%s",
item->Focus.Effect,
item->Focus.Type,
item->Focus.Level2,
item->Focus.Level,
"0" // Focus name
)
);
serialization.append(
StringFormat(
"|%i|%i|%i|%i|%s",
item->Scroll.Effect,
item->Scroll.Type,
item->Scroll.Level2,
item->Scroll.Level,
"0" // Scroll name
)
);
serialization.append(StringFormat("%.*s\"", depth, protection)); // Quotes (and protection, if needed) around static data
serialization.append(StringFormat("%.*s\"", depth, protection.c_str())); // Quotes (and protection, if needed) around static data
for (int index = SUB_INDEX_BEGIN; index < consts::ITEM_CONTAINER_SIZE; ++index) { for (int index = SUB_INDEX_BEGIN; index < consts::ITEM_CONTAINER_SIZE; ++index) {
ItemInst *sub = inst->GetItem(index); ItemInst *sub = inst->GetItem(index);
if (!sub) { if (!sub) {
@ -2276,7 +2368,8 @@ namespace Titanium
serialization.append(StringFormat("|%s", sub_item.c_str())); // Sub items serialization.append(StringFormat("|%s", sub_item.c_str())); // Sub items
} }
} }
serialization.append(StringFormat("%.*s%s", (depth ? (depth - 1) : 0), protection.c_str(), (depth ? "\"" : ""))); // For trailing quotes (and protection) if a subitem;
serialization.append(StringFormat("%.*s%s", (depth ? (depth - 1) : 0), protection, (depth ? "\"" : ""))); // For trailing quotes (and protection) if a subitem;
return serialization; return serialization;
} }