Index: src/game/GossipDef.cpp =================================================================== --- src/game/GossipDef.cpp (revision 5102) +++ src/game/GossipDef.cpp (working copy) @@ -482,11 +482,21 @@ data << uint32(pQuest->GetType()); data << uint32(pQuest->GetSuggestedPlayers()); - data << uint32(pQuest->GetRequiredMinRepFaction()); - data << uint32(pQuest->GetRequiredMinRepValue()); - data << uint32(pQuest->GetRequiredMaxRepFaction()); - data << uint32(pQuest->GetRequiredMaxRepValue()); + if(pQuest->HasFlag(QUEST_MANGOS_FLAGS_REPUTATION_REQ)) // don't send data to client when it's a server side restriction only + { + data << uint32(0); + data << uint32(0); + } + else // ok to send to client when part of quest objective + { + data << uint32(pQuest->GetRequiredMinRepFaction()); + data << uint32(pQuest->GetRequiredMinRepValue()); + } + + data << uint32(pQuest->GetRequiredMaxRepFaction()); // why do we send this? + data << uint32(pQuest->GetRequiredMaxRepValue()); // why do we send this? + data << uint32(pQuest->GetNextQuestInChain()); data << uint32(pQuest->GetRewOrReqMoney()); data << uint32(pQuest->GetRewMoneyMaxLevel()); Index: src/game/ObjectMgr.cpp =================================================================== --- src/game/ObjectMgr.cpp (revision 5102) +++ src/game/ObjectMgr.cpp (working copy) @@ -2221,7 +2221,7 @@ if (qinfo->QuestFlags & ~QUEST_MANGOS_FLAGS_DB_ALLOWED) { - sLog.outErrorDb("Quest %u has `QuestFlags` = %u > max allowed value. Correct `SpecialFlags` to value <= %u", + sLog.outErrorDb("Quest %u has `SpecialFlags` = %u > max allowed value. Correct `SpecialFlags` to value <= %u", qinfo->GetQuestId(),qinfo->QuestFlags,QUEST_MANGOS_FLAGS_DB_ALLOWED >> 16); qinfo->QuestFlags &= QUEST_MANGOS_FLAGS_DB_ALLOWED; } @@ -2300,6 +2300,20 @@ // no changes, quest can't be done for this requirement } + if(!qinfo->RequiredMinRepFaction && qinfo->RequiredMinRepValue > 0 ) + { + sLog.outErrorDb("Quest %u has `RequiredMinRepValue` = %d but `RequiredMinRepFaction` is 0, value has no effect", + qinfo->GetQuestId(),qinfo->RequiredMinRepValue); + // warning + } + + if(!qinfo->RequiredMaxRepFaction && qinfo->RequiredMaxRepValue > 0 ) + { + sLog.outErrorDb("Quest %u has `RequiredMaxRepValue` = %d but `RequiredMaxRepFaction` is 0, value has no effect", + qinfo->GetQuestId(),qinfo->RequiredMaxRepValue); + // warning + } + if(qinfo->SrcItemId) { if(!sItemStorage.LookupEntry(qinfo->SrcItemId)) Index: src/game/Player.cpp =================================================================== --- src/game/Player.cpp (revision 5102) +++ src/game/Player.cpp (working copy) @@ -11488,7 +11488,7 @@ bool Player::SatisfyQuestReputation( Quest const* qInfo, bool msg ) { uint32 fIdMin = qInfo->GetRequiredMinRepFaction(); //Min required rep - if(fIdMin && GetReputation(fIdMin) < qInfo->GetRequiredMinRepValue()) + if(fIdMin && GetReputation(fIdMin) < qInfo->GetRequiredMinRepValue() && qInfo->HasFlag(QUEST_MANGOS_FLAGS_REPUTATION_REQ)) { if( msg ) SendCanTakeQuestResponse( INVALIDREASON_DONT_HAVE_REQ ); Index: src/game/QuestDef.h =================================================================== --- src/game/QuestDef.h (revision 5102) +++ src/game/QuestDef.h (working copy) @@ -132,13 +132,15 @@ // Mangos flags for set SpecialFlags in DB if required but used only at server QUEST_MANGOS_FLAGS_REPEATABLE = 0x010000, // Set by 1 in SpecialFlags from DB QUEST_MANGOS_FLAGS_EXPLORATION_OR_EVENT = 0x020000, // Set by 2 in SpecialFlags from DB (if reequired area explore, spell SPELL_EFFECT_QUEST_COMPLETE casting, table `*_script` command SCRIPT_COMMAND_QUEST_EXPLORED use, set from script DLL) - QUEST_MANGOS_FLAGS_DB_ALLOWED = 0xFFFF | QUEST_MANGOS_FLAGS_REPEATABLE | QUEST_MANGOS_FLAGS_EXPLORATION_OR_EVENT, // Mangos flags for internal use only QUEST_MANGOS_FLAGS_DELIVER = 0x040000, // Internal flag computed only QUEST_MANGOS_FLAGS_SPEAKTO = 0x080000, // Internal flag computed only QUEST_MANGOS_FLAGS_KILL_OR_CAST = 0x100000, // Internal flag computed only QUEST_MANGOS_FLAGS_TIMED = 0x200000, // Internal flag computed only + QUEST_MANGOS_FLAGS_REPUTATION_REQ = 0x400000, // Set by 64 in SpecialFlags (NOT objective of quest, if objective, no flag is set and data are sent to client) + + QUEST_MANGOS_FLAGS_DB_ALLOWED = 0xFFFF | QUEST_MANGOS_FLAGS_REPEATABLE | QUEST_MANGOS_FLAGS_EXPLORATION_OR_EVENT | QUEST_MANGOS_FLAGS_REPUTATION_REQ, }; struct QuestLocale