diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 9 | ||||
| -rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.h | 12 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Handlers/AuctionHouseHandler.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 21 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 18 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_borean_tundra.cpp | 7 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/zone_howling_fjord.cpp | 51 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 40 |
11 files changed, 100 insertions, 79 deletions
diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 9b98e99e326..8b994545536 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -253,6 +253,15 @@ void AuctionHouseMgr::LoadAuctionItems() { uint32 oldMSTime = getMSTime(); + // need to clear in case we are reloading + if (!mAitems.empty()) + { + for (ItemMap::iterator itr = mAitems.begin(); itr != mAitems.end(); ++itr) + delete itr->second; + + mAitems.clear(); + } + // data needs to be at first place for Item::LoadFromDB PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_AUCTION_ITEMS); PreparedQueryResult result = CharacterDatabase.Query(stmt); diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.h b/src/server/game/AuctionHouse/AuctionHouseMgr.h index e0e972c5d40..4892821cb94 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.h +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.h @@ -35,17 +35,21 @@ class WorldPacket; enum AuctionError { ERR_AUCTION_OK = 0, + ERR_AUCTION_INVENTORY = 1, ERR_AUCTION_DATABASE_ERROR = 2, ERR_AUCTION_NOT_ENOUGHT_MONEY = 3, ERR_AUCTION_ITEM_NOT_FOUND = 4, - ERR_AUCTION_BID_OWN = 10 + ERR_AUCTION_HIGHER_BID = 5, + ERR_AUCTION_BID_INCREMENT = 7, + ERR_AUCTION_BID_OWN = 10, + ERR_AUCTION_RESTRICTED_ACCOUNT = 13 }; enum AuctionAction { - AUCTION_SELL_ITEM = 0, - AUCTION_CANCEL = 1, - AUCTION_PLACE_BID = 2 + AUCTION_SELL_ITEM = 0, + AUCTION_CANCEL = 1, + AUCTION_PLACE_BID = 2 }; enum MailAuctionAnswers diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 4a2408b7f0a..3727e19bc2d 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -857,6 +857,13 @@ bool Creature::isCanInteractWithBattleMaster(Player* player, bool msg) const return true; } +bool Creature::isCanTrainingAndResetTalentsOf(Player* player) const +{ + return player->getLevel() >= 10 + && GetCreatureTemplate()->trainer_type == TRAINER_TYPE_CLASS + && player->getClass() == GetCreatureTemplate()->trainer_class; +} + Player* Creature::GetLootRecipient() const { if (!m_lootRecipient) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 6b6edd7454f..b3372fc8c56 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -483,6 +483,7 @@ class Creature : public Unit, public GridObject<Creature>, public MapCreature /// @todo Rename these properly bool isCanInteractWithBattleMaster(Player* player, bool msg) const; + bool isCanTrainingAndResetTalentsOf(Player* player) const; bool canCreatureAttack(Unit const* victim, bool force = true) const; bool IsImmunedToSpell(SpellInfo const* spellInfo) const; // override Unit::IsImmunedToSpell bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index) const; // override Unit::IsImmunedToSpellEffect diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5670f08c79f..28213785911 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14370,6 +14370,14 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool } break; } + case GOSSIP_OPTION_LEARNDUALSPEC: + if (!(GetSpecsCount() == 1 && creature->isCanTrainingAndResetTalentsOf(this) && !(getLevel() < sWorld->getIntConfig(CONFIG_MIN_DUALSPEC_LEVEL)))) + canTalk = false; + break; + case GOSSIP_OPTION_UNLEARNTALENTS: + if (!creature->isCanTrainingAndResetTalentsOf(this)) + canTalk = false; + break; case GOSSIP_OPTION_UNLEARNPETTALENTS: if (!GetPet() || GetPet()->getPetType() != HUNTER_PET || GetPet()->m_spells.size() <= 1 || creature->GetCreatureTemplate()->trainer_type != TRAINER_TYPE_PETS || creature->GetCreatureTemplate()->trainer_class != CLASS_HUNTER) canTalk = false; @@ -14390,8 +14398,6 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool canTalk = false; break; case GOSSIP_OPTION_TRAINER: - case GOSSIP_OPTION_LEARNDUALSPEC: - case GOSSIP_OPTION_UNLEARNTALENTS: case GOSSIP_OPTION_GOSSIP: case GOSSIP_OPTION_SPIRITGUIDE: case GOSSIP_OPTION_INNKEEPER: diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 6f44b867c4b..d193852eb1c 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -30,9 +30,6 @@ #include "Util.h" #include "AccountMgr.h" -//please DO NOT use iterator++, because it is slower than ++iterator!!! -//post-incrementation is always slower than pre-incrementation ! - //void called when player click on auctioneer npc void WorldSession::HandleAuctionHelloOpcode(WorldPacket& recvData) { diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 2cbbde67e6a..e7f7ea69611 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1414,7 +1414,26 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffIndex effIndex, SpellImplici float x, y, z, angle; angle = (float)rand_norm() * static_cast<float>(M_PI * 35.0f / 180.0f) - static_cast<float>(M_PI * 17.5f / 180.0f); m_caster->GetClosePoint(x, y, z, DEFAULT_WORLD_OBJECT_SIZE, dis, angle); - m_targets.SetDst(x, y, z, m_caster->GetOrientation()); + + float ground = z; + float liquidLevel = m_caster->GetMap()->GetWaterOrGroundLevel(x, y, z, &ground); + if (liquidLevel <= ground) // When there is no liquid Map::GetWaterOrGroundLevel returns ground level + { + SendCastResult(SPELL_FAILED_NOT_HERE); + SendChannelUpdate(0); + finish(false); + return; + } + + if (ground + 0.75 > liquidLevel) + { + SendCastResult(SPELL_FAILED_TOO_SHALLOW); + SendChannelUpdate(0); + finish(false); + return; + } + + m_targets.SetDst(x, y, liquidLevel, m_caster->GetOrientation()); return; } default: diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 64a538dce86..fa82b6436d3 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5290,25 +5290,9 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) } Map* cMap = m_caster->GetMap(); - if (goinfo->type == GAMEOBJECT_TYPE_FISHINGNODE || goinfo->type == GAMEOBJECT_TYPE_FISHINGHOLE) - { - LiquidData liqData; - if (!cMap->IsInWater(fx, fy, fz + 1.f/* -0.5f */, &liqData)) // Hack to prevent fishing bobber from failing to land on fishing hole - { // but this is not proper, we really need to ignore not materialized objects - SendCastResult(SPELL_FAILED_NOT_HERE); - SendChannelUpdate(0); - return; - } - - // replace by water level in this case - //fz = cMap->GetWaterLevel(fx, fy); - fz = liqData.level; - } // if gameobject is summoning object, it should be spawned right on caster's position - else if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL) - { + if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL) m_caster->GetPosition(fx, fy, fz); - } GameObject* pGameObj = new GameObject; diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 6fb1079d94c..16965b83d25 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -820,7 +820,6 @@ public: void Reset() { WithRedDragonBlood = false; - HarpoonerGUID = 0; } void EnterCombat(Unit* who) @@ -879,6 +878,12 @@ public: } } + if ((me->getFaction() == 35) && (!me->HasAura(SPELL_SUBDUED))) + { + HarpoonerGUID = 0; + me->DisappearAndDie(); + } + if (!UpdateVictim()) return; diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 65d69e368b8..268e904e292 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -276,56 +276,6 @@ public: }; /*###### -## npc_mcgoyver -######*/ - -#define GOSSIP_ITEM_MG_I "Walt sent me to pick up some dark iron ingots." -#define GOSSIP_ITEM_MG_II "Yarp." - -enum eMcGoyver -{ - QUEST_WE_CAN_REBUILD_IT = 11483, - - SPELL_CREATURE_DARK_IRON_INGOTS = 44512, - SPELL_TAXI_EXPLORERS_LEAGUE = 44280, - - GOSSIP_TEXTID_MCGOYVER = 12193 -}; - -class npc_mcgoyver : public CreatureScript -{ -public: - npc_mcgoyver() : CreatureScript("npc_mcgoyver") { } - - bool OnGossipHello(Player* player, Creature* creature) - { - if (player->GetQuestStatus(QUEST_WE_CAN_REBUILD_IT) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MG_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF+1: - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_MG_II, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_MCGOYVER, creature->GetGUID()); - player->CastSpell(player, SPELL_CREATURE_DARK_IRON_INGOTS, true); - break; - case GOSSIP_ACTION_INFO_DEF+2: - player->CastSpell(player, SPELL_TAXI_EXPLORERS_LEAGUE, true); - player->CLOSE_GOSSIP_MENU(); - break; - } - return true; - } -}; - -/*###### ## npc_daegarn ######*/ @@ -435,6 +385,5 @@ void AddSC_howling_fjord() new npc_apothecary_hanes; new npc_plaguehound_tracker; new npc_razael_and_lyana; - new npc_mcgoyver; new npc_daegarn; } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index c60f4f07821..c591f3141ed 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3562,6 +3562,45 @@ class spell_gen_orc_disguise : public SpellScriptLoader } }; +enum WhisperGulchYoggSaronWhisper +{ + SPELL_YOGG_SARON_WHISPER_DUMMY = 29072 +}; + +class spell_gen_whisper_gulch_yogg_saron_whisper : public SpellScriptLoader +{ + public: + spell_gen_whisper_gulch_yogg_saron_whisper() : SpellScriptLoader("spell_gen_whisper_gulch_yogg_saron_whisper") { } + + class spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript : public AuraScript + { + PrepareAuraScript(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_YOGG_SARON_WHISPER_DUMMY)) + return false; + return true; + } + + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell((Unit*)NULL, SPELL_YOGG_SARON_WHISPER_DUMMY, true); + } + + void Register() + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_gen_whisper_gulch_yogg_saron_whisper_AuraScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -3642,4 +3681,5 @@ void AddSC_generic_spell_scripts() new spell_gen_replenishment(); new spell_gen_aura_service_uniform(); new spell_gen_orc_disguise(); + new spell_gen_whisper_gulch_yogg_saron_whisper(); } |
