private function CreateAdditionalItemTooltip($itemID, XMLHandler $xml, Characters $characters, $parent = false, $comparsion = false) { if (!$xml) { return false; } elseif ($parent == true && is_array($comparsion)) { return false; // both variables can't have 'true' value. } // Item comparsion mode $realm = false; if (is_array($comparsion) && isset($this->realmData[$comparsion['realm_id']])) { $realm = $this->realmData[$comparsion['realm_id']]; } $data = $this->wDB->selectRow("SELECT * FROM `item_template` WHERE `entry`=?", $itemID); if (!$data) { return false; } $isCharacter = $characters->CheckPlayer(); $xml->XMLWriter()->startElement('id'); $xml->XMLWriter()->text($itemID); $xml->XMLWriter()->endElement(); //id $xml->XMLWriter()->startElement('name'); if ($this->_locale == 'en_gb' || $this->_locale == 'en_us') { $xml->XMLWriter()->text($data['name']); } else { $xml->XMLWriter()->text(Items::getItemName($itemID)); } $xml->XMLWriter()->endElement(); //name $xml->XMLWriter()->startElement('icon'); $xml->XMLWriter()->text(Items::getItemIcon($itemID, $data['displayid'])); $xml->XMLWriter()->endElement(); //icon // 3.2.x heroic item flag if ($data['Flags'] == 8 || $data['Flags'] == 4104 && $data['itemset'] > 0) { $xml->XMLWriter()->startElement('heroic'); $xml->XMLWriter()->text(1); $xml->XMLWriter()->endElement(); //heroic } $xml->XMLWriter()->startElement('overallQualityId'); $xml->XMLWriter()->text($data['Quality']); $xml->XMLWriter()->endElement(); //overallQualityId $xml->XMLWriter()->startElement('bonding'); $xml->XMLWriter()->text($data['bonding']); $xml->XMLWriter()->endElement(); //bonding $xml->XMLWriter()->startElement('maxCount'); $xml->XMLWriter()->text($data['maxcount']); $xml->XMLWriter()->endElement(); //maxCount if ($data['startquest'] > 0) { $xml->XMLWriter()->startElement('startQuestId'); $xml->XMLWriter()->text($data['startquest']); $xml->XMLWriter()->endElement(); //startQuestId } $xml->XMLWriter()->startElement('classId'); $xml->XMLWriter()->text($data['class']); $xml->XMLWriter()->endElement(); //classId $xml->XMLWriter()->startElement('equipData'); $xml->XMLWriter()->startElement('inventoryType'); $xml->XMLWriter()->text($data['InventoryType']); $xml->XMLWriter()->endElement(); //inventoryType $xml->XMLWriter()->startElement('subclassName'); $xml->XMLWriter()->text(Items::GetItemSubTypeInfo($itemID, true, $data)); $xml->XMLWriter()->endElement(); //subclassName if ($data['class'] == ITEM_CLASS_CONTAINER) { $xml->XMLWriter()->startElement('containerSlots'); $xml->XMLWriter()->text($data['ContainerSlots']); $xml->XMLWriter()->endElement(); //containerSlots } $xml->XMLWriter()->endElement(); //equipData if ($data['class'] == ITEM_CLASS_WEAPON) { $xml->XMLWriter()->startElement('damageData'); $xml->XMLWriter()->startElement('damage'); $xml->XMLWriter()->startElement('type'); $xml->XMLWriter()->text('0'); $xml->XMLWriter()->endElement(); //type $xml->XMLWriter()->startElement('min'); $xml->XMLWriter()->text($data['dmg_min1']); $xml->XMLWriter()->endElement(); //min $xml->XMLWriter()->startElement('max'); $xml->XMLWriter()->text($data['dmg_max1']); $xml->XMLWriter()->endElement(); //max $xml->XMLWriter()->endElement(); //damage $xml->XMLWriter()->startElement('speed'); $xml->XMLWriter()->text(round($data['delay'] / 1000, 2)); $xml->XMLWriter()->endElement(); //speed $xml->XMLWriter()->startElement('dps'); $dps = null; for ($jj = 1; $jj <= 2; $jj++) { $d_type = $data['dmg_type' . $jj]; $d_min = $data['dmg_min' . $jj]; $d_max = $data['dmg_max' . $jj]; if ($d_max > 0 && $data['class'] != ITEM_CLASS_PROJECTILE) { $delay = $data['delay'] / 1000; if ($delay > 0) { $dps = $dps + round(($d_max + $d_min) / (2 * $delay), 1); } if ($jj > 1) { $delay = 0; } } } $xml->XMLWriter()->text($dps); $xml->XMLWriter()->endElement(); //dps $xml->XMLWriter()->endElement(); //damageData } if ($data['block'] > 0) { $xml->XMLWriter()->startElement('blockValue'); $xml->XMLWriter()->text($data['block']); $xml->XMLWriter()->endElement(); //blockValue } if ($data['fire_res'] > 0) { $xml->XMLWriter()->startElement('fireResist'); $xml->XMLWriter()->text($data['fire_res']); $xml->XMLWriter()->endElement(); //fireResist } if ($data['nature_res'] > 0) { $xml->XMLWriter()->startElement('natureResist'); $xml->XMLWriter()->text($data['nature_res']); $xml->XMLWriter()->endElement(); //natureResist } if ($data['frost_res'] > 0) { $xml->XMLWriter()->startElement('frostResist'); $xml->XMLWriter()->text($data['frost_res']); $xml->XMLWriter()->endElement(); //frostResist } if ($data['shadow_res'] > 0) { $xml->XMLWriter()->startElement('shadowResist'); $xml->XMLWriter()->text($data['shadow_res']); $xml->XMLWriter()->endElement(); //shadowResist } if ($data['arcane_res'] > 0) { $xml->XMLWriter()->startElement('arcaneResist'); $xml->XMLWriter()->text($data['arcane_res']); $xml->XMLWriter()->endElement(); //arcaneResist } for ($i = 1; $i < 11; $i++) { if ($data['stat_type' . $i] > 0 && $data['stat_value' . $i] > 0) { $bonus_template = Items::GetItemBonusTemplate($data['stat_type' . $i]); $xml->XMLWriter()->startElement($bonus_template); $xml->XMLWriter()->text($data['stat_value' . $i]); $xml->XMLWriter()->endElement(); } } $xml->XMLWriter()->startElement('armor'); if ($data['ArmorDamageModifier'] > 0) { $xml->XMLWriter()->writeAttribute('armorBonus', 1); } $xml->XMLWriter()->text($data['armor']); $xml->XMLWriter()->endElement(); //armor $ench_array = array(1 => 'head', 2 => 'neck', 3 => 'shoulder', 4 => 'shirt', 5 => 'chest', 6 => 'belt', 7 => 'legs', 8 => 'boots', 9 => 'wrist', 10 => 'gloves', 11 => 'ring1', 12 => 'trinket1', 13 => 'mainhand', 14 => 'offhand', 15 => 'relic', 16 => 'back', 17 => 'stave', 19 => 'tabard', 20 => 'chest', 21 => 'mainhand', 22 => '', 23 => 'offhand', 24 => '', 25 => 'thrown', 26 => 'gun', 28 => 'sigil'); if (isset($ench_array[$data['InventoryType']])) { $itemSlotName = $ench_array[$data['InventoryType']]; } else { $itemSlotName = false; } if (!$parent && $isCharacter && $itemSlotName) { $enchantment = $characters->getCharacterEnchant($itemSlotName, $characters->GetGUID()); if ($enchantment) { $xml->XMLWriter()->startElement('enchant'); $xml->XMLWriter()->text($this->aDB->selectCell("SELECT `text_" . $this->_locale . "` FROM `armory_enchantment` WHERE `id`=? LIMIT 1", $enchantment)); $xml->XMLWriter()->endElement(); //enchant } } // Random property if ($data['RandomProperty'] > 0 || $data['RandomSuffix'] > 0) { if (!$isCharacter) { $xml->XMLWriter()->startElement('randomEnchantData'); $xml->XMLWriter()->endElement(); //randomEnchantData } if ($itemSlotName) { $rPropInfo = Items::GetRandomPropertiesData($itemID, $characters->GetGUID(), $characters->GetEquippedItemGuidBySlot($itemSlotName)); } else { $rPropInfo = Items::GetRandomPropertiesData($itemID, $characters->GetGUID()); } if ($isCharacter && !$parent && is_array($rPropInfo)) { $xml->XMLWriter()->startElement('randomEnchantData'); $xml->XMLWriter()->startElement('suffix'); $xml->XMLWriter()->text($rPropInfo['suffix']); $xml->XMLWriter()->endElement(); //enchant if (is_array($rPropInfo['data'])) { foreach ($rPropInfo['data'] as $randProp) { $xml->XMLWriter()->startElement('enchant'); $xml->XMLWriter()->text($randProp); $xml->XMLWriter()->endElement(); //enchant } } $xml->XMLWriter()->endElement(); //randomEnchantData } } $xml->XMLWriter()->startElement('socketData'); $socket_data = false; $socketBonusCheck = array(); for ($i = 1; $i < 4; $i++) { if ($data['socketColor_' . $i] > 0) { switch ($data['socketColor_' . $i]) { case 1: $color = 'Meta'; $socket_data = array('color' => 'Meta'); $gem = Items::extractSocketInfo($characters->GetGUID(), $itemID, $i, $characters->GetEquippedItemGuidBySlot($itemSlotName)); if ($gem && !$parent) { $socket_data['enchant'] = $gem['enchant']; $socket_data['icon'] = $gem['icon']; $currentColor = $this->aDB->selectCell("SELECT `color` FROM `armory_gemproperties` WHERE `spellitemenchantement`=? LIMIT 1", $gem['enchant_id']); if ($currentColor == 1) { $socket_data['match'] = '1'; } } break; case 2: $socket_data = array('color' => 'Red'); $gem = Items::extractSocketInfo($characters->GetGUID(), $itemID, $i, $characters->GetEquippedItemGuidBySlot($itemSlotName)); if ($gem && !$parent) { $socket_data['enchant'] = $gem['enchant']; $socket_data['icon'] = $gem['icon']; $currentColor = $this->aDB->selectCell("SELECT `color` FROM `armory_gemproperties` WHERE `spellitemenchantement`=? LIMIT 1", $gem['enchant_id']); if ($currentColor == 6 || $currentColor == 10 || $currentColor == 14) { $socket_data['match'] = '1'; } } break; case 4: $socket_data = array('color' => 'Yellow'); $gem = Items::extractSocketInfo($characters->GetGUID(), $itemID, $i, $characters->GetEquippedItemGuidBySlot($itemSlotName)); if ($gem && !$parent) { $socket_data['enchant'] = $gem['enchant']; $socket_data['icon'] = $gem['icon']; $currentColor = $this->aDB->selectCell("SELECT `color` FROM `armory_gemproperties` WHERE `spellitemenchantement`=? LIMIT 1", $gem['enchant_id']); if ($currentColor == 6 || $currentColor == 12 || $currentColor == 14) { $socket_data['match'] = '1'; } } break; case 8: $socket_data = array('color' => 'Blue'); $gem = Items::extractSocketInfo($characters->GetGUID(), $itemID, $i, $characters->GetEquippedItemGuidBySlot($itemSlotName)); if ($gem && !$parent) { $socket_data['enchant'] = $gem['enchant']; $socket_data['icon'] = $gem['icon']; $currentColor = $this->aDB->selectCell("SELECT `color` FROM `armory_gemproperties` WHERE `spellitemenchantement`=? LIMIT 1", $gem['enchant_id']); if ($currentColor == 10 || $currentColor == 12 || $currentColor == 14) { $socket_data['match'] = '1'; } } break; } if (is_array($socket_data)) { $xml->XMLWriter()->startElement('socket'); foreach ($socket_data as $socket_key => $socket_value) { $xml->XMLWriter()->writeAttribute($socket_key, $socket_value); } $xml->XMLWriter()->endElement(); //socket $color = false; } } } if (isset($socketBonusCheck)) { $socketBonusCheckCount = count($socketBonusCheck); $socketMatches = 0; foreach ($socketBonusCheck as $socket) { if ($socket['color'] == $socket['current']) { $socketMatches++; } elseif ($socket['color'] == 2 && ($socket['current'] == 6 || $socket['current'] == 10 || $socket['current'] == 14)) { $socketMatches++; } elseif ($socket['color'] == 4 && ($socket['current'] == 6 || $socket['current'] == 12 || $socket['current'] == 14)) { $socketMatches++; } elseif ($socket['color'] == 8 && ($socket['current'] == 10 || $socket['current'] == 12 || $socket['current'] == 14)) { $socketMatches++; } } if ($socketBonusCheckCount == $socketMatches) { $socket_data['match'] = '1'; } } if ($data['socketBonus'] > 0) { $bonus_text = $this->aDB->selectCell("SELECT `text_" . $this->_locale . "` FROM `armory_enchantment` WHERE `id`=?", $data['socketBonus']); $xml->XMLWriter()->startElement('socketMatchEnchant'); $xml->XMLWriter()->text($bonus_text); $xml->XMLWriter()->endElement(); //socketMatchEnchant } $xml->XMLWriter()->endElement(); //socketData $allowable_classes = Items::AllowableClasses($data['AllowableClass']); if ($allowable_classes) { $xml->XMLWriter()->startElement('allowableClasses'); foreach ($allowable_classes as $al_class) { $xml->XMLWriter()->startElement('class'); $xml->XMLWriter()->text($al_class); $xml->XMLWriter()->endElement(); //class } $xml->XMLWriter()->endElement(); //allowableClasses } $allowable_races = Items::AllowableRaces($data['AllowableRace']); if ($allowable_races) { $xml->XMLWriter()->startElement('allowableRaces'); foreach ($allowable_races as $al_race) { $xml->XMLWriter()->startElement('race'); $xml->XMLWriter()->text($al_race); $xml->XMLWriter()->endElement(); //race } $xml->XMLWriter()->endElement(); //allowableRaces } if ($data['RequiredSkill'] > 0) { $xml->XMLWriter()->startElement('requiredSkill'); $xml->XMLWriter()->writeAttribute('name', $this->aDB->selectCell("SELECT `name_" . $this->_locale . "` FROM `armory_skills` WHERE `id`=?", $data['RequiredSkill'])); $xml->XMLWriter()->writeAttribute('rank', $data['RequiredSkillRank']); $xml->XMLWriter()->endElement(); //requiredSkill } if ($data['RequiredReputationFaction'] > 0) { $xml->XMLWriter()->startElement('requiredFaction'); $xml->XMLWriter()->writeAttribute('name', $this->aDB->selectCell("SELECT `name_" . $this->_locale . "` FROM `armory_faction` WHERE `id`=?", $data['RequiredReputationFaction'])); $xml->XMLWriter()->writeAttribute('rep', $data['RequiredReputationRank']); $xml->XMLWriter()->endElement(); //requiredFaction } $xml->XMLWriter()->startElement('requiredLevel'); $xml->XMLWriter()->text($data['RequiredLevel']); $xml->XMLWriter()->endElement(); //requiredLevel $xml->XMLWriter()->startElement('itemLevel'); $xml->XMLWriter()->text($data['ItemLevel']); $xml->XMLWriter()->endElement(); //itemLevel if ($data['itemset'] > 0) { $xml->XMLWriter()->startElement('setData'); $itemsetName = $this->aDB->selectCell("SELECT `name_" . $this->_locale . "` FROM `armory_itemsetinfo` WHERE `id`=?", $data['itemset']); $xml->XMLWriter()->startElement('name'); $xml->XMLWriter()->text($itemsetName); $xml->XMLWriter()->endElement(); $setdata = $this->aDB->selectRow("SELECT * FROM `armory_itemsetinfo` WHERE `id`=?", $data['itemset']); // t9/t10 Onyxia trinkets if ($data['itemset'] >= 843 && $data['itemset'] != 881 && $data['itemset'] != 882) { // Get itemset info from other table (armory_itemsetdata) $currentSetData = $this->aDB->selectRow("SELECT * FROM `armory_itemsetdata` WHERE `original`=? AND (`item1`=? OR `item2`=? OR `item3`=? OR `item4`=? OR `item5`=?)", $data['itemset'], $itemID, $itemID, $itemID, $itemID, $itemID); if ($currentSetData) { for ($i = 1; $i < 6; $i++) { if (Items::IsItemExists($currentSetData['item' . $i])) { $xml->XMLWriter()->startElement('item'); $xml->XMLWriter()->writeAttribute('name', Items::getItemName($currentSetData['item' . $i])); if ($characters->IsItemEquipped($currentSetData['item' . $i])) { $xml->XMLWriter()->writeAttribute('equipped', 1); } $xml->XMLWriter()->endElement(); //item } } } } else { for ($i = 1; $i < 10; $i++) { if (isset($setdata['item' . $i]) && Items::IsItemExists($setdata['item' . $i])) { $xml->XMLWriter()->startElement('item'); $xml->XMLWriter()->writeAttribute('name', Items::getItemName($setdata['item' . $i])); $xml->XMLWriter()->endElement(); //item } } } $itemsetbonus = Items::GetItemSetBonusInfo($setdata); if (is_array($itemsetbonus)) { foreach ($itemsetbonus as $item_bonus) { $xml->XMLWriter()->startElement('setBonus'); $xml->XMLWriter()->writeAttribute('desc', $item_bonus['desc']); $xml->XMLWriter()->writeAttribute('threshold', $item_bonus['threshold']); $xml->XMLWriter()->endElement(); //setBonus } } $xml->XMLWriter()->endElement(); //setData } $xml->XMLWriter()->startElement('spellData'); $spellData = 0; $spellInfo = false; for ($i = 1; $i < 6; $i++) { if ($data['spellid_' . $i] > 0) { $spellData = 1; $spell_tmp = $this->aDB->selectRow("SELECT * FROM `armory_spell` WHERE `id`=?", $data['spellid_' . $i]); if ($this->_locale == 'en_gb' || $this->_locale == 'ru_ru') { $tmp_locale = $this->_locale; } else { $tmp_locale = 'en_gb'; } if (!isset($spell_tmp['Description_' . $tmp_locale])) { continue; } $spellInfo = $this->spellReplace($spell_tmp, Utils::ValidateText($spell_tmp['Description_' . $tmp_locale])); if ($spellInfo) { $spellData = 2; $spellInfo = str_replace('"', '"', $spellInfo); $xml->XMLWriter()->startElement('spell'); $xml->XMLWriter()->startElement('trigger'); $xml->XMLWriter()->text($data['spelltrigger_' . $i]); $xml->XMLWriter()->endElement(); //trigger $xml->XMLWriter()->startElement('desc'); $xml->XMLWriter()->text($spellInfo); $xml->XMLWriter()->endElement(); //desc $xml->XMLWriter()->endElement(); //spell } } } if ($spellData == 1 && !empty($data['description'])) { $xml->XMLWriter()->startElement('spell'); $xml->XMLWriter()->startElement('trigger'); $xml->XMLWriter()->text(6); $xml->XMLWriter()->endElement(); //trigger $xml->XMLWriter()->startElement('desc'); if ($this->_locale == 'en_gb' || $this->_locale == 'en_us') { $xml->XMLWriter()->text($data['description']); } else { $xml->XMLWriter()->text(Items::GetItemDescription($itemID)); } $xml->XMLWriter()->endElement(); //desc if (!$parent) { for ($k = 1; $k < 4; $k++) { if ($spell_tmp['EffectItemType_' . $k] > 0 && Items::IsItemExists($spell_tmp['EffectItemType_' . $k])) { $xml->XMLWriter()->startElement('itemTooltip'); self::ItemTooltip($spell_tmp['EffectItemType_' . $k], $xml, $characters, true); $xml->XMLWriter()->endElement(); //itemTooltip $spellreagents = $this->GetSpellItemCreateReagentsInfo($spell_tmp['EffectItemType_' . $k]); if (is_array($spellreagents)) { foreach ($spellreagents as $reagent) { $xml->XMLWriter()->startElement('reagent'); $xml->XMLWriter()->writeAttribute('count', $reagent['count']); $xml->XMLWriter()->writeAttribute('name', $reagent['name']); $xml->XMLWriter()->endElement(); //reagent } } else { $xml->XMLWriter()->startElement('reag'); $xml->XMLWriter()->endElement(); //reagent } } } } $xml->XMLWriter()->endElement(); //spell } $xml->XMLWriter()->endElement(); //spellData if (!empty($data['description']) && $data['description'] != $spellInfo && $spellData != 1) { $xml->XMLWriter()->startElement('desc'); if ($this->_locale == 'en_gb' || $this->_locale == 'en_us') { $xml->XMLWriter()->text($data['description']); } else { $xml->XMLWriter()->text(Items::GetItemDescription($itemID)); } $xml->XMLWriter()->endElement(); //desc } if (!$parent) { $itemSource = Items::GetItemSource($itemID); if (is_array($itemSource)) { $xml->XMLWriter()->startElement('itemSource'); foreach ($itemSource as $source_key => $source_value) { $xml->XMLWriter()->writeAttribute($source_key, $source_value); } $xml->XMLWriter()->endElement(); //itemSource } if ($itemSource['value'] == 'sourceType.vendor' && ($reqArenaRating = Items::IsRequiredArenaRating($itemID))) { $xml->XMLWriter()->startElement('requiredPersonalArenaRating'); $xml->XMLWriter()->writeAttribute('personalArenaRating', $reqArenaRating); $xml->XMLWriter()->endElement(); //requiredPersonalArenaRating } } }
echo $xml->StopXML(); exit; } $xml->XMLWriter()->startElement('itemTooltips'); $xml->XMLWriter()->startElement('itemTooltip'); /** ITEM TOOLTIP DATA GENERATED IN Items::ItemTooltip(int $itemID, XMLWriter $xml, Characters $characters)**/ $items->ItemTooltip($itemID, $xml, $characters); $xml->XMLWriter()->endElement(); //itemTooltip if ($utils->IsItemComparisonAllowed()) { $primaryCharacter = $utils->GetActiveCharacter(); if (isset($primaryCharacter['name'])) { if ($primaryCharacter['name'] != $characters->GetName() || $primaryCharacter['name'] == $characters->GetName() && $primaryCharacter['realm_id'] != $characters->GetRealmID()) { $newChar = new Characters($armory); $newChar->BuildCharacter($primaryCharacter['name'], $primaryCharacter['realm_id']); if ($newChar->CheckPlayer()) { $itemSlot = $items->GetItemSlotId($itemID); if (is_array($itemSlot)) { if (is_array($itemSlot['slotname'])) { foreach ($itemSlot['slotname'] as $sId) { $compItemID = $newChar->GetCharacterEquip($sId); if ($compItemID > 0) { $xml->XMLWriter()->startElement('comparisonTooltips'); $xml->XMLWriter()->startElement('itemTooltip'); $items->ItemTooltip($compItemID, $xml, $newChar, false, true); $xml->XMLWriter()->endElement(); //itemTooltip $xml->XMLWriter()->endElement(); //comparisonTooltips } }
/** * Create item tooltip with provided options * - $parent: used for items that created by spells (displays under patterns/recipes, etc.) * - $comparison: used for dual tooltips (if user logged in and primary character is selected) * This method must be called from self::ItemTooltip() only! * @category Items class * @access private * @param int $itemID * @param XMLHandler $xml * @param Characters $characters * @param bool $parent = false * @param bool $comparison = false **/ private function CreateAdditionalItemTooltip($itemID, XMLHandler $xml, Characters $characters, $parent = false, $comparsion = false) { if (!$xml) { $this->armory->Log()->writeError('%s : xml should be instance of XMLHandler class. %s given.', __METHOD__, gettype($xml)); return false; } elseif ($parent == true && is_array($comparsion)) { $this->armory->Log()->writeError('%s : $parent and $comparison have \'true\' value (not allowed), ignore.', __METHOD__); return false; // both variables can't have 'true' value. } // Item comparsion mode $realm = false; if (is_array($comparsion) && isset($this->armory->realmData[$comparsion['realm_id']])) { $realm = $this->armory->realmData[$comparsion['realm_id']]; } $proto = null; $isCharacter = $characters->CheckPlayer(); if ($isCharacter) { $item = $characters->GetItemByEntry($itemID); if ($item) { $proto = $item->GetProto(); } } if (!$proto) { // Maybe we haven't any character? Let's find itemproto by entry. $proto = new ItemPrototype($this->armory); $proto->LoadItem($itemID); if (!$proto) { $this->armory->Log()->writeError('%s : unable to find item with entry #%d', __METHOD__, $itemID); return false; } } // Check for ScalingStatDistribution (Heirloom items) $ssd = $this->armory->aDB->selectRow("SELECT * FROM `ARMORYDBPREFIX_ssd` WHERE `entry`=%d LIMIT 1", $proto->ScalingStatDistribution); $ssd_level = PLAYER_MAX_LEVEL; if ($isCharacter) { $ssd_level = $characters->GetLevel(); if ($ssd && $ssd_level > $ssd['MaxLevel']) { $ssd_level = $ssd['MaxLevel']; } } $ssv = $this->armory->aDB->selectRow("SELECT * FROM `ARMORYDBPREFIX_ssv` WHERE `level`=%d LIMIT 1", $ssd_level); $xml->XMLWriter()->startElement('id'); $xml->XMLWriter()->text($itemID); $xml->XMLWriter()->endElement(); //id if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<name>'); $xml->XMLWriter()->writeRaw(self::GetItemName($itemID)); $xml->XMLWriter()->writeRaw('</name>'); } else { $xml->XMLWriter()->startElement('name'); if ($this->armory->GetLocale() == 'en_gb' || $this->armory->GetLocale() == 'en_us') { $xml->XMLWriter()->text($proto->name); } else { $xml->XMLWriter()->text(self::GetItemName($itemID)); } $xml->XMLWriter()->endElement(); //name } $xml->XMLWriter()->startElement('icon'); $xml->XMLWriter()->text(self::GetItemIcon($itemID, $proto->displayid)); $xml->XMLWriter()->endElement(); //icon // 3.2.x heroic item flag if ($proto->Flags & ITEM_FLAGS_HEROIC) { $xml->XMLWriter()->startElement('heroic'); $xml->XMLWriter()->text('1'); $xml->XMLWriter()->endElement(); //heroic } $xml->XMLWriter()->startElement('overallQualityId'); $xml->XMLWriter()->text($proto->Quality); $xml->XMLWriter()->endElement(); //overallQualityId // Map if ($proto->Map > 0 && ($mapName = $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_maps` WHERE `id` = %d", $this->armory->GetLocale(), $proto->Map))) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<instanceBound>' . $mapName . '</instanceBound>'); } else { $xml->XMLWriter()->startElement('instanceBound'); $xml->XMLWriter()->text($mapName); $xml->XMLWriter()->endElement(); //instanceBound } } if ($proto->Flags & ITEM_FLAGS_CONJURED) { $xml->XMLWriter()->startElement('conjured'); $xml->XMLWriter()->endElement(); //conjured } $xml->XMLWriter()->startElement('bonding'); $xml->XMLWriter()->text($proto->bonding); $xml->XMLWriter()->endElement(); //bonding $xml->XMLWriter()->startElement('maxCount'); $xml->XMLWriter()->text($proto->maxcount); $xml->XMLWriter()->endElement(); //maxCount if ($proto->startquest > 0) { $xml->XMLWriter()->startElement('startQuestId'); $xml->XMLWriter()->text($proto->startquest); $xml->XMLWriter()->endElement(); //startQuestId } $xml->XMLWriter()->startElement('classId'); $xml->XMLWriter()->text($proto->class); $xml->XMLWriter()->endElement(); //classId $xml->XMLWriter()->startElement('equipData'); $xml->XMLWriter()->startElement('inventoryType'); $xml->XMLWriter()->text($proto->InventoryType); $xml->XMLWriter()->endElement(); //inventoryType $xml->XMLWriter()->startElement('subclassName'); $xml->XMLWriter()->text(self::GetItemSubTypeInfo($itemID, true, array('class' => $proto->class, 'subclass' => $proto->subclass))); $xml->XMLWriter()->endElement(); //subclassName if ($proto->class == ITEM_CLASS_CONTAINER) { $xml->XMLWriter()->startElement('containerSlots'); $xml->XMLWriter()->text($proto->ContainerSlots); $xml->XMLWriter()->endElement(); //containerSlots } $xml->XMLWriter()->endElement(); //equipData if ($proto->class == ITEM_CLASS_WEAPON) { $xml->XMLWriter()->startElement('damageData'); $xml->XMLWriter()->startElement('damage'); $xml->XMLWriter()->startElement('type'); $xml->XMLWriter()->text('0'); $xml->XMLWriter()->endElement(); //type // Damage $minDmg = $proto->Damage[0]['min']; $maxDmg = $proto->Damage[0]['max']; $dps = null; // SSD Check if ($ssv) { if ($extraDPS = self::GetDPSMod($ssv, $proto->ScalingStatValue)) { $average = $extraDPS * $proto->delay / 1000; $minDmg = 0.7 * $average; $maxDmg = 1.3 * $average; $dps = round(($maxDmg + $minDmg) / (2 * ($proto->delay / 1000))); } } $xml->XMLWriter()->startElement('min'); $xml->XMLWriter()->text(round($minDmg)); $xml->XMLWriter()->endElement(); //min $xml->XMLWriter()->startElement('max'); $xml->XMLWriter()->text(round($maxDmg)); $xml->XMLWriter()->endElement(); //max $xml->XMLWriter()->endElement(); //damage $xml->XMLWriter()->startElement('speed'); $xml->XMLWriter()->text(round($proto->delay / 1000, 2)); $xml->XMLWriter()->endElement(); //speed for ($jj = 0; $jj <= 1; $jj++) { $d_type = $proto->Damage[$jj]['type']; // $data['dmg_type' . $jj]; $d_min = $proto->Damage[$jj]['min']; // $data['dmg_min' . $jj]; $d_max = $proto->Damage[$jj]['max']; // $data['dmg_max' . $jj]; if ($d_max > 0 && $proto->class != ITEM_CLASS_PROJECTILE) { $delay = $proto->delay / 1000; if ($delay > 0) { $dps = $dps + round(($d_max + $d_min) / (2 * $delay), 1); } if ($jj > 1) { $delay = 0; } } } if ($dps != null) { $xml->XMLWriter()->startElement('dps'); $xml->XMLWriter()->text($dps); $xml->XMLWriter()->endElement(); //dps } $xml->XMLWriter()->endElement(); //damageData } // Projectile DPS if ($proto->class == ITEM_CLASS_PROJECTILE) { if ($proto->Damage[0]['min'] > 0 && $proto->Damage[0]['max'] > 0) { $xml->XMLWriter()->startElement('damageData'); $xml->XMLWriter()->startElement('damage'); $xml->XMLWriter()->startElement('type'); $xml->XMLWriter()->text($proto->Damage[0]['type']); $xml->XMLWriter()->endElement(); //type $xml->XMLWriter()->startElement('max'); $xml->XMLWriter()->text($proto->Damage[0]['max']); $xml->XMLWriter()->endElement(); //max $xml->XMLWriter()->startElement('min'); $xml->XMLWriter()->text($proto->Damage[0]['min']); $xml->XMLWriter()->endElement(); //min $xml->XMLWriter()->endElement(); //damage $xml->XMLWriter()->endElement(); //damageData } } // Gem properties if ($proto->class == ITEM_CLASS_GEM && $proto->GemProperties > 0) { $GemSpellItemEcnhID = $this->armory->aDB->selectCell("SELECT `spellitemenchantement` FROM `ARMORYDBPREFIX_gemproperties` WHERE `id`=%d", $proto->GemProperties); $GemText = $this->armory->aDB->selectCell("SELECT `text_%s` FROM `ARMORYDBPREFIX_enchantment` WHERE `id`=%d", $this->armory->GetLocale(), $GemSpellItemEcnhID); if ($GemText) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<gemProperties>'); $xml->XMLWriter()->writeRaw($GemText); $xml->XMLWriter()->writeRaw('</gemProperties>'); } else { $xml->XMLWriter()->startElement('gemProperties'); $xml->XMLWriter()->text($GemText); $xml->XMLWriter()->endElement(); //gemProperties } } } if ($proto->block > 0) { $xml->XMLWriter()->startElement('blockValue'); $xml->XMLWriter()->text($proto->block); $xml->XMLWriter()->endElement(); //blockValue } if ($proto->fire_res > 0) { $xml->XMLWriter()->startElement('fireResist'); $xml->XMLWriter()->text($proto->fire_res); $xml->XMLWriter()->endElement(); //fireResist } if ($proto->nature_res > 0) { $xml->XMLWriter()->startElement('natureResist'); $xml->XMLWriter()->text($proto->nature_res); $xml->XMLWriter()->endElement(); //natureResist } if ($proto->frost_res > 0) { $xml->XMLWriter()->startElement('frostResist'); $xml->XMLWriter()->text($proto->frost_res); $xml->XMLWriter()->endElement(); //frostResist } if ($proto->shadow_res > 0) { $xml->XMLWriter()->startElement('shadowResist'); $xml->XMLWriter()->text($proto->shadow_res); $xml->XMLWriter()->endElement(); //shadowResist } if ($proto->arcane_res > 0) { $xml->XMLWriter()->startElement('arcaneResist'); $xml->XMLWriter()->text($proto->arcane_res); $xml->XMLWriter()->endElement(); //arcaneResist } for ($i = 0; $i < MAX_ITEM_PROTO_STATS; $i++) { if ($ssd && $ssv) { if ($ssd['StatMod_' . $i] < 0) { continue; } $val = self::GetSSDMultiplier($ssv, $proto->ScalingStatValue) * $ssd['Modifier_' . $i] / 10000; $bonus_template = self::GetItemBonusTemplate($ssd['StatMod_' . $i]); $xml->XMLWriter()->startElement($bonus_template); $xml->XMLWriter()->text(round($val)); $xml->XMLWriter()->endElement(); } else { $key = $i + 1; if ($proto->ItemStat[$i]['type'] > 0 && $proto->ItemStat[$i]['value'] > 0) { $bonus_template = self::GetItemBonusTemplate($proto->ItemStat[$i]['type']); $xml->XMLWriter()->startElement($bonus_template); $xml->XMLWriter()->text($proto->ItemStat[$i]['value']); $xml->XMLWriter()->endElement(); } } } $armor = $proto->armor; if ($ssv && $proto->ScalingStatValue > 0) { if ($ssvarmor = $this->GetArmorMod($ssv, $proto->ScalingStatValue)) { $armor = $ssvarmor; } } $xml->XMLWriter()->startElement('armor'); if ($proto->ArmorDamageModifier > 0) { $xml->XMLWriter()->writeAttribute('armorBonus', 1); } $xml->XMLWriter()->text($armor); $xml->XMLWriter()->endElement(); //armor $itemSlotName = Utils::GetItemSlotTextByInvType($proto->InventoryType); if (!$parent && $isCharacter && $itemSlotName != null) { $enchantment = $characters->GetCharacterEnchant($itemSlotName); if ($enchantment > 0) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<enchant>'); $xml->XMLWriter()->writeRaw($this->armory->aDB->selectCell("SELECT `text_%s` FROM `ARMORYDBPREFIX_enchantment` WHERE `id`=%d LIMIT 1", $this->armory->GetLocale(), $enchantment)); $xml->XMLWriter()->writeRaw('</enchant>'); //enchant } else { $xml->XMLWriter()->startElement('enchant'); $xml->XMLWriter()->text($this->armory->aDB->selectCell("SELECT `text_%s` FROM `ARMORYDBPREFIX_enchantment` WHERE `id`=%d LIMIT 1", $this->armory->GetLocale(), $enchantment)); $xml->XMLWriter()->endElement(); //enchant } } } // Random property if ($proto->RandomProperty > 0 || $proto->RandomSuffix > 0) { if (!$isCharacter) { $xml->XMLWriter()->startElement('randomEnchantData'); $xml->XMLWriter()->endElement(); //randomEnchantData } else { if ($itemSlotName) { $rPropInfo = self::GetRandomPropertiesData($itemID, $characters->GetGUID(), $characters->GetEquippedItemGuidBySlot($itemSlotName), false, $characters->GetServerType(), $item, array('RandomProperty' => $proto->RandomProperty, 'RandomSuffix' => $proto->RandomSuffix)); } else { $rPropInfo = self::GetRandomPropertiesData($itemID, $characters->GetGUID(), 0, false, $characters->GetServerType(), $item); } if ($isCharacter && !$parent && is_array($rPropInfo)) { $xml->XMLWriter()->startElement('randomEnchantData'); if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<suffix>'); $xml->XMLWriter()->writeRaw($rPropInfo['suffix']); $xml->XMLWriter()->writeRaw('</suffix>'); //suffix } else { $xml->XMLWriter()->startElement('suffix'); $xml->XMLWriter()->text($rPropInfo['suffix']); $xml->XMLWriter()->endElement(); //suffix } if (is_array($rPropInfo['data'])) { if (Utils::IsWriteRaw()) { foreach ($rPropInfo['data'] as $randProp) { $xml->XMLWriter()->writeRaw('<enchant>'); $xml->XMLWriter()->writeRaw($randProp); $xml->XMLWriter()->writeRaw('</enchant>'); //enchant } } else { foreach ($rPropInfo['data'] as $randProp) { $xml->XMLWriter()->startElement('enchant'); $xml->XMLWriter()->text($randProp); $xml->XMLWriter()->endElement(); //enchant } } } $xml->XMLWriter()->endElement(); //randomEnchantData } } } // Socket data $xml->XMLWriter()->startElement('socketData'); $socket_data = false; // If there's no character, check $proto->Socket[X] if (!$isCharacter) { for ($i = 0; $i < 3; $i++) { if (isset($proto->Socket[$i]['color']) && $proto->Socket[$i]['color'] > 0) { switch ($proto->Socket[$i]['color']) { case 1: $socket_data = array('color' => 'Meta'); break; case 2: $socket_data = array('color' => 'Red'); break; case 4: $socket_data = array('color' => 'Yellow'); break; case 8: $socket_data = array('color' => 'Blue'); break; } if (is_array($socket_data)) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<socket'); foreach ($socket_data as $socket_key => $socket_value) { $xml->XMLWriter()->writeRaw(' ' . $socket_key . '="' . $socket_value . '"'); } $xml->XMLWriter()->writeRaw('/>'); } else { $xml->XMLWriter()->startElement('socket'); foreach ($socket_data as $socket_key => $socket_value) { $xml->XMLWriter()->writeAttribute($socket_key, $socket_value); } $xml->XMLWriter()->endElement(); //socket } } } } } elseif ($isCharacter && isset($item) && is_object($item)) { $gems = array('g0' => $item->GetSocketInfo(1), 'g1' => $item->GetSocketInfo(2), 'g2' => $item->GetSocketInfo(3)); for ($i = 0; $i < 3; $i++) { $index = $i + 1; if (isset($gems['g' . $i]['item']) && $gems['g' . $i]['item'] > 0 && ($parent == false || $comparsion == true)) { $socket_data = array('color' => self::GetSocketColorString($proto->Socket[$i]['color'] ? $proto->Socket[$i]['color'] : 0), 'enchant' => $gems['g' . $i]['enchant'], 'icon' => $gems['g' . $i]['icon']); if (self::IsGemMatchesSocketColor($gems['g' . $i]['color'], $proto->Socket[$i]['color'] ? $proto->Socket[$i]['color'] : -1)) { $socket_data['match'] = '1'; } } else { if (isset($proto->Socket[$i]['color']) && $proto->Socket[$i]['color'] > 0) { $socket_data = array('color' => self::GetSocketColorString($proto->Socket[$i]['color'])); } } if (isset($socket_data) && is_array($socket_data)) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<socket'); foreach ($socket_data as $socket_key => $socket_value) { $xml->XMLWriter()->writeRaw(' ' . $socket_key . '="' . $socket_value . '"'); } $xml->XMLWriter()->writeRaw('/>'); } else { $xml->XMLWriter()->startElement('socket'); foreach ($socket_data as $socket_key => $socket_value) { $xml->XMLWriter()->writeAttribute($socket_key, $socket_value); } $xml->XMLWriter()->endElement(); //socket } } $socket_data = false; } } if ($proto->socketBonus > 0) { $bonus_text = $this->armory->aDB->selectCell("SELECT `text_%s` FROM `ARMORYDBPREFIX_enchantment` WHERE `id`=%d", $this->armory->GetLocale(), $proto->socketBonus); if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<socketMatchEnchant>'); $xml->XMLWriter()->writeRaw($bonus_text); $xml->XMLWriter()->writeRaw('</socketMatchEnchant>'); //socketMatchEnchant } else { $xml->XMLWriter()->startElement('socketMatchEnchant'); $xml->XMLWriter()->text($bonus_text); $xml->XMLWriter()->endElement(); //socketMatchEnchant } } $xml->XMLWriter()->endElement(); //socketData // Durability if ($isCharacter) { $item_durability = self::GetItemDurability($characters->GetGUID(), $characters->GetEquippedItemGuidBySlot($itemSlotName)); } else { $item_durability = array('current' => $proto->MaxDurability, 'max' => $proto->MaxDurability); } if (is_array($item_durability) && $item_durability['current'] > 0) { $xml->XMLWriter()->startElement('durability'); $xml->XMLWriter()->writeAttribute('current', (int) $item_durability['current']); $xml->XMLWriter()->writeAttribute('max', (int) $item_durability['max']); $xml->XMLWriter()->endElement(); //durability } $allowable_classes = self::AllowableClasses($proto->AllowableClass); if ($allowable_classes) { $xml->XMLWriter()->startElement('allowableClasses'); foreach ($allowable_classes as $al_class) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<class>'); $xml->XMLWriter()->writeRaw($al_class); $xml->XMLWriter()->writeRaw('</class>'); //class } else { $xml->XMLWriter()->startElement('class'); $xml->XMLWriter()->text($al_class); $xml->XMLWriter()->endElement(); //class } } $xml->XMLWriter()->endElement(); //allowableClasses } $allowable_races = self::AllowableRaces($proto->AllowableRace); if ($allowable_races) { $xml->XMLWriter()->startElement('allowableRaces'); foreach ($allowable_races as $al_race) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<race>'); $xml->XMLWriter()->writeRaw($al_race); $xml->XMLWriter()->writeRaw('</race>'); //race } else { $xml->XMLWriter()->startElement('race'); $xml->XMLWriter()->text($al_race); $xml->XMLWriter()->endElement(); //race } } $xml->XMLWriter()->endElement(); //allowableRaces } if ($proto->RequiredSkill > 0) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<requiredSkill'); $xml->XMLWriter()->writeRaw(' name="' . $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_skills` WHERE `id`=%d", $this->armory->GetLocale(), $proto->RequiredSkill) . '"'); $xml->XMLWriter()->writeRaw(' rank="', $proto->RequiredSkillRank . '"'); $xml->XMLWriter()->writeRaw('/>'); //requiredSkill } else { $xml->XMLWriter()->startElement('requiredSkill'); $xml->XMLWriter()->writeAttribute('name', $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_skills` WHERE `id`=%d", $this->armory->GetLocale(), $proto->RequiredSkill)); $xml->XMLWriter()->writeAttribute('rank', $proto->RequiredSkillRank); $xml->XMLWriter()->endElement(); //requiredSkill } } if ($proto->requiredspell > 0 && ($spellName = $this->armory->aDB->selectCell("SELECT `SpellName_%s` FROM `ARMORYDBPREFIX_spell` WHERE `id`=%d", $this->armory->GetLocale(), $proto->requiredspell))) { $xml->XMLWriter()->startElement('requiredAbility'); $xml->XMLWriter()->text($spellName); $xml->XMLWriter()->endElement(); //requiredAbility } if ($proto->RequiredReputationFaction > 0 && ($factionName = $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_faction` WHERE `id`=%d", $this->armory->GetLocale(), $proto->RequiredReputationFaction))) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<requiredFaction'); $xml->XMLWriter()->writeRaw(' name="' . $factionName . '"'); $xml->XMLWriter()->writeRaw(' rep="' . $proto->RequiredReputationRank . '"'); $xml->XMLWriter()->writeRaw('/>'); //requiredFaction } else { $xml->XMLWriter()->startElement('requiredFaction'); $xml->XMLWriter()->writeAttribute('name', $factionName); $xml->XMLWriter()->writeAttribute('rep', $proto->RequiredReputationRank); $xml->XMLWriter()->endElement(); //requiredFaction } } $xml->XMLWriter()->startElement('requiredLevel'); $xml->XMLWriter()->text($proto->RequiredLevel); $xml->XMLWriter()->endElement(); //requiredLevel if ($proto->ItemLevel > 0) { $xml->XMLWriter()->startElement('itemLevel'); $xml->XMLWriter()->text($proto->ItemLevel); $xml->XMLWriter()->endElement(); //itemLevel } // Item set if ($proto->itemset > 0) { $xml->XMLWriter()->startElement('setData'); $itemsetName = $this->armory->aDB->selectCell("SELECT `name_%s` FROM `ARMORYDBPREFIX_itemsetinfo` WHERE `id`=%d", $this->armory->GetLocale(), $proto->itemset); if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<name>'); $xml->XMLWriter()->writeRaw($itemsetName); $xml->XMLWriter()->writeRaw('</name>'); } else { $xml->XMLWriter()->startElement('name'); $xml->XMLWriter()->text($itemsetName); $xml->XMLWriter()->endElement(); //name } $setdata = $this->armory->aDB->selectRow("SELECT * FROM `ARMORYDBPREFIX_itemsetinfo` WHERE `id`=%d", $proto->itemset); if (self::IsMultiplyItemSet($proto->itemset)) { // Get itemset info from other table (armory_itemsetdata) $currentSetData = $this->armory->aDB->select("SELECT * FROM `ARMORYDBPREFIX_itemsetdata` WHERE `original`=%d", $proto->itemset); if (is_array($currentSetData)) { $activeSetInfo = array(); $basicSetData = $currentSetData[0]; foreach ($currentSetData as $iSet) { for ($i = 1; $i < 6; $i++) { if ($characters->IsItemEquipped($iSet['item' . $i])) { $activeSetInfo['item' . $i] = $iSet['item' . $i]; } } } for ($i = 1; $i < 6; $i++) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<item'); if (isset($activeSetInfo['item' . $i])) { $xml->XMLWriter()->writeRaw(' name="' . self::GetItemName($activeSetInfo['item' . $i]) . '"'); if ($characters->IsItemEquipped($activeSetInfo['item' . $i])) { $xml->XMLWriter()->writeRaw(' equipped="1"'); } } else { $xml->XMLWriter()->writeRaw(' name="' . self::GetItemName($basicSetData['item' . $i]) . '"'); } $xml->XMLWriter()->writeRaw('/>'); //item } else { $xml->XMLWriter()->startElement('item'); if (isset($activeSetInfo['item' . $i])) { $xml->XMLWriter()->writeAttribute('name', self::GetItemName($activeSetInfo['item' . $i])); if ($characters->IsItemEquipped($activeSetInfo['item' . $i])) { $xml->XMLWriter()->writeAttribute('equipped', '1'); } } else { $xml->XMLWriter()->writeAttribute('name', self::GetItemName($basicSetData['item' . $i])); } $xml->XMLWriter()->endElement(); //item } } } } else { for ($i = 1; $i < 10; $i++) { if (isset($setdata['item' . $i]) && self::IsItemExists($setdata['item' . $i])) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<item'); $xml->XMLWriter()->writeRaw(' name="' . self::GetItemName($setdata['item' . $i]) . '"'); if ($characters->IsItemEquipped($setdata['item' . $i])) { $xml->XMLWriter()->writeRaw(' equipped="1"'); } $xml->XMLWriter()->writeRaw('/>'); //item } else { $xml->XMLWriter()->startElement('item'); $xml->XMLWriter()->writeAttribute('name', self::GetItemName($setdata['item' . $i])); if ($characters->IsItemEquipped($setdata['item' . $i])) { $xml->XMLWriter()->writeAttribute('equipped', 1); } $xml->XMLWriter()->endElement(); //item } } } } $itemsetbonus = self::GetItemSetBonusInfo($setdata); if (is_array($itemsetbonus)) { foreach ($itemsetbonus as $item_bonus) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<setBonus'); $xml->XMLWriter()->writeRaw(' desc="' . $item_bonus['desc'] . '"'); $xml->XMLWriter()->writeRaw(' threshold="' . $item_bonus['threshold'] . '"'); $xml->XMLWriter()->writeRaw('/>'); //setBonus } else { $xml->XMLWriter()->startElement('setBonus'); $xml->XMLWriter()->writeAttribute('desc', $item_bonus['desc']); $xml->XMLWriter()->writeAttribute('threshold', $item_bonus['threshold']); $xml->XMLWriter()->endElement(); //setBonus } } } $xml->XMLWriter()->endElement(); //setData } $xml->XMLWriter()->startElement('spellData'); $spellData = 0; $spellInfo = false; for ($i = 0; $i < 5; $i++) { if ($proto->Spells[$i]['spellid'] > 0) { $spellData = 1; $spell_tmp = $this->armory->aDB->selectRow("SELECT * FROM `ARMORYDBPREFIX_spell` WHERE `id`=%d", $proto->Spells[$i]['spellid']); if ($this->armory->GetLocale() == 'en_gb' || $this->armory->GetLocale() == 'ru_ru') { $tmp_locale = $this->armory->GetLocale(); } else { $tmp_locale = 'en_gb'; } if (!isset($spell_tmp['Description_' . $tmp_locale]) || empty($spell_tmp['Description_' . $tmp_locale])) { // Try to find at least en_gb locale if (!isset($spell_tmp['Description_en_gb']) || empty($spell_tmp['Description_en_gb'])) { continue; } else { $tmp_locale = 'en_gb'; } } $spellInfo = $this->SpellReplace($spell_tmp, Utils::ValidateSpellText($spell_tmp['Description_' . $tmp_locale])); if ($spellInfo) { $spellData = 2; $spellInfo = str_replace('"', '"', $spellInfo); $xml->XMLWriter()->startElement('spell'); $xml->XMLWriter()->startElement('trigger'); $xml->XMLWriter()->text($proto->Spells[$i]['trigger']); $xml->XMLWriter()->endElement(); //trigger $xml->XMLWriter()->startElement('desc'); $xml->XMLWriter()->text($spellInfo); $xml->XMLWriter()->endElement(); //desc $xml->XMLWriter()->endElement(); //spell } } } if ($spellData == 1 && $proto->description != null) { $xml->XMLWriter()->startElement('spell'); $xml->XMLWriter()->startElement('trigger'); $xml->XMLWriter()->text('6'); $xml->XMLWriter()->endElement(); //trigger $xml->XMLWriter()->startElement('desc'); if ($this->armory->GetLocale() == 'en_gb' || $this->armory->GetLocale() == 'en_us') { $xml->XMLWriter()->text($proto->description); } else { $xml->XMLWriter()->text(self::GetItemDescription($itemID)); } $xml->XMLWriter()->endElement(); //desc if (!$parent) { for ($k = 1; $k < 4; $k++) { if ($spell_tmp['EffectItemType_' . $k] > 0 && self::IsItemExists($spell_tmp['EffectItemType_' . $k])) { $xml->XMLWriter()->startElement('itemTooltip'); self::ItemTooltip($spell_tmp['EffectItemType_' . $k], $xml, $characters, true); $xml->XMLWriter()->endElement(); //itemTooltip $spellreagents = $this->GetSpellItemCreateReagentsInfo($spell_tmp['EffectItemType_' . $k]); if (is_array($spellreagents)) { foreach ($spellreagents as $reagent) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<reagent'); $xml->XMLWriter()->writeRaw(' count="' . $reagent['count'] . '"'); $xml->XMLWriter()->writeRaw(' name="' . $reagent['name'] . '"'); $xml->XMLWriter()->writeRaw('/>'); //reagent } else { $xml->XMLWriter()->startElement('reagent'); $xml->XMLWriter()->writeAttribute('count', $reagent['count']); $xml->XMLWriter()->writeAttribute('name', $reagent['name']); $xml->XMLWriter()->endElement(); //reagent } } } else { $xml->XMLWriter()->startElement('reagent'); $xml->XMLWriter()->endElement(); //reagent } } } } $xml->XMLWriter()->endElement(); //spell } $xml->XMLWriter()->endElement(); //spellData if ($proto->description != null && $proto->description != $spellInfo && $spellData != 1) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<desc>'); $xml->XMLWriter()->writeRaw(self::GetItemDescription($itemID)); $xml->XMLWriter()->writeRaw('</desc>'); //desc } else { $xml->XMLWriter()->startElement('desc'); if ($this->armory->GetLocale() == 'en_gb' || $this->armory->GetLocale() == 'en_us') { $xml->XMLWriter()->text($proto->description); } else { $xml->XMLWriter()->text(self::GetItemDescription($itemID)); } $xml->XMLWriter()->endElement(); //desc } } if (!$parent) { $itemSource = self::GetItemSource($itemID); if (is_array($itemSource)) { if (Utils::IsWriteRaw()) { $xml->XMLWriter()->writeRaw('<itemSource'); foreach ($itemSource as $source_key => $source_value) { $xml->XMLWriter()->writeRaw(' ' . $source_key . '="' . $source_value . '"'); } $xml->XMLWriter()->writeRaw('/>'); //itemSource } else { $xml->XMLWriter()->startElement('itemSource'); foreach ($itemSource as $source_key => $source_value) { $xml->XMLWriter()->writeAttribute($source_key, $source_value); } $xml->XMLWriter()->endElement(); //itemSource } } if ($itemSource['value'] == 'sourceType.vendor' && ($reqArenaRating = self::IsRequiredArenaRating($itemID))) { $xml->XMLWriter()->startElement('requiredPersonalArenaRating'); $xml->XMLWriter()->writeAttribute('personalArenaRating', $reqArenaRating); $xml->XMLWriter()->endElement(); //requiredPersonalArenaRating } } }