Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
            $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`
					}