/** * Returns array with character stats. Most functions taked from CSWOWD. Requires $this->guid! * @category Character class * @example Characters::ConstructCharacterData() * @todo Update method to 3.3.0a `data` field * @return array **/ public function ConstructCharacterData() { $guid = $this->guid; $StatArray = array(); $rating = Utils::GetRating($this->level); /* Basic data */ $StatArray['effective_strenght'] = $this->GetDataField(UNIT_FIELD_STAT0); $StatArray['bonus_strenght'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_POSSTAT0), 0); $StatArray['negative_strenght'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_NEGSTAT0), 0); $StatArray['stat_strenght'] = $StatArray['effective_strenght'] - $StatArray['bonus_strenght'] - $StatArray['negative_strenght']; $StatArray['bonus_strenght_attackpower'] = Utils::GetAttackPowerForStat(STAT_STRENGTH, $StatArray['effective_strenght'], $this->class); if ($this->class == CLASS_WARRIOR || $this->class == CLASS_PALADIN || $this->class == CLASS_SHAMAN) { $StatArray['bonus_strenght_block'] = max(0, $StatArray['effective_strenght'] * BLOCK_PER_STRENGTH - 10); } else { $StatArray['bonus_strenght_block'] = '-1'; } $StatArray['effective_agility'] = $this->GetDataField(UNIT_FIELD_STAT1); $StatArray['bonus_agility'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_POSSTAT1), 0); $StatArray['negative_agility'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_NEGSTAT1), 0); $StatArray['stat_agility'] = $StatArray['effective_agility'] - $StatArray['bonus_agility'] - $StatArray['negative_agility']; $StatArray['crit_agility'] = floor(Utils::GetCritChanceFromAgility($rating, $this->class, $StatArray['effective_agility'])); $StatArray['bonus_agility_attackpower'] = Utils::GetAttackPowerForStat(STAT_AGILITY, $StatArray['effective_agility'], $this->class); $StatArray['bonus_agility_armor'] = $StatArray['effective_agility'] * ARMOR_PER_AGILITY; if ($StatArray['bonus_agility_attackpower'] == 0) { $StatArray['bonus_agility_attackpower'] = '-1'; } $StatArray['effective_stamina'] = $this->GetDataField(UNIT_FIELD_STAT2); $StatArray['bonus_stamina'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_POSSTAT2), 0); $StatArray['negative_stamina'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_NEGSTAT2), 0); $StatArray['stat_stamina'] = $StatArray['effective_stamina'] - $StatArray['bonus_stamina'] - $StatArray['negative_stamina']; $StatArray['base_stamina'] = min(20, $StatArray['effective_stamina']); $StatArray['more_stamina'] = $StatArray['effective_stamina'] - $StatArray['base_stamina']; $StatArray['bonus_stamina_health'] = $StatArray['base_stamina'] + $StatArray['more_stamina'] * HEALTH_PER_STAMINA; $StatArray['bonus_stamina_petstamina'] = Utils::ComputePetBonus(2, $StatArray['effective_stamina'], $this->class); if ($StatArray['bonus_stamina_petstamina'] == 0) { $StatArray['bonus_stamina_petstamina'] = '-1'; } $StatArray['effective_intellect'] = $this->GetDataField(UNIT_FIELD_STAT3); $StatArray['bonus_intellect'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_POSSTAT3), 0); $StatArray['negative_intellect'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_NEGSTAT3), 0); $StatArray['stat_intellect'] = $StatArray['effective_intellect'] - $StatArray['bonus_intellect'] - $StatArray['negative_intellect']; if ($this->class != CLASS_WARRIOR && $this->class != CLASS_ROGUE && $this->class != CLASS_DK) { $StatArray['base_intellect'] = min(20, $StatArray['effective_intellect']); $StatArray['more_intellect'] = $StatArray['effective_intellect'] - $StatArray['base_intellect']; $StatArray['mana_intellect'] = $StatArray['base_intellect'] + $StatArray['more_intellect'] * MANA_PER_INTELLECT; $StatArray['bonus_intellect_spellcrit'] = round(Utils::GetSpellCritChanceFromIntellect($rating, $this->class, $StatArray['effective_intellect']), 2); } else { $StatArray['base_intellect'] = '-1'; $StatArray['more_intellect'] = '-1'; $StatArray['mana_intellect'] = '-1'; $StatArray['bonus_intellect_spellcrit'] = '-1'; } $StatArray['bonus_intellect_petintellect'] = Utils::ComputePetBonus(7, $StatArray['effective_intellect'], $this->class); if ($StatArray['bonus_intellect_petintellect'] == 0) { $StatArray['bonus_intellect_petintellect'] = '-1'; } $StatArray['effective_spirit'] = $this->GetDataField(UNIT_FIELD_STAT4); $StatArray['bonus_spirit'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_POSSTAT4), 0); $StatArray['negative_spirit'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_NEGSTAT4), 0); $StatArray['stat_spirit'] = $StatArray['effective_spirit'] - $StatArray['bonus_spirit'] - $StatArray['negative_spirit']; $baseRatio = array(0, 0.625, 0.2631, 0.2, 0.3571, 0.1923, 0.625, 0.1724, 0.1212, 0.1282, 1, 0.1389); $StatArray['bonus_spirit_hpregeneration'] = $StatArray['effective_spirit'] * Utils::GetHRCoefficient($rating, $this->class); $StatArray['base_spirit'] = $StatArray['effective_spirit']; if ($StatArray['base_spirit'] > 50) { $StatArray['base_spirit'] = 50; } $StatArray['more_spirit'] = $StatArray['effective_spirit'] - $StatArray['base_spirit']; $StatArray['bonus_spirit_hpregeneration'] = floor($StatArray['base_spirit'] * $baseRatio[$this->class] + $StatArray['more_spirit'] * Utils::GetHRCoefficient($rating, $this->class)); if ($this->class != CLASS_WARRIOR && $this->class != CLASS_ROGUE && $this->class != CLASS_DK) { $StatArray['bonus_spitit_manaregeneration'] = sqrt($StatArray['effective_intellect']) * $StatArray['effective_spirit'] * Utils::GetMRCoefficient($rating, $this->class); $StatArray['bonus_spitit_manaregeneration'] = floor($StatArray['bonus_spitit_manaregeneration'] * 5); } else { $StatArray['bonus_spitit_manaregeneration'] = '-1'; } $StatArray['effective_armor'] = $this->GetDataField(UNIT_FIELD_RESISTANCES); $StatArray['bonus_armor'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE), 0); $StatArray['negative_armor'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE), 0); $StatArray['stat_armor'] = $StatArray['effective_armor'] - $StatArray['bonus_armor'] - $StatArray['negative_armor']; if ($this->level > 59) { $levelModifier = $this->level + 4.5 * ($this->level - 59); } $StatArray['bonus_armor_reduction'] = 0.1 * $StatArray['effective_armor'] / (8.5 * $levelModifier + 40); $StatArray['bonus_armor_reduction'] = round($StatArray['bonus_armor_reduction'] / (1 + $StatArray['bonus_armor_reduction']) * 100, 2); if ($StatArray['bonus_armor_reduction'] > 75) { $StatArray['bonus_armor_reduction'] = 75; } if ($StatArray['bonus_armor_reduction'] < 0) { $StatArray['bonus_armor_reduction'] = 0; } $StatArray['bonus_armor_petbonus'] = Utils::ComputePetBonus(4, $StatArray['effective_armor'], $this->class); if ($StatArray['bonus_armor_petbonus'] == 0) { $StatArray['bonus_armor_petbonus'] = '-1'; } /* Melee stats */ $StatArray['min_melee_dmg'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_MINDAMAGE), 0); $StatArray['max_melee_dmg'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_MAXDAMAGE), 0); $StatArray['speed_melee_dmg'] = round(Utils::getFloatValue($this->GetDataField(UNIT_FIELD_BASEATTACKTIME), 2) / 1000, 2); $StatArray['melee_dmg'] = ($StatArray['min_melee_dmg'] + $StatArray['max_melee_dmg']) * 0.5; $StatArray['dps_melee_dmg'] = round(max($StatArray['melee_dmg'], 1) / $StatArray['speed_melee_dmg'], 1); if ($StatArray['speed_melee_dmg'] < 0.1) { $StatArray['speed_melee_dmg'] = '0.1'; } $StatArray['hasterating_melee_dmg'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 17); $StatArray['hastepct_melee_dmg'] = round($StatArray['hasterating_melee_dmg'] / Utils::GetRatingCoefficient($rating, 19), 2); $StatArray['multipler_melee_ap'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_ATTACK_POWER_MULTIPLIER), 8); if ($StatArray['multipler_melee_ap'] < 0) { $StatArray['multipler_melee_ap'] = 0; } else { $StatArray['multipler_melee_ap'] += 1; } $StatArray['effective_melee_ap'] = $this->GetDataField(UNIT_FIELD_ATTACK_POWER) * $StatArray['multipler_melee_ap']; $StatArray['bonus_melee_ap'] = $this->GetDataField(UNIT_FIELD_ATTACK_POWER_MODS) * $StatArray['multipler_melee_ap']; $StatArray['stat_melee_ap'] = $StatArray['effective_melee_ap'] + $StatArray['bonus_melee_ap']; $StatArray['bonus_ap_dps'] = floor(max($StatArray['stat_melee_ap'], 0) / 14); $StatArray['melee_hit_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 5); $StatArray['melee_hit_ratingpct'] = floor($StatArray['melee_hit_rating'] / Utils::GetRatingCoefficient($rating, 6)); $StatArray['melee_hit_penetration'] = $this->GetDataField(PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE); $StatArray['melee_crit'] = Utils::getFloatValue($this->GetDataField(PLAYER_CRIT_PERCENTAGE), 2); $StatArray['melee_crit_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 8); $StatArray['melee_crit_ratingpct'] = floor($StatArray['melee_crit_rating'] / Utils::GetRatingCoefficient($rating, 9)); $StatArray['melee_skill_id'] = Utils::getSkillFromItemID($this->getCharacterEquip('mainhand')); $character_data = $this->cDB->selectCell("SELECT `data` FROM `characters` WHERE `guid`=?", $this->guid); $StatArray['melee_skill'] = Utils::getSkill($StatArray['melee_skill_id'], $character_data); $StatArray['melee_skill_defrating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 20); $StatArray['melee_skill_ratingadd'] = $StatArray['melee_skill_defrating'] / Utils::GetRatingCoefficient($rating, 2); $buff = $StatArray['melee_skill'][4] + $StatArray['melee_skill'][5] + intval($StatArray['melee_skill_ratingadd']); $StatArray['stat_melee_skill'] = $StatArray['melee_skill'][2] + $buff; $gskill = $this->getCharacterSkill(SKILL_DEFENCE); $StatArray['defense_rating_skill'] = $gskill['value']; $StatArray['rating_defense'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 1); $StatArray['rating_defense_add'] = $StatArray['rating_defense'] / Utils::GetRatingCoefficient($rating, 2); $buff = intval($StatArray['rating_defense_add']); $StatArray['stat_defense_rating'] = $StatArray['rating_defense_add'] + $buff; $StatArray['defense_percent'] = DODGE_PARRY_BLOCK_PERCENT_PER_DEFENSE * ($StatArray['stat_defense_rating'] - $this->level * 5); $StatArray['defense_percent'] = max($StatArray['defense_percent'], 0); unset($character_data); $rating = Utils::GetRating($this->level); $StatArray['dodge_chance'] = Utils::getFloatValue($this->GetDataField(PLAYER_DODGE_PERCENTAGE), 2); $StatArray['stat_dodge'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 2); $StatArray['stat_dodge_pct'] = floor($StatArray['stat_dodge'] / Utils::GetRatingCoefficient($rating, 3)); $StatArray['parry_chance'] = Utils::getFloatValue($this->GetDataField(PLAYER_PARRY_PERCENTAGE), 2); $StatArray['stat_parry'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 3); $StatArray['stat_parry_pct'] = floor($StatArray['stat_parry'] / Utils::GetRatingCoefficient($rating, 4)); $StatArray['melee_resilence'] = $this->GetDataField(PLAYER_FIELD_CRIT_TAKEN_MELEE_RATING); $StatArray['ranged_resilence'] = $this->GetDataField(PLAYER_FIELD_CRIT_TAKEN_RANGED_RATING); $StatArray['spell_resilence'] = $this->GetDataField(PLAYER_FIELD_CRIT_TAKEN_SPELL_RATING); $StatArray['min_resilence'] = min($StatArray['melee_resilence'], $StatArray['ranged_resilence'], $StatArray['spell_resilence']); $StatArray['melee_resilence_pct'] = $StatArray['melee_resilence'] / Utils::GetRatingCoefficient($rating, 15); $StatArray['ranged_resilence_pct'] = $StatArray['ranged_resilence'] / Utils::GetRatingCoefficient($rating, 16); $StatArray['spell_resilence_pct'] = $StatArray['spell_resilence'] / Utils::GetRatingCoefficient($rating, 17); $StatArray['mana_regen_out_of_cast'] = $this->GetDataField(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER); $StatArray['mana_regen_cast'] = $this->GetDataField(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER); $StatArray['mana_regen_out_of_cast'] = floor(Utils::getFloatValue($StatArray['mana_regen_out_of_cast'], 2) * 5); $StatArray['mana_regen_cast'] = round(Utils::getFloatValue($StatArray['mana_regen_cast'], 2) * 5, 2); $holySchool = 1; $minModifier = Utils::GetSpellBonusDamage($holySchool, $guid); for ($i = 1; $i < 7; $i++) { $bonusDamage[$i] = Utils::GetSpellBonusDamage($i, $guid); $minModifier = min($minModifier, $bonusDamage); } $StatArray['spd_holy'] = $bonusDamage[2]; $StatArray['spd_fire'] = $bonusDamage[2]; $StatArray['spd_nature'] = $bonusDamage[3]; $StatArray['spd_frost'] = $bonusDamage[4]; $StatArray['spd_shadow'] = $bonusDamage[5]; $StatArray['spd_arcane'] = $bonusDamage[6]; $StatArray['pet_bonus_ap'] = '-1'; $StatArray['pet_bonus_dmg'] = '-1'; if ($this->class == 3 || $this->class == 9) { $shadow = Utils::GetSpellBonusDamage(5, $guid); $fire = Utils::GetSpellBonusDamage(2, $guid); $StatArray['pet_bonus_ap'] = Utils::ComputePetBonus(6, max($shadow, $fire), $this->class); $StatArray['pet_bonus_dmg'] = Utils::ComputePetBonus(5, max($shadow, $fire), $this->class); } // spell heal bonus $StatArray['heal_bonus'] = $this->GetDataField(PLAYER_FIELD_MOD_HEALING_DONE_POS); // spell haste $StatArray['spell_haste_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 19); $StatArray['spell_haste_pct'] = round($StatArray['spell_haste_rating'] / Utils::GetRatingCoefficient($rating, 20), 2); // spell hit $StatArray['spell_hit_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 7); $StatArray['spell_hit_pct'] = floor($StatArray['spell_hit_rating'] / Utils::GetRatingCoefficient($rating, 8)); $StatArray['spell_hit_penetration'] = $this->GetDataField(PLAYER_FIELD_MOD_TARGET_RESISTANCE); // Spell crit $StatArray['spell_crit_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 10); $StatArray['spell_crit_pct'] = $StatArray['spell_crit_rating'] / Utils::GetRatingCoefficient($rating, 11); $minCrit = $this->GetDataField(PLAYER_SPELL_CRIT_PERCENTAGE1 + 1); for ($i = 1; $i < 7; $i++) { $scfield = PLAYER_SPELL_CRIT_PERCENTAGE1 + $i; $s_crit_value = $this->GetDataField($scfield); $spellCrit[$i] = Utils::getFloatValue($s_crit_value, 2); $minCrit = min($minCrit, $spellCrit[$i]); } $StatArray['spell_crit_holy'] = $spellCrit[1]; $StatArray['spell_crit_fire'] = $spellCrit[2]; $StatArray['spell_crit_nature'] = $spellCrit[3]; $StatArray['spell_crit_frost'] = $spellCrit[4]; $StatArray['spell_crit_arcane'] = $spellCrit[5]; $StatArray['spell_crit_shadow'] = $spellCrit[6]; // block $blockvalue = $this->GetDataField(PLAYER_BLOCK_PERCENTAGE); $StatArray['block_pct'] = Utils::getFloatValue($blockvalue, 2); $StatArray['block_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 4); //TODO: block % $StatArray['block_chance'] = $this->GetDataField(PLAYER_SHIELD_BLOCK); // ranged attack power $multipler = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER), 8); if ($multipler < 0) { $multipler = 0; } else { $multipler += 1; } $effectiveStat = $this->GetDataField(UNIT_FIELD_RANGED_ATTACK_POWER) * $multipler; $buff = $this->GetDataField(UNIT_FIELD_RANGED_ATTACK_POWER_MODS) * $multipler; $multiple = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER), 2); $posBuff = 0; $negBuff = 0; if ($buff > 0) { $posBuff = $buff; } elseif ($buff < 0) { $negBuff = $buff; } $stat = $effectiveStat + $buff; $StatArray['ranged_base'] = floor($effectiveStat); $StatArray['ranged_effective'] = floor($stat); $StatArray['ranged_dps_ap'] = floor(max($stat, 0) / 14); $StatArray['ranged_pet_ap'] = floor(Utils::ComputePetBonus(0, $stat, $this->class)); $StatArray['ranged_pet_spd'] = floor(Utils::ComputePetBonus(1, $stat, $this->class)); // ranged speed $rangedSkillID = Mangos::getSkillFromItemID($this->GetDataField(PLAYER_VISIBLE_ITEM_18_ENTRYID)); if ($rangedSkillID == SKILL_UNARMED) { $StatArray['ranged_speed'] = '0'; $StatArray['ranged_speed_rating'] = '0'; $StatArray['ranged_speed_pct'] = '0'; } else { $StatArray['ranged_speed'] = round(Utils::getFloatValue($this->GetDataField(UNIT_FIELD_RANGEDATTACKTIME), 2) / 1000, 2); $StatArray['ranged_speed_rating'] = round($this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 18)); $StatArray['ranged_speed_pct'] = round($StatArray['ranged_speed_rating'] / Utils::GetRatingCoefficient($rating, 19), 2); } // ranged hit rating $StatArray['ranged_hit'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 6); $StatArray['ranged_hit_pct'] = floor($StatArray['ranged_hit'] / Utils::GetRatingCoefficient($rating, 7)); $StatArray['ranged_hit_penetration'] = $this->GetDataField(PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE); // ranged crit $StatArray['ranged_crit'] = Utils::getFloatValue($this->GetDataField(PLAYER_RANGED_CRIT_PERCENTAGE), 2); $StatArray['ranged_crit_rating'] = $this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 9); $StatArray['ranged_crit_pct'] = floor($StatArray['ranged_crit_rating'] / Utils::GetRatingCoefficient($rating, 10)); if ($rangedSkillID == SKILL_UNARMED) { $StatArray['ranged_dps'] = 0; $StatArray['ranged_dps_min'] = 0; $StatArray['ranged_dps_max'] = 0; $StatArray['ranged_dps_speed'] = 0; $StatArray['ranged_dps_pct'] = 0; } else { $StatArray['ranged_dps_min'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_MINRANGEDDAMAGE), 0); $StatArray['ranged_dps_max'] = Utils::getFloatValue($this->GetDataField(UNIT_FIELD_MAXRANGEDDAMAGE), 0); $StatArray['ranged_dps_speed'] = round(Utils::getFloatValue($this->GetDataField(UNIT_FIELD_RANGEDATTACKTIME), 2) / 1000, 2); $StatArray['ranged_dps'] = ($StatArray['ranged_dps_min'] + $StatArray['ranged_dps_max']) * 0.5; if ($StatArray['ranged_dps_speed'] < 0.1) { $StatArray['ranged_dps_speed'] = 0.1; } $StatArray['ranged_dps_pct'] = round(max($StatArray['ranged_dps'], 1) / $StatArray['ranged_dps_speed']); } return $StatArray; }
/** * Builds criterias table for current (this->achId) achievement * @category Achievements class * @access private * @return array **/ private function BuildAchievementCriteriaTable() { if (in_array(Armory::GetLocale(), array('es_es', 'es_mx'))) { $locale = 'en_gb'; } else { $locale = Armory::GetLocale(); } if (!$this->guid || !$this->achId) { Armory::Log()->writeError('%s : player guid or achievement id is not defiend (GUID: %s, achId: %d)', __METHOD__, $this->guid, $this->achId); return false; } $data = Armory::$aDB->select("SELECT * FROM `ARMORYDBPREFIX_achievement_criteria` WHERE `referredAchievement`=%d ORDER BY `showOrder`", $this->achId); if (!$data) { Armory::Log()->writeError('%s : achievement criteria for achievement #%d was not found', __METHOD__, $this->achId); return false; } $i = 0; $achievement_criteria = array(); foreach ($data as $criteria) { if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_HIDE_CRITERIA) { continue; } $m_data = self::GetCriteriaData($criteria['id']); if (!isset($m_data['counter']) || !$m_data['counter']) { $m_data['counter'] = 0; } $achievement_criteria[$i]['id'] = $criteria['id']; if (isset($m_data['date']) && $m_data['date'] > 0) { $achievement_criteria[$i]['date'] = date('Y-m-d\\TH:i:s\\+01:00', $m_data['date']); } $achievement_criteria[$i]['name'] = $criteria['name_' . $locale]; if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_SHOW_PROGRESS_BAR || $criteria['completionFlag'] & ACHIEVEMENT_FLAG_COUNTER) { if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER) { $achievement_criteria[$i]['maxQuantityGold'] = $criteria['value']; $money = Mangos::GetMoney($m_data['counter']); $achievement_criteria[$i]['quantityGold'] = $money['gold']; $achievement_criteria[$i]['quantitySilver'] = $money['silver']; $achievement_criteria[$i]['quantityCopper'] = $money['copper']; } else { $achievement_criteria[$i]['maxQuantity'] = $criteria['value']; $achievement_criteria[$i]['quantity'] = $m_data['counter']; } } $i++; } return $achievement_criteria; }
/** * Returns array with Ranged weapon haste value * @category Character class * @access private * @return array **/ private function GetCharacterRangedHaste() { $player_stats = array(); $rating = $this->SetRating(); $rangedSkillID = Mangos::GetSkillIDFromItemID($this->GetDataField(PLAYER_VISIBLE_ITEM_18_ENTRYID)); if ($rangedSkillID == SKILL_UNARMED) { $player_stats['value'] = 0; $player_stats['hasteRating'] = 0; $player_stats['hastePercent'] = 0; } else { $player_stats['value'] = round(Utils::GetFloatValue($this->GetDataField(UNIT_FIELD_RANGEDATTACKTIME), 2) / 1000, 2); $player_stats['hasteRating'] = round($this->GetDataField(PLAYER_FIELD_COMBAT_RATING_1 + 18)); $player_stats['hastePercent'] = round($player_stats['hasteRating'] / Utils::GetRatingCoefficient($rating, 19), 2); } unset($rating, $rangedSkillID); return $player_stats; }
$pathway_info[] = array('title' => $lang['charcreate'], 'link' => ''); // ==================== // $account_id = $user['id']; $rid = $user['cur_selected_realmd']; $char_points = (int) $MW->getConfig->character_copy_config->points; $get_your_points = $DB->select("SELECT `points_earned`, `points_spent` FROM `voting_points` WHERE id=?d", $account_id); foreach ($get_your_points as $row) { $your_points = $row["points_earned"] - $row["points_spent"]; } if ($user['id'] > 0) { /*************** START LEVLEUP ACTION ****************/ if (!$_GET['action']) { $profile = $auth->getprofile($user['id']); $profile['signature'] = str_replace('<br />', '', $profile['signature']); } elseif ($_GET['action'] == 'createchar') { $MANG = new Mangos(); //Post declare: $class =& $_POST["createchar_class"]; //used only as a check to see if it exists $faction =& $_POST["createchar_faction"]; //used only as a check to see if it exists $character_copy_to = $_POST["character_copy_char"]; //Main Declare..... $name = $checknamestring = ucfirst(strtolower(escape_string($_POST['createchar_name']))); $loggedin = 0; // Current ID + 1 $new_guid = $MANG->mangos_newguid('character'); $guid = $new_guid['new_guid']; $WE_DID_OFFSET_ID = $new_guid['incr']; //Checks if wanted name exsits. $name_check = $CHDB->selectCell("SELECT guid from `characters` WHERE name='" . $name . "'");
public function GetImprovedItemSource($itemID, $bossID) { $dungeonData = $this->aDB->selectRow("SELECT `instance_id`, `name_" . $this->_locale . "` AS `name`, `lootid_1`, `lootid_2`, `lootid_3`, `lootid_4` FROM `armory_instance_data` WHERE `id`=? OR `lootid_1`=? OR `lootid_2`=? OR `lootid_3`=? OR `lootid_4`=? OR `name_id`=? LIMIT 1", $bossID, $bossID, $bossID, $bossID, $bossID, $bossID); if (!$dungeonData) { $this->Log()->writeError('%s : dungeonData for lootid %d not found (current_locale: %s, locId: %d)', __METHOD__, $bossID, $this->_locale, $this->_loc); return false; } $difficulty_enum = array(1 => '10n', 2 => '25n', 3 => '10h', 4 => '25h'); $heroic_string = Utils::GetArmoryString(19); $item_difficulty = null; for ($i = 1; $i < 5; $i++) { if (isset($dungeonData['lootid_' . $i]) && $dungeonData['lootid_' . $i] == $bossID && isset($difficulty_enum[$i])) { $item_difficulty = $difficulty_enum[$i]; } } switch ($item_difficulty) { case '10n': if ($dungeonData['instance_id'] == 4812 || $dungeonData['instance_id'] == 4722 || $dungeonData['instance_id'] == 4987) { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=? AND `partySize`=10 AND `is_heroic`=1", $dungeonData['instance_id']); } else { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=?", $dungeonData['instance_id']); } if (!$instance_data) { return false; } break; case '10h': if ($dungeonData['instance_id'] == 4812 || $dungeonData['instance_id'] == 4722 || $dungeonData['instance_id'] == 4987) { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=? AND `partySize`=10 AND `is_heroic`=1", $dungeonData['instance_id']); } else { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=?", $dungeonData['instance_id']); } if (!$instance_data) { return false; } if ($heroic_string) { $instance_data['areaName'] .= ' ' . $heroic_string; } break; case '25n': if ($dungeonData['instance_id'] == 4812 || $dungeonData['instance_id'] == 4722 || $dungeonData['instance_id'] == 4987) { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=? AND `partySize`=25 AND `is_heroic`=1", $dungeonData['instance_id']); } else { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=?", $dungeonData['instance_id']); } if (!$instance_data) { return false; } if ($instance_data['is_heroic'] == 0) { if ($heroic_string) { $instance_data['areaName'] .= ' ' . $heroic_string; } else { $instance_data['areaName'] .= ' (25)'; } } break; case '25h': if ($dungeonData['instance_id'] == 4812 || $dungeonData['instance_id'] == 4722 || $dungeonData['instance_id'] == 4987) { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=? AND `partySize`=25 AND `is_heroic`=1", $dungeonData['instance_id']); } else { $instance_data = $this->aDB->selectRow("SELECT `id` AS `areaId`, `name_" . $this->_locale . "` AS `areaName`, `is_heroic` FROM `armory_instance_template` WHERE `id`=?", $dungeonData['instance_id']); } if (!$instance_data) { return false; } if ($heroic_string) { $instance_data['areaName'] .= ' ' . $heroic_string; } break; } if (!isset($instance_data)) { return false; } $instance_data['creatureId'] = $this->aDB->selectCell("SELECT `id` FROM `armory_instance_data` WHERE `id`=? OR `lootid_1`=? OR `lootid_2`=? OR `lootid_3`=? OR `lootid_4`=? OR `name_id`=? LIMIT 1", $bossID, $bossID, $bossID, $bossID, $bossID, $bossID); $instance_data['creatureName'] = $dungeonData['name']; if ($bossID > 100000) { // GameObject $drop_percent = Mangos::GenerateLootPercent($bossID, 'gameobject_loot_template', $itemID); } else { // Creature $drop_percent = Mangos::GenerateLootPercent($bossID, 'creature_loot_template', $itemID); } $instance_data['dropRate'] = Mangos::DropPercent($drop_percent); $instance_data['value'] = 'sourceType.creatureDrop'; return $instance_data; }
<?php if (INCLUDED !== true) { exit; } // ==================== // $pathway_info[] = array('title' => $lang['players_online'], 'link' => ''); if (isset($_GET["pid"])) { $pid = $_GET["pid"]; } else { $pid = 1; } $limit = (int) $MW->getConfig->generic->users_per_page; $limitstart = ($pid - 1) * $limit; // ==================== // $MANG = new Mangos(); $res_info = array(); $query = array(); $realm_info = get_realm_byid($user['cur_selected_realmd']); $cc = 0; if (check_port_status($realm_info['address'], $realm_info['port']) === true) { if ($CHDB) { $query = $CHDB->query("SELECT guid, name, race, class, gender, level, zone FROM `characters` WHERE `online`='1' AND (NOT `extra_flags` & 1 AND NOT `extra_flags` & 16) ORDER BY `name`"); } $numofpgs = (int) (count($query) / (int) $MW->getConfig->generic->users_per_page); if (gettype(count($query) / (int) $MW->getConfig->generic->users_per_page) != "integer") { settype($numofpgs, "integer"); $numofpgs++; } if ($CHDB) { $query = $CHDB->select("SELECT guid, name, race, class, gender, level, zone FROM `characters` WHERE `online`='1' AND (NOT `extra_flags` & 1 AND NOT `extra_flags` & 16) ORDER BY `name` LIMIT {$limitstart},{$limit}");
/** * Return array with loot info: dropped by, contained in, disenchating to, reagent for, etc. * @category Items class * @example Items::BuildLootTable(35000, 'vendor') * @todo Currency for * @return array **/ public function BuildLootTable($item, $vendor, $data = false) { $lootTable = ''; switch ($vendor) { case 'vendor': $VendorLoot = $this->wDB->select("\n\t\t\t\tSELECT `entry`\n\t\t\t\t\tFROM `npc_vendor`\n\t\t\t\t\t\tWHERE `item`=?", $item); if (!empty($VendorLoot)) { $i = 0; foreach ($VendorLoot as $vItem) { $lootTable[$i] = array('name' => Mangos::GetNpcName($vItem['entry']), 'level' => Mangos::GetNpcInfo($vItem['entry'], 'level'), 'map' => Mangos::GetNpcInfo($vItem['entry'], 'map')); $i++; } } break; case 'boss': $BossLoot = $this->wDB->select("\n\t\t\t\tSELECT `entry`, `ChanceOrQuestChance`\n\t\t\t\t\tFROM `creature_loot_template`\n\t\t\t\t\t\tWHERE `item`=?", $item); if (!empty($BossLoot)) { $i = 0; foreach ($BossLoot as $bItem) { $map_npc = Mangos::GetNpcInfo($bItem['entry'], 'map'); if (!empty($map_npc)) { $lootTable[$i] = array('entry' => $bItem['entry'], 'name' => Mangos::GetNpcName($bItem['entry']), 'level' => Mangos::GetNpcInfo($bItem['entry'], 'level'), 'boss' => Mangos::GetNpcInfo($bItem['entry'], 'isBoss'), 'map' => $map_npc, 'difficult' => Mangos::GetNpcInfo($bItem['entry'], 'dungeonlevel'), 'drop_percent' => Mangos::DropPercent($bItem['ChanceOrQuestChance']), 'makro' => '1'); $i++; } } } break; case 'chest': $ChestLoot = $this->wDB->select("\n\t\t\t\tSELECT `entry`, `ChanceOrQuestChance`\n\t\t\t\t\tFROM `gameobject_loot_template`\n\t\t\t\t\t\tWHERE `item`=?", $item); if (!empty($ChestLoot)) { $i = 0; foreach ($ChestLoot as $cItem) { $map_chest = Mangos::GameobjectInfo($cItem['entry'], 'map'); if (!empty($map_chest)) { $lootTable[$i] = array('name' => Mangos::GameobjectInfo($cItem['entry'], 'name'), 'map' => $map_chest, 'difficult' => ' ', 'drop_percent' => Mangos::DropPercent($cItem['ChanceOrQuestChance'])); $i++; } } } break; case 'questreward': $QuestLoot = $this->wDB->select("\n\t\t\t\tSELECT `entry`, `MinLevel`\n\t\t\t\t\tFROM `quest_template`\n\t\t\t\t\t\tWHERE `RewChoiceItemId1` = ? OR `RewChoiceItemId2` = ? OR `RewChoiceItemId3` = ? OR \n\t\t\t\t\t\t`RewChoiceItemId4` = ? OR `RewChoiceItemId5` = ? OR `RewChoiceItemId6` = ?", $item, $item, $item, $item, $item, $item); if (!empty($QuestLoot)) { $i = 0; foreach ($QuestLoot as $qItem) { $lootTable[$i] = array('title' => Mangos::QuestInfo($qItem['entry'], 'title'), 'reqlevel' => $qItem['MinLevel'], 'map' => Mangos::QuestInfo($qItem['entry'], 'map')); $i++; } } break; case 'queststart': $QuestStart = $this->wDB->selectCell("SELECT `startquest` FROM `item_template` WHERE `entry`=?", $item); if (!$QuestStart) { return false; } $lootTable[0] = array('title' => Mangos::QuestInfo($QuestStart, 'title'), 'reqlevel' => Mangos::QuestInfo($QuestStart, 'reqlevel'), 'map' => Mangos::QuestInfo($QuestStart, 'map')); break; case 'providedfor': $QuestInfo = $this->wDB->select("SELECT `entry`, `MinLevel` FROM `quest_template` WHERE `SrcItemId`=?", $item); if (!$QuestInfo) { return false; } $i = 0; foreach ($QuestInfo as $quest) { $lootTable[$i] = array('title' => Mangos::QuestInfo($quest['entry'], 'title'), 'reqlevel' => $quest['MinLevel'], 'map' => Mangos::QuestInfo($quest['entry'], 'map')); } break; case 'objectiveof': $QuestInfo = $this->wDB->select("\n SELECT `entry`, `MinLevel`\n FROM `quest_template`\n WHERE `ReqItemId1`=? OR `ReqItemId2`=? OR `ReqItemId3`=?\n OR `ReqItemId4`=? OR `ReqItemId5`=?", $item, $item, $item, $item, $item); if (!$QuestInfo) { return false; } $i = 0; foreach ($QuestInfo as $quest) { $lootTable[$i] = array('title' => Mangos::QuestInfo($quest['entry'], 'title'), 'reqlevel' => $quest['MinLevel'], 'map' => Mangos::QuestInfo($quest['entry'], 'map')); } break; case 'item': $ItemLoot = $this->wDB->select("\n SELECT `entry`, `ChanceOrQuestChance`\n FROM `item_loot_template`\n WHERE `item`=?", $item); if (!empty($ItemLoot)) { $i = 0; foreach ($ItemLoot as $iItem) { $lootTable[$i] = array('name' => Items::GetItemName($iItem['entry']), 'drop_percent' => Mangos::DropPercent($iItem['ChanceOrQuestChance'])); $i++; } } break; case 'disenchant': $DisenchantLoot = $this->wDB->select("\n SELECT `item`, `ChanceOrQuestChance`, `maxcount`\n FROM `disenchant_loot_template`\n WHERE `entry`=?", $item); if (!empty($DisenchantLoot)) { $i = 0; foreach ($DisenchantLoot as $dItem) { $lootTable[$i] = array('entry' => $dItem['item'], 'name' => $this->GetItemName($dItem['item']), 'drop_percent' => Mangos::DropPercent($dItem['ChanceOrQuestChance']), 'count' => $dItem['maxcount'], 'icon' => $this->GetItemIcon($dItem['item'])); $i++; } } break; case 'craft': $CraftLoot = $this->aDB->select("\n SELECT `Reagent_1`, `Reagent_2`, `Reagent_3`, `Reagent_4`, `Reagent_5`, `Reagent_6`, `Reagent_7`, `Reagent_8`,\n `ReagentCount_1`, `ReagentCount_2`, `ReagentCount_3`, `ReagentCount_4`, `ReagentCount_5`, `ReagentCount_6`, \n `ReagentCount_7`, `ReagentCount_8`, `EffectItemType_1`, `EffectItemType_2`, `EffectItemType_3`,\n `SpellName`\n FROM `armory_spell`\n WHERE `EffectItemType_1` =? OR `EffectItemType_2`=? OR `EffectItemType_3`=?", $item, $item, $item); if (!empty($CraftLoot)) { $i = 0; foreach ($CraftLoot as $craftItem) { $lootTable[$i]['name'] = $craftItem['SpellName']; for ($o = 1; $o < 9; $o++) { if ($craftItem['Reagent_' . $o] > 0) { $lootTable[$i]['entry_reagent_' . $o] = $craftItem['Reagent_' . $o]; $lootTable[$i]['name_reagent_' . $o] = $this->GetItemName($craftItem['Reagent_' . $o]); $lootTable[$i]['icon_reagent_' . $o] = $this->GetItemIcon($craftItem['Reagent_' . $o]); $lootTable[$i]['count_reagent_' . $o] = $craftItem['ReagentCount_' . $o]; } } for ($j = 1; $j < 4; $j++) { if ($craftItem['EffectItemType_' . $j] > 0) { $lootTable[$i]['item_name_' . $j] = $this->GetItemName($craftItem['EffectItemType_' . $j]); $lootTable[$i]['item_entry_' . $j] = $craftItem['EffectItemType_' . $j]; $lootTable[$i]['item_icon_' . $j] = $this->GetItemIcon($craftItem['EffectItemType_' . $j]); $lootTable[$i]['item_quality_' . $j] = $this->GetItemInfo($craftItem['EffectItemType_' . $j], 'quality'); } } $i++; } } break; case 'currency': return false; break; case 'reagent': $ReagentLoot = $this->aDB->select("\n SELECT `Reagent_1`, `Reagent_2`, `Reagent_3`, `Reagent_4`, `Reagent_5`, `Reagent_6`, `Reagent_7`, `Reagent_8`,\n `ReagentCount_1`, `ReagentCount_2`, `ReagentCount_3`, `ReagentCount_4`, `ReagentCount_5`, `ReagentCount_6`, \n `ReagentCount_7`, `ReagentCount_8`, `EffectItemType_1`, `EffectItemType_2`, `EffectItemType_3`,\n `SpellName`\n FROM `armory_spell`\n WHERE `Reagent_1`=? OR `Reagent_2`=? OR `Reagent_3`=? OR `Reagent_4`=? OR \n `Reagent_5`=? OR `Reagent_6`=? OR `Reagent_7`=? OR `Reagent_8`=?", $item, $item, $item, $item, $item, $item, $item, $item); if ($ReagentLoot) { $i = 0; foreach ($ReagentLoot as $ReagentItem) { for ($j = 1; $j < 4; $j++) { if ($ReagentItem['EffectItemType_' . $j] > 0) { $lootTable[$i]['item_entry'] = $ReagentItem['EffectItemType_' . $j]; $lootTable[$i]['item_name'] = $this->getItemName($ReagentItem['EffectItemType_' . $j]); $lootTable[$i]['item_icon'] = $this->getItemIcon($ReagentItem['EffectItemType_' . $j]); $lootTable[$i]['item_quality'] = $this->GetItemInfo($ReagentItem['EffectItemType_' . $j], 'quality'); } } for ($o = 1; $o < 9; $o++) { if ($ReagentItem['Reagent_' . $o] > 0) { $lootTable[$i]['Reagent_' . $o] = $ReagentItem['Reagent_' . $o]; $lootTable[$i]['ReagentIcon_' . $o] = $this->getItemIcon($ReagentItem['Reagent_' . $o]); $lootTable[$i]['ReagentCount_' . $o] = $ReagentItem['ReagentCount_' . $o]; } } $i++; } } break; } return $lootTable; }
public function BuildAchievementCriteriaTable() { if (!$this->guid || !$this->achId) { $this->Log()->writeError('%s : player guid or achievement id not defiend', __METHOD__); return false; } $data = $this->aDB->select("SELECT * FROM `armory_achievement_criteria` WHERE `referredAchievement`=? ORDER BY `showOrder`", $this->achId); if (!$data) { $this->Log()->writeError('%s : achievement criteria for achievement #%d not found', __METHOD__, $this->achId); return false; } $i = 0; $achievement_criteria = array(); foreach ($data as $criteria) { if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_HIDE_CRITERIA) { continue; } $m_data = $this->GetCriteriaData($criteria['id']); if (!isset($m_data['counter']) || !$m_data['counter']) { $m_data['counter'] = 0; } $achievement_criteria[$i]['id'] = $criteria['id']; if (isset($m_data['date']) && $m_data['date'] > 0) { $achievement_criteria[$i]['date'] = date('Y-m-d\\TH:i:s\\+01:00', $m_data['date']); } $achievement_criteria[$i]['name'] = $criteria['name_' . $this->_locale]; if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_SHOW_PROGRESS_BAR || $criteria['completionFlag'] & ACHIEVEMENT_FLAG_COUNTER) { if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER) { $achievement_criteria[$i]['maxQuantityGold'] = $criteria['value']; $money = Mangos::getMoney($m_data['counter']); $achievement_criteria[$i]['quantityGold'] = $money['gold']; $achievement_criteria[$i]['quantitySilver'] = $money['silver']; $achievement_criteria[$i]['quantityCopper'] = $money['copper']; } else { $achievement_criteria[$i]['maxQuantity'] = $criteria['value']; $achievement_criteria[$i]['quantity'] = $m_data['counter']; } } $i++; } return $achievement_criteria; }
'".$_POST['add_amount']."', '".$_POST['add_currency']."', '".$_POST['add_itemset']."', '".$_POST['rid']."' ) "); echo "New donation template added."; } }elseif(isset($_POST['donation_delete'])){ $DB->query("DELETE FROM `donations_template` WHERE id='".$_POST['donation_delete']."'"); echo "Donation pack with ID: ".$_POST['donation_delete']." deleted."; }elseif(isset($_POST['donation_send_payment_requested'])){ $txnid = $_POST['donation_send_payment_requested']; if (empty($txnid))die("_POST is empty, some error happened.!"); $p_info = $DB->selectRow("SELECT * FROM `paypal_payment_info` WHERE txnid='".$txnid."'"); $MANG = new Mangos; if($MANG->mail_item_donation($p_info['itemnumber'], $p_info['itemname'],$p_info['txnid']) == TRUE){ echo "<p><h1>ITEMPACK: \"".$p_info['itemnumber']."\" SENT TO \"".$p_info['firstname'].' '.$p_info['lastname']."\".</h1></p>"; }else{ echo "<p>Error: Error in mail system! Contact administrator!</p>"; } unset($MANG); } ?> <br /><br /> <p><b>Send item(s) to players</b></p> <form action="index.php?n=admin&sub=donate" method="POST"> <table> <tr> <td><b>Character name:</b></td> <td><input type="text" name="donate_username"></td>
/** * Returns item source with area name, boss name, drop rate and area URL * @category Items class * @access public * @param int $itemID * @param int $bossID * @param bool $areaDataOnly = false * @return array **/ public function GetImprovedItemSource($itemID, $bossID, $areaDataOnly = false) { $dungeonData = $this->armory->aDB->selectRow("SELECT `instance_id`, `name_%s` AS `name`, `lootid_1`, `lootid_2`, `lootid_3`, `lootid_4` FROM `ARMORYDBPREFIX_instance_data` WHERE `id`=%d OR `lootid_1`=%d OR `lootid_2`=%d OR `lootid_3`=%d OR `lootid_4`=%d OR `name_id`=%d LIMIT 1", $this->armory->GetLocale(), $bossID, $bossID, $bossID, $bossID, $bossID, $bossID); if (!$dungeonData) { return false; } $difficulty_enum = array(1 => '10n', 2 => '25n', 3 => '10h', 4 => '25h'); $heroic_string = Utils::GetArmoryString(19); $item_difficulty = null; for ($i = 1; $i < 5; $i++) { if (isset($dungeonData['lootid_' . $i]) && $dungeonData['lootid_' . $i] == $bossID && isset($difficulty_enum[$i])) { $item_difficulty = $difficulty_enum[$i]; } } $instance_heroic = array(4812, 4722, 4987); switch ($item_difficulty) { case '10n': if (in_array($dungeonData['instance_id'], $instance_heroic)) { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d AND `partySize`=10 AND `is_heroic`=1", $this->armory->GetLocale(), $dungeonData['instance_id']); } else { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d", $this->armory->GetLocale(), $dungeonData['instance_id']); } if (!$instance_data) { return false; } break; case '10h': if (in_array($dungeonData['instance_id'], $instance_heroic)) { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d AND `partySize`=10 AND `is_heroic`=1", $this->armory->GetLocale(), $dungeonData['instance_id']); } else { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d", $this->armory->GetLocale(), $dungeonData['instance_id']); } if (!$instance_data) { return false; } if ($heroic_string) { $instance_data['areaName'] .= ' ' . $heroic_string; } break; case '25n': if (in_array($dungeonData['instance_id'], $instance_heroic)) { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d AND `partySize`=25 AND `is_heroic`=1", $this->armory->GetLocale(), $dungeonData['instance_id']); } else { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d", $this->armory->GetLocale(), $dungeonData['instance_id']); } if (!$instance_data) { return false; } if ($instance_data['is_heroic'] == 0) { if ($heroic_string) { $instance_data['areaName'] .= ' ' . $heroic_string; } else { $instance_data['areaName'] .= ' (25)'; } } break; case '25h': if (in_array($dungeonData['instance_id'], $instance_heroic)) { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d AND `partySize`=25 AND `is_heroic`=1", $this->armory->GetLocale(), $dungeonData['instance_id']); } else { $instance_data = $this->armory->aDB->selectRow("SELECT `id` AS `areaId`, `name_%s` AS `areaName`, `is_heroic`, `key` FROM `ARMORYDBPREFIX_instance_template` WHERE `id`=%d", $this->armory->GetLocale(), $dungeonData['instance_id']); } if (!$instance_data) { return false; } if ($heroic_string) { $instance_data['areaName'] .= ' ' . $heroic_string; } break; } if (!isset($instance_data) || !is_array($instance_data)) { return false; } if ($areaDataOnly == true) { return array('areaName' => $instance_data['areaName'], 'areaUrl' => sprintf('source=dungeon&dungeon=%s&boss=all&difficulty=all', $instance_data['key'])); } $instance_data['creatureId'] = $this->armory->aDB->selectCell("SELECT `id` FROM `ARMORYDBPREFIX_instance_data` WHERE `id`=%d OR `lootid_1`=%d OR `lootid_2`=%d OR `lootid_3`=%d OR `lootid_4`=%d OR `name_id`=%d LIMIT 1", $bossID, $bossID, $bossID, $bossID, $bossID, $bossID); $instance_data['creatureName'] = $dungeonData['name']; if ($bossID > 100000) { // GameObject $drop_percent = Mangos::GenerateLootPercent($bossID, 'gameobject_loot_template', $itemID); } else { // Creature $drop_percent = Mangos::GenerateLootPercent($bossID, 'creature_loot_template', $itemID); } $instance_data['dropRate'] = Mangos::GetDropRate($drop_percent); $instance_data['value'] = 'sourceType.creatureDrop'; return $instance_data; }
<?php if (INCLUDED !== true) { exit; } // ==================== // $pathway_info[] = array('title' => $lang['chars'], 'link' => ''); //===== Calc pages1 =====// $items_per_pages = (int) $MW->getConfig->generic->users_per_page; $limit_start = ($p - 1) * $items_per_pages; // ==================== // $MANG = new Mangos(); $query = array(); $realm_info_new = get_realm_byid($user['cur_selected_realmd']); $cc = 0; if (!check_port_status($realm_info_new['address'], $realm_info_new['port']) === true) { output_message('alert', 'Realm <b>' . $realm_info_new['name'] . '</b> is offline <img src="templates/offlike/images/downarrow2.gif" border="0" align="top">'); } // array´s $query1 = array(); //===== Filter ==========// if ($_GET['char'] && preg_match("/[a-z]/", $_GET['char'])) { $filter = "WHERE `name` LIKE '" . $_GET['char'] . "%'"; } elseif ($_GET['char'] == 1) { $filter = "WHERE `name` REGEXP '^[^A-Za-z]'"; } else { $filter = ''; } ## output_message('alert',$filter); $query1 = $CHDB->select("SELECT `guid`, `name`, `race`, `class`, `zone`, `level`, `gender` FROM `characters` {$filter} ORDER BY `name` LIMIT \r\n{$limit_start},{$items_per_pages}"); $cc1 = 0;
public function BuildAchievementCriteriaTable() { if (!$this->guid || !$this->achId) { return false; } $data = $this->aDB->select("SELECT * FROM `armory_achievement_criteria` WHERE `referredAchievement`=? ORDER BY `order`", $this->achId); if (!$data) { return false; } $i = 0; $achievement_criteria = array(); foreach ($data as $criteria) { if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_HIDE_CRITERIA) { continue; } $achievement_criteria[$i]['id'] = $criteria['id']; $achievement_criteria[$i]['name'] = $criteria['name_' . $this->_locale]; $m_data = $this->GetCriteriaData($criteria['id']); if (!$m_data['counter']) { $m_data['counter'] = 0; } $achievement_criteria[$i]['counter'] = $m_data['counter']; if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_SHOW_PROGRESS_BAR || $criteria['completionFlag'] & ACHIEVEMENT_FLAG_COUNTER) { if ($criteria['completionFlag'] & ACHIEVEMENT_CRITERIA_FLAG_MONEY_COUNTER) { $achievement_criteria[$i]['maxQuantityGold'] = $criteria['value']; $money = Mangos::getMoney($m_data['counter']); $achievement_criteria[$i]['quantityGold'] = $money['gold']; $achievement_criteria[$i]['quantitySilver'] = $money['silver']; $achievement_criteria[$i]['quantityCopper'] = $money['copper']; } else { $achievement_criteria[$i]['maxQuantity'] = $criteria['value']; $achievement_criteria[$i]['quantity'] = $m_data['counter']; } } $i++; } return $achievement_criteria; }
/** * Returns achievement criteria & progress info. Requires $this->achId! * @category Achievements class * @example Achievements::AchievementProgress() * @todo Sort with achievement criteria types * @return string **/ public function AchievementProgress() { $string_return = ''; $tmp_str = ''; $data = $this->aDB->select("SELECT * FROM `armory_achievement_criteria` WHERE `referredAchievement`=?", $this->achId); $progress_bar_string = "<ul class='criteria'><div class='critbar'><div class='prog_bar '><div class='progress_cap'></div><div class='progress_cap_r'></div><div class='progress_int'><div class='progress_fill' style='width:{PERCENT}%'></div><div class='prog_int_text'>{CURRENT_NUM} / {FULLCOUNT}</div></div></div></div></ul>"; $progress_list_string = "<ul class='criteria c_list'>{CRITERIA_LIST}</ul>"; // Check if data exists // Hack error_reporting(0); $character_progress = $this->cDB->selectCell("\n SELECT `counter`\n FROM `character_achievement_progress`\n WHERE `criteria`=? AND `guid`=? LIMIT 1", $data['0']['id'], $this->guid); if (empty($character_progress) || !$character_progress) { $character_progress = 0; } // if(!empty($character_progress)) //{ switch ($data[0]['requiredType']) { case 7: // Skills // Skills case 9: // Quests // Quests case 10: // Daily quests // Daily quests case 11: // Quest counter // Quest counter case 14: // Daily quests // Daily quests case 29: // Items // Items case 13: // PvP Kills // PvP Kills case 37: // Arena Wins // Arena Wins case 41: // Food & drinks // Food & drinks case 42: // Badges // Badges case 45: // Bank safe // Bank safe case 47: // Reputation // Reputation case 56: // PvP Kills // PvP Kills case 62: // Money // Money case 67: // Money drop // Money drop case 75: // Pets // Pets case 109: // Fishing // Fishing case 113: // PvP wins if ($data[0]['requiredType'] == 62 || $data[0]['requiredType'] == 67) { // Make money $money = Mangos::getMoney($character_progress); $money_need = Mangos::getMoney($data[0]['value']); $progress_bar_string = "<ul class='criteria'><div class='critbar'><div class='prog_bar '><div class='progress_cap'></div><div class='progress_cap_r'></div><div class='progress_int'><div class='progress_fill' style='width:{PERCENT}%'></div><div class='prog_int_text'>"; if ($money['gold'] > 0) { $progress_bar_string .= $money['gold'] . " <img alt='' class='p' src='images/icons/money-gold-small.png'/>"; } if ($money['silver'] > 0) { $progress_bar_string .= $money['silver'] . " <img alt='' class='p' src='images/icons/money-silver-small.png'/>"; } if ($money['copper'] > 0) { $progress_bar_string .= $money['copper'] . " <img alt='' class='p' src='images/icons/money-copper-small.png'/>"; } $progress_bar_string .= " / " . $money_need['gold'] . "<img alt='' class='p' src='images/icons/money-gold-small.png'/></div></div></div></div></ul>"; } $percent_value = floor(Utils::getPercent($data['0']['value'], $character_progress)); $progress_bar_string = str_replace("{PERCENT}", $percent_value, $progress_bar_string); $progress_bar_string = str_replace("{CURRENT_NUM}", $character_progress, $progress_bar_string); $progress_bar_string = str_replace("{FULLCOUNT}", $data[0]['value'], $progress_bar_string); $string_return = $progress_bar_string; break; case 0: // Pest control // Pest control case 8: // PvP (?) // PvP (?) case 27: // Quests // Quests case 28: // NPCs // NPCs case 36: // Keys // Keys case 43: // Exploration // Exploration case 46: // Reputation list // Reputation list case 49: // Item levels // Item levels case 52: // PvP (classes) // PvP (classes) case 53: // PvP (races) // PvP (races) case 54: // All squirells I love'd before... // All squirells I love'd before... case 68: // Read books // Read books case 69: // NPCs // NPCs case 70: // PvP Kills // PvP Kills case 72: // Fishing $i = 0; foreach ($data as $criteria) { $counter = $this->cDB->selectCell("SELECT `counter` FROM `character_achievement_progress` WHERE `criteria`=? AND `guid`=?", $criteria['id'], $this->guid); $tmp_str .= "<li class='c_list_col"; if (!empty($counter)) { $tmp_str .= " criteriamet'"; } else { $tmp_str .= "'"; } if ($i % 2) { $tmp_str .= " style='float:left'"; } $_locale = isset($_SESSION['armoryLocale']) ? $_SESSION['armoryLocale'] : $this->armoryconfig['defaultLocale']; $tmp_str .= '>' . $criteria['name_' . $_locale] . '</li>'; $i++; } $string_return = str_replace("{CRITERIA_LIST}", $tmp_str, $progress_list_string); break; } // Hack error_reporting(ALL); //} return $string_return; }
</td> </tr> </table> </td> </tr> </table> <?php $realm_info_new = get_realm_byid($user['cur_selected_realmd']); $rid = $realm_info_new['id']; $rnm = $realm_info_new['name']; // End Templates Start Content // if (isset($_GET['pay']) && $_GET['pay'] == 'finish'){ $MANG = new Mangos; $ep = $CHDB->select("SELECT * FROM `characters` WHERE account='".$user['id']."'"); foreach($ep as $ap){ $charid = $ap["guid"]; $q = $DB->select("SELECT * FROM `paypal_payment_info` WHERE itemname='".$charid."' AND item_given != '1'"); if(count($q) > 0){ foreach($q as $data){ echo 'Payment Done.<br />'; if ($data['item_given'] != 1){ // Aditional payment checks can be done here. $donations_template = $DB->selectRow("SELECT * FROM `donations_template` WHERE id='".$data['itemnumber']."'"); // Ok, we must check if we actually got the money that we asked for. if ($donations_template['donation'] > $data['mc_gross']){ $NOT_MAIL = TRUE;