Code: Select all
<Struct Name="substruct_node_info" ClientVersion="1096">
<Data ElementName="num_node_items" Type="int32" Size="1" />
<Data ElementName="node_item_array" Type="Array" ArraySizeVariable="num_node_items">
<Data ElementName="parent_id" Type="int32" Size="1" />
<Data ElementName="parent_req_tier" Type="int8" Size="1" />
<Data ElementName="spell_id" Type="int32" Size="1" />
<Data ElementName="active" Type="int8" Size="1" />
<Data ElementName="spell_name" Type="EQ2_16Bit_String" />
<Data ElementName="spell_description" Type="EQ2_16Bit_String" />
<Data ElementName="icon" Type="int16" Size="1" />
<Data ElementName="icon2" Type="int16" Size="1" />
<Data ElementName="current_rank" Type="int8" Size="1" />
<Data ElementName="max_rank" Type="int8" Size="1" />
<Data ElementName="rank_cost" Type="int8" Size="1" />
<Data ElementName="min_level" Type="int8" Size="1" />
<Data ElementName="unknown5_num_items" Type="int8" Size="1" />
<Data ElementName="unknown5_array" Type="Array" ArraySizeVariable="unknown5_num_items">
<Data ElementName="unknown5" Type="int32" Size="1" />
</Data>
<Data ElementName="unknown6" Type="int32" Size="1" />
<Data ElementName="unknown7" Type="int8" Size="1" />
<Data ElementName="classification1" Type="EQ2_16Bit_String" />
<Data ElementName="points_req" Type="int8" Size="1" />
<Data ElementName="nknown8" Type="int8" Size="1" />
<Data ElementName="classification2" Type="EQ2_16Bit_String" />
<Data ElementName="col" Type="int8" Size="1" />
<Data ElementName="row" Type="int8" Size="1" />
<Data ElementName="line_title" Type="EQ2_16Bit_String" />
<Data ElementName="unknown9" Type="int16" Size="1" />
<Data ElementName="points_to_unlock" Type="int16" Size="1" />
<Data ElementName="unknown9b" Type="int16" Size="1" />
</Data>
</Struct>Code: Select all
Struct Name="WS_AdventureList" ClientVersion="1096" OpcodeName="OP_AdventureList">
<Data ElementName="unknown_aa" Type="int8" Size="1" />
<Data ElementName="num_aa_trees" Type="int32" Size="1" />
<Data ElementName="aa_array" Type="Array" ArraySizeVariable="num_aa_trees">
<Data ElementName="tab_title" Type="EQ2_16Bit_String" />
<Data ElementName="tree_node_id" Type="int16" Size="1" />
<Data ElementName="max_aa" Type="int16" Size="1" />
<Data ElementName="unknown4" Type="int16" Size="1" />
<Data ElementName="id" Type="int32" Size="1" />
<Data ElementName="kos_req" Type="int8" Size="1" />
<Data ElementName="node_info" Substruct="substruct_node_info" Size="1" />
<Data ElementName="unknown10" Type="int32" Size="1" />
<Data ElementName="points_spent" Type="int32" Size="1" />
<Data ElementName="unknown11" Type="int16" Size="2" />
<Data ElementName="unknown11a" Type="int8" Size="1" />
</Data>
</Struct>Code: Select all
packet->setSubstructArrayLengthByName("header_info", "stat_count", item_stats.size() - dropstat);
dropstat = 0;
for(int32 i=0;i<item_stats.size();i++){
ItemStat* stat = item_stats[i];
if(stat->stat_name.length() > 0)
packet->setArrayDataByName("stat_name", stat->stat_name.c_str(), i);
if (stat->stat_type == 6){ //Convert stats to proper client
if (client->GetVersion() >= 63137){ //TEST
tmp_subtype = stat->stat_subtype;
}
else if (client->GetVersion() >= 63119){ //KA
tmp_subtype = world.GetItemStatKAValue(stat->stat_subtype);
}
else if (client->GetVersion() >= 57107){ //TOV
tmp_subtype = world.GetItemStatTOVValue(stat->stat_subtype);
}
else if (client->GetVersion() >= 1193){ //COE
tmp_subtype = world.GetItemStatCOEValue(stat->stat_subtype);
//tmp_subtype = stat->stat_subtype;
}
else if (client->GetVersion() >= 1096){ //DOV
tmp_subtype = world.GetItemStatDOVValue(stat->stat_subtype); //comment out for testing
//tmp_subtype = stat->stat_subtype; //comment for normal use
}
}
else
tmp_subtype = stat->stat_subtype;
if (tmp_subtype == 255){
dropstat += 1;
//packet->setSubstructArrayLengthByName("header_info", "stat_count", item_stats.size()-dropstat);
}
else {
packet->setArrayDataByName("stat_type", stat->stat_type, i-dropstat);
packet->setArrayDataByName("stat_subtype", tmp_subtype, i-dropstat);
}
/* SF client */
if (client->GetVersion() >= 63119) {
if (stat->stat_type == 6){
packet->setArrayDataByName("value", stat->value + 2, i);//63119 or when diety started (this is actually the modified stat
packet->setArrayDataByName("value2", stat->value, i);//63119 temp will be replace by modified value (this is the unmodified stat
}
else {
packet->setArrayDataByName("value", (sint16)stat->value + 2, i, 0U, true);
packet->setArrayDataByName("value2", stat->value, i);//63119 temp will be replace by modified value
}Code: Select all
packet->setSubstructArrayLengthByName("node_info", "num_node_items", num_items,i);
for (itr2 = AATab[i].begin(); itr2 != AATab[i].end(); itr2++) {
for (itr3 = itr2->second.begin(); itr3 != itr2->second.end(); itr3++, index++) {
//spell = master_spell_list.GetSpell((*itr3)->spellID, (*itr3)->tier);
//current_rank = client->GetPlayer()->GetSpellTier((*itr3)->spellID);
if (index == 0)
class_node_id = (*itr3)->spellID;
//if (spell) {
packet->setArrayDataByName("parent_id", (*itr3)->rankPrereqID, index);
packet->setArrayDataByName("parent_req_tier", (*itr3)->rankPrereq, index);
packet->setArrayDataByName("spell_id", (*itr3)->spellID, index);
packet->setArrayDataByName("active", 3, index); // ?? 3 greyed out 0 shows up
this continues with remainder of array data