mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[10621] Add new field RequiredClasses for quest_template
* SkillOrClass is converted to RequiredSkill (and then field can contain skill id only) * Field ZoneOrSort has no longer a function in quest requirement, and RequiredClasses must be used instead where class limits are expected. To restrict a quest to one class or more, use bitmask of class in RequiredClasses. RequiredSkill works like before. Signed-off-by: NoFantasy <nofantasy@nf.no>
This commit is contained in:
parent
3c6d5e985f
commit
77b064e19a
10 changed files with 198 additions and 165 deletions
|
|
@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`creature_ai_version` varchar(120) default NULL,
|
`creature_ai_version` varchar(120) default NULL,
|
||||||
`cache_id` int(10) default '0',
|
`cache_id` int(10) default '0',
|
||||||
`required_10604_01_mangos_spell_proc_event` bit(1) default NULL
|
`required_10621_01_mangos_quest_template` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -13894,11 +13894,12 @@ CREATE TABLE `quest_template` (
|
||||||
`entry` mediumint(8) unsigned NOT NULL default '0',
|
`entry` mediumint(8) unsigned NOT NULL default '0',
|
||||||
`Method` tinyint(3) unsigned NOT NULL default '2',
|
`Method` tinyint(3) unsigned NOT NULL default '2',
|
||||||
`ZoneOrSort` smallint(6) NOT NULL default '0',
|
`ZoneOrSort` smallint(6) NOT NULL default '0',
|
||||||
`SkillOrClass` smallint(6) NOT NULL default '0',
|
|
||||||
`MinLevel` tinyint(3) unsigned NOT NULL default '0',
|
`MinLevel` tinyint(3) unsigned NOT NULL default '0',
|
||||||
`QuestLevel` smallint(6) NOT NULL default '0',
|
`QuestLevel` smallint(6) NOT NULL default '0',
|
||||||
`Type` smallint(5) unsigned NOT NULL default '0',
|
`Type` smallint(5) unsigned NOT NULL default '0',
|
||||||
|
`RequiredClasses` smallint(5) unsigned NOT NULL default '0',
|
||||||
`RequiredRaces` smallint(5) unsigned NOT NULL default '0',
|
`RequiredRaces` smallint(5) unsigned NOT NULL default '0',
|
||||||
|
`RequiredSkill` smallint(5) unsigned NOT NULL default '0',
|
||||||
`RequiredSkillValue` smallint(5) unsigned NOT NULL default '0',
|
`RequiredSkillValue` smallint(5) unsigned NOT NULL default '0',
|
||||||
`RepObjectiveFaction` smallint(5) unsigned NOT NULL default '0',
|
`RepObjectiveFaction` smallint(5) unsigned NOT NULL default '0',
|
||||||
`RepObjectiveValue` mediumint(9) NOT NULL default '0',
|
`RepObjectiveValue` mediumint(9) NOT NULL default '0',
|
||||||
|
|
|
||||||
40
sql/updates/10621_01_mangos_quest_template.sql
Normal file
40
sql/updates/10621_01_mangos_quest_template.sql
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_10604_01_mangos_spell_proc_event required_10621_01_mangos_quest_template bit;
|
||||||
|
|
||||||
|
ALTER TABLE quest_template ADD COLUMN RequiredClasses smallint(5) unsigned NOT NULL default '0' AFTER Type;
|
||||||
|
|
||||||
|
UPDATE quest_template
|
||||||
|
SET RequiredClasses = RequiredClasses|
|
||||||
|
CASE SkillOrClass
|
||||||
|
WHEN -1 THEN 1 -- warrior
|
||||||
|
WHEN -2 THEN 2 -- paladin
|
||||||
|
WHEN -3 THEN 4 -- hunter
|
||||||
|
WHEN -4 THEN 8 -- rogue
|
||||||
|
WHEN -5 THEN 16 -- priest
|
||||||
|
WHEN -6 THEN 32 -- dk
|
||||||
|
WHEN -7 THEN 64 -- shaman
|
||||||
|
WHEN -8 THEN 128 -- mage
|
||||||
|
WHEN -9 THEN 256 -- warlock
|
||||||
|
WHEN -11 THEN 1024 -- druid
|
||||||
|
ELSE 0
|
||||||
|
END
|
||||||
|
WHERE SkillOrClass < 0;
|
||||||
|
|
||||||
|
UPDATE quest_template
|
||||||
|
SET RequiredClasses = RequiredClasses|
|
||||||
|
CASE ZoneOrSort
|
||||||
|
WHEN -81 THEN 1 -- warrior
|
||||||
|
WHEN -141 THEN 2 -- paladin
|
||||||
|
WHEN -261 THEN 4 -- hunter
|
||||||
|
WHEN -162 THEN 8 -- rogue
|
||||||
|
WHEN -262 THEN 16 -- priest
|
||||||
|
WHEN -372 THEN 32 -- dk
|
||||||
|
WHEN -82 THEN 64 -- shaman
|
||||||
|
WHEN -161 THEN 128 -- mage
|
||||||
|
WHEN -61 THEN 256 -- warlock
|
||||||
|
WHEN -263 THEN 1024 -- druid
|
||||||
|
ELSE 0
|
||||||
|
END
|
||||||
|
WHERE ZoneOrSort < 0;
|
||||||
|
|
||||||
|
UPDATE quest_template SET SkillOrClass=0 WHERE SkillOrClass<0;
|
||||||
|
ALTER TABLE quest_template CHANGE COLUMN SkillOrClass RequiredSkill smallint(5) unsigned NOT NULL default '0' AFTER RequiredRaces;
|
||||||
|
|
@ -106,6 +106,7 @@ pkgdata_DATA = \
|
||||||
10568_01_characters_character_tutorial.sql \
|
10568_01_characters_character_tutorial.sql \
|
||||||
10582_01_mangos_spell_proc_event.sql \
|
10582_01_mangos_spell_proc_event.sql \
|
||||||
10604_01_mangos_spell_proc_event.sql \
|
10604_01_mangos_spell_proc_event.sql \
|
||||||
|
10621_01_mangos_quest_template.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -192,4 +193,5 @@ EXTRA_DIST = \
|
||||||
10568_01_characters_character_tutorial.sql \
|
10568_01_characters_character_tutorial.sql \
|
||||||
10582_01_mangos_spell_proc_event.sql \
|
10582_01_mangos_spell_proc_event.sql \
|
||||||
10604_01_mangos_spell_proc_event.sql \
|
10604_01_mangos_spell_proc_event.sql \
|
||||||
|
10621_01_mangos_quest_template.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -3558,47 +3558,47 @@ void ObjectMgr::LoadQuests()
|
||||||
|
|
||||||
m_ExclusiveQuestGroups.clear();
|
m_ExclusiveQuestGroups.clear();
|
||||||
|
|
||||||
// 0 1 2 3 4 5 6 7 8
|
// 0 1 2 3 4 5 6 7 8 9
|
||||||
QueryResult *result = WorldDatabase.Query("SELECT entry, Method, ZoneOrSort, SkillOrClass, MinLevel, QuestLevel, Type, RequiredRaces, RequiredSkillValue,"
|
QueryResult *result = WorldDatabase.Query("SELECT entry, Method, ZoneOrSort, MinLevel, QuestLevel, Type, RequiredClasses, RequiredRaces, RequiredSkill, RequiredSkillValue,"
|
||||||
// 9 10 11 12 13 14 15 16
|
// 10 11 12 13 14 15 16 17
|
||||||
"RepObjectiveFaction, RepObjectiveValue, RequiredMinRepFaction, RequiredMinRepValue, RequiredMaxRepFaction, RequiredMaxRepValue, SuggestedPlayers, LimitTime,"
|
"RepObjectiveFaction, RepObjectiveValue, RequiredMinRepFaction, RequiredMinRepValue, RequiredMaxRepFaction, RequiredMaxRepValue, SuggestedPlayers, LimitTime,"
|
||||||
// 17 18 19 20 21 22 23 24 25
|
// 18 19 20 21 22 23 24 25 26
|
||||||
"QuestFlags, SpecialFlags, CharTitleId, PlayersSlain, BonusTalents, PrevQuestId, NextQuestId, ExclusiveGroup, NextQuestInChain,"
|
"QuestFlags, SpecialFlags, CharTitleId, PlayersSlain, BonusTalents, PrevQuestId, NextQuestId, ExclusiveGroup, NextQuestInChain,"
|
||||||
// 26 27 28 29
|
// 27 28 29 30
|
||||||
"RewXPId, SrcItemId, SrcItemCount, SrcSpell,"
|
"RewXPId, SrcItemId, SrcItemCount, SrcSpell,"
|
||||||
// 30 31 32 33 34 35 36 37 38 39 40
|
// 31 32 33 34 35 36 37 38 39 40 41
|
||||||
"Title, Details, Objectives, OfferRewardText, RequestItemsText, EndText, CompletedText, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4,"
|
"Title, Details, Objectives, OfferRewardText, RequestItemsText, EndText, CompletedText, ObjectiveText1, ObjectiveText2, ObjectiveText3, ObjectiveText4,"
|
||||||
// 41 42 43 44 45 46 47 48 49 50 51 52
|
// 42 43 44 45 46 47 48 49 50 51 52 53
|
||||||
"ReqItemId1, ReqItemId2, ReqItemId3, ReqItemId4, ReqItemId5, ReqItemId6, ReqItemCount1, ReqItemCount2, ReqItemCount3, ReqItemCount4, ReqItemCount5, ReqItemCount6,"
|
"ReqItemId1, ReqItemId2, ReqItemId3, ReqItemId4, ReqItemId5, ReqItemId6, ReqItemCount1, ReqItemCount2, ReqItemCount3, ReqItemCount4, ReqItemCount5, ReqItemCount6,"
|
||||||
// 53 54 55 56 57 58 59 60
|
// 54 55 56 57 58 59 60 61
|
||||||
"ReqSourceId1, ReqSourceId2, ReqSourceId3, ReqSourceId4, ReqSourceCount1, ReqSourceCount2, ReqSourceCount3, ReqSourceCount4,"
|
"ReqSourceId1, ReqSourceId2, ReqSourceId3, ReqSourceId4, ReqSourceCount1, ReqSourceCount2, ReqSourceCount3, ReqSourceCount4,"
|
||||||
// 61 62 63 64 65 66 67 68
|
// 62 63 64 65 66 67 68 69
|
||||||
"ReqCreatureOrGOId1, ReqCreatureOrGOId2, ReqCreatureOrGOId3, ReqCreatureOrGOId4, ReqCreatureOrGOCount1, ReqCreatureOrGOCount2, ReqCreatureOrGOCount3, ReqCreatureOrGOCount4,"
|
"ReqCreatureOrGOId1, ReqCreatureOrGOId2, ReqCreatureOrGOId3, ReqCreatureOrGOId4, ReqCreatureOrGOCount1, ReqCreatureOrGOCount2, ReqCreatureOrGOCount3, ReqCreatureOrGOCount4,"
|
||||||
// 69 70 71 72
|
// 70 71 72 73
|
||||||
"ReqSpellCast1, ReqSpellCast2, ReqSpellCast3, ReqSpellCast4,"
|
"ReqSpellCast1, ReqSpellCast2, ReqSpellCast3, ReqSpellCast4,"
|
||||||
// 73 74 75 76 77 78
|
// 74 75 76 77 78 79
|
||||||
"RewChoiceItemId1, RewChoiceItemId2, RewChoiceItemId3, RewChoiceItemId4, RewChoiceItemId5, RewChoiceItemId6,"
|
"RewChoiceItemId1, RewChoiceItemId2, RewChoiceItemId3, RewChoiceItemId4, RewChoiceItemId5, RewChoiceItemId6,"
|
||||||
// 79 80 81 82 83 84
|
// 80 81 82 83 84 85
|
||||||
"RewChoiceItemCount1, RewChoiceItemCount2, RewChoiceItemCount3, RewChoiceItemCount4, RewChoiceItemCount5, RewChoiceItemCount6,"
|
"RewChoiceItemCount1, RewChoiceItemCount2, RewChoiceItemCount3, RewChoiceItemCount4, RewChoiceItemCount5, RewChoiceItemCount6,"
|
||||||
// 85 86 87 88 89 90 91 92
|
// 86 87 88 89 90 91 92 93
|
||||||
"RewItemId1, RewItemId2, RewItemId3, RewItemId4, RewItemCount1, RewItemCount2, RewItemCount3, RewItemCount4,"
|
"RewItemId1, RewItemId2, RewItemId3, RewItemId4, RewItemCount1, RewItemCount2, RewItemCount3, RewItemCount4,"
|
||||||
// 93 94 95 96 97
|
// 94 95 96 97 98
|
||||||
"RewRepFaction1, RewRepFaction2, RewRepFaction3, RewRepFaction4, RewRepFaction5,"
|
"RewRepFaction1, RewRepFaction2, RewRepFaction3, RewRepFaction4, RewRepFaction5,"
|
||||||
// 98 99 100 101 102
|
// 99 100 101 102 103
|
||||||
"RewRepValueId1, RewRepValueId2, RewRepValueId3, RewRepValueId4, RewRepValueId5,"
|
"RewRepValueId1, RewRepValueId2, RewRepValueId3, RewRepValueId4, RewRepValueId5,"
|
||||||
// 103 104 105 106 107
|
// 104 105 106 107 108
|
||||||
"RewRepValue1, RewRepValue2, RewRepValue3, RewRepValue4, RewRepValue5,"
|
"RewRepValue1, RewRepValue2, RewRepValue3, RewRepValue4, RewRepValue5,"
|
||||||
// 108 109 110 111 112 113
|
// 109 110 111 112 113 114
|
||||||
"RewHonorAddition, RewHonorMultiplier, RewOrReqMoney, RewMoneyMaxLevel, RewSpell, RewSpellCast,"
|
"RewHonorAddition, RewHonorMultiplier, RewOrReqMoney, RewMoneyMaxLevel, RewSpell, RewSpellCast,"
|
||||||
// 114 115 116 117 118 119
|
// 115 116 117 118 119 120
|
||||||
"RewMailTemplateId, RewMailDelaySecs, PointMapId, PointX, PointY, PointOpt,"
|
"RewMailTemplateId, RewMailDelaySecs, PointMapId, PointX, PointY, PointOpt,"
|
||||||
// 120 121 122 123 124 125 126 127
|
// 121 122 123 124 125 126 127 128
|
||||||
"DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4,"
|
"DetailsEmote1, DetailsEmote2, DetailsEmote3, DetailsEmote4, DetailsEmoteDelay1, DetailsEmoteDelay2, DetailsEmoteDelay3, DetailsEmoteDelay4,"
|
||||||
// 128 129 130 131 132 133
|
// 129 130 131 132 133 134
|
||||||
"IncompleteEmote, CompleteEmote, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4,"
|
"IncompleteEmote, CompleteEmote, OfferRewardEmote1, OfferRewardEmote2, OfferRewardEmote3, OfferRewardEmote4,"
|
||||||
// 134 135 136 137
|
// 135 136 137 138
|
||||||
"OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4,"
|
"OfferRewardEmoteDelay1, OfferRewardEmoteDelay2, OfferRewardEmoteDelay3, OfferRewardEmoteDelay4,"
|
||||||
// 138 139
|
// 139 140
|
||||||
"StartScript, CompleteScript"
|
"StartScript, CompleteScript"
|
||||||
" FROM quest_template");
|
" FROM quest_template");
|
||||||
if (result == NULL)
|
if (result == NULL)
|
||||||
|
|
@ -3707,45 +3707,46 @@ void ObjectMgr::LoadQuests()
|
||||||
qinfo->GetQuestId(),qinfo->ZoneOrSort);
|
qinfo->GetQuestId(),qinfo->ZoneOrSort);
|
||||||
// no changes, quest not dependent from this value but can have problems at client (note some may be 0, we must allow this so no check)
|
// no changes, quest not dependent from this value but can have problems at client (note some may be 0, we must allow this so no check)
|
||||||
}
|
}
|
||||||
//check SkillOrClass value (class case).
|
|
||||||
if (ClassByQuestSort(-int32(qinfo->ZoneOrSort)))
|
//check for proper RequiredSkill value (skill case)
|
||||||
{
|
|
||||||
// SkillOrClass should not have class case when class case already set in ZoneOrSort.
|
|
||||||
if (qinfo->SkillOrClass < 0)
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("Quest %u has `ZoneOrSort` = %i (class sort case) and `SkillOrClass` = %i (class case), redundant.",
|
|
||||||
qinfo->GetQuestId(),qinfo->ZoneOrSort,qinfo->SkillOrClass);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//check for proper SkillOrClass value (skill case)
|
|
||||||
if (int32 skill_id = SkillByQuestSort(-int32(qinfo->ZoneOrSort)))
|
if (int32 skill_id = SkillByQuestSort(-int32(qinfo->ZoneOrSort)))
|
||||||
{
|
{
|
||||||
// skill is positive value in SkillOrClass
|
if (qinfo->RequiredSkill != skill_id)
|
||||||
if (qinfo->SkillOrClass != skill_id )
|
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Quest %u has `ZoneOrSort` = %i (skill sort case) but `SkillOrClass` does not have a corresponding value (%i).",
|
sLog.outErrorDb("Quest %u has `ZoneOrSort` = %i but `RequiredSkill` does not have a corresponding value (%i).",
|
||||||
qinfo->GetQuestId(),qinfo->ZoneOrSort,skill_id);
|
qinfo->GetQuestId(),qinfo->ZoneOrSort,skill_id);
|
||||||
//override, and force proper value here?
|
//override, and force proper value here?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SkillOrClass (class case)
|
// RequiredClasses, can be 0/CLASSMASK_ALL_PLAYABLE to allow any class
|
||||||
if (qinfo->SkillOrClass < 0)
|
if (qinfo->RequiredClasses)
|
||||||
{
|
{
|
||||||
if (!sChrClassesStore.LookupEntry(-int32(qinfo->SkillOrClass)))
|
if (!(qinfo->RequiredClasses & CLASSMASK_ALL_PLAYABLE))
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Quest %u has `SkillOrClass` = %i (class case) but class (%i) does not exist",
|
sLog.outErrorDb("Quest %u does not contain any playable classes in `RequiredClasses` (%u), value set to 0 (all classes).", qinfo->GetQuestId(), qinfo->RequiredClasses);
|
||||||
qinfo->GetQuestId(),qinfo->SkillOrClass,-qinfo->SkillOrClass);
|
qinfo->RequiredClasses = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SkillOrClass (skill case)
|
|
||||||
if (qinfo->SkillOrClass > 0)
|
// RequiredRaces, can be 0/RACEMASK_ALL_PLAYABLE to allow any race
|
||||||
|
if (qinfo->RequiredRaces)
|
||||||
{
|
{
|
||||||
if (!sSkillLineStore.LookupEntry(qinfo->SkillOrClass))
|
if (!(qinfo->RequiredRaces & RACEMASK_ALL_PLAYABLE))
|
||||||
{
|
{
|
||||||
sLog.outErrorDb("Quest %u has `SkillOrClass` = %u (skill case) but skill (%i) does not exist",
|
sLog.outErrorDb("Quest %u does not contain any playable races in `RequiredRaces` (%u), value set to 0 (all races).", qinfo->GetQuestId(), qinfo->RequiredRaces);
|
||||||
qinfo->GetQuestId(),qinfo->SkillOrClass,qinfo->SkillOrClass);
|
qinfo->RequiredRaces = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequiredSkill, can be 0
|
||||||
|
if (qinfo->RequiredSkill)
|
||||||
|
{
|
||||||
|
if (!sSkillLineStore.LookupEntry(qinfo->RequiredSkill))
|
||||||
|
{
|
||||||
|
sLog.outErrorDb("Quest %u has `RequiredSkill` = %u but this skill does not exist",
|
||||||
|
qinfo->GetQuestId(), qinfo->RequiredSkill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3757,13 +3758,6 @@ void ObjectMgr::LoadQuests()
|
||||||
qinfo->GetQuestId(),qinfo->RequiredSkillValue,sWorld.GetConfigMaxSkillValue());
|
qinfo->GetQuestId(),qinfo->RequiredSkillValue,sWorld.GetConfigMaxSkillValue());
|
||||||
// no changes, quest can't be done for this requirement
|
// no changes, quest can't be done for this requirement
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qinfo->SkillOrClass <= 0)
|
|
||||||
{
|
|
||||||
sLog.outErrorDb("Quest %u has `RequiredSkillValue` = %u but `SkillOrClass` = %i (class case), value ignored.",
|
|
||||||
qinfo->GetQuestId(),qinfo->RequiredSkillValue,qinfo->SkillOrClass);
|
|
||||||
// no changes, quest can't be done for this requirement (fail at wrong skill id)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// else Skill quests can have 0 skill level, this is ok
|
// else Skill quests can have 0 skill level, this is ok
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13274,7 +13274,7 @@ Quest const* Player::GetNextQuest(uint64 guid, Quest const *pQuest)
|
||||||
|
|
||||||
bool Player::CanSeeStartQuest( Quest const *pQuest ) const
|
bool Player::CanSeeStartQuest( Quest const *pQuest ) const
|
||||||
{
|
{
|
||||||
if (SatisfyQuestRace( pQuest, false ) && SatisfyQuestSkillOrClass( pQuest, false ) &&
|
if (SatisfyQuestClass(pQuest, false) && SatisfyQuestRace(pQuest, false) && SatisfyQuestSkill(pQuest, false) &&
|
||||||
SatisfyQuestExclusiveGroup( pQuest, false ) && SatisfyQuestReputation( pQuest, false ) &&
|
SatisfyQuestExclusiveGroup( pQuest, false ) && SatisfyQuestReputation( pQuest, false ) &&
|
||||||
SatisfyQuestPreviousQuest( pQuest, false ) && SatisfyQuestNextChain( pQuest, false ) &&
|
SatisfyQuestPreviousQuest( pQuest, false ) && SatisfyQuestNextChain( pQuest, false ) &&
|
||||||
SatisfyQuestPrevChain( pQuest, false ) && SatisfyQuestDay( pQuest, false ) && SatisfyQuestWeek( pQuest, false ))
|
SatisfyQuestPrevChain( pQuest, false ) && SatisfyQuestDay( pQuest, false ) && SatisfyQuestWeek( pQuest, false ))
|
||||||
|
|
@ -13288,8 +13288,8 @@ bool Player::CanSeeStartQuest( Quest const *pQuest ) const
|
||||||
bool Player::CanTakeQuest( Quest const *pQuest, bool msg ) const
|
bool Player::CanTakeQuest( Quest const *pQuest, bool msg ) const
|
||||||
{
|
{
|
||||||
return SatisfyQuestStatus( pQuest, msg ) && SatisfyQuestExclusiveGroup( pQuest, msg )
|
return SatisfyQuestStatus( pQuest, msg ) && SatisfyQuestExclusiveGroup( pQuest, msg )
|
||||||
&& SatisfyQuestRace( pQuest, msg ) && SatisfyQuestLevel( pQuest, msg )
|
&& SatisfyQuestClass(pQuest, msg) && SatisfyQuestRace(pQuest, msg) && SatisfyQuestLevel(pQuest, msg)
|
||||||
&& SatisfyQuestSkillOrClass( pQuest, msg ) && SatisfyQuestReputation( pQuest, msg )
|
&& SatisfyQuestSkill(pQuest, msg) && SatisfyQuestReputation(pQuest, msg)
|
||||||
&& SatisfyQuestPreviousQuest( pQuest, msg ) && SatisfyQuestTimed( pQuest, msg )
|
&& SatisfyQuestPreviousQuest( pQuest, msg ) && SatisfyQuestTimed( pQuest, msg )
|
||||||
&& SatisfyQuestNextChain( pQuest, msg ) && SatisfyQuestPrevChain( pQuest, msg )
|
&& SatisfyQuestNextChain( pQuest, msg ) && SatisfyQuestPrevChain( pQuest, msg )
|
||||||
&& SatisfyQuestDay( pQuest, msg ) && SatisfyQuestWeek( pQuest, msg );
|
&& SatisfyQuestDay( pQuest, msg ) && SatisfyQuestWeek( pQuest, msg );
|
||||||
|
|
@ -13766,48 +13766,22 @@ void Player::FailQuest(uint32 questId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Player::SatisfyQuestSkillOrClass( Quest const* qInfo, bool msg ) const
|
bool Player::SatisfyQuestSkill(Quest const* qInfo, bool msg) const
|
||||||
{
|
{
|
||||||
int32 zoneOrSort = qInfo->GetZoneOrSort();
|
uint32 skill = qInfo->GetRequiredSkill();
|
||||||
int32 skillOrClass = qInfo->GetSkillOrClass();
|
|
||||||
|
|
||||||
// skip zone zoneOrSort and 0 case skillOrClass
|
// skip 0 case RequiredSkill
|
||||||
if (zoneOrSort >= 0 && skillOrClass == 0)
|
if (skill == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
int32 questSort = -zoneOrSort;
|
// check skill value
|
||||||
uint8 reqSortClass = ClassByQuestSort(questSort);
|
if (GetSkillValue(skill) < qInfo->GetRequiredSkillValue())
|
||||||
|
|
||||||
// check class sort cases in zoneOrSort
|
|
||||||
if (reqSortClass != 0 && getClass() != reqSortClass)
|
|
||||||
{
|
{
|
||||||
if (msg)
|
if (msg)
|
||||||
SendCanTakeQuestResponse( INVALIDREASON_DONT_HAVE_REQ );
|
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check class
|
|
||||||
if( skillOrClass < 0 )
|
|
||||||
{
|
|
||||||
uint8 reqClass = -int32(skillOrClass);
|
|
||||||
if(getClass() != reqClass)
|
|
||||||
{
|
|
||||||
if( msg )
|
|
||||||
SendCanTakeQuestResponse( INVALIDREASON_DONT_HAVE_REQ );
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// check skill
|
|
||||||
else if( skillOrClass > 0 )
|
|
||||||
{
|
|
||||||
uint32 reqSkill = skillOrClass;
|
|
||||||
if( GetSkillValue( reqSkill ) < qInfo->GetRequiredSkillValue() )
|
|
||||||
{
|
|
||||||
if( msg )
|
|
||||||
SendCanTakeQuestResponse( INVALIDREASON_DONT_HAVE_REQ );
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -13928,6 +13902,24 @@ bool Player::SatisfyQuestPreviousQuest( Quest const* qInfo, bool msg ) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Player::SatisfyQuestClass(Quest const* qInfo, bool msg) const
|
||||||
|
{
|
||||||
|
uint32 reqClass = qInfo->GetRequiredClasses();
|
||||||
|
|
||||||
|
if (reqClass == 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if ((reqClass & getClassMask()) == 0)
|
||||||
|
{
|
||||||
|
if (msg)
|
||||||
|
SendCanTakeQuestResponse(INVALIDREASON_DONT_HAVE_REQ);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Player::SatisfyQuestRace( Quest const* qInfo, bool msg ) const
|
bool Player::SatisfyQuestRace( Quest const* qInfo, bool msg ) const
|
||||||
{
|
{
|
||||||
uint32 reqraces = qInfo->GetRequiredRaces();
|
uint32 reqraces = qInfo->GetRequiredRaces();
|
||||||
|
|
|
||||||
|
|
@ -1421,10 +1421,11 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
void RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver, bool announce = true );
|
void RewardQuest( Quest const *pQuest, uint32 reward, Object* questGiver, bool announce = true );
|
||||||
|
|
||||||
void FailQuest( uint32 quest_id );
|
void FailQuest( uint32 quest_id );
|
||||||
bool SatisfyQuestSkillOrClass( Quest const* qInfo, bool msg ) const;
|
bool SatisfyQuestSkill(Quest const* qInfo, bool msg) const;
|
||||||
bool SatisfyQuestLevel( Quest const* qInfo, bool msg ) const;
|
bool SatisfyQuestLevel( Quest const* qInfo, bool msg ) const;
|
||||||
bool SatisfyQuestLog( bool msg ) const;
|
bool SatisfyQuestLog( bool msg ) const;
|
||||||
bool SatisfyQuestPreviousQuest( Quest const* qInfo, bool msg ) const;
|
bool SatisfyQuestPreviousQuest( Quest const* qInfo, bool msg ) const;
|
||||||
|
bool SatisfyQuestClass(Quest const* qInfo, bool msg) const;
|
||||||
bool SatisfyQuestRace( Quest const* qInfo, bool msg ) const;
|
bool SatisfyQuestRace( Quest const* qInfo, bool msg ) const;
|
||||||
bool SatisfyQuestReputation( Quest const* qInfo, bool msg ) const;
|
bool SatisfyQuestReputation( Quest const* qInfo, bool msg ) const;
|
||||||
bool SatisfyQuestStatus( Quest const* qInfo, bool msg ) const;
|
bool SatisfyQuestStatus( Quest const* qInfo, bool msg ) const;
|
||||||
|
|
|
||||||
|
|
@ -25,116 +25,117 @@ Quest::Quest(Field * questRecord)
|
||||||
QuestId = questRecord[0].GetUInt32();
|
QuestId = questRecord[0].GetUInt32();
|
||||||
QuestMethod = questRecord[1].GetUInt32();
|
QuestMethod = questRecord[1].GetUInt32();
|
||||||
ZoneOrSort = questRecord[2].GetInt32();
|
ZoneOrSort = questRecord[2].GetInt32();
|
||||||
SkillOrClass = questRecord[3].GetInt32();
|
MinLevel = questRecord[3].GetUInt32();
|
||||||
MinLevel = questRecord[4].GetUInt32();
|
QuestLevel = questRecord[4].GetInt32();
|
||||||
QuestLevel = questRecord[5].GetInt32();
|
Type = questRecord[5].GetUInt32();
|
||||||
Type = questRecord[6].GetUInt32();
|
RequiredClasses = questRecord[6].GetUInt32();
|
||||||
RequiredRaces = questRecord[7].GetUInt32();
|
RequiredRaces = questRecord[7].GetUInt32();
|
||||||
RequiredSkillValue = questRecord[8].GetUInt32();
|
RequiredSkill = questRecord[8].GetUInt32();
|
||||||
RepObjectiveFaction = questRecord[9].GetUInt32();
|
RequiredSkillValue = questRecord[9].GetUInt32();
|
||||||
RepObjectiveValue = questRecord[10].GetInt32();
|
RepObjectiveFaction = questRecord[10].GetUInt32();
|
||||||
RequiredMinRepFaction = questRecord[11].GetUInt32();
|
RepObjectiveValue = questRecord[11].GetInt32();
|
||||||
RequiredMinRepValue = questRecord[12].GetInt32();
|
RequiredMinRepFaction = questRecord[12].GetUInt32();
|
||||||
RequiredMaxRepFaction = questRecord[13].GetUInt32();
|
RequiredMinRepValue = questRecord[13].GetInt32();
|
||||||
RequiredMaxRepValue = questRecord[14].GetInt32();
|
RequiredMaxRepFaction = questRecord[14].GetUInt32();
|
||||||
SuggestedPlayers = questRecord[15].GetUInt32();
|
RequiredMaxRepValue = questRecord[15].GetInt32();
|
||||||
LimitTime = questRecord[16].GetUInt32();
|
SuggestedPlayers = questRecord[16].GetUInt32();
|
||||||
QuestFlags = questRecord[17].GetUInt16();
|
LimitTime = questRecord[17].GetUInt32();
|
||||||
uint32 SpecialFlags = questRecord[18].GetUInt16();
|
QuestFlags = questRecord[18].GetUInt16();
|
||||||
CharTitleId = questRecord[19].GetUInt32();
|
uint32 SpecialFlags = questRecord[19].GetUInt16();
|
||||||
PlayersSlain = questRecord[20].GetUInt32();
|
CharTitleId = questRecord[20].GetUInt32();
|
||||||
BonusTalents = questRecord[21].GetUInt32();
|
PlayersSlain = questRecord[21].GetUInt32();
|
||||||
PrevQuestId = questRecord[22].GetInt32();
|
BonusTalents = questRecord[22].GetUInt32();
|
||||||
NextQuestId = questRecord[23].GetInt32();
|
PrevQuestId = questRecord[23].GetInt32();
|
||||||
ExclusiveGroup = questRecord[24].GetInt32();
|
NextQuestId = questRecord[24].GetInt32();
|
||||||
NextQuestInChain = questRecord[25].GetUInt32();
|
ExclusiveGroup = questRecord[25].GetInt32();
|
||||||
RewXPId = questRecord[26].GetUInt32();
|
NextQuestInChain = questRecord[26].GetUInt32();
|
||||||
SrcItemId = questRecord[27].GetUInt32();
|
RewXPId = questRecord[27].GetUInt32();
|
||||||
SrcItemCount = questRecord[28].GetUInt32();
|
SrcItemId = questRecord[28].GetUInt32();
|
||||||
SrcSpell = questRecord[29].GetUInt32();
|
SrcItemCount = questRecord[29].GetUInt32();
|
||||||
Title = questRecord[30].GetCppString();
|
SrcSpell = questRecord[30].GetUInt32();
|
||||||
Details = questRecord[31].GetCppString();
|
Title = questRecord[31].GetCppString();
|
||||||
Objectives = questRecord[32].GetCppString();
|
Details = questRecord[32].GetCppString();
|
||||||
OfferRewardText = questRecord[33].GetCppString();
|
Objectives = questRecord[33].GetCppString();
|
||||||
RequestItemsText = questRecord[34].GetCppString();
|
OfferRewardText = questRecord[34].GetCppString();
|
||||||
EndText = questRecord[35].GetCppString();
|
RequestItemsText = questRecord[35].GetCppString();
|
||||||
CompletedText = questRecord[36].GetCppString();
|
EndText = questRecord[36].GetCppString();
|
||||||
|
CompletedText = questRecord[37].GetCppString();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||||
ObjectiveText[i] = questRecord[37+i].GetCppString();
|
ObjectiveText[i] = questRecord[38+i].GetCppString();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||||
ReqItemId[i] = questRecord[41+i].GetUInt32();
|
ReqItemId[i] = questRecord[42+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_ITEM_OBJECTIVES_COUNT; ++i)
|
||||||
ReqItemCount[i] = questRecord[47+i].GetUInt32();
|
ReqItemCount[i] = questRecord[48+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||||
ReqSourceId[i] = questRecord[53+i].GetUInt32();
|
ReqSourceId[i] = questRecord[54+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
for (int i = 0; i < QUEST_SOURCE_ITEM_IDS_COUNT; ++i)
|
||||||
ReqSourceCount[i] = questRecord[57+i].GetUInt32();
|
ReqSourceCount[i] = questRecord[58+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||||
ReqCreatureOrGOId[i] = questRecord[61+i].GetInt32();
|
ReqCreatureOrGOId[i] = questRecord[62+i].GetInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||||
ReqCreatureOrGOCount[i] = questRecord[65+i].GetUInt32();
|
ReqCreatureOrGOCount[i] = questRecord[66+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
for (int i = 0; i < QUEST_OBJECTIVES_COUNT; ++i)
|
||||||
ReqSpell[i] = questRecord[69+i].GetUInt32();
|
ReqSpell[i] = questRecord[70+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||||
RewChoiceItemId[i] = questRecord[73+i].GetUInt32();
|
RewChoiceItemId[i] = questRecord[74+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
for (int i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i)
|
||||||
RewChoiceItemCount[i] = questRecord[79+i].GetUInt32();
|
RewChoiceItemCount[i] = questRecord[80+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||||
RewItemId[i] = questRecord[85+i].GetUInt32();
|
RewItemId[i] = questRecord[86+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REWARDS_COUNT; ++i)
|
||||||
RewItemCount[i] = questRecord[89+i].GetUInt32();
|
RewItemCount[i] = questRecord[90+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||||
RewRepFaction[i] = questRecord[93+i].GetUInt32();
|
RewRepFaction[i] = questRecord[94+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||||
RewRepValueId[i] = questRecord[98+i].GetInt32();
|
RewRepValueId[i] = questRecord[99+i].GetInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
for (int i = 0; i < QUEST_REPUTATIONS_COUNT; ++i)
|
||||||
RewRepValue[i] = questRecord[103+i].GetInt32();
|
RewRepValue[i] = questRecord[104+i].GetInt32();
|
||||||
|
|
||||||
RewHonorAddition = questRecord[108].GetUInt32();
|
RewHonorAddition = questRecord[109].GetUInt32();
|
||||||
RewHonorMultiplier = questRecord[109].GetFloat();
|
RewHonorMultiplier = questRecord[110].GetFloat();
|
||||||
RewOrReqMoney = questRecord[110].GetInt32();
|
RewOrReqMoney = questRecord[111].GetInt32();
|
||||||
RewMoneyMaxLevel = questRecord[111].GetUInt32();
|
RewMoneyMaxLevel = questRecord[112].GetUInt32();
|
||||||
RewSpell = questRecord[112].GetUInt32();
|
RewSpell = questRecord[113].GetUInt32();
|
||||||
RewSpellCast = questRecord[113].GetUInt32();
|
RewSpellCast = questRecord[114].GetUInt32();
|
||||||
RewMailTemplateId = questRecord[114].GetUInt32();
|
RewMailTemplateId = questRecord[115].GetUInt32();
|
||||||
RewMailDelaySecs = questRecord[115].GetUInt32();
|
RewMailDelaySecs = questRecord[116].GetUInt32();
|
||||||
PointMapId = questRecord[116].GetUInt32();
|
PointMapId = questRecord[117].GetUInt32();
|
||||||
PointX = questRecord[117].GetFloat();
|
PointX = questRecord[118].GetFloat();
|
||||||
PointY = questRecord[118].GetFloat();
|
PointY = questRecord[119].GetFloat();
|
||||||
PointOpt = questRecord[119].GetUInt32();
|
PointOpt = questRecord[120].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||||
DetailsEmote[i] = questRecord[120+i].GetUInt32();
|
DetailsEmote[i] = questRecord[121+i].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||||
DetailsEmoteDelay[i] = questRecord[124+i].GetUInt32();
|
DetailsEmoteDelay[i] = questRecord[125+i].GetUInt32();
|
||||||
|
|
||||||
IncompleteEmote = questRecord[128].GetUInt32();
|
IncompleteEmote = questRecord[129].GetUInt32();
|
||||||
CompleteEmote = questRecord[129].GetUInt32();
|
CompleteEmote = questRecord[130].GetUInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||||
OfferRewardEmote[i] = questRecord[130+i].GetInt32();
|
OfferRewardEmote[i] = questRecord[131+i].GetInt32();
|
||||||
|
|
||||||
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
for (int i = 0; i < QUEST_EMOTE_COUNT; ++i)
|
||||||
OfferRewardEmoteDelay[i] = questRecord[134+i].GetInt32();
|
OfferRewardEmoteDelay[i] = questRecord[135+i].GetInt32();
|
||||||
|
|
||||||
QuestStartScript = questRecord[138].GetUInt32();
|
QuestStartScript = questRecord[139].GetUInt32();
|
||||||
QuestCompleteScript = questRecord[139].GetUInt32();
|
QuestCompleteScript = questRecord[140].GetUInt32();
|
||||||
|
|
||||||
QuestFlags |= SpecialFlags << 24;
|
QuestFlags |= SpecialFlags << 24;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -202,11 +202,12 @@ class Quest
|
||||||
uint32 GetQuestId() const { return QuestId; }
|
uint32 GetQuestId() const { return QuestId; }
|
||||||
uint32 GetQuestMethod() const { return QuestMethod; }
|
uint32 GetQuestMethod() const { return QuestMethod; }
|
||||||
int32 GetZoneOrSort() const { return ZoneOrSort; }
|
int32 GetZoneOrSort() const { return ZoneOrSort; }
|
||||||
int32 GetSkillOrClass() const { return SkillOrClass; }
|
|
||||||
uint32 GetMinLevel() const { return MinLevel; }
|
uint32 GetMinLevel() const { return MinLevel; }
|
||||||
int32 GetQuestLevel() const { return QuestLevel; }
|
int32 GetQuestLevel() const { return QuestLevel; }
|
||||||
uint32 GetType() const { return Type; }
|
uint32 GetType() const { return Type; }
|
||||||
|
uint32 GetRequiredClasses() const { return RequiredClasses; }
|
||||||
uint32 GetRequiredRaces() const { return RequiredRaces; }
|
uint32 GetRequiredRaces() const { return RequiredRaces; }
|
||||||
|
uint32 GetRequiredSkill() const { return RequiredSkill; }
|
||||||
uint32 GetRequiredSkillValue() const { return RequiredSkillValue; }
|
uint32 GetRequiredSkillValue() const { return RequiredSkillValue; }
|
||||||
uint32 GetRepObjectiveFaction() const { return RepObjectiveFaction; }
|
uint32 GetRepObjectiveFaction() const { return RepObjectiveFaction; }
|
||||||
int32 GetRepObjectiveValue() const { return RepObjectiveValue; }
|
int32 GetRepObjectiveValue() const { return RepObjectiveValue; }
|
||||||
|
|
@ -303,11 +304,12 @@ class Quest
|
||||||
uint32 QuestId;
|
uint32 QuestId;
|
||||||
uint32 QuestMethod;
|
uint32 QuestMethod;
|
||||||
int32 ZoneOrSort;
|
int32 ZoneOrSort;
|
||||||
int32 SkillOrClass;
|
|
||||||
uint32 MinLevel;
|
uint32 MinLevel;
|
||||||
int32 QuestLevel;
|
int32 QuestLevel;
|
||||||
uint32 Type;
|
uint32 Type;
|
||||||
|
uint32 RequiredClasses;
|
||||||
uint32 RequiredRaces;
|
uint32 RequiredRaces;
|
||||||
|
uint32 RequiredSkill;
|
||||||
uint32 RequiredSkillValue;
|
uint32 RequiredSkillValue;
|
||||||
uint32 RepObjectiveFaction;
|
uint32 RepObjectiveFaction;
|
||||||
int32 RepObjectiveValue;
|
int32 RepObjectiveValue;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10620"
|
#define REVISION_NR "10621"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef __REVISION_SQL_H__
|
#ifndef __REVISION_SQL_H__
|
||||||
#define __REVISION_SQL_H__
|
#define __REVISION_SQL_H__
|
||||||
#define REVISION_DB_CHARACTERS "required_10568_01_characters_character_tutorial"
|
#define REVISION_DB_CHARACTERS "required_10568_01_characters_character_tutorial"
|
||||||
#define REVISION_DB_MANGOS "required_10604_01_mangos_spell_proc_event"
|
#define REVISION_DB_MANGOS "required_10621_01_mangos_quest_template"
|
||||||
#define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
|
#define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
|
||||||
#endif // __REVISION_SQL_H__
|
#endif // __REVISION_SQL_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue