From 215d7ab95bf39fe379ded061f6454b7d196ed9dc Mon Sep 17 00:00:00 2001 From: Shadez Date: Sat, 6 Feb 2010 14:03:31 +0800 Subject: [PATCH] [63] Added `Provided for`, `Objective of` and `Starts` blocks for quest items in item-info.php --- includes/classes/class.items.php | 100 ++++++++++++++++++++++-------- includes/classes/class.mangos.php | 44 ++++++++++--- includes/locales/en_gb.conf | 7 ++- includes/locales/ru_ru.conf | 9 ++- includes/template/guild_stats.tpl | 6 +- includes/template/item_info.tpl | 73 +++++++++++++++++++--- item-info.php | 9 ++- 7 files changed, 194 insertions(+), 54 deletions(-) diff --git a/includes/classes/class.items.php b/includes/classes/class.items.php index a8fd8d7a8..235fe962e 100644 --- a/includes/classes/class.items.php +++ b/includes/classes/class.items.php @@ -3,7 +3,7 @@ /** * @package World of Warcraft Armory * @version Release Candidate 1 - * @revision 61 + * @revision 63 * @copyright (c) 2009-2010 Shadez * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @@ -314,7 +314,7 @@ public function BuildItemSetInfo($itemset) { * @todo Currency for * @return array **/ - public function BuildLootTable($item, $vendor) { + public function BuildLootTable($item, $vendor, $data=false) { $lootTable = ''; switch($vendor) { case 'vendor': @@ -323,110 +323,160 @@ public function BuildLootTable($item, $vendor) { FROM `npc_vendor` WHERE `item`=?", $item); if(!empty($VendorLoot)) { + $i = 0; foreach($VendorLoot as $vItem) { - $lootTable[count($lootTable)] = array ( + $lootTable[$i] = array ( 'name' => Mangos::GetNpcName($vItem['entry']), 'level'=> Mangos::GetNpcInfo($vItem['entry'], 'level'), 'map' => Mangos::GetNpcInfo($vItem['entry'], 'map') ); + $i++; } } - break; - + break; case 'boss': $BossLoot = $this->wDB->select(" SELECT `entry`, `ChanceOrQuestChance` FROM `creature_loot_template` - WHERE `item`=?", $item); + WHERE `item`=?", $item); if(!empty($BossLoot)) { + $i = 0; foreach($BossLoot as $bItem) { $map_npc = Mangos::GetNpcInfo($bItem['entry'], 'map'); if(!empty($map_npc)) { - $lootTable[count($lootTable)] = array ( + $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']) + 'drop_percent' => Mangos::DropPercent($bItem['ChanceOrQuestChance']), + 'makro' => '1' ); + $i++; } } } - break; - + break; case 'chest': $ChestLoot = $this->wDB->select(" SELECT `entry`, `ChanceOrQuestChance` FROM `gameobject_loot_template` WHERE `item`=?", $item); if(!empty($ChestLoot)) { + $i = 0; foreach($ChestLoot as $cItem) { $map_chest = Mangos::GameobjectInfo($cItem['entry'], 'map'); if(!empty($map_chest)) { - $lootTable[count($lootTable)] = array ( + $lootTable[$i] = array ( 'name' => Mangos::GameobjectInfo($cItem['entry'], 'name'), 'map' => $map_chest, 'difficult' => ' ', 'drop_percent' => Mangos::DropPercent($cItem['ChanceOrQuestChance']) ); + $i++; } } } - break; - - case 'quest': + break; + case 'questreward': $QuestLoot = $this->wDB->select(" - SELECT `entry` + SELECT `entry`, `MinLevel` FROM `quest_template` WHERE `RewChoiceItemId1` = ? OR `RewChoiceItemId2` = ? OR `RewChoiceItemId3` = ? OR `RewChoiceItemId4` = ? OR `RewChoiceItemId5` = ? OR `RewChoiceItemId6` = ?", $item, $item, $item, $item, $item, $item); if(!empty($QuestLoot)) { + $i = 0; foreach($QuestLoot as $qItem) { - $lootTable[count($lootTable)] = array ( + $lootTable[$i] = array ( 'title' => Mangos::QuestInfo($qItem['entry'], 'title'), - 'reqlevel' => Mangos::QuestInfo($qItem['entry'], 'reqlevel'), + 'reqlevel' => $qItem['MinLevel'], 'map' => Mangos::QuestInfo($qItem['entry'], 'map') ); + $i++; } } - break; - + 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(" + SELECT `entry`, `MinLevel` + FROM `quest_template` + WHERE `ReqItemId1`=? OR `ReqItemId2`=? OR `ReqItemId3`=? + 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(" SELECT `entry`, `ChanceOrQuestChance` FROM `item_loot_template` WHERE `item`=?", $item); if(!empty($ItemLoot)) { + $i = 0; foreach($ItemLoot as $iItem) { - $lootTable[count($lootTable)] = array ( + $lootTable[$i] = array ( 'name' => Items::GetItemName($iItem['entry']), 'drop_percent' => Mangos::DropPercent($iItem['ChanceOrQuestChance']) ); + $i++; } } - break; - + break; case 'disenchant': $DisenchantLoot = $this->wDB->select(" SELECT `item`, `ChanceOrQuestChance`, `maxcount` FROM `disenchant_loot_template` WHERE `entry`=?", $item); if(!empty($DisenchantLoot)) { + $i = 0; foreach($DisenchantLoot as $dItem) { - $lootTable[count($lootTable)] = array ( + $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; - + break; case 'craft': $CraftLoot = $this->aDB->select(" SELECT `Reagent_1`, `Reagent_2`, `Reagent_3`, `Reagent_4`, `Reagent_5`, `Reagent_6`, `Reagent_7`, `Reagent_8`, diff --git a/includes/classes/class.mangos.php b/includes/classes/class.mangos.php index 802ed1f77..dcb59005f 100644 --- a/includes/classes/class.mangos.php +++ b/includes/classes/class.mangos.php @@ -3,7 +3,7 @@ /** * @package World of Warcraft Armory * @version Release Candidate 1 - * @revision 61 + * @revision 63 * @copyright (c) 2009-2010 Shadez * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @@ -70,18 +70,26 @@ public function QuestInfo($quest, $infoType) { $locale = (isset($_SESSION['armoryLocale'])) ? $_SESSION['armoryLocale'] : $this->armoryconfig['defaultLocale']; switch($infoType) { case 'title': - $nameEn = $this->wDB->selectCell("SELECT `Title` FROM `quest_template` WHERE `entry`=?", $quest); - $nameRus = $this->wDB->selectCell("SELECT `Title_loc8` FROM `locales_quest` WHERE `entry`=?", $quest); - $info = ($locale == 'ru_ru') ? $nameRus : $nameEn; + switch($locale) { + case 'en_gb': + $info = $this->wDB->selectCell("SELECT `Title` FROM `quest_template` WHERE `entry`=?", $quest); + break; + case 'ru_ru': + $info = $this->wDB->selectCell("SELECT `Title_loc8` FROM `locales_quest` WHERE `entry`=?", $quest); + if(!$info) { + $info = $this->wDB->selectCell("SELECT `Title` FROM `quest_template` WHERE `entry`=?", $quest); + } + break; + } break; case 'reqlevel': $info = $this->wDB->selectCell("SELECT `MinLevel` FROM `quest_template` WHERE `entry`=?", $quest); break; case 'map': - $quester = $this->wDB->selectCell("SELECT `id` FROM `creature_questrelation` WHERE `quest`=?", $quest); + $quester = $this->wDB->selectCell("SELECT `id` FROM `creature_involvedrelation` WHERE `quest`=?", $quest); $mapID = $this->wDB->selectCell("SELECT `map` FROM `creature` WHERE `id`=?", $quester); - $info = $this->aDB->selectCell("SELECT `name".$locale."` FROM `armory_maps` WHERE `id`=?", $mapID); - break; + $info = $this->aDB->selectCell("SELECT `name_".$locale."` FROM `armory_maps` WHERE `id`=?", $mapID); + break; } return $info; } @@ -156,6 +164,12 @@ public function GameobjectInfo($entry, $infoType) { SELECT `name_loc8` FROM `locales_gameobject` WHERE `entry`=?", $entry); + if(!$info) { + $info = $this->wDB->selectCell(" + SELECT `name` + FROM `gameobject_template` + WHERE `entry`=?", $entry); + } default: $info = $this->wDB->selectCell(" SELECT `name` @@ -188,9 +202,19 @@ public function GetNPCName($npc) { $NPCNameRU = $this->wDB->selectCell(" SELECT `name_loc8` FROM `locales_creature` - WHERE `entry`=? LIMIT 1", $npc); - $info = ($_locale=='ru_ru') ? $NPCNameRU : $NPCName; - return $info; + WHERE `entry`=? LIMIT 1", $npc); + switch($_locale) { + case 'en_gb': + $name = $this->wDB->selectCell("SELECT `name` FROM `creature_template` WHERE `entry`=? LIMIT 1", $npc); + break; + case 'ru_ru': + $name = $this->wDB->selectCell("SELECT `name_loc8` FROM `locales_creature` WHERE `entry`=? LIMIT 1", $npc); + if(!$name) { + $name = $this->wDB->selectCell("SELECT `name` FROM `creature_template` WHERE `entry`=? LIMIT 1", $npc); + } + break; + } + return $name; } /** diff --git a/includes/locales/en_gb.conf b/includes/locales/en_gb.conf index e22e79a74..0de4fe780 100644 --- a/includes/locales/en_gb.conf +++ b/includes/locales/en_gb.conf @@ -1,9 +1,9 @@ # File: en_gb.conf -# Last-modified: January 29, 2010 +# Last-modified: February 6, 2010 # Author: Shadez # Locale: English (en_GB) # Package: World of Warcraft Armory -# File revision: 55 +# File revision: 63 # Status: Release Candidate 1 # global strings @@ -427,6 +427,9 @@ armory_item_info_reward_from = Reward from armory_item_info_reward_title = Title armory_item_info_reward_requires_level = Req level armory_item_info_reagent_for = Reagent for +armory_item_info_startquestitem = Starts +armory_item_info_providedquestitem = Provided for +armory_item_info_objectivequestitem = Objective of # guild-info.php armory_guild_info_guild_roster = Guild Roster diff --git a/includes/locales/ru_ru.conf b/includes/locales/ru_ru.conf index 67d75dc79..b7ebc1563 100644 --- a/includes/locales/ru_ru.conf +++ b/includes/locales/ru_ru.conf @@ -1,9 +1,9 @@ # File: ru_ru.conf -# Last-modified: January 29, 2010 +# Last-modified: February 6, 2010 # Author: Shadez # Locale: Russian (ru_RU) # Package: World of Warcraft Armory -# File revision: 55 +# File revision: 63 # Status: Release Candidate 1 # global strings @@ -303,7 +303,7 @@ armory_faq_a1 = Оружейная — это обширная база да armory_faq_a2 = Вы можете искать среди персонажей, предметов, гильдий, команд Арены и наград для фракций. Выберите соответствующую категорию в выпадающем меню и введите искомое слово. armory_faq_a3 = В правом верхнем углу экрана находится ссылка на вход в систему. Щелкнув по ней, вы сможете ввести информацию о вашей учетной записи World of Warcraft, не покидая текущую страницу Оружейной. Вы также можете выбрать профиль основного персонажа для быстрого доступа. Выберите пункт "Мои персонажи", чтобы перейти к профилям других пероснажей на этой учетной записи. Войдите в Оружейную, чтобы получить доступ к защищенной информации о персонаже, банку гильдии и календарю персонажа.

Более подробную информацию о новом интерфейсе выбора персонажа вы можете узнать в разделе вопросов и ответов о входе в Оружейную. armory_faq_a4 = Мобильная Оружейная World of Warcraft - это версия Оружейной для iPhone™ и iPod touch®. Это приложение, предоставляющее почти те же возомжности пользователям, что и обычная Оружейная, можно загрузить бесплатно с помощью iTunes® App Store. Все подробности вы найдете на странице «Мобильной Оружейной». -armory_faq_a5 = Наведите указатель мыши на любой предмет в профиле персонажа: появится стрелка, которая затем превратится в кнопку «Найти лучше». Щелкнув по этой кнопке, вы попадете на страницу результатов поиска, на которой будет выведен перечень предметов, которые для данного персонажа являются предметами более высокого ранга.

Этот перечень формируется с учетом класса, к которому относится персонаж, его характеристик и качества его обмундирования в целом. Таким образом вы можете найти предметы лучше как для вашего персонажа, так и для других персонажей World of Warcraft. Кроме того, если у вашего персонажа несколько комплектов обмундирования, с помощью этой функции можно найти предметы более высокого ранга для каждого из них. Подбор предметов будет точнее, если персонаж не находится в данный момент под воздействием заклинания, изменяющего его характеристики.

Подробнее читайте в разделе часто задаваемых вопросов о поиске предметов лучше. +armory_faq_a5 = Наведите указатель мыши на любой предмет в профиле персонажа: появится стрелка, которая затем превратится в кнопку «Найти лучше». Щелкнув по этой кнопке, вы попадете на страницу результатов поиска, на которой будет выведен перечень предметов, которые для данного персонажа являются предметами более высокого ранга.

Этот перечень формируется с учетом класса, к которому относится персонаж, его характеристик и качества его обмундирования в целом. Таким образом вы можете найти предметы лучше как для вашего персонажа, так и для других персонажей World of Warcraft. Кроме того, если у вашего персонажа несколько комплектов обмундирования, с помощью этой функции можно найти предметы более высокого ранга для каждого из них. Подбор предметов будет точнее, если персонаж не находится в данный момент под воздействием заклинания, изменяющего его характеристики.

Подробнее читайте в разделе часто задаваемых вопросов о поиске предметов лучше. armory_faq_a6 = Критерий соответствия действует так же, как в поисковых системах: те результаты поиска, которые точнее всего отвечают запросу, выводятся первыми. Соответствие определяется с помощью алгоритма, выстроенного на основе нескольких параметров. Для каждой категории, в которой проводится поиск, они индивидуальны. Например, когда вы ищете персонажа, соответствие будет зависеть от его уровня, от даты его последнего посещения и еще нескольких факторов. armory_faq_a7 = Оружейная поддерживается браузерами Internet Explorer (версии от 6.0 и выше), Firefox, Opera 9, Safari и Chrome и оптимизирована для работы с новейшими версиями этих браузеров. Кроме того, отдельные функции требуют наличия Flash Player. @@ -422,6 +422,9 @@ armory_item_info_reward_from = Награда за armory_item_info_reward_title = Титул armory_item_info_reward_requires_level = Требуемый уровень armory_item_info_reagent_for = Реагент для +armory_item_info_startquestitem = Начинается +armory_item_info_providedquestitem = Предусмотрено для +armory_item_info_objectivequestitem = Является целью для # guild-info.php armory_guild_info_guild_roster = Состав гильдии diff --git a/includes/template/guild_stats.tpl b/includes/template/guild_stats.tpl index 4370ab273..087a4b96a 100644 --- a/includes/template/guild_stats.tpl +++ b/includes/template/guild_stats.tpl @@ -232,8 +232,8 @@
-
{{#armory_guild_stat_minlevel#}}:
- +
{{#armory_guild_stat_minlevel#}}:
+
@@ -242,7 +242,7 @@
-
{{#armory_guild_info_gender#}}: +
{{#armory_guild_info_gender#}}:
diff --git a/includes/template/item_info.tpl b/includes/template/item_info.tpl index e0dcb9862..6dfecc2ff 100644 --- a/includes/template/item_info.tpl +++ b/includes/template/item_info.tpl @@ -135,7 +135,7 @@ {{foreach from=$boss_loot item=boss}} -{{$boss.name}} +{{$boss.name}} {{$boss.level}}{{$boss.boss}} {{$boss.map}}{{$boss.difficult}} {{$boss.drop_percent}} @@ -144,8 +144,6 @@
{{/if}} - - {{if $chest_loot}}
@@ -160,7 +158,6 @@ {{#armory_item_info_drop_chance#}} {{foreach from=$chest_loot item=chest}} - {{$chest.name}} {{$chest.map}}{{$chest.difficult}} @@ -184,7 +181,6 @@ {{#armory_item_info_drop_chance#}} {{foreach from=$item_loot item=item}} - {{$item.name}} @@ -195,7 +191,6 @@
{{/if}} - {{if $vendor_loot}}
@@ -210,7 +205,6 @@ {{#armory_item_info_zone_string#}} {{foreach from=$vendor_loot item=vendor}} - {{$vendor.name}} {{$vendor.level}} @@ -218,11 +212,9 @@ {{/foreach}} -
{{/if}} - {{if $craft_loot}}

@@ -370,6 +362,69 @@
{{/if}} +{{if $queststart}} +
+

+

{{#armory_item_info_startquestitem#}}

+
+
+ + + + + + +{{foreach from=$queststart item=quest}} + + + +{{/foreach}} +
{{#armory_item_info_reward_title#}}{{#armory_item_info_reward_requires_level#}}{{#armory_item_info_zone_string#}}
{{$quest.title}}{{$quest.reqlevel}}{{$quest.map}}
+
+ +{{/if}} +{{if $providedfor}} +
+

+

{{#armory_item_info_providedquestitem#}}

+
+
+ + + + + + +{{foreach from=$providedfor item=quest}} + + + +{{/foreach}} +
{{#armory_item_info_reward_title#}}{{#armory_item_info_reward_requires_level#}}{{#armory_item_info_zone_string#}}
{{$quest.title}}{{$quest.reqlevel}}{{$quest.map}}
+
+ +{{/if}} +{{if $objectiveof}} +
+

+

{{#armory_item_info_objectivequestitem#}}

+
+
+ + + + + + +{{foreach from=$objectiveof item=quest}} + + + +{{/foreach}} +
{{#armory_item_info_reward_title#}}{{#armory_item_info_reward_requires_level#}}{{#armory_item_info_zone_string#}}
{{$quest.title}}{{$quest.reqlevel}}{{$quest.map}}
+
+ +{{/if}}
diff --git a/item-info.php b/item-info.php index 81da6889f..5fa15f9dc 100644 --- a/item-info.php +++ b/item-info.php @@ -3,7 +3,7 @@ /** * @package World of Warcraft Armory * @version Release Candidate 1 - * @revision 61 + * @revision 63 * @copyright (c) 2009-2010 Shadez * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @@ -224,14 +224,19 @@ $armory->tpl->assign('buyPrice', $mangos->getMoney($data['BuyPrice'])); $armory->tpl->assign('sellPrice', $mangos->getMoney($data['SellPrice'])); $armory->tpl->assign('item_icon', $items->getItemIcon($itemID)); +/** Loot tables **/ $armory->tpl->assign('boss_loot', $items->BuildLootTable($itemID, 'boss')); $armory->tpl->assign('vendor_loot',$items->BuildLootTable($itemID, 'vendor')); $armory->tpl->assign('chest_loot', $items->BuildLootTable($itemID, 'chest')); -$armory->tpl->assign('quest_loot', $items->BuildLootTable($itemID, 'quest')); +$armory->tpl->assign('quest_loot', $items->BuildLootTable($itemID, 'questreward')); +$armory->tpl->assign('queststart', $items->BuildLootTable($itemID, 'queststart')); +$armory->tpl->assign('providedfor', $items->BuildLootTable($itemID, 'providedfor')); +$armory->tpl->assign('objectiveof', $items->BuildLootTable($itemID, 'objectiveof')); $armory->tpl->assign('item_loot', $items->BuildLootTable($itemID, 'item')); $armory->tpl->assign('disenchant_loot', $items->BuildLootTable($itemID, 'disenchant')); $armory->tpl->assign('craft_loot', $items->BuildLootTable($itemID, 'craft')); $armory->tpl->assign('reagent_loot', $items->BuildLootTable($itemID, 'reagent')); +/** Loot tables **/ $armory->tpl->assign('item_level', $data['ItemLevel']); $armory->tpl->assign('tpl2include', 'item_info'); $armory->tpl->assign('addCssSheet', '@import "_css/int.css";