|
Принятые патчи Иногда выкладывают патчи, которые потом в итоге все-таки принимают в ядро.
Повод для гордости. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
31.10.2010, 17:03 | #1 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
[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 ); Если что - автор основного TOM_RUS, см. тут. |
2 пользователя(ей) сказали cпасибо: | Vladimir (10.11.2010) |
31.10.2010, 17:22 | #2 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
0.1000000014901161 это на самом деле 0.1.
На мой взгляд, логичнее было бы реализовать GetQuestRewardHonor как метод класса Quest. |
Пользователь сказал cпасибо: | Vladimir (10.11.2010) |
31.10.2010, 20:29 | #3 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Да, воплне логично (а как там левел игрока получить???), но, как я уже писал, я писал на скорую руку, где главным куском был код ТОМа. Да и в настоящий момент все награды за квест - в player.cpp - так что и тут тоже вроде как вполне логично. Не суть - главное чтобы работало, а сейчас почему-то кол-во опыта больше чем отображается при просмотре кв. в клиенте... И миллионные доли такого разброса дать точно не могут. Где ошибка? В начисляемом хоноре или в отображаемом в клиенте?
|
31.10.2010, 20:40 | #4 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Так кстати вроде должно быть Код:
TeamContributionPoints const* tc = sTeamContributionPoints.LookupEntry(getLevel() - 1); |
|
31.10.2010, 20:50 | #5 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
В ближайшее время проверю с "-1"... |
|
02.11.2010, 16:30 | #6 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
TOM_RUS, спасибо! "-1" - это то, что было нужно!
Патч на чистые исходники в аттаче. То, что отображает в клиенте, то и получаем по факту, спасибо, наконец-то решена эта очень давнишняя (с ревизии 9312) проблема с отсутствием хонора за квесты |
Пользователь сказал cпасибо: | Vladimir (05.11.2010) |
02.11.2010, 17:22 | #7 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Еще бы не мешало сделать проверку на:
Код:
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. |
10.11.2010, 23:00 | #8 |
MaNGOS Dev
Регистрация: 09.02.2010
Сообщений: 594
Сказал(а) спасибо: 315
Поблагодарили 438 раз(а) в 181 сообщениях
|
Я перенс функцию в Quest где она выглядит более логично.
С этим изменением в [10719]. Спасибо
__________________
Так как устал объяснять знайте ICQ не пользуюсь |
2 пользователя(ей) сказали cпасибо: | KiriX (11.11.2010), Konctantin (10.11.2010) |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[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 |