function GetQuestInfo(&$data, $dataflag = QUEST_DATAFLAG_MINIMUM) { global $DB, $quest_class, $quest_faction_reward; // Локализация if ($dataflag & QUEST_DATAFLAG_LOCALE && $_SESSION['locale'] > 0) { $loc = $_SESSION['locale']; $row = $DB->selectRow(' SELECT Title_loc?d AS Title_loc, Details_loc?d AS Details_loc, Objectives_loc?d AS Objectives_loc, OfferRewardText_loc?d AS OfferRewardText_loc, RequestItemsText_loc?d AS RequresItemsText_loc, EndText_loc?d AS EndText_loc, ObjectiveText1_loc?d AS ObjectiveText1_loc, ObjectiveText2_loc?d AS ObjectiveText2_loc, ObjectiveText3_loc?d AS ObjectiveText3_loc, ObjectiveText4_loc?d AS ObjectiveText4_loc FROM locales_quest WHERE Id = ?d LIMIT 1 ', $loc, $loc, $loc, $loc, $loc, $loc, $loc, $loc, $loc, $loc, $data['entry']); if ($row) { $data = @array_merge($data, $row); } } // Минимальные данные // ID квеста $data['Id'] = $data['Id']; // Имя квеста $data['Title'] = GetQuestTitle($data); // Описания if ($dataflag & QUEST_DATAFLAG_STRINGS) { GetQuestStrings($data); } // Свойства if ($dataflag & QUEST_DATAFLAG_PROPS) { // Уровень квеста $data['Level'] = $data['Level']; // Требуемый уровень квеста $data['MinLevel'] = $data['MinLevel']; // Доступен расам $data['side'] = races($data['RequiredRaces']); // Флаги $data['Flags'] = $data['Flags']; // Ежедневный квест? if ($data['Flags'] & QUEST_FLAGS_DAILY) { $data['Daily'] = true; } // Тип квеста $data['type'] = $data['Type']; global $quest_type; if (isset($quest_type[$data['type']])) { $data['typename'] = $quest_type[$data['type']]; } else { $data['typename'] = $data['type']; } // Путь к этому разделу (главная категория) foreach ($quest_class as $i => $class) { if (in_array($data['ZoneOrSort'], $class)) { $data['maincat'] = $i; break; } } // Категория 1 $data['category'] = $data['ZoneOrSort']; // Категория 2 ??? $data['category2'] = $data['Flags']; // Требуемое пати if ($data['SuggestedPlayers'] > 1) { $data['splayers'] = $data['SuggestedPlayers']; } // Лимит времени if ($data['LimitTime'] > 0) { $data['LimitTime'] = sec_to_time($data['LimitTime']); } else { unset($data['LimitTime']); } if ($data['Flags'] & QUEST_FLAGS_SHARABLE) { $data['Sharable'] = true; } if ($data['SpecialFlags'] & QUEST_SPECIALFLAGS_REPEATABLE) { $data['Repeatable'] = true; } if ($data['RewardTitleId'] > 0) { $data['titlereward'] = $DB->selectCell('SELECT name_loc' . $_SESSION['locale'] . ' FROM ?_char_titles WHERE id=?d LIMIT 1', $data['RewardTitleId']); } } // Награды и задания if ($dataflag & QUEST_DATAFLAG_REWARDS) { // Опыт/деньги@70 $data['xp'] = GetQuestXpOrMoney($data); // Награды вещей for ($j = 0; $j <= 6; ++$j) { if ($data['RewardChoiceItemId' . $j] != 0 and $data['RewardChoiceItemCount' . $j] != 0) { $data['itemchoices'][] = @array_merge(allitemsinfo($data['RewardChoiceItemId' . $j], 0), array('count' => $data['RewardChoiceItemCount' . $j])); } } for ($j = 0; $j <= 4; ++$j) { if ($data['RewardItemId' . $j] != 0 and $data['RewardItemCount' . $j] != 0) { $data['itemrewards'][] = @array_merge(allitemsinfo($data['RewardItemId' . $j], 0), array('count' => $data['RewardItemCount' . $j])); } } // Вознаграждение репутацией for ($j = 1; $j <= 5; $j++) { if ($data['RewardFactionValueId' . $j] != 0) { $value = $data['RewardFactionValueId' . $j]; $id = $data['RewardFactionId' . $j]; if (!$value && isset($quest_faction_reward[$id])) { $value = $quest_faction_reward[$id]; } if ($value) { $data['reprewards'][] = @array_merge(factioninfo($data['RewardFactionValueId' . $j]), array('value' => $value)); } } } // Вознаграждение деньгами if ($data['RewardOrRequiredMoney'] > 0) { $data['money'] = money2coins($data['RewardOrRequiredMoney']); } elseif ($data['RewardOrRequiredMoney'] < 0) { $data['moneyreq'] = money2coins(-$data['RewardOrRequiredMoney']); } if ($data['RewardMoneyMaxLevel']) { $data['moneymaxlevel'] = money2coins($data['RewardMoneyMaxLevel']); } } // Последовательность квестов, требования, цепочки if ($dataflag & QUEST_DATAFLAG_SERIES) { // не используется для вычисления самих сериесов, исключительно для внесения соответствующих полей в массив информации } // Все ОК. Это не обязательный return, но в некоторых функциях нужен. return $data; }
$npc['maxlevel'] = '??'; } $npc['mindmg'] = round(($row['mindmg'] + $row['attackpower']) * $row['dmg_multiplier']); $npc['maxdmg'] = round(($row['maxdmg'] + $row['attackpower']) * $row['dmg_multiplier']); $toDiv = array('minhealth', 'maxmana', 'minmana', 'maxhealth', 'armor', 'mindmg', 'maxdmg'); // Раздел�ем на ты��чи (ххххххххх => ххх,ххх,ххх) foreach ($toDiv as $e) { $npc[$e] = number_format($npc[$e]); } $npc['rank'] = $smarty->get_config_vars('rank' . $npc['rank']); // faction_A = faction_H $npc['faction_num'] = $row['factionID']; $npc['faction'] = $row['faction-name']; // Деньги $money = ($row['mingold'] + $row['maxgold']) / 2; $npc = @array_merge($npc, money2coins($money)); // Героик/нормал копи� �ПС if ($npc['difficulty_entry_1']) { // �то нормал �ПС, ищем героика if ($tmp = creatureinfo($npc['difficulty_entry_1'])) { $npc['heroic'] = array('type' => 0, 'entry' => $tmp['entry'], 'name' => str_replace(LOCALE_HEROIC, '', $tmp['name'])); unset($tmp); } } else { // � может быть героик �ПС одним дл� не�кольких нормалов? // �читаем что нет $tmp = $DB->selectRow(' SELECT c.entry, c.name { , l.name_loc?d as `name_loc` }