From 43d57c754769c21e57c416294abdced593226d63 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 21 Oct 2012 17:28:04 -0500 Subject: Core/Build: Build fix from previous merge --- src/server/scripts/Northrend/storm_peaks.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/server/scripts') diff --git a/src/server/scripts/Northrend/storm_peaks.cpp b/src/server/scripts/Northrend/storm_peaks.cpp index fc4f2785990..1733af17580 100644 --- a/src/server/scripts/Northrend/storm_peaks.cpp +++ b/src/server/scripts/Northrend/storm_peaks.cpp @@ -19,6 +19,8 @@ #include "ScriptedCreature.h" #include "ScriptedGossip.h" #include "ScriptedEscortAI.h" +#include "SpellScript.h" +#include "SpellAuraEffects.h" #include "Vehicle.h" #include "CombatAI.h" -- cgit v1.2.3 From a664a356e2d069f3c136bb56485aeb12be866f28 Mon Sep 17 00:00:00 2001 From: Warpten Date: Mon, 22 Oct 2012 21:18:21 +0200 Subject: Scripts/Ruby Sanctum: * Fixed a crash caused by the grid. * Update spawnmasks. * Misc updates and corrections. Closes #8079. Closes #8078. Closes #8081. Closes #8077. --- sql/updates/world/2012_10_14_00_world_creature.sql | 10 ++ src/server/game/Spells/SpellMgr.cpp | 4 + .../ChamberOfAspects/RubySanctum/boss_halion.cpp | 103 +++++++++++++-------- .../RubySanctum/instance_ruby_sanctum.cpp | 21 ++--- .../ChamberOfAspects/RubySanctum/ruby_sanctum.h | 3 +- 5 files changed, 87 insertions(+), 54 deletions(-) create mode 100644 sql/updates/world/2012_10_14_00_world_creature.sql (limited to 'src/server/scripts') diff --git a/sql/updates/world/2012_10_14_00_world_creature.sql b/sql/updates/world/2012_10_14_00_world_creature.sql new file mode 100644 index 00000000000..dd650f37aef --- /dev/null +++ b/sql/updates/world/2012_10_14_00_world_creature.sql @@ -0,0 +1,10 @@ +-- Spawnmask updates +UPDATE `creature` SET `spawnMask`=15 WHERE `id` IN(40091, 40081); + +-- Auras updates (Now in script, can't be used in creature_addon because dynamically spawned) +DELETE FROM `creature_template_addon` WHERE `entry` IN(39863, 40142); + +-- Blazing Aura +-- NOTE: This still does not work, no clue why. Probably a core-side bug ? +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,2,75886,0,0,31,0,3,40683,0,0,0, '', 'Blazing Aura can only target Living Embers'); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index fb39310aabe..13841aed7ed 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3607,6 +3607,10 @@ void SpellMgr::LoadDbcDataCorrections() spellInfo->AttributesEx6 |= SPELL_ATTR6_CAN_TARGET_INVISIBLE; spellInfo->AttributesEx2 |= SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS; break; + case 75888: // Awaken Flames + case 75889: // Awaken Flames + spellInfo->AttributesEx |= SPELL_ATTR1_CANT_TARGET_SELF; + break; // ENDOF RUBY SANCTUM SPELLS // case 40055: // Introspection diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 64210e97122..b8ff3dfbb46 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -113,6 +113,8 @@ enum Spells SPELL_SUMMON_EXIT_PORTALS = 74805, // Custom spell created in spell_dbc. SPELL_TWILIGHT_MENDING = 75509, SPELL_TWILIGHT_REALM = 74807, + SPELL_DUSK_SHROUD = 75476, + SPELL_TWILIGHT_PRECISION = 78243, SPELL_COPY_DAMAGE = 74810 // Aura not found in DBCs. }; @@ -226,19 +228,24 @@ struct generic_halionAI : public BossAI { generic_halionAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId), _canEvade(false) { } - void EnterCombat(Unit* /*who*/) + void EnterCombat(Unit* who) { - Talk(SAY_AGGRO); - _EnterCombat(); + BossAI::EnterCombat(who); _canEvade = false; - events.Reset(); events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000)); + events.ScheduleEvent(EVENT_TAIL_LASH, 10000); + } + + void Reset() + { + _canEvade = false; + BossAI::Reset(); } void EnterEvadeMode() { + BossAI::EnterEvadeMode(); instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); - _EnterEvadeMode(); } void ExecuteEvent(uint32 const eventId) @@ -249,6 +256,10 @@ struct generic_halionAI : public BossAI DoCastVictim(SPELL_CLEAVE); events.ScheduleEvent(EVENT_CLEAVE, urand(8000, 10000)); break; + case EVENT_TAIL_LASH: + DoCastAOE(SPELL_TAIL_LASH); + events.ScheduleEvent(EVENT_TAIL_LASH, 10000); + break; } } @@ -297,52 +308,54 @@ class boss_halion : public CreatureScript struct boss_halionAI : public generic_halionAI { - boss_halionAI(Creature* creature) : generic_halionAI(creature, DATA_HALION) { } + boss_halionAI(Creature* creature) : generic_halionAI(creature, DATA_HALION) + { + me->SetHomePosition(HalionSpawnPos); + } void Reset() { generic_halionAI::Reset(); me->SetReactState(REACT_DEFENSIVE); - - instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); - me->RemoveAurasDueToSpell(SPELL_TWILIGHT_PHASING); me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddAura(SPELL_TWILIGHT_PRECISION, me); } void EnterEvadeMode() { // Phase 1: We always can evade. Phase 2 & 3: We can evade if and only if the controller tells us to. - // Controller has absolute priority over the phasemask. if ((events.GetPhaseMask() & PHASE_ONE_MASK) || _canEvade) generic_halionAI::EnterEvadeMode(); } void EnterCombat(Unit* who) { + Talk(SAY_AGGRO); + + events.Reset(); + events.SetPhase(PHASE_ONE); + generic_halionAI::EnterCombat(who); instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 1); instance->SetBossState(DATA_HALION, IN_PROGRESS); - events.SetPhase(PHASE_ONE); - events.ScheduleEvent(EVENT_ACTIVATE_FIREWALL, 10000); + events.ScheduleEvent(EVENT_ACTIVATE_FIREWALL, 5000); events.ScheduleEvent(EVENT_FLAME_BREATH, urand(10000, 12000)); events.ScheduleEvent(EVENT_METEOR_STRIKE, urand(20000, 25000)); events.ScheduleEvent(EVENT_FIERY_COMBUSTION, urand(15000, 18000)); - events.ScheduleEvent(EVENT_TAIL_LASH, 10000); if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) controller->AI()->SetData(DATA_FIGHT_PHASE, PHASE_ONE); } - void JustDied(Unit* /*killer*/) + void JustDied(Unit* killer) { - _JustDied(); + BossAI::JustDied(killer); Talk(SAY_DEATH); instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) me->Kill(controller); @@ -390,21 +403,15 @@ class boss_halion : public CreatureScript switch (eventId) { case EVENT_ACTIVATE_FIREWALL: - { - // Flame ring is activated 10 seconds after starting encounter, DOOR_TYPE_ROOM is only instant. + // Flame ring is activated 5 seconds after starting encounter, DOOR_TYPE_ROOM is only instant. for (uint8 i = DATA_FLAME_RING; i <= DATA_TWILIGHT_FLAME_RING; ++i) if (GameObject* flameRing = ObjectAccessor::GetGameObject(*me, instance->GetData64(i))) instance->HandleGameObject(instance->GetData64(DATA_FLAME_RING), false, flameRing); break; - } case EVENT_FLAME_BREATH: DoCast(me, SPELL_FLAME_BREATH); events.ScheduleEvent(EVENT_FLAME_BREATH, 25000); break; - case EVENT_TAIL_LASH: - DoCastAOE(SPELL_TAIL_LASH); - events.ScheduleEvent(EVENT_TAIL_LASH, 10000); - break; case EVENT_METEOR_STRIKE: { if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -SPELL_TWILIGHT_REALM)) @@ -466,29 +473,32 @@ class boss_twilight_halion : public CreatureScript if (!halion) return; - // We use explicit targeting here to avoid conditions + SPELL_ATTR6_CANT_TARGET_SELF. // Using AddAura because no spell cast packet in sniffs. - halion->AddAura(SPELL_COPY_DAMAGE, me); + halion->AddAura(SPELL_COPY_DAMAGE, me); // We use explicit targeting here to avoid conditions + SPELL_ATTR6_CANT_TARGET_SELF. me->AddAura(SPELL_COPY_DAMAGE, halion); + me->AddAura(SPELL_DUSK_SHROUD, me); me->SetHealth(halion->GetHealth()); me->SetPhaseMask(0x20, true); me->SetReactState(REACT_AGGRESSIVE); + } - instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 2); - + void EnterCombat(Unit* who) + { events.Reset(); events.SetPhase(PHASE_TWO); + + generic_halionAI::EnterCombat(who); + events.ScheduleEvent(EVENT_DARK_BREATH, urand(10000, 15000)); events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20000); - events.ScheduleEvent(EVENT_TAIL_LASH, 10000); - } - void EnterEvadeMode() - { - // We don't care about evading, we will be despawned. + instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me, 2); } + // Never evade + void EnterEvadeMode() { } + void KilledUnit(Unit* victim) { if (victim->GetTypeId() == TYPEID_PLAYER) @@ -565,10 +575,6 @@ class boss_twilight_halion : public CreatureScript DoCast(target, SPELL_SOUL_CONSUMPTION); events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, 20000); break; - case EVENT_TAIL_LASH: - DoCastAOE(SPELL_TAIL_LASH); - events.ScheduleEvent(EVENT_TAIL_LASH, 10000); - break; default: generic_halionAI::ExecuteEvent(eventId); break; @@ -1186,10 +1192,19 @@ class npc_living_inferno : public CreatureScript { npc_living_infernoAI(Creature* creature) : ScriptedAI(creature) { } - void JustSummoned(Creature* /*summoner*/) + void IsSummonedBy(Unit* /*summoner*/) { me->SetInCombatWithZone(); - DoCast(me, SPELL_BLAZING_AURA); + me->CastSpell(me, SPELL_BLAZING_AURA, true); + + if (InstanceScript* instance = me->GetInstanceScript()) + if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) + controller->AI()->JustSummoned(me); + } + + void JustDied(Unit* /*killer*/) + { + me->DespawnOrUnsummon(1); } }; @@ -1220,6 +1235,18 @@ class npc_living_ember : public CreatureScript _hasEnraged = false; } + void IsSummonedBy(Unit* /*summoner*/) + { + if (InstanceScript* instance = me->GetInstanceScript()) + if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) + controller->AI()->JustSummoned(me); + } + + void JustDied(Unit* /*killer*/) + { + me->DespawnOrUnsummon(1); + } + void UpdateAI(uint32 const diff) { if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_CASTING)) diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index a6b50467538..bf48132b2b2 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -45,7 +45,6 @@ class instance_ruby_sanctum : public InstanceMapScript OrbCarrierGUID = 0; OrbRotationFocusGUID = 0; HalionControllerGUID = 0; - CombatStalkerGUID = 0; CrystalChannelTargetGUID = 0; XerestraszaGUID = 0; BaltharusSharedHealth = 0; @@ -56,6 +55,13 @@ class instance_ruby_sanctum : public InstanceMapScript memset(BurningTreeGUID, 0, 4 * sizeof(uint64)); } + void OnPlayerEnter(Player* /*player*/) + { + if (!GetData64(DATA_HALION_CONTROLLER) && GetBossState(DATA_HALION) != DONE && GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE) + if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos)) + halionController->AI()->DoAction(ACTION_INTRO_HALION); + } + void OnCreatureCreate(Creature* creature) { switch (creature->GetEntry()) @@ -84,9 +90,6 @@ class instance_ruby_sanctum : public InstanceMapScript case NPC_ORB_ROTATION_FOCUS: OrbRotationFocusGUID = creature->GetGUID(); break; - case NPC_COMBAT_STALKER: - CombatStalkerGUID = creature->GetGUID(); - break; case NPC_BALTHARUS_TARGET: CrystalChannelTargetGUID = creature->GetGUID(); break; @@ -195,8 +198,6 @@ class instance_ruby_sanctum : public InstanceMapScript return FlameRingGUID; case DATA_TWILIGHT_FLAME_RING: return TwilightFlameRingGUID; - case DATA_COMBAT_STALKER: - return CombatStalkerGUID; default: break; } @@ -207,14 +208,7 @@ class instance_ruby_sanctum : public InstanceMapScript bool SetBossState(uint32 type, EncounterState state) { if (!InstanceScript::SetBossState(type, state)) - { - // Summon Halion on instance loading if conditions are met. Without those lines, - // InstanceScript::SetBossState returns false, thus preventing the switch from being called. - if (type == DATA_HALION && state != DONE && GetBossState(DATA_GENERAL_ZARITHRIAN) == DONE && !GetData64(DATA_HALION_CONTROLLER)) - if (Creature* halionController = instance->SummonCreature(NPC_HALION_CONTROLLER, HalionControllerSpawnPos)) - halionController->AI()->DoAction(ACTION_INTRO_HALION); return false; - } switch (type) { @@ -353,7 +347,6 @@ class instance_ruby_sanctum : public InstanceMapScript uint64 BurningTreeGUID[4]; uint64 FlameRingGUID; uint64 TwilightFlameRingGUID; - uint64 CombatStalkerGUID; uint32 BaltharusSharedHealth; }; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h index 7eb1b73721c..47a55f9035f 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.h @@ -52,7 +52,6 @@ enum DataTypes DATA_BURNING_TREE_4 = 16, DATA_FLAME_RING = 17, DATA_TWILIGHT_FLAME_RING = 18, - DATA_COMBAT_STALKER = 19, }; enum SharedActions @@ -97,7 +96,7 @@ enum CreaturesIds NPC_METEOR_STRIKE_FLAME = 40055, NPC_COMBUSTION = 40001, NPC_CONSUMPTION = 40135, - NPC_COMBAT_STALKER = 40151, + NPC_COMBAT_STALKER = 40151, // Seen in sniffs but not used, so no wonder. // Xerestrasza NPC_XERESTRASZA = 40429, -- cgit v1.2.3 From 1be638e7310bdd362566a6dc463bf94950d50616 Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 23 Oct 2012 11:44:02 +0200 Subject: Core/Dungeon Finder: Add debugging commands --- .../world/2012_10_23_00_world_trinity_string.sql | 37 +++--- sql/updates/world/2012_10_23_01_world_command.sql | 8 ++ src/server/game/DungeonFinding/LFGMgr.cpp | 56 +++++++-- src/server/game/DungeonFinding/LFGMgr.h | 12 ++ src/server/game/DungeonFinding/LFGQueue.cpp | 44 ++++++- src/server/game/DungeonFinding/LFGScripts.cpp | 24 ++++ src/server/game/Handlers/LFGHandler.cpp | 2 +- src/server/game/Miscellaneous/Language.h | 7 +- src/server/game/World/World.cpp | 2 +- src/server/game/World/World.h | 2 +- src/server/scripts/Commands/CMakeLists.txt | 1 + src/server/scripts/Commands/cs_lfg.cpp | 134 +++++++++++++++++++++ src/server/worldserver/worldserver.conf.dist | 11 +- 13 files changed, 307 insertions(+), 33 deletions(-) create mode 100644 sql/updates/world/2012_10_23_01_world_command.sql create mode 100644 src/server/scripts/Commands/cs_lfg.cpp (limited to 'src/server/scripts') diff --git a/sql/updates/world/2012_10_23_00_world_trinity_string.sql b/sql/updates/world/2012_10_23_00_world_trinity_string.sql index 0c9a6f4d050..60318667fbc 100644 --- a/sql/updates/world/2012_10_23_00_world_trinity_string.sql +++ b/sql/updates/world/2012_10_23_00_world_trinity_string.sql @@ -1,17 +1,22 @@ -DELETE FROM `trinity_string` WHERE `entry` IN (9986, 9987, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999); -INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) -VALUES - (9999, 'Error', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9998, 'None', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9997, 'Leader', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9996, 'Dps', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9995, 'Healer', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9994, 'Tank', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9993, 'Raid browser', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9992, 'Finished dungeon', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9991, 'In dungeon', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9990, 'Vote kick', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9989, 'Proposal', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9988, 'Queued', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), +DELETE FROM `trinity_string` WHERE `entry` IN (9980, 9981, 9982, 9983, 9984, 9985, 9986, 9987, 9988, 9989, 9990, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, 9999); +INSERT INTO `trinity_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES + (9980, 'Player name: %s, State: %s, Dungeons: %u (%s), Roles: %s, Comment: %s', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9981, 'LfgGroup?: %u, State: %s, Dungeon: %u', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9982, 'Not in group', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9983, 'Queues cleared', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9984, 'Lfg options: %u', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9985, 'Lfg options changed', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9986, 'None', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), (9987, 'Role check', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), - (9986, 'None', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + (9988, 'Queued', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9989, 'Proposal', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9990, 'Vote kick', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9991, 'In dungeon', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9992, 'Finished dungeon', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9993, 'Raid browser', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9994, 'Tank', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9995, 'Healer', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9996, 'Dps', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9997, 'Leader', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9998, 'None', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), + (9999, 'Error', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); diff --git a/sql/updates/world/2012_10_23_01_world_command.sql b/sql/updates/world/2012_10_23_01_world_command.sql new file mode 100644 index 00000000000..b46882c5949 --- /dev/null +++ b/sql/updates/world/2012_10_23_01_world_command.sql @@ -0,0 +1,8 @@ +DELETE FROM `command` WHERE `name` LIKE 'lfg%'; + +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('lfg player', 2, 'Syntax: .lfg player\n Shows information about player (state, roles, comment, dungeons selected).'), +('lfg group', 2, 'Syntax: .lfg group\n Shows information about all players in the group (state, roles, comment, dungeons selected).'), +('lfg queue', 2, 'Syntax: .lfg queue\n Shows info about current lfg queues.'), +('lfg clean', 3, 'Syntax: .flg clean\n Cleans current queue, only for debugging purposes.'), +('lfg options', 3, 'Syntax: .lfg options [new value]\n Shows current lfg options. New value is set if extra param is present.'); diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index e523c7f1c38..0a2a4b861b8 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -31,14 +31,11 @@ #include "GroupMgr.h" #include "GameEventMgr.h" -LFGMgr::LFGMgr(): m_QueueTimer(0), m_lfgProposalId(1) +LFGMgr::LFGMgr(): m_QueueTimer(0), m_lfgProposalId(1), + m_options(sWorld->getIntConfig(CONFIG_LFG_OPTIONSMASK)) { - m_options = sWorld->getBoolConfig(CONFIG_DUNGEON_FINDER_ENABLE); - if (m_options) - { - new LFGPlayerScript(); - new LFGGroupScript(); - } + new LFGPlayerScript(); + new LFGGroupScript(); } LFGMgr::~LFGMgr() @@ -353,7 +350,7 @@ void LFGMgr::LoadLFGDungeons(bool reload /* = false */) void LFGMgr::Update(uint32 diff) { - if (!m_options) + if (!isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) return; time_t currTime = time(NULL); @@ -1892,6 +1889,27 @@ bool LFGMgr::AllQueued(const LfgGuidList& check) return true; } +// Only for debugging purposes +void LFGMgr::Clean() +{ + m_Queues.clear(); +} + +bool LFGMgr::isOptionEnabled(uint32 option) +{ + return m_options & option; +} + +uint32 LFGMgr::GetOptions() +{ + return m_options; +} + +void LFGMgr::SetOptions(uint32 options) +{ + m_options = options; +} + bool LFGMgr::IsSeasonActive(uint32 dungeonId) { switch (dungeonId) @@ -1907,3 +1925,25 @@ bool LFGMgr::IsSeasonActive(uint32 dungeonId) } return false; } + +std::string LFGMgr::DumpQueueInfo(bool /*full*/) +{ + uint32 size = uint32(m_Queues.size()); + std::ostringstream o; + + o << "Number of Queues: " << size << "\n"; + for (LfgQueueMap::const_iterator itr = m_Queues.begin(); itr != m_Queues.end(); ++itr) + { + std::string const& queued = itr->second.DumpQueueInfo(); + std::string const& compatibles = itr->second.DumpCompatibleInfo(); + o << queued << compatibles; + /* + if (full) + { + LfgCompatibleMap const& compatibles = itr->second.GetCompatibleMap(); + } + */ + } + + return o.str(); +} diff --git a/src/server/game/DungeonFinding/LFGMgr.h b/src/server/game/DungeonFinding/LFGMgr.h index 920949a4564..5df6f2445e7 100755 --- a/src/server/game/DungeonFinding/LFGMgr.h +++ b/src/server/game/DungeonFinding/LFGMgr.h @@ -28,6 +28,12 @@ class Group; class Player; +enum LfgOptions +{ + LFG_OPTION_ENABLE_DUNGEON_FINDER = 0x01, + LFG_OPTION_ENABLE_RAID_BROWSER = 0x02, +}; + enum LFGMgrEnum { LFG_TIME_ROLECHECK = 40 * IN_MILLISECONDS, @@ -346,11 +352,17 @@ class LFGMgr bool IsTeleported(uint64 guid); bool AllQueued(LfgGuidList const& check); + void Clean(); + static bool HasIgnore(uint64 guid1, uint64 guid2); static void SendLfgQueueStatus(uint64 guid, LfgQueueStatusData const& data); + bool isOptionEnabled(uint32 option); + uint32 GetOptions(); + void SetOptions(uint32 options); bool IsSeasonActive(uint32 dungeonId); + std::string DumpQueueInfo(bool full = false); static std::string ConcatenateDungeons(LfgDungeonSet const& dungeons); static std::string GetRolesString(uint8 roles); static char const * GetStateString(LfgState state); diff --git a/src/server/game/DungeonFinding/LFGQueue.cpp b/src/server/game/DungeonFinding/LFGQueue.cpp index c1d89a16300..131a3e7a992 100644 --- a/src/server/game/DungeonFinding/LFGQueue.cpp +++ b/src/server/game/DungeonFinding/LFGQueue.cpp @@ -25,6 +25,7 @@ #include "Log.h" #include "ObjectMgr.h" #include "World.h" +#include "GroupMgr.h" /** Given a list of guids returns the concatenation using | as delimiter @@ -536,4 +537,45 @@ void LfgQueue::UpdateQueueTimers(time_t currTime) time_t LfgQueue::GetJoinTime(uint64 guid) { return m_QueueDataMap[guid].joinTime; -} \ No newline at end of file +} + +LfgCompatibleMap const& LfgQueue::GetCompatibleMap() +{ + return m_CompatibleMap; +} + +std::string LfgQueue::DumpQueueInfo() const +{ + uint32 players = 0; + uint32 groups = 0; + uint32 playersInGroup = 0; + + for (uint8 i = 0; i < 2; ++i) + { + LfgGuidList const& queue = i ? m_newToQueue : m_currentQueue; + for (LfgGuidList::const_iterator it = queue.begin(); it != queue.end(); ++it) + { + uint64 guid = *it; + if (IS_GROUP(guid)) + { + groups++; + if (Group const* group = sGroupMgr->GetGroupByGUID(GUID_LOPART(guid))) + playersInGroup += group->GetMembersCount(); + else + playersInGroup += 2; // Shouldn't happen but just in case + } + else + players++; + } + } + std::ostringstream o; + o << "Queued Players: " << players << "(in group: " << playersInGroup << ") Groups: " << groups << "\n"; + return o.str(); +} + +std::string LfgQueue::DumpCompatibleInfo() const +{ + std::ostringstream o; + o << "Compatible Map size: " << m_CompatibleMap.size() << "\n"; + return o.str(); +} diff --git a/src/server/game/DungeonFinding/LFGScripts.cpp b/src/server/game/DungeonFinding/LFGScripts.cpp index 10ce42da610..522ded70550 100644 --- a/src/server/game/DungeonFinding/LFGScripts.cpp +++ b/src/server/game/DungeonFinding/LFGScripts.cpp @@ -34,11 +34,17 @@ LFGPlayerScript::LFGPlayerScript() : PlayerScript("LFGPlayerScript") void LFGPlayerScript::OnLevelChanged(Player* player, uint8 /*oldLevel*/) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + sLFGMgr->InitializeLockedDungeons(player); } void LFGPlayerScript::OnLogout(Player* player) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + uint64 guid = player->GetGUID(); sLFGMgr->LeaveLfg(guid); LfgUpdateData updateData = LfgUpdateData(LFG_UPDATETYPE_REMOVED_FROM_QUEUE); @@ -51,6 +57,9 @@ void LFGPlayerScript::OnLogout(Player* player) void LFGPlayerScript::OnLogin(Player* player) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + sLFGMgr->InitializeLockedDungeons(player); sLFGMgr->SetTeam(player->GetGUID(), player->GetTeam()); // TODO - Restore LfgPlayerData and send proper status to player if it was in a group @@ -69,6 +78,9 @@ LFGGroupScript::LFGGroupScript() : GroupScript("LFGGroupScript") void LFGGroupScript::OnAddMember(Group* group, uint64 guid) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + uint64 gguid = group->GetGUID(); uint64 leader = group->GetLeaderGUID(); @@ -106,6 +118,9 @@ void LFGGroupScript::OnAddMember(Group* group, uint64 guid) void LFGGroupScript::OnRemoveMember(Group* group, uint64 guid, RemoveMethod method, uint64 kicker, char const* reason) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + uint64 gguid = group->GetGUID(); sLog->outDebug(LOG_FILTER_LFG, "LFGScripts::OnRemoveMember [" UI64FMTD "]: remove [" UI64FMTD "] Method: %d Kicker: [" UI64FMTD "] Reason: %s", gguid, guid, method, kicker, (reason ? reason : "")); @@ -157,6 +172,9 @@ void LFGGroupScript::OnRemoveMember(Group* group, uint64 guid, RemoveMethod meth void LFGGroupScript::OnDisband(Group* group) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + uint64 gguid = group->GetGUID(); sLog->outDebug(LOG_FILTER_LFG, "LFGScripts::OnDisband [" UI64FMTD "]", gguid); @@ -165,6 +183,9 @@ void LFGGroupScript::OnDisband(Group* group) void LFGGroupScript::OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + uint64 gguid = group->GetGUID(); sLog->outDebug(LOG_FILTER_LFG, "LFGScripts::OnChangeLeader [" UI64FMTD "]: old [" UI64FMTD "] new [" UI64FMTD "]", gguid, newLeaderGuid, oldLeaderGuid); @@ -173,6 +194,9 @@ void LFGGroupScript::OnChangeLeader(Group* group, uint64 newLeaderGuid, uint64 o void LFGGroupScript::OnInviteMember(Group* group, uint64 guid) { + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER)) + return; + uint64 gguid = group->GetGUID(); uint64 leader = group->GetLeaderGUID(); sLog->outDebug(LOG_FILTER_LFG, "LFGScripts::OnInviteMember [" UI64FMTD "]: invite [" UI64FMTD "] leader [" UI64FMTD "]", gguid, guid, leader); diff --git a/src/server/game/Handlers/LFGHandler.cpp b/src/server/game/Handlers/LFGHandler.cpp index 116afdf8c75..96d21097e71 100755 --- a/src/server/game/Handlers/LFGHandler.cpp +++ b/src/server/game/Handlers/LFGHandler.cpp @@ -46,7 +46,7 @@ void BuildPartyLockDungeonBlock(WorldPacket& data, const LfgLockPartyMap& lockMa void WorldSession::HandleLfgJoinOpcode(WorldPacket& recv_data) { - if (!sWorld->getBoolConfig(CONFIG_DUNGEON_FINDER_ENABLE) || + if (!sLFGMgr->isOptionEnabled(LFG_OPTION_ENABLE_DUNGEON_FINDER | LFG_OPTION_ENABLE_RAID_BROWSER) || (GetPlayer()->GetGroup() && GetPlayer()->GetGroup()->GetLeaderGUID() != GetPlayer()->GetGUID() && (GetPlayer()->GetGroup()->GetMembersCount() == MAXGROUPSIZE || !GetPlayer()->GetGroup()->isLFGGroup()))) { diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 6868db35975..07bfd284a7d 100755 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -990,6 +990,12 @@ enum TrinityStrings LANG_WORLD_CLOSED = 7523, LANG_WORLD_OPENED = 7524, + LANG_LFG_PLAYER_INFO = 9980, + LANG_LFG_GROUP_INFO = 9981, + LANG_LFG_NOT_IN_GROUP = 9982, + LANG_LFG_CLEAN = 9983, + LANG_LFG_OPTIONS = 9984, + LANG_LFG_OPTIONS_CHANGED = 9985, LANG_LFG_STATE_NONE = 9986, LANG_LFG_STATE_ROLECHECK = 9987, LANG_LFG_STATE_QUEUED = 9988, @@ -1098,4 +1104,3 @@ enum TrinityStrings // For other tables maybe 2000010000-2147483647 (max index) }; #endif - diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index aa31dcc8aa1..4949f904a57 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1182,7 +1182,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_WARDEN_CLIENT_RESPONSE_DELAY] = ConfigMgr::GetIntDefault("Warden.ClientResponseDelay", 600); // Dungeon finder - m_bool_configs[CONFIG_DUNGEON_FINDER_ENABLE] = ConfigMgr::GetBoolDefault("DungeonFinder.Enable", false); + m_int_configs[CONFIG_LFG_OPTIONSMASK] = ConfigMgr::GetIntDefault("DungeonFinder.OptionsMask", 1); // DBC_ItemAttributes m_bool_configs[CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES] = ConfigMgr::GetBoolDefault("DBC.EnforceItemAttributes", true); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 66b52549e93..470059eb86b 100755 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -155,7 +155,6 @@ enum WorldBoolConfigs CONFIG_CHATLOG_PUBLIC, CONFIG_CHATLOG_ADDON, CONFIG_CHATLOG_BGROUND, - CONFIG_DUNGEON_FINDER_ENABLE, CONFIG_AUTOBROADCAST, CONFIG_ALLOW_TICKETS, CONFIG_DBC_ENFORCE_ITEM_ATTRIBUTES, @@ -313,6 +312,7 @@ enum WorldIntConfigs CONFIG_DB_PING_INTERVAL, CONFIG_PRESERVE_CUSTOM_CHANNEL_DURATION, CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS, + CONFIG_LFG_OPTIONSMASK, CONFIG_MAX_INSTANCES_PER_HOUR, CONFIG_WARDEN_CLIENT_RESPONSE_DELAY, CONFIG_WARDEN_CLIENT_CHECK_HOLDOFF, diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index 177b3a479f5..a65324a9f42 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -27,6 +27,7 @@ set(scripts_STAT_SRCS Commands/cs_honor.cpp Commands/cs_instance.cpp Commands/cs_learn.cpp + Commands/cs_lfg.cpp Commands/cs_list.cpp Commands/cs_lookup.cpp Commands/cs_message.cpp diff --git a/src/server/scripts/Commands/cs_lfg.cpp b/src/server/scripts/Commands/cs_lfg.cpp new file mode 100644 index 00000000000..45ecc4e4721 --- /dev/null +++ b/src/server/scripts/Commands/cs_lfg.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2008-2012 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "ScriptMgr.h" +#include "Chat.h" +#include "LFGMgr.h" +#include "Group.h" + +void GetPlayerInfo(ChatHandler* handler, Player* player) +{ + if (!player) + return; + + uint64 guid = player->GetGUID(); + LfgDungeonSet dungeons = sLFGMgr->GetSelectedDungeons(guid); + + char const * const state = sLFGMgr->GetStateString(sLFGMgr->GetState(guid)); + handler->PSendSysMessage(LANG_LFG_PLAYER_INFO, player->GetName(), + state, uint8(dungeons.size()), sLFGMgr->ConcatenateDungeons(dungeons).c_str(), + sLFGMgr->GetRolesString(sLFGMgr->GetRoles(guid)).c_str(), sLFGMgr->GetComment(guid).c_str()); +} + +class lfg_commandscript : public CommandScript +{ +public: + lfg_commandscript() : CommandScript("lfg_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand lfgCommandTable[] = + { + { "player", SEC_GAMEMASTER, false, &HandleLfgPlayerInfoCommand, "", NULL }, + { "group", SEC_GAMEMASTER, false, &HandleLfgGroupInfoCommand, "", NULL }, + { "queue", SEC_GAMEMASTER, false, &HandleLfgQueueInfoCommand, "", NULL }, + { "clean", SEC_ADMINISTRATOR, false, &HandleLfgCleanCommand, "", NULL }, + { "options", SEC_ADMINISTRATOR, false, &HandleLfgOptionsCommand, "", NULL }, + { NULL, SEC_PLAYER, false, NULL, "", NULL } + }; + + static ChatCommand commandTable[] = + { + { "lfg", SEC_GAMEMASTER, false, NULL, "", lfgCommandTable }, + { NULL, SEC_PLAYER, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleLfgPlayerInfoCommand(ChatHandler* handler, char const* args) + { + Player* target = NULL; + std::string playerName; + if (!handler->extractPlayerTarget((char*)args, &target, NULL, &playerName)) + return false; + + GetPlayerInfo(handler, target); + return true; + } + + static bool HandleLfgGroupInfoCommand(ChatHandler* handler, char const* args) + { + Player* target = NULL; + std::string playerName; + if (!handler->extractPlayerTarget((char*)args, &target, NULL, &playerName)) + return false; + + Group* grp = target->GetGroup(); + if (!grp) + { + handler->PSendSysMessage(LANG_LFG_NOT_IN_GROUP, playerName.c_str()); + return true; + } + + uint64 guid = grp->GetGUID(); + char const * const state = sLFGMgr->GetStateString(sLFGMgr->GetState(guid)); + handler->PSendSysMessage(LANG_LFG_GROUP_INFO, grp->isLFGGroup(), + state, sLFGMgr->GetDungeon(guid)); + + for (GroupReference* itr = grp->GetFirstMember(); itr != NULL; itr = itr->next()) + GetPlayerInfo(handler, itr->getSource()); + + return true; + } + + static bool HandleLfgOptionsCommand(ChatHandler* handler, char const* args) + { + int32 options = -1; + if (char* str = strtok((char*)args, " ")) + { + int32 tmp = atoi(str); + if (tmp > -1) + options = tmp; + } + + if (options != -1) + { + sLFGMgr->SetOptions(options); + handler->PSendSysMessage(LANG_LFG_OPTIONS_CHANGED); + } + handler->PSendSysMessage(LANG_LFG_OPTIONS, sLFGMgr->GetOptions()); + return true; + } + + static bool HandleLfgQueueInfoCommand(ChatHandler* handler, char const* /*args*/) + { + handler->SendSysMessage(sLFGMgr->DumpQueueInfo().c_str()); + return true; + } + + static bool HandleLfgCleanCommand(ChatHandler* handler, char const* /*args*/) + { + handler->PSendSysMessage(LANG_LFG_CLEAN); + sLFGMgr->Clean(); + return true; + } +}; + +void AddSC_lfg_commandscript() +{ + new lfg_commandscript(); +} diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 55443f4253b..8f79cff8f46 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -1106,12 +1106,15 @@ Command.LookupMaxResults = 0 AllowTickets = 1 # -# DungeonFinder.Enable +# DungeonFinder.OptionsMask # Description: Dungeon and raid finder system. -# Default: 1 - (Enabled) -# 0 - (Disabled) +# Value is a bitmask consisting of: +# LFG_OPTION_ENABLE_DUNGEON_FINDER = 1, Enable the dungeon finder browser +# LFG_OPTION_ENABLE_RAID_BROWSER = 2, Enable the raid browser +# Default: 1 + +DungeonFinder.OptionsMask = 1 -DungeonFinder.Enable = 1 # # DBC.EnforceItemAttributes -- cgit v1.2.3 From 663db1cee3ab9bd3de76f210bc7c178f4991953e Mon Sep 17 00:00:00 2001 From: Spp Date: Tue, 23 Oct 2012 13:11:08 +0200 Subject: Core/Misc: Add default count param to HasItemCount --- src/server/game/DungeonFinding/LFGMgr.cpp | 4 ++-- src/server/game/Entities/Player/Player.cpp | 8 ++++---- src/server/game/Entities/Player/Player.h | 3 +-- src/server/game/Spells/Spell.cpp | 10 ++++----- src/server/game/Spells/SpellEffects.cpp | 2 +- .../BlackrockDepths/blackrock_depths.cpp | 2 +- .../scripts/EasternKingdoms/blasted_lands.cpp | 2 +- .../CavernsOfTime/BattleForMountHyjal/hyjal.cpp | 2 +- .../CavernsOfTime/DarkPortal/dark_portal.cpp | 4 ++-- .../EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 2 +- src/server/scripts/Kalimdor/silithus.cpp | 24 +++++++++++----------- .../scripts/Northrend/Nexus/Oculus/oculus.cpp | 2 +- .../Ulduar/Ulduar/boss_algalon_the_observer.cpp | 2 +- src/server/scripts/Outland/netherstorm.cpp | 10 ++++----- src/server/scripts/Outland/zangarmarsh.cpp | 2 +- src/server/scripts/World/go_scripts.cpp | 18 ++++++++-------- src/server/scripts/World/npc_taxi.cpp | 4 ++-- src/server/scripts/World/npcs_special.cpp | 2 +- 18 files changed, 51 insertions(+), 52 deletions(-) (limited to 'src/server/scripts') diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 0a2a4b861b8..a1084e8807e 100755 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -493,10 +493,10 @@ void LFGMgr::InitializeLockedDungeons(Player* player, uint8 level /* = 0 */) else if (ar->item) { - if (!player->HasItemCount(ar->item, 1) && (!ar->item2 || !player->HasItemCount(ar->item2, 1))) + if (!player->HasItemCount(ar->item) && (!ar->item2 || !player->HasItemCount(ar->item2))) lockData = LFG_LOCKSTATUS_MISSING_ITEM; } - else if (ar->item2 && !player->HasItemCount(ar->item2, 1)) + else if (ar->item2 && !player->HasItemCount(ar->item2)) lockData = LFG_LOCKSTATUS_MISSING_ITEM; } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e06463bf0aa..eeb3a49c368 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -18426,11 +18426,11 @@ bool Player::Satisfy(AccessRequirement const* ar, uint32 target_map, bool report uint32 missingItem = 0; if (ar->item) { - if (!HasItemCount(ar->item, 1) && - (!ar->item2 || !HasItemCount(ar->item2, 1))) + if (!HasItemCount(ar->item) && + (!ar->item2 || !HasItemCount(ar->item2))) missingItem = ar->item; } - else if (ar->item2 && !HasItemCount(ar->item2, 1)) + else if (ar->item2 && !HasItemCount(ar->item2)) missingItem = ar->item2; if (DisableMgr::IsDisabledFor(DISABLE_TYPE_MAP, target_map, this)) @@ -22909,7 +22909,7 @@ uint32 Player::GetResurrectionSpellId() } // Reincarnation (passive spell) // prio: 1 // Glyph of Renewed Life - if (prio < 1 && HasSpell(20608) && !HasSpellCooldown(21169) && (HasAura(58059) || HasItemCount(17030, 1))) + if (prio < 1 && HasSpell(20608) && !HasSpellCooldown(21169) && (HasAura(58059) || HasItemCount(17030))) spell_id = 21169; return spell_id; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 9d80a17bc5e..84f17643d98 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1239,7 +1239,7 @@ class Player : public Unit, public GridObject bool IsValidPos(uint8 bag, uint8 slot, bool explicit_pos); uint8 GetBankBagSlotCount() const { return GetByteValue(PLAYER_BYTES_2, 2); } void SetBankBagSlotCount(uint8 count) { SetByteValue(PLAYER_BYTES_2, 2, count); } - bool HasItemCount(uint32 item, uint32 count, bool inBankAlso = false) const; + bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const; bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = NULL); bool CanNoReagentCast(SpellInfo const* spellInfo) const; bool HasItemOrGemWithIdEquipped(uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const; @@ -1256,7 +1256,6 @@ class Player : public Unit, public GridObject return EQUIP_ERR_ITEM_NOT_FOUND; uint32 count = pItem->GetCount(); return CanStoreItem(bag, slot, dest, pItem->GetEntry(), count, pItem, swap, NULL); - } InventoryResult CanStoreItems(Item** pItem, int count) const; InventoryResult CanEquipNewItem(uint8 slot, uint16& dest, uint32 item, bool swap) const; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 295c8216b7f..8790bf035cc 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5846,7 +5846,7 @@ SpellCastResult Spell::CheckItems() else { uint32 itemid = m_CastItem->GetEntry(); - if (!p_caster->HasItemCount(itemid, 1)) + if (!p_caster->HasItemCount(itemid)) return SPELL_FAILED_ITEM_NOT_READY; ItemTemplate const* proto = m_CastItem->GetTemplate(); @@ -5998,7 +5998,7 @@ SpellCastResult Spell::CheckItems() { if (m_spellInfo->Totem[i] != 0) { - if (p_caster->HasItemCount(m_spellInfo->Totem[i], 1)) + if (p_caster->HasItemCount(m_spellInfo->Totem[i])) { totems -= 1; continue; @@ -6053,7 +6053,7 @@ SpellCastResult Spell::CheckItems() { if (!(m_spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (m_spellInfo->SpellFamilyFlags[0] & 0x40000000))) return SPELL_FAILED_TOO_MANY_OF_ITEM; - else if (!(p_caster->HasItemCount(m_spellInfo->Effects[i].ItemType, 1))) + else if (!(p_caster->HasItemCount(m_spellInfo->Effects[i].ItemType))) return SPELL_FAILED_TOO_MANY_OF_ITEM; else p_caster->CastSpell(m_caster, m_spellInfo->Effects[EFFECT_1].CalcValue(), false); // move this to anywhere @@ -6232,7 +6232,7 @@ SpellCastResult Spell::CheckItems() case ITEM_SUBCLASS_WEAPON_THROWN: { uint32 ammo = pItem->GetEntry(); - if (!m_caster->ToPlayer()->HasItemCount(ammo, 1)) + if (!m_caster->ToPlayer()->HasItemCount(ammo)) return SPELL_FAILED_NO_AMMO; }; break; @@ -6273,7 +6273,7 @@ SpellCastResult Spell::CheckItems() return SPELL_FAILED_NO_AMMO; } - if (!m_caster->ToPlayer()->HasItemCount(ammo, 1)) + if (!m_caster->ToPlayer()->HasItemCount(ammo)) { m_caster->ToPlayer()->SetUInt32Value(PLAYER_AMMO_ID, 0); return SPELL_FAILED_NO_AMMO; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index cc032a5895b..1688d3a8e69 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1778,7 +1778,7 @@ void Spell::EffectCreateItem2(SpellEffIndex effIndex) { if (item_id) { - if (!player->HasItemCount(item_id, 1)) + if (!player->HasItemCount(item_id)) return; // remove reagent diff --git a/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp index 7286466d335..263897edfad 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockDepths/blackrock_depths.cpp @@ -546,7 +546,7 @@ public: if (player->GetQuestRewardStatus(QUEST_A_BINDING_CONTRACT) != 1 && !player->HasItemCount(ITEM_THRORIUM_BROTHERHOOD_CONTRACT, 1, true) && - player->HasItemCount(ITEM_SULFURON_INGOT, 1)) + player->HasItemCount(ITEM_SULFURON_INGOT)) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_GET_CONTRACT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); } diff --git a/src/server/scripts/EasternKingdoms/blasted_lands.cpp b/src/server/scripts/EasternKingdoms/blasted_lands.cpp index 3d8e68dfbf8..75109f3a2f6 100644 --- a/src/server/scripts/EasternKingdoms/blasted_lands.cpp +++ b/src/server/scripts/EasternKingdoms/blasted_lands.cpp @@ -60,7 +60,7 @@ public: bool OnGossipHello(Player* player, Creature* creature) { - if (player->GetQuestStatus(3628) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(10757, 1)) + if (player->GetQuestStatus(3628) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(10757)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_USHER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp index ee7ef383603..48dd847b190 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp @@ -236,7 +236,7 @@ public: uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT); // Only let them get item if Azgalor is dead. - if (AzgalorEvent == DONE && !player->HasItemCount(ITEM_TEAR_OF_GODDESS, 1)) + if (AzgalorEvent == DONE && !player->HasItemCount(ITEM_TEAR_OF_GODDESS)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TYRANDE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); player->SEND_GOSSIP_MENU(907, creature->GetGUID()); return true; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp index ee8c4d1bae1..bed3cde6fa4 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/DarkPortal/dark_portal.cpp @@ -388,13 +388,13 @@ public: if (creature->isQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(ITEM_CHRONO_BEACON, 1)) + if (player->GetQuestStatus(QUEST_OPENING_PORTAL) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(ITEM_CHRONO_BEACON)) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_OBTAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->SEND_GOSSIP_MENU(10000, creature->GetGUID()); return true; } - else if (player->GetQuestRewardStatus(QUEST_OPENING_PORTAL) && !player->HasItemCount(ITEM_CHRONO_BEACON, 1)) + else if (player->GetQuestRewardStatus(QUEST_OPENING_PORTAL) && !player->HasItemCount(ITEM_CHRONO_BEACON)) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_OBTAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->SEND_GOSSIP_MENU(10001, creature->GetGUID()); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 3690e87354d..0158d470ef9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -79,7 +79,7 @@ public: player->PrepareQuestMenu(creature->GetGUID()); InstanceScript* instance = creature->GetInstanceScript(); - if (instance && instance->GetData(TYPE_BARREL_DIVERSION) != DONE && !player->HasItemCount(ITEM_ENTRY_BOMBS, 1)) + if (instance && instance->GetData(TYPE_BARREL_DIVERSION) != DONE && !player->HasItemCount(ITEM_ENTRY_BOMBS)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_EROZION1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); if (player->GetQuestStatus(QUEST_ENTRY_RETURN) == QUEST_STATUS_COMPLETE) diff --git a/src/server/scripts/Kalimdor/silithus.cpp b/src/server/scripts/Kalimdor/silithus.cpp index bad278f51c7..45a2fad9999 100644 --- a/src/server/scripts/Kalimdor/silithus.cpp +++ b/src/server/scripts/Kalimdor/silithus.cpp @@ -1289,37 +1289,37 @@ class go_wind_stone : public GameObjectScript { case TEMPLAR: { - if (player->HasItemCount(ITEM_TEMPLAR_FIRE, 1)) + if (player->HasItemCount(ITEM_TEMPLAR_FIRE)) result |= FIRE; - if (player->HasItemCount(ITEM_TEMPLAR_WATER, 1)) + if (player->HasItemCount(ITEM_TEMPLAR_WATER)) result |= WATER; - if (player->HasItemCount(ITEM_TEMPLAR_EARTH, 1)) + if (player->HasItemCount(ITEM_TEMPLAR_EARTH)) result |= EARTH; - if (player->HasItemCount(ITEM_TEMPLAR_AIR, 1)) + if (player->HasItemCount(ITEM_TEMPLAR_AIR)) result |= AIR; break; } case DUKE: { - if (player->HasItemCount(ITEM_DUKE_FIRE, 1)) + if (player->HasItemCount(ITEM_DUKE_FIRE)) result |= FIRE; - if (player->HasItemCount(ITEM_DUKE_WATER, 1)) + if (player->HasItemCount(ITEM_DUKE_WATER)) result |= WATER; - if (player->HasItemCount(ITEM_DUKE_EARTH, 1)) + if (player->HasItemCount(ITEM_DUKE_EARTH)) result |= EARTH; - if (player->HasItemCount(ITEM_DUKE_AIR, 1)) + if (player->HasItemCount(ITEM_DUKE_AIR)) result |= AIR; break; } case ROYAL: { - if (player->HasItemCount(ITEM_ROYAL_FIRE, 1)) + if (player->HasItemCount(ITEM_ROYAL_FIRE)) result |= FIRE; - if (player->HasItemCount(ITEM_ROYAL_WATER, 1)) + if (player->HasItemCount(ITEM_ROYAL_WATER)) result |= WATER; - if (player->HasItemCount(ITEM_ROYAL_EARTH, 1)) + if (player->HasItemCount(ITEM_ROYAL_EARTH)) result |= EARTH; - if (player->HasItemCount(ITEM_ROYAL_AIR, 1)) + if (player->HasItemCount(ITEM_ROYAL_AIR)) result |= AIR; break; } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 28595571a2f..f00369fd9e2 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -32,7 +32,7 @@ #define GOSSIP_ITEM_ETERNOS1 "I want to fly on the wings of the Bronze Flight" #define GOSSIP_ITEM_ETERNOS2 "What abilities do Amber Drakes have?" -#define HAS_ESSENCE(a) ((a)->HasItemCount(ITEM_EMERALD_ESSENCE, 1) || (a)->HasItemCount(ITEM_AMBER_ESSENCE, 1) || (a)->HasItemCount(ITEM_RUBY_ESSENCE, 1)) +#define HAS_ESSENCE(a) ((a)->HasItemCount(ITEM_EMERALD_ESSENCE) || (a)->HasItemCount(ITEM_AMBER_ESSENCE) || (a)->HasItemCount(ITEM_RUBY_ESSENCE)) enum GossipNPCs { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 67122b2e859..9d8dfa48a68 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -978,7 +978,7 @@ class go_celestial_planetarium_access : public GameObjectScript if (!lock->Index[i]) continue; - if (player->HasItemCount(lock->Index[i], 1)) + if (player->HasItemCount(lock->Index[i])) { hasKey = true; break; diff --git a/src/server/scripts/Outland/netherstorm.cpp b/src/server/scripts/Outland/netherstorm.cpp index 480275c42bd..8533491c15f 100644 --- a/src/server/scripts/Outland/netherstorm.cpp +++ b/src/server/scripts/Outland/netherstorm.cpp @@ -323,22 +323,22 @@ public: { case 3726: //b'naar if ((player->GetQuestStatus(10299) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10329) == QUEST_STATUS_INCOMPLETE) && - player->HasItemCount(29366, 1)) + player->HasItemCount(29366)) manaforge = player->SummonCreature(ENTRY_BNAAR_C_CONSOLE, 2918.95f, 4189.98f, 161.88f, 0.34f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000); break; case 3730: //coruu if ((player->GetQuestStatus(10321) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10330) == QUEST_STATUS_INCOMPLETE) && - player->HasItemCount(29396, 1)) + player->HasItemCount(29396)) manaforge = player->SummonCreature(ENTRY_CORUU_C_CONSOLE, 2426.77f, 2750.38f, 133.24f, 2.14f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000); break; case 3734: //duro if ((player->GetQuestStatus(10322) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10338) == QUEST_STATUS_INCOMPLETE) && - player->HasItemCount(29397, 1)) + player->HasItemCount(29397)) manaforge = player->SummonCreature(ENTRY_DURO_C_CONSOLE, 2976.48f, 2183.29f, 163.20f, 1.85f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000); break; case 3722: //ara if ((player->GetQuestStatus(10323) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(10365) == QUEST_STATUS_INCOMPLETE) && - player->HasItemCount(29411, 1)) + player->HasItemCount(29411)) manaforge = player->SummonCreature(ENTRY_ARA_C_CONSOLE, 4013.71f, 4028.76f, 192.10f, 1.25f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 125000); break; } @@ -704,7 +704,7 @@ public: if (creature->isQuestGiver()) player->PrepareQuestMenu(creature->GetGUID()); - if (player->GetQuestStatus(QUEST_ON_NETHERY_WINGS) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(29778, 1)) + if (player->GetQuestStatus(QUEST_ON_NETHERY_WINGS) == QUEST_STATUS_INCOMPLETE && !player->HasItemCount(29778)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); diff --git a/src/server/scripts/Outland/zangarmarsh.cpp b/src/server/scripts/Outland/zangarmarsh.cpp index aa51b532c27..a48866a2f83 100644 --- a/src/server/scripts/Outland/zangarmarsh.cpp +++ b/src/server/scripts/Outland/zangarmarsh.cpp @@ -249,7 +249,7 @@ public: break; case GOSSIP_ACTION_INFO_DEF + 2: { - if (!player->HasItemCount(24573, 1)) + if (!player->HasItemCount(24573)) { ItemPosCountVec dest; uint32 itemId = 24573; diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 2a5d58122ed..ddb0044a888 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -677,28 +677,28 @@ public: switch (go->GetEntry()) { case MATRIX_PUNCHOGRAPH_3005_A: - if (player->HasItemCount(ITEM_WHITE_PUNCH_CARD, 1)) + if (player->HasItemCount(ITEM_WHITE_PUNCH_CARD)) { player->DestroyItemCount(ITEM_WHITE_PUNCH_CARD, 1, true); player->CastSpell(player, SPELL_YELLOW_PUNCH_CARD, true); } break; case MATRIX_PUNCHOGRAPH_3005_B: - if (player->HasItemCount(ITEM_YELLOW_PUNCH_CARD, 1)) + if (player->HasItemCount(ITEM_YELLOW_PUNCH_CARD)) { player->DestroyItemCount(ITEM_YELLOW_PUNCH_CARD, 1, true); player->CastSpell(player, SPELL_BLUE_PUNCH_CARD, true); } break; case MATRIX_PUNCHOGRAPH_3005_C: - if (player->HasItemCount(ITEM_BLUE_PUNCH_CARD, 1)) + if (player->HasItemCount(ITEM_BLUE_PUNCH_CARD)) { player->DestroyItemCount(ITEM_BLUE_PUNCH_CARD, 1, true); player->CastSpell(player, SPELL_RED_PUNCH_CARD, true); } break; case MATRIX_PUNCHOGRAPH_3005_D: - if (player->HasItemCount(ITEM_RED_PUNCH_CARD, 1)) + if (player->HasItemCount(ITEM_RED_PUNCH_CARD)) { player->DestroyItemCount(ITEM_RED_PUNCH_CARD, 1, true); player->CastSpell(player, SPELL_PRISMATIC_PUNCH_CARD, true); @@ -884,7 +884,7 @@ public: bool OnGossipHello(Player* player, GameObject* /*go*/) { - if (player->HasItemCount(ITEM_CUERGOS_KEY, 1)) + if (player->HasItemCount(ITEM_CUERGOS_KEY)) return false; player->CastSpell(player, SPELL_SUMMON_PIRATES_TREASURE_AND_TRIGGER_MOB, true); @@ -910,7 +910,7 @@ public: bool OnGossipHello(Player* player, GameObject* go) { - if (!player->HasItemCount(ITEM_TELEPORTER_POWER_PACK, 1)) + if (!player->HasItemCount(ITEM_TELEPORTER_POWER_PACK)) return false; go->SummonCreature(NPC_IMAGE_WIND_TRADER, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), go->GetAngle(player), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); @@ -998,7 +998,7 @@ class go_soulwell : public GameObjectScript return true; // Don't try to add a stone if we already have one. - if (player->HasItemCount(_stoneId, 1)) + if (player->HasItemCount(_stoneId)) { if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(_stoneSpell)) Spell::SendCastResult(player, spell, 0, SPELL_FAILED_TOO_MANY_OF_ITEM); @@ -1007,7 +1007,7 @@ class go_soulwell : public GameObjectScript owner->CastSpell(player, _stoneSpell, true); // Item has to actually be created to remove a charge on the well. - if (player->HasItemCount(_stoneId, 1)) + if (player->HasItemCount(_stoneId)) go->AddUse(); return false; @@ -1158,7 +1158,7 @@ public: go->CastSpell(target, SPELL_INDISPOSED_III); } go->CastSpell(player, SPELL_INDISPOSED); - if (player->HasItemCount(ITEM_ANDERHOLS_SLIDER_CIDER, 1)) + if (player->HasItemCount(ITEM_ANDERHOLS_SLIDER_CIDER)) go->CastSpell(player, SPELL_CREATE_AMBERSEEDS); return true; } diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp index 6241978fbd2..efdd4da73d6 100644 --- a/src/server/scripts/World/npc_taxi.cpp +++ b/src/server/scripts/World/npc_taxi.cpp @@ -77,7 +77,7 @@ public: player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_SUSURRUS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); break; case 20903: // Netherstorm - Protectorate Nether Drake - if (player->GetQuestStatus(10438) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(29778, 1)) + if (player->GetQuestStatus(10438) == QUEST_STATUS_INCOMPLETE && player->HasItemCount(29778)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_NETHER_DRAKE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); break; case 18725: // Old Hillsbrad Foothills - Brazen @@ -203,7 +203,7 @@ public: player->ActivateTaxiPathTo(627); //TaxiPath 627 (possibly 627+628(152->153->154->155)) break; case GOSSIP_ACTION_INFO_DEF + 2: - if (!player->HasItemCount(25853, 1)) + if (!player->HasItemCount(25853)) player->SEND_GOSSIP_MENU(9780, creature->GetGUID()); else { diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index b291b9751b4..4f0687ef11d 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1268,7 +1268,7 @@ public: if (player->GetSpecsCount() == 1 && creature->isCanTrainingAndResetTalentsOf(player) && player->getLevel() >= sWorld->getIntConfig(CONFIG_MIN_DUALSPEC_LEVEL)) player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_HELLO_ROGUE3, GOSSIP_SENDER_MAIN, GOSSIP_OPTION_LEARNDUALSPEC); - if (player->getClass() == CLASS_ROGUE && player->getLevel() >= 24 && !player->HasItemCount(17126, 1) && !player->GetQuestRewardStatus(6681)) + if (player->getClass() == CLASS_ROGUE && player->getLevel() >= 24 && !player->HasItemCount(17126) && !player->GetQuestRewardStatus(6681)) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_HELLO_ROGUE2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->SEND_GOSSIP_MENU(5996, creature->GetGUID()); -- cgit v1.2.3