示例#1
0
 /**
  * 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;
 }
示例#3
0
 /**
  * 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 . "'");
示例#5
0
 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}");
示例#7
0
 /**
  * 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' => '&nbsp;', '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;
 }
示例#8
0
 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;
 }
示例#9
0
		'".$_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>
示例#10
0
 /**
  * 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;
 }
示例#11
0
<?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;
示例#12
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;
 }
示例#13
0
 /**
  * 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;
 }
示例#14
0
	</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;