Esempio n. 1
0
function objectinfo2(&$Row, $level = 0)
{
    global $DB;
    // Номер объекта
    $object['entry'] = $Row['entry'];
    // Название объекта
    $object['name'] = localizedName($Row);
    // Тип объекта
    $object['type'] = $Row['type'];
    if ($level > 0) {
        // В зависимости от типа объекта, заполняем поля:
        switch ($object['type']) {
            case GAMEOBJECT_TYPE_DOOR:
                /*
                 * data0: startOpen (Boolean flag)
                 * data1: open (LockId from Lock.dbc)
                 * data2: autoClose (long unknown flag)
                 * data3: noDamageImmune (Boolean flag)
                 * data4: openTextID (Unknown Text ID)
                 * data5: closeTextID (Unknown Text ID)
                 */
                $object['lockid'] = $Row['data1'];
                break;
            case GAMEOBJECT_TYPE_BUTTON:
                /*
                 * data0: startOpen (State)
                 * data1: open (LockId from Lock.dbc)
                 * data2: autoClose (long unknown flag)
                 * data3: linkedTrap (gameobject_template.entry (Spawned GO type 6))
                 * data4: noDamageImmune (Boolean flag)
                 * data5: large? (Boolean flag)
                 * data6: openTextID (Unknown Text ID)
                 * data7: closeTextID (Unknown Text ID)
                 * data8: losOK (Boolean flag)
                 */
                $object['lockid'] = $Row['data1'];
            case GAMEOBJECT_TYPE_QUESTGIVER:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: questList (unknown ID)
                 * data2: pageMaterial (PageTextMaterial.dbc)
                 * data3: gossipID (unknown ID)
                 * data4: customAnim (unknown value from 1 to 4)
                 * data5: noDamageImmune (Boolean flag)
                 * data6: openTextID (Unknown Text ID)
                 * data7: losOK (Boolean flag)
                 * data8: allowMounted (Boolean flag)
                 * data9: large? (Boolean flag)
                 */
                $object['lockid'] = $Row['data0'];
                break;
            case GAMEOBJECT_TYPE_CHEST:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: chestLoot (gameobject_loot_template.entry) *This field is obtained from WDB data and is not to be changed*
                 * data2: chestRestockTime (time in seconds)
                 * data3: consumable (State: Boolean flag)
                 * data4: minRestock (Min successful loot attempts for Mining, Herbalism etc)
                 * data5: maxRestock (Max successful loot attempts for Mining, Herbalism etc)
                 * data6: lootedEvent (unknown ID)
                 * data7: linkedTrap (gameobject_template.entry (Spawned GO type 6))
                 * data8: questID (v_quest_template.entry of completed quest)
                 * data9: level (minimal level required to open this gameobject)
                 * data10: losOK (Boolean flag)
                 * data11: leaveLoot (Boolean flag)
                 * data12: notInCombat (Boolean flag)
                 * data13: log loot (Boolean flag)
                 * data14: openTextID (Unknown ID)
                 * data15: use group loot rules (Boolean flag)
                 */
                $object['lockid'] = $Row['data0'];
                $object['lootid'] = $Row['data1'];
                break;
            case GAMEOBJECT_TYPE_BINDER:
                /*	Object type not used */
                break;
            case GAMEOBJECT_TYPE_GENERIC:
                /*
                 * data0: floatingTooltip (Boolean flag)
                 * data1: highlight (Boolean flag)
                 * data2: serverOnly? (Always 0)
                 * data3: large? (Boolean flag)
                 * data4: floatOnWater (Boolean flag)
                 * data5: questID (Required active v_quest_template.entry to work)
                 */
                break;
            case GAMEOBJECT_TYPE_TRAP:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: level (npc equivalent level for casted spell)
                 * data2: radius (Distance)
                 * data3: spell (Spell Id from spell.dbc)
                 * data4: charges (0 or 1)
                 * data5: cooldown (time in seconds)
                 * data6:  ? (unknown flag)
                 * data7: startDelay? (time in seconds)
                 * data8: serverOnly? (always 0)
                 * data9: stealthed (Boolean flag)
                 * data10: large? (Boolean flag)
                 * data11: stealthAffected (Boolean flag)
                 * data12: openTextID (Unknown ID)
                 */
                $object['lockid'] = $Row['data0'];
                break;
            case GAMEOBJECT_TYPE_CHAIR:
                /*
                 * data0: chairslots (number of players that can sit down on it)
                 * data1: chairorientation? (number of usable side?)
                 */
                break;
            case GAMEOBJECT_TYPE_SPELL_FOCUS:
                /*
                 * data0: spellFocusType (from SpellFocusObject.dbc)
                 * data1: radius (Distance)
                 * data2: linkedTrap (gameobject_template.entry (Spawned GO type 6))
                 */
                break;
            case GAMEOBJECT_TYPE_TEXT:
                /*
                 * data0: pageID (page_text.entry)
                 * data1: language (from Languages.dbc)
                 * data2: pageMaterial (PageTextMaterial.dbc)
                 */
                $object['pageid'] = $Row['data0'];
                break;
            case GAMEOBJECT_TYPE_GOOBER:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: questID (Required active v_quest_template.entry to work)
                 * data2: eventID (Unknown Event ID)
                 * data3:  ? (unknown flag)
                 * data4: customAnim (unknown)
                 * data5: consumable (Boolean flag controling if gameobject will despawn or not)
                 * data6: cooldown (time is seconds)
                 * data7: pageID (page_text.entry)
                 * data8: language (from Languages.dbc)
                 * data9: pageMaterial (PageTextMaterial.dbc)
                 * data10: spell (Spell Id from spell.dbc)
                 * data11: noDamageImmune (Boolean flag)
                 * data12: linkedTrap (gameobject_template.entry (Spawned GO type 6))
                 * data13: large? (Boolean flag)
                 * data14: openTextID (Unknown ID)
                 * data15: closeTextID (Unknown ID)
                 * data16: losOK (Boolean flag)
                 */
                $object['lockid'] = $Row['data0'];
                $object['pageid'] = $Row['data7'];
                break;
            case GAMEOBJECT_TYPE_TRANSPORT:
                /* No data data used, all are always 0 */
                break;
            case GAMEOBJECT_TYPE_AREADAMAGE:
                /* Object type not used */
                break;
            case GAMEOBJECT_TYPE_CAMERA:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: camera (Cinematic entry from CinematicCamera.dbc)
                 */
                $object['lockid'] = $Row['data0'];
                break;
            case GAMEOBJECT_TYPE_MAP_OBJECT:
                /* No data data used, all are always 0 */
                break;
            case GAMEOBJECT_TYPE_MO_TRANSPORT:
                /*
                 * data0: taxiPathID (Id from TaxiPath.dbc)
                 * data1: moveSpeed
                 * data2: accelRate
                 */
                break;
            case GAMEOBJECT_TYPE_DUEL_ARBITER:
                /*	Only one Gameobject with this type (21680) and no data data */
                break;
            case GAMEOBJECT_TYPE_FISHINGNODE:
                /*	Only one Gameobject with this type (35591) and no data data */
                break;
            case GAMEOBJECT_TYPE_RITUAL:
                /*
                 * data0: casters?
                 * data1: spell (Spell Id from spell.dbc)
                 * data2: animSpell (Spell Id from spell.dbc)
                 * data3: ritualPersistent (Boolean flag)
                 * data4: casterTargetSpell (Spell Id from spell.dbc)
                 * data5: casterTargetSpellTargets (Boolean flag)
                 * data6: castersGrouped (Boolean flag)
                 */
                break;
            case GAMEOBJECT_TYPE_MAILBOX:
                /* No data data used, all are always 0 */
                break;
            case GAMEOBJECT_TYPE_AUCTIONHOUSE:
                /* data0: actionHouseID (From AuctionHouse.dbc ?) */
                break;
            case GAMEOBJECT_TYPE_GUARDPOST:
                /*	Object type not used */
                break;
            case GAMEOBJECT_TYPE_SPELLCASTER:
                /*
                 * data0: spell (Spell Id from spell.dbc)
                 * data1: charges
                 * data2: partyOnly (Boolean flag, need to be in group to use it)
                 */
                break;
            case GAMEOBJECT_TYPE_MEETINGSTONE:
                /*
                 * data0: minLevel
                 * data1: maxLevel
                 * data2: areaID (From AreaTable.dbc)
                 */
                break;
            case GAMEOBJECT_TYPE_FLAGSTAND:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: pickupSpell (Spell Id from spell.dbc)
                 * data2: radius (distance)
                 * data3: returnAura (Spell Id from spell.dbc)
                 * data4: returnSpell (Spell Id from spell.dbc)
                 * data5: noDamageImmune (Boolean flag)
                 * data6:  ?
                 * data7: losOK (Boolean flag)
                 */
                $object['lockid'] = $Row['data0'];
                break;
            case GAMEOBJECT_TYPE_FISHINGHOLE:
                /*
                 * data0: radius (distance)
                 * data1: chestLoot (gameobject_loot_template.entry)
                 * data2: minRestock
                 * data3: maxRestock
                 */
                $object['lootid'] = $Row['data1'];
                break;
            case GAMEOBJECT_TYPE_FLAGDROP:
                /*
                 * data0: open (LockId from Lock.dbc)
                 * data1: eventID (Unknown Event ID)
                 * data2: pickupSpell (Spell Id from spell.dbc)
                 * data3: noDamageImmune (Boolean flag)
                 */
                $object['lockid'] = $Row['data0'];
                break;
            case GAMEOBJECT_TYPE_MINI_GAME:
                /*	Object type not used
                				Reused in core for CUSTOM_TELEPORT
                					* data0: areatrigger_teleport.id
                			*/
                break;
            case GAMEOBJECT_TYPE_LOTTERY_KIOSK:
                /*	Object type not used */
                break;
            case GAMEOBJECT_TYPE_CAPTURE_POINT:
                /*
                 * data0: radius (Distance)
                 * data1: spell (Unknown ID, not a spell id in dbc file, maybe server only side spell)
                 * data2: worldState1
                 * data3: worldstate2
                 * data4: winEventID1 (Unknown Event ID)
                 * data5: winEventID2 (Unknown Event ID)
                 * data6: contestedEventID1 (Unknown Event ID)
                 * data7: contestedEventID2 (Unknown Event ID)
                 * data8: progressEventID1 (Unknown Event ID)
                 * data9: progressEventID2 (Unknown Event ID)
                 * data10: neutralEventID1 (Unknown Event ID)
                 * data11: neutralEventID2 (Unknown Event ID)
                 * data12: neutralPercent
                 * data13: worldstate3
                 * data14: minSuperiority
                 * data15: maxSuperiority
                 * data16: minTime (in seconds)
                 * data17: maxTime (in seconds)
                 * data18: large? (Boolean flag)
                 */
                break;
            case GAMEOBJECT_TYPE_AURA_GENERATOR:
                /*
                 * data0: startOpen (Boolean flag)
                 * data1: radius (Distance)
                 * data2: auraID1 (Spell Id from spell.dbc)
                 * data3: conditionID1 (Unknown ID)
                 */
                break;
            case GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY:
                /*
                 * data0: mapID (From Maps.dbc)
                 * data1: difficulty (0 or 1)
                 */
                break;
            case GAMEOBJECT_TYPE_UNK:
                /*	Object type not used */
                break;
            case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING:
                /*	Object type not used */
                break;
            case GAMEOBJECT_TYPE_GUILD_BANK:
                /*	No data data used, all are always 0 */
                break;
        }
        // Тип объекта и требуемый уровень скилла, и какого скилла
        if ($object['lockid']) {
            $lock_row = $DB->selectRow('
				SELECT *
				FROM ?_lock
				WHERE lockID=?d
				LIMIT 1
				', $object['lockid']);
            if ($lock_row) {
                for ($j = 1; $j <= 5; $j++) {
                    switch ($lock_row['type' . $j]) {
                        case 0:
                            // Не замок
                            break;
                        case 1:
                            // Ключ
                            $object['key'] = array();
                            $object['key'] = $DB->selectRow('SELECT entry as id, name, quality FROM item_template WHERE entry=?d LIMIT 1', $lock_row['lockproperties' . $j]);
                            break;
                        case 2:
                            // Скилл
                            switch ($lock_row['lockproperties' . $j]) {
                                case LOCK_PROPERTIES_FOOTLOCK:
                                    // Сундук
                                    $object['type'] = -5;
                                    $object['lockpicking'] = $lock_row['requiredskill' . $j];
                                    break;
                                case LOCK_PROPERTIES_HERBALISM:
                                    // Трава
                                    $object['type'] = -3;
                                    $object['herbalism'] = $lock_row['requiredskill' . $j];
                                    break;
                                case LOCK_PROPERTIES_MINING:
                                    // Руда
                                    $object['type'] = -4;
                                    $object['mining'] = $lock_row['requiredskill' . $j];
                                    break;
                                default:
                                    break;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
        }
        // Текст страниц
        if ($object['pageid']) {
            while ($object['pageid'] > 0) {
                $row = $DB->selectRow('
						SELECT text, next_page
							{, text_loc?d}
						FROM page_text p
							{LEFT JOIN (locales_page_text l) ON l.entry = p.entry AND ?}
						WHERE
							p.entry = ?d
						LIMIT 1
					', $_SESSION['locale'] ? $_SESSION['locale'] : DBSIMPLE_SKIP, $_SESSION['locale'] ? 1 : DBSIMPLE_SKIP, $object['pageid']);
                /*
                if($_SESSION['locale']>0)
                	$text = QuestReplaceStr($DB->selectCell('SELECT Text_loc?d FROM locales_page_text WHERE entry = ?d LIMIT 1', $_SESSION['locale'], $object['pageid']));
                if($text)
                	$next_page = $DB->selectCell('SELECT next_page FROM page_text WHERE entry = ?d LIMIT 1', $object['pageid']);
                else
                	list($text, $next_page) = $DB->selectRow('SELECT text AS \'0\', next_page AS \'1\' FROM page_text WHERE entry = ?d LIMIT 1', $object['pageid']);
                */
                $row['text'] = QuestReplaceStr(localizedName($row, 'text'));
                if (empty($row['text'])) {
                    break;
                }
                $object['pagetext'][] = $row['text'];
                $object['pageid'] = $row['next_page'];
            }
        }
        // Лут...
        if (isset($object['lootid'])) {
            $object['drop'] = array();
            if (!($object['drop'] = loot('gameobject_loot_template', $object['lootid']))) {
                unset($object['drop']);
            }
        }
    }
    switch ($object['type']) {
        case 9:
            $type = "Buch";
            break;
        case 3:
            $type = "Behälter";
            break;
        case 5:
            $type = "Schließkiste";
            break;
        case 3:
            $type = "Kräuter";
            break;
        case 4:
            $type = "Erzvorkommen";
            break;
        case 2:
            $type = "Quest";
            break;
        default:
            $type = '';
            break;
    }
    $x = '';
    $x .= "<table><tr><td><b class=\"q\">{$object['name']}</b></td></tr></table><table><tr><td>";
    $x .= "{$type}";
    $x .= "</td></tr></table>";
    $object['tooltip'] = $x;
    return $object;
}
        }
        unset($row);
        unset($numRow);
        unset($extcost);
    }
    unset($rows_s);
    // Дроп
    if (!($npc['drop'] = loot('?_creature_loot_template', $lootid))) {
        unset($npc['drop']);
    }
    // Кожа
    if (!($npc['skinning'] = loot('?_skinning_loot_template', $lootid))) {
        unset($npc['skinning']);
    }
    // Воруеццо
    if (!($npc['pickpocketing'] = loot('?_pickpocketing_loot_template', $lootid))) {
        unset($npc['pickpocketing']);
    }
    // Начиниают квесты...
    $rows_qs = $DB->select('
		SELECT ?#
		FROM ?_creature_questrelation c, ?_quest_template q
		WHERE
			c.id=?
			AND q.entry=c.quest
		', $quest_cols[2], $id);
    if ($rows_qs) {
        $npc['starts'] = array();
        foreach ($rows_qs as $numRow => $row) {
            $npc['starts'][] = GetQuestInfo($row, 0xffffff);
        }
Esempio n. 3
0
				AND a.id = c.refAchievement
				AND c.type IN (?a)
				AND c.value1 = ?d
			GROUP BY a.id
			ORDER BY a.name_loc?d
		', $_SESSION['locale'], $_SESSION['locale'], array(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST), $quest['entry'], $_SESSION['locale']);
    if ($rows) {
        $quest['criteria_of'] = array();
        foreach ($rows as $row) {
            allachievementsinfo2($row['id']);
            $quest['criteria_of'][] = achievementinfo2($row);
        }
    }
    // Награды и благодарности, присылаемые почтой
    if ($quest['RewMailTemplateId']) {
        if (!($quest['mailrewards'] = loot('mail_loot_template', $quest['RewMailTemplateId']))) {
            unset($quest['mailrewards']);
        }
    }
    if ($quest['RewMailDelaySecs']) {
        $quest['maildelay'] = sec_to_time($quest['RewMailDelaySecs']);
    }
    save_cache(QUEST_PAGE, $cache_key, $quest);
}
global $page;
$page = array('Mapper' => false, 'Book' => false, 'Title' => $quest['Title'] . ' - ' . $smarty->get_config_vars('Quests'), 'tab' => 0, 'type' => 5, 'typeid' => $quest['entry'], 'path' => path(0, 5));
$smarty->assign('page', $page);
// Комментарии
$smarty->assign('comments', getcomments($page['type'], $page['typeid']));
$smarty->assign('screenshots', getscreenshots($page['type'], $page['typeid']));
// Данные о квесте
Esempio n. 4
0
				{ LEFT JOIN (?_locales_creature l) ON l.entry=c.entry AND ? }
				WHERE
					skinloot=?d
					AND factiontemplateID=faction_A
				', $npc_cols[0], $_SESSION['locale'] > 0 ? $_SESSION['locale'] : DBSIMPLE_SKIP, $_SESSION['locale'] > 0 ? 1 : DBSIMPLE_SKIP, $lootid);
            foreach ($rows as $numRow => $row) {
                $item['skinnedfrom'][] = array_merge(creatureinfo2($row), $drop);
            }
        }
        unset($rows);
        unset($lootid);
        unset($drop);
    }
    unset($drops_sk);
    // Дизенчантитcя в:
    if (!($item['disenchanting'] = loot('?_disenchant_loot_template', $item['DisenchantID']))) {
        unset($item['disenchanting']);
    }
    // Получается дизэнчантом из..
    $drops_de = drop('?_disenchant_loot_template', $item['entry']);
    if ($drops_de) {
        $item['disenchantedfrom'] = array();
        foreach ($drops_de as $lootid => $drop) {
            $rows = $DB->select('
				SELECT c.?#, c.entry, maxcount
				{
					, l.name_loc?d as `name_loc`
				}
				FROM ?_udwbase_icons, ?_item_template c
				{ LEFT JOIN (?_locales_item l) ON l.entry=c.entry AND ? }
				WHERE
Esempio n. 5
0
				AND a.id = c.refAchievement
				AND c.type IN (?a)
				AND c.value1 = ?d
			GROUP BY a.id
			ORDER BY a.name_loc?d
		', $_SESSION['locale'], $_SESSION['locale'], array(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST), $quest['entry'], $_SESSION['locale']);
    if ($rows) {
        $quest['criteria_of'] = array();
        foreach ($rows as $row) {
            allachievementsinfo2($row['id']);
            $quest['criteria_of'][] = achievementinfo2($row);
        }
    }
    // Награды и благодарности, присылаемые почтой
    if ($quest['RewMailTemplateId']) {
        if (!($quest['mailrewards'] = loot('quest_mail_loot_template', $quest['entry']))) {
            unset($quest['mailrewards']);
        }
    }
    if ($quest['RewMailDelaySecs']) {
        $quest['maildelay'] = sec_to_time($quest['RewMailDelaySecs']);
    }
    save_cache(10, $cache_key, $quest);
}
global $page;
$page = array('Mapper' => false, 'Book' => false, 'Title' => $quest['Title'] . ' - ' . $smarty->get_config_vars('Quests'), 'tab' => 0, 'type' => 5, 'typeid' => $quest['entry'], 'path' => path(0, 5));
$smarty->assign('page', $page);
// Комментарии
$smarty->assign('comments', getcomments($page['type'], $page['typeid']));
// Данные о квесте
$smarty->assign('quest', $quest);
Esempio n. 6
0
File: item.php Progetto: Reved/aowow
						FROM ?_zones
						WHERE
							areatableID=?d
						LIMIT 1
					', $lootid);
                if ($row) {
                    $item['fishedin'][] = array_merge($row, $drop);
                }
            }
        }
        unset($row);
        unset($num);
    }
    unset($drops_fi);
    // Размалывается в
    if (!($item['milling'] = loot('milling_loot_template', $item['entry']))) {
        unset($item['milling']);
    }
    // Получается размалыванием из
    $drops_mi = drop('milling_loot_template', $item['entry']);
    if ($drops_mi) {
        $item['milledfrom'] = array();
        foreach ($drops_mi as $lootid => $drop) {
            $rows = $DB->select('
					SELECT c.?#, c.entry, maxcount
					{
						, l.name_loc?d AS name_loc
					}
					FROM ?_icons, item_template c
					{ LEFT JOIN (locales_item l) ON l.entry=c.entry AND ? }
					WHERE
Esempio n. 7
0
function loot($table, $lootid, $group = 0)
{
    global $DB, $item_cols;
    // Мего запрос :)
    $rows = $DB->select('
		SELECT l.ChanceOrQuestChance, l.mincountOrRef, l.maxcount as `d-max`, l.groupid, ?#, i.entry, i.maxcount
			{, loc.name_loc?d AS name_loc}
		FROM ?# l
			LEFT JOIN (?_icons a, item_template i) ON l.item=i.entry AND a.id=i.displayid
			{LEFT JOIN (locales_item loc) ON loc.entry=i.entry AND ?d}
		WHERE
			l.entry=?d
			AND l.entry <> 0
			{ AND l.groupid = ?d }
		{LIMIT ?d}
		', $item_cols[2], $_SESSION['locale'] ? $_SESSION['locale'] : DBSIMPLE_SKIP, $table, $_SESSION['locale'] ? 1 : DBSIMPLE_SKIP, $lootid, $group ? $group : DBSIMPLE_SKIP, $AoWoWconf['limit'] != 0 ? $AoWoWconf['limit'] : DBSIMPLE_SKIP);
    // Подсчитываем нужную информацию о группах
    $groupchance = array();
    $groupzero = array();
    foreach ($rows as $row) {
        if ($row['mincountOrRef'] >= 0) {
            $gid = $row['groupid'];
            if (!isset($groupchance[$gid])) {
                $groupchance[$gid] = 0;
            }
            if (!isset($groupzero[$gid])) {
                $groupzero[$gid] = 0;
            }
            if ($row['ChanceOrQuestChance'] == 0) {
                $groupzero[$gid]++;
            } else {
                $groupchance[$gid] += abs($row['ChanceOrQuestChance']);
            }
        }
    }
    // Присваиваем каждой группе номер от 1
    $maxgroup = 0;
    $groupnum = array();
    foreach ($groupchance as $id => $group) {
        if ($id) {
            $groupnum[$id] = ++$maxgroup;
        } else {
            $groupnum[$id] = "";
        }
    }
    // Cохраняем весь нессылочный лут
    $loot = array();
    foreach ($rows as $row) {
        if ($row['mincountOrRef'] > 0) {
            $chance = $row['ChanceOrQuestChance'];
            if ($chance == 0) {
                $chance = (100 - $groupchance[$row['groupid']]) / $groupzero[$row['groupid']];
                if ($chance < 0) {
                    $chance = 0;
                }
                if ($chance > 100) {
                    $chance = 100;
                }
            }
            $item = $row['entry'] . '.' . $row['groupid'];
            // Это чтобы отделить предметы в разных группах
            if (isset($loot[$item])) {
                $loot[$item]['mincount'] = min($row['mincountOrRef'], $loot[$item]['mincount']);
                if ($row['groupid']) {
                    $loot[$item]['maxcount'] = max($loot[$item]['maxcount'], $row['d-max']);
                } else {
                    $loot[$item]['maxcount'] = $loot[$item]['maxcount'] + $row['d-max'];
                }
                $loot[$item]['percent'] = 1 - (1 - abs($chance)) * (1 - abs($loot[$item]['percent']));
            } else {
                $loot[$item] = iteminfo2($row, 0);
                $loot[$item]['mincount'] = $row['mincountOrRef'];
                $loot[$item]['maxcount'] = $row['d-max'];
                $loot[$item]['percent'] = $chance;
                $loot[$item]['group'] = $groupnum[$row['groupid']];
                $loot[$item]['groupcount'] = 1;
            }
        }
    }
    // И наконец, добавляем весь лут со ссылок
    foreach ($rows as $row) {
        if ($row['mincountOrRef'] < 0) {
            $newmax = $maxgroup;
            $tmploots = loot('reference_loot_template', -$row['mincountOrRef'], $row['groupid']);
            foreach ($tmploots as $tmploot) {
                if ($tmploot['group']) {
                    $tmploot['group'] += $maxgroup;
                    if ($newmax < $tmploot['group']) {
                        $newmax = $tmploot['group'];
                    }
                    $tmploot['groupcount'] = $tmploot['groupcount'] * $row['d-max'];
                } else {
                    $tmploot['maxcount'] *= $row['d-max'];
                }
                $tmploot['percent'] *= abs($row['ChanceOrQuestChance']) / 100;
                $loot[] = $tmploot;
            }
            $maxgroup = $newmax;
        }
    }
    return $loot;
}
Esempio n. 8
0
                    if (!isset($spell['icon'])) {
                        $spell['icon'] = $tmpRow['iconname'];
                    }
                }
                // Создает спелл
                if ($row['effect' . $j . 'triggerspell'] > 0) {
                    $spell['effect'][$i]['spell'] = array();
                    $spell['effect'][$i]['spell']['entry'] = $row['effect' . $j . 'triggerspell'];
                    $spell['effect'][$i]['spell']['name'] = $DB->selectCell('SELECT spellname_loc' . $_SESSION['locale'] . ' FROM ?_spell WHERE spellID = ?d LIMIT 1', $spell['effect'][$i]['spell']['entry']);
                    allspellsinfo($spell['effect'][$i]['spell']['entry']);
                }
                $i++;
            }
        }
        // Что лутится из этого спелла (для effect_id=59 /* Open Lock Item */)
        if (($row['effect1id'] == 59 || $row['effect2id'] == 59 || $row['effect3id'] == 59) && !($spell['contains'] = loot('spell_loot_template', $spell['entry']))) {
            unset($spell['contains']);
        }
        if (!isset($spell['icon'])) {
            $spell['icon'] = $row['iconname'];
        }
        // Спеллы с таким же названием
        $seealso = $DB->select('
			SELECT s.*, i.iconname
			FROM ?_spell s, ?_spellicons i
			WHERE
				s.spellname_loc' . $_SESSION['locale'] . ' = ?
				AND s.spellID <> ?d
				AND (
							(s.effect1id = ?d AND s.effect1id!=0)
							OR (s.effect2id = ?d AND s.effect2id!=0)
Esempio n. 9
0
function loot($table, $lootid, $mod = 1)
{
    // Все элементы
    global $DB, $item_cols;
    $loot = array();
    $groups = array();
    // Мего запрос :)
    $rows = $DB->select('
		SELECT l.ChanceOrQuestChance, l.mincountOrRef, l.maxcount, l.groupid, ?#, i.entry
			{, loc.name_loc?d AS name_loc}
		FROM ?# l
			LEFT JOIN (?_icons a, item_template i) ON l.item=i.entry AND a.id=i.displayid
			{LEFT JOIN (locales_item loc) ON loc.entry=i.entry AND ?d}
		WHERE
			l.entry=?d
		ORDER BY groupid ASC, ChanceOrQuestChance DESC
		{LIMIT ?d}
		', $item_cols[2], $_SESSION['locale'] ? $_SESSION['locale'] : DBSIMPLE_SKIP, $table, $_SESSION['locale'] ? 1 : DBSIMPLE_SKIP, $lootid, $AoWoWconf['limit'] != 0 ? $AoWoWconf['limit'] : DBSIMPLE_SKIP);
    $last_group = 0;
    $last_group_equal_chance = 100;
    // Перебираем
    foreach ($rows as $row) {
        // Не группа
        if ($row['groupid'] == 0) {
            // Ссылка
            if ($row['mincountOrRef'] < 0) {
                add_loot($loot, loot('reference_loot_template', -$row['mincountOrRef'], abs($row['ChanceOrQuestChance']) / 100 * $row['maxcount'] * $mod));
            } else {
                // Обыкновенный дроп
                add_loot($loot, array(array_merge(array('percent' => max(abs($row['ChanceOrQuestChance']) * $mod, 0) * sign($row['ChanceOrQuestChance']), 'mincount' => $row['mincountOrRef'], 'maxcount' => $row['maxcount']), iteminfo2($row, 0))));
            }
        } else {
            $chance = abs($row['ChanceOrQuestChance']);
            // Новая группа?
            if ($row['groupid'] != $last_group) {
                $last_group = $row['groupid'];
                $last_group_equal_chance = 100;
            }
            // Шанс лута задан
            if ($chance > 0) {
                $last_group_equal_chance -= $chance;
                $last_group_equal_chance = max($last_group_equal_chance, 0);
                // Ссылка
                if ($row['mincountOrRef'] < 0) {
                    add_loot($loot, loot('reference_loot_template', -$row['mincountOrRef'], $chance / 100 * $row['maxcount'] * $mod));
                } else {
                    add_loot($loot, array(array_merge(array('percent' => $chance * $mod, 'mincount' => $row['mincountOrRef'], 'maxcount' => $row['maxcount']), iteminfo2($row, 0))));
                }
            } else {
                $groups[$last_group][] = array_merge(array('mincount' => $row['mincountOrRef'], 'maxcount' => $row['maxcount'], 'groupchance' => $last_group_equal_chance * $mod), iteminfo2($row, 0));
            }
        }
    }
    // Перебираем и добавляем группы
    foreach ($groups as $group) {
        $num = count($group);
        foreach ($group as $item) {
            $item['percent'] = $item['groupchance'] / $num;
            add_loot($loot, array($item));
        }
    }
    return $loot;
}
Esempio n. 10
0
<?php

require_once 'includes/allutil.php';
require_once 'includes/allitems.php';
require_once 'includes/allcomments.php';
require_once 'includes/allscreenshots.php';
$smarty->config_load($conf_file, 'zone');
// номер объекта;
$id = intval($podrazdel);
$cache_key = cache_key($id);
if (!($zone = load_cache(ZONE_PAGE, $cache_key))) {
    unset($zone);
    // Данные об объекте:
    $zone = $DB->selectRow('SELECT * FROM ?_zones WHERE areatableID = ?d', $id);
    $zone['name'] = localizedName($zone);
    if (!($zone['fishing'] = loot('fishing_loot_template', $id))) {
        unset($zone['fishing']);
    }
    if ($zone['parent']) {
        $row = $DB->selectRow('SELECT * FROM ?_zones WHERE areatableID = ?d', $zone['parent']);
        if ($row) {
            $parentname = localizedName($row);
        }
        unset($row);
        if (!empty($parentname)) {
            $zone['parentname'] = $parentname;
        }
    }
    $rows = $DB->select('SELECT * FROM ?_zones WHERE parent = ?d', $id);
    if ($rows) {
        $zone['subzones'] = array();