Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Патчи > Патчи на рассмотрении

Важная информация

Патчи на рассмотрении Рассматриваемые к принятию патчи

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2010, 13:14   #1
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию [патч] Добавление условий в areatrigger_teleport(доступ по квестам)

Для доступа в новые подземелья, введены отдельные квесты для алов и орды, попытка реализовать.)
Код:
diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp
index a598130..ca25c32 100644
--- a/src/game/MiscHandler.cpp
+++ b/src/game/MiscHandler.cpp
@@ -781,16 +781,28 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
         uint32 missingQuest = 0;
         if (!isRegularTargetMap)
         {
-            if (at->requiredQuestHeroic && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic))
+            if (at->requiredQuestHeroic2 && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic2))
+                missingQuest = at->requiredQuestHeroic2;
+        }
+        else
+        {
+            if (at->requiredQuestHeroic && !GetPlayer()->GetQuestRewardStatus(at->requiredQuestHeroic))
                 missingQuest = at->requiredQuestHeroic;
         }
+
+        uint32 missingQuest2 = 0;
+        if (!isRegularTargetMap)
+        {
+            if (at->requiredQuest2 && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest2))
+                missingQuest2 = at->requiredQuest2;
+        }
         else
         {
             if (at->requiredQuest && !GetPlayer()->GetQuestRewardStatus(at->requiredQuest))
-                missingQuest = at->requiredQuest;
+                missingQuest2 = at->requiredQuest;
         }
 
-        if(missingLevel || missingItem || missingKey || missingQuest)
+        if(missingLevel || missingItem || missingKey || missingQuest || missingQuest2)
         {
             // TODO: all this is probably wrong
             if(missingItem)
@@ -799,6 +811,8 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
                 GetPlayer()->SendTransferAborted(at->target_mapId, TRANSFER_ABORT_DIFFICULTY, isRegularTargetMap ? DUNGEON_DIFFICULTY_NORMAL : DUNGEON_DIFFICULTY_HEROIC);
             else if(missingQuest)
                 SendAreaTriggerMessage("%s", at->requiredFailedText.c_str());
+            else if(missingQuest2)
+                SendAreaTriggerMessage("%s", at->requiredFailedText.c_str());
             else if(missingLevel)
                 SendAreaTriggerMessage(GetMangosString(LANG_LEVEL_MINREQUIRED), missingLevel);
             return;
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index b5ca24c..1f4873d 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -5454,7 +5454,7 @@ void ObjectMgr::LoadAreaTriggerTeleports()
     uint32 count = 0;
 
     //                                                0   1               2              3               4           5            6                    7                           8                     9           10                 11                 12                 13
-    QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, required_quest_done, required_quest_done_heroic, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport");
+    QueryResult *result = WorldDatabase.Query("SELECT id, required_level, required_item, required_item2, heroic_key, heroic_key2, required_quest_done, required_quest_done2, required_quest_done_heroic, required_quest_done_heroic2, required_failed_text, target_map, target_position_x, target_position_y, target_position_z, target_orientation FROM areatrigger_teleport");
     if (!result)
     {
 
@@ -5487,13 +5487,15 @@ void ObjectMgr::LoadAreaTriggerTeleports()
         at.heroicKey            = fields[4].GetUInt32();
         at.heroicKey2           = fields[5].GetUInt32();
         at.requiredQuest        = fields[6].GetUInt32();
-        at.requiredQuestHeroic  = fields[7].GetUInt32();
-        at.requiredFailedText   = fields[8].GetCppString();
-        at.target_mapId         = fields[9].GetUInt32();
-        at.target_X             = fields[10].GetFloat();
-        at.target_Y             = fields[11].GetFloat();
-        at.target_Z             = fields[12].GetFloat();
-        at.target_Orientation   = fields[13].GetFloat();
+        at.requiredQuest2        = fields[7].GetUInt32();
+        at.requiredQuestHeroic  = fields[8].GetUInt32();
+        at.requiredQuestHeroic2  = fields[9].GetUInt32();
+        at.requiredFailedText   = fields[10].GetCppString();
+        at.target_mapId         = fields[11].GetUInt32();
+        at.target_X             = fields[12].GetFloat();
+        at.target_Y             = fields[13].GetFloat();
+        at.target_Z             = fields[14].GetFloat();
+        at.target_Orientation   = fields[15].GetFloat();
 
         AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID);
         if (!atEntry)
@@ -5552,6 +5554,16 @@ void ObjectMgr::LoadAreaTriggerTeleports()
             }
         }
 
+        if (at.requiredQuest2)
+        {
+            QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuest2);
+            if (qReqItr == mQuestTemplates.end())
+            {
+                sLog.outErrorDb("Table `areatrigger_teleport` has not existed required second quest %u for trigger %u, remove quest done requirement.",at.requiredQuest2,Trigger_ID);
+                at.requiredQuest2 = 0;
+            }
+        }
+
         if (at.requiredQuestHeroic)
         {
             QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuestHeroic);
@@ -5562,6 +5574,16 @@ void ObjectMgr::LoadAreaTriggerTeleports()
             }
         }
 
+        if (at.requiredQuestHeroic2)
+        {
+            QuestMap::iterator qReqItr = mQuestTemplates.find(at.requiredQuestHeroic2);
+            if (qReqItr == mQuestTemplates.end())
+            {
+                sLog.outErrorDb("Table `areatrigger_teleport` has not existed required heroic second quest %u for trigger %u, remove quest done requirement.",at.requiredQuestHeroic2,Trigger_ID);
+                at.requiredQuestHeroic2 = 0;
+            }
+        }
+
         MapEntry const* mapEntry = sMapStore.LookupEntry(at.target_mapId);
         if (!mapEntry)
         {
diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h
index a989f26..cac4e2b 100644
--- a/src/game/ObjectMgr.h
+++ b/src/game/ObjectMgr.h
@@ -117,7 +117,9 @@ struct AreaTrigger
     uint32 heroicKey;
     uint32 heroicKey2;
     uint32 requiredQuest;
+    uint32 requiredQuest2;
     uint32 requiredQuestHeroic;
+    uint32 requiredQuestHeroic2;
     std::string requiredFailedText;
     uint32 target_mapId;
     float  target_X;
Код:
ALTER TABLE areatrigger_teleport
ADD COLUMN required_quest_done2 int(11) unsigned NOT NULL default '0' AFTER required_quest_done,
ADD COLUMN required_quest_done_heroic2 int(11) unsigned NOT NULL default '0' AFTER required_quest_done_heroic;
NeatElves вне форума   Ответить с цитированием
Старый 17.04.2010, 13:18   #2
timmit
YTDB Dev
 
Регистрация: 01.02.2010
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 36 раз(а) в 25 сообщениях
timmit На верном пути
По умолчанию

Думаю этого не достаточно, ибо как показывает практика required_quest_done_heroic - к 25 нормал относится сейчас, если это не 5 инст
Итого, я так понял, сейчас по два квеста для 5 норм и 5 хероик, 10 нормал и 25 нормал... но 10 и 25 героик не затрагивают как и раньше

Последний раз редактировалось timmit; 17.04.2010 в 13:21.
timmit вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[patch]Скалирующиеся Маунты (Добавление) evilstar Отвергнутые патчи 3 11.05.2010 23:42
[9677] Добавление Показателя блокирования Antimozg Принятые патчи 1 06.04.2010 01:16
[SQL]Добавление квестовых спеллов в тренеров (3.Х.Х и 2.4.3) Pro[100]Hens Патчи и наработки 3 11.03.2010 10:42
Добавление классовых квестовых скиллов тренерам для 3.0.X xstream Патчи и наработки 0 07.03.2010 15:57


Текущее время: 14:51. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot