Ru-MaNGOS

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

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

Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.

Повод для гордости.

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.10.2010, 17:03   #1
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию [10719][FIX] Quest honor reward

Наваял вот что:
Код:
diff --git a/src/game/DBCStores.cpp b/src/game/DBCStores.cpp
index 96044dc..1833740 100644
--- a/src/game/DBCStores.cpp
+++ b/src/game/DBCStores.cpp
@@ -175,6 +175,7 @@ DBCStorage <TaxiPathEntry> sTaxiPathStore(TaxiPathEntryfmt);
 TaxiPathNodesByPath sTaxiPathNodesByPath;
 static DBCStorage <TaxiPathNodeEntry> sTaxiPathNodeStore(TaxiPathNodeEntryfmt);
 
+DBCStorage <TeamContributionPoints> sTeamContributionPoints(TeamContributionPointsfmt);
 DBCStorage <TotemCategoryEntry> sTotemCategoryStore(TotemCategoryEntryfmt);
 DBCStorage <VehicleEntry> sVehicleStore(VehicleEntryfmt);
 DBCStorage <VehicleSeatEntry> sVehicleSeatStore(VehicleSeatEntryfmt);
@@ -632,6 +633,7 @@ void LoadDBCStores(const std::string& dataPath)
         }
     }
 
+    LoadDBC(availableDbcLocales,bar,bad_dbc_files,sTeamContributionPoints,   dbcPath,"TeamContributionPoints.dbc");
     LoadDBC(availableDbcLocales,bar,bad_dbc_files,sTotemCategoryStore,       dbcPath,"TotemCategory.dbc");
     LoadDBC(availableDbcLocales,bar,bad_dbc_files,sVehicleStore,             dbcPath,"Vehicle.dbc");
     LoadDBC(availableDbcLocales,bar,bad_dbc_files,sVehicleSeatStore,         dbcPath,"VehicleSeat.dbc");
diff --git a/src/game/DBCStores.h b/src/game/DBCStores.h
index ad07b05..6d94f85 100644
--- a/src/game/DBCStores.h
+++ b/src/game/DBCStores.h
@@ -160,6 +160,7 @@ extern TaxiMask                                  sTaxiNodesMask;
 extern TaxiMask                                  sOldContinentsNodesMask;
 extern TaxiPathSetBySource                       sTaxiPathSetBySource;
 extern TaxiPathNodesByPath                       sTaxiPathNodesByPath;
+extern DBCStorage <TeamContributionPoints>       sTeamContributionPoints;
 extern DBCStorage <TotemCategoryEntry>           sTotemCategoryStore;
 extern DBCStorage <VehicleEntry>                 sVehicleStore;
 extern DBCStorage <VehicleSeatEntry>             sVehicleSeatStore;
diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h
index c8f7489..abc2961 100644
--- a/src/game/DBCStructure.h
+++ b/src/game/DBCStructure.h
@@ -1704,6 +1704,12 @@ struct TaxiPathNodeEntry
     uint32    departureEventID;                             // 10       m_departureEventID
 };
 
+struct TeamContributionPoints
+{
+    uint32    Entry;                                        // 0
+    float     Value;                                         // 1 (???)
+};
+
 struct TotemCategoryEntry
 {
     uint32    ID;                                           // 0
diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h
index a9ff44f..a613639 100644
--- a/src/game/DBCfmt.h
+++ b/src/game/DBCfmt.h
@@ -103,6 +103,7 @@ const char TalentTabEntryfmt[]="nxxxxxxxxxxxxxxxxxxxiiix";
 const char TaxiNodesEntryfmt[]="nifffssssssssssssssssxii";
 const char TaxiPathEntryfmt[]="niii";
 const char TaxiPathNodeEntryfmt[]="diiifffiiii";
+const char TeamContributionPointsfmt[]="if";
 const char TotemCategoryEntryfmt[]="nxxxxxxxxxxxxxxxxxii";
 const char VehicleEntryfmt[]="niffffiiiiiiiifffffffffffffffssssfifixxx";
 const char VehicleSeatEntryfmt[]="niiffffffffffiiiiiifffffffiiifffiiiiiiiffiiiiixxxxxxxxxxxx";
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 1daeabd..a752c44 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -13585,6 +13585,23 @@ void Player::IncompleteQuest(uint32 quest_id)
     }
 }
 
+int Player::GetQuestRewardHonor(Quest const *pQuest)
+{
+    int honor = 0;
+    if(pQuest)
+    {
+        if(pQuest->GetRewHonorAddition() > 0 || pQuest->GetRewHonorMultiplier() > 0.0f)
+        {
+            TeamContributionPoints const* tc = sTeamContributionPoints.LookupEntry(getLevel() - 1);
+            if(!tc)
+                return 0;
+            int i_honor = int(tc->Value * pQuest->GetRewHonorMultiplier() * 0.1000000014901161);
+            honor = i_honor + pQuest->GetRewHonorAddition();
+        }
+    }
+    return honor;
+}
+
 void Player::RewardQuest(Quest const *pQuest, uint32 reward, Object* questGiver, bool announce)
 {
     uint32 quest_id = pQuest->GetQuestId();
@@ -13660,8 +13677,8 @@ void Player::RewardQuest(Quest const *pQuest, uint32 reward, Object* questGiver,
     }
 
     // honor reward
-    if (pQuest->GetRewHonorAddition())
-        RewardHonor(NULL, 0, MaNGOS::Honor::hk_honor_at_level(getLevel(), pQuest->GetRewHonorAddition()));
+    if (GetQuestRewardHonor(pQuest))
+        RewardHonor(NULL, 0, GetQuestRewardHonor(pQuest));
 
     // title reward
     if (pQuest->GetCharTitleId())
diff --git a/src/game/Player.h b/src/game/Player.h
index eb2a194..243a0f6 100644
--- a/src/game/Player.h
+++ b/src/game/Player.h
@@ -1420,6 +1420,7 @@ class MANGOS_DLL_SPEC Player : public Unit
         void AddQuest( Quest const *pQuest, Object *questGiver );
         void CompleteQuest( uint32 quest_id );
         void IncompleteQuest( uint32 quest_id );
+        int     GetQuestRewardHonor( Quest const *pQuest );
         void RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver, bool announce = true );
 
         void FailQuest( uint32 quest_id );
Теперь хонор за квесты дают. То, что отображает в клиенте, то и получаем по факту, спасибо, наконец-то решена эта очень давнишняя (с ревизии 9312) проблема с отсутствием хонора за квесты.
Если что - автор основного TOM_RUS, см. тут.
KiriX вне форума  
2 пользователя(ей) сказали cпасибо:
Vladimir (10.11.2010)
Старый 31.10.2010, 17:22   #2
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

0.1000000014901161 это на самом деле 0.1.
На мой взгляд, логичнее было бы реализовать GetQuestRewardHonor как метод класса Quest.
zergtmn вне форума  
Пользователь сказал cпасибо:
Vladimir (10.11.2010)
Старый 31.10.2010, 20:29   #3
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Да, воплне логично (а как там левел игрока получить???), но, как я уже писал, я писал на скорую руку, где главным куском был код ТОМа. Да и в настоящий момент все награды за квест - в player.cpp - так что и тут тоже вроде как вполне логично. Не суть - главное чтобы работало, а сейчас почему-то кол-во опыта больше чем отображается при просмотре кв. в клиенте... И миллионные доли такого разброса дать точно не могут. Где ошибка? В начисляемом хоноре или в отображаемом в клиенте?
KiriX вне форума  
Старый 31.10.2010, 20:40   #4
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Да, воплне логично (а как там левел игрока получить???), но, как я уже писал, я писал на скорую руку, где главным куском был код ТОМа. Да и в настоящий момент все награды за квест - в player.cpp - так что и тут тоже вроде как вполне логично. Не суть - главное чтобы работало, а сейчас почему-то кол-во опыта больше чем отображается при просмотре кв. в клиенте... И миллионные доли такого разброса дать точно не могут. Где ошибка? В начисляемом хоноре или в отображаемом в клиенте?
Проверьте калькулятором, сравните с клиентом, с оффом.
Так кстати вроде должно быть
Код:
TeamContributionPoints const* tc = sTeamContributionPoints.LookupEntry(getLevel() - 1);
TOM_RUS вне форума  
Старый 31.10.2010, 20:50   #5
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
Проверьте калькулятором, сравните с клиентом, с оффом.
Так кстати вроде должно быть
Код:
TeamContributionPoints const* tc = sTeamContributionPoints.LookupEntry(getLevel() - 1);
Единственный вариант - сравнить с оффом. Кстати, в клиенте отображается именно искомое значение: tc->Value. А получаем с разницей в ~30 на 78 уровне и 200-300 на 80 уровне, так что думаю, что "-1" будет сильно занижать хонор, хотя следует проверить. На офф сейчас, к сожалению, доступа нет, да и версия там уже далеко не 3.3.5...
В ближайшее время проверю с "-1"...
KiriX вне форума  
Старый 02.11.2010, 16:30   #6
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

TOM_RUS, спасибо! "-1" - это то, что было нужно!
Патч на чистые исходники в аттаче. То, что отображает в клиенте, то и получаем по факту, спасибо, наконец-то решена эта очень давнишняя (с ревизии 9312) проблема с отсутствием хонора за квесты
Вложения
Тип файла: patch QuestRewardHonor.patch (4.9 Кб, 13 просмотров)
KiriX вне форума  
Пользователь сказал cпасибо:
Vladimir (05.11.2010)
Старый 02.11.2010, 17:22   #7
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Еще бы не мешало сделать проверку на:
Код:
uint32 level = getLevel() - 1;
if(level > GT_MAX_LEVEL)
    level = GT_MAX_LEVEL;
А также
Код:
const char TeamContributionPointsfmt[]="if";
Код:
const char TeamContributionPointsfmt[]="df";
Код:
struct TeamContributionPoints
{
    uint32    Entry;                                        // 0
    float     Value;                                 		// 1 (???)
};
Код:
struct TeamContributionPoints
{
    //uint32    Entry;                                        // 0
    float     Value;                                 		// 1 (???)
};
Код:
    if (GetQuestRewardHonor(pQuest))
        RewardHonor(NULL, 0, GetQuestRewardHonor(pQuest));
Код:
    if (int honor = GetQuestRewardHonor(pQuest))
        RewardHonor(NULL, 0, honor);

Последний раз редактировалось TOM_RUS; 02.11.2010 в 17:37.
TOM_RUS вне форума  
3 пользователя(ей) сказали cпасибо:
ANTOMA (03.11.2010), KiriX (02.11.2010), Vladimir (10.11.2010)
Старый 10.11.2010, 23:00   #8
Vladimir
MaNGOS Dev
 
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
Vladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небесVladimir Как свет с небес
По умолчанию

Я перенс функцию в Quest где она выглядит более логично.

С этим изменением в [10719]. Спасибо
__________________
Так как устал объяснять знайте ICQ не пользуюсь
Vladimir вне форума  
2 пользователя(ей) сказали cпасибо:
KiriX (11.11.2010), Konctantin (10.11.2010)
 


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[10719] Implement proper calculation quest honor reward. newsbot CMaNGOS Commits 1 11.11.2010 08:52
[10028] Reward group for shareable quests at cast event to creature/go. newsbot CMaNGOS Commits 0 04.06.2010 19:10
Now BG honor marks not reawrded in BG newsbot CMaNGOS Commits 0 08.04.2010 03:40
[9666] Check max. honor points on characteacter login. newsbot CMaNGOS Commits 0 03.04.2010 12:30


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


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