aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShocker <none@none>2010-08-25 21:23:28 +0300
committerShocker <none@none>2010-08-25 21:23:28 +0300
commit91ebad0016d102ee9a10c5804ace08b41e6ac4e2 (patch)
tree6bcfaafed4e2b66efa76a9f928b4955b25a47486 /src
parente8a7a53bfa26c3809d3540cfeae81efd04a3ae5d (diff)
* Add support for quest 1393 (Galen's Escape), original code by przemratajczak, port by McBitter, closes issue 3463
* Fix typo in AuctionHouseHandler, thanks GriffonHeart, fixes issue 3609 * Forgotten thanks --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp155
3 files changed, 158 insertions, 1 deletions
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index 2a4a313a8ab..362f9f7e986 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -215,6 +215,7 @@ void AddSC_silvermoon_city();
void AddSC_silverpine_forest();
void AddSC_stormwind_city();
void AddSC_stranglethorn_vale();
+void AddSC_swamp_of_sorrows();
void AddSC_tirisfal_glades();
void AddSC_undercity();
void AddSC_western_plaguelands();
@@ -793,6 +794,7 @@ void AddEasternKingdomsScripts()
AddSC_silverpine_forest();
AddSC_stormwind_city();
AddSC_stranglethorn_vale();
+ AddSC_swamp_of_sorrows();
AddSC_tirisfal_glades();
AddSC_undercity();
AddSC_western_plaguelands();
diff --git a/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp b/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp
index 4d8b544b850..9c3c395cfd2 100644
--- a/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/AuctionHouseHandler.cpp
@@ -305,7 +305,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPacket & recv_data)
return;
}
- if (pl->HasEnoughMoney(price))
+ if (!pl->HasEnoughMoney(price))
{
//you don't have enought money!, client tests!
//SendAuctionCommandResult(auction->auctionId, AUCTION_PLACE_BID, ???);
diff --git a/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp b/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp
new file mode 100644
index 00000000000..f957bec940f
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/swamp_of_sorrows.cpp
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
+ * Copyright (C) 2006-2009 ScriptDev2 <https://scriptdev2.svn.sourceforge.net/>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "ScriptPCH.h"
+#include "ScriptedEscortAI.h"
+
+/*######
+## npc_galen_goodward
+######*/
+
+enum Galen
+{
+ QUEST_GALENS_ESCAPE = 1393,
+
+ GO_GALENS_CAGE = 37118,
+
+ SAY_PERIODIC = -1000500,
+ SAY_QUEST_ACCEPTED = -1000501,
+ SAY_ATTACKED_1 = -1000502,
+ SAY_ATTACKED_2 = -1000503,
+ SAY_QUEST_COMPLETE = -1000504,
+ EMOTE_WHISPER = -1000505,
+ EMOTE_DISAPPEAR = -1000506
+};
+
+class npc_galen_goodward : public CreatureScript
+{
+public:
+
+ npc_galen_goodward() : CreatureScript("npc_galen_goodward") { }
+
+ bool OnQuestAccept(Player* pPlayer, Creature* pCreature, Quest const *quest)
+ {
+ if (quest->GetQuestId() == QUEST_GALENS_ESCAPE)
+ {
+ CAST_AI(npc_galen_goodward::npc_galen_goodwardAI, pCreature->AI())->Start(false, false, pPlayer->GetGUID());
+ pCreature->setFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
+ DoScriptText(SAY_QUEST_ACCEPTED, pCreature);
+ }
+ return true;
+ }
+
+ CreatureAI* GetAI(Creature* pCreature) const
+ {
+ return new npc_galen_goodwardAI(pCreature);
+ }
+
+ struct npc_galen_goodwardAI : public npc_escortAI
+ {
+ npc_galen_goodwardAI(Creature* pCreature) : npc_escortAI(pCreature)
+ {
+ m_uiGalensCageGUID = 0;
+ Reset();
+ }
+
+ uint64 m_uiGalensCageGUID;
+ uint32 m_uiPeriodicSay;
+
+ void Reset()
+ {
+ m_uiPeriodicSay = 6000;
+ }
+
+ void EnterCombat(Unit* pWho)
+ {
+ if (HasEscortState(STATE_ESCORT_ESCORTING))
+ DoScriptText(RAND(SAY_ATTACKED_1, SAY_ATTACKED_2), me, pWho);
+ }
+
+ void WaypointStart(uint32 uiPointId)
+ {
+ switch (uiPointId)
+ {
+ case 0:
+ {
+ GameObject* pCage = NULL;
+ if (m_uiGalensCageGUID)
+ pCage = me->GetMap()->GetGameObject(m_uiGalensCageGUID);
+ else
+ pCage = GetClosestGameObjectWithEntry(me, GO_GALENS_CAGE, INTERACTION_DISTANCE);
+ if (pCage)
+ {
+ pCage->UseDoorOrButton();
+ m_uiGalensCageGUID = pCage->GetGUID();
+ }
+ break;
+ }
+ case 21:
+ DoScriptText(EMOTE_DISAPPEAR, me);
+ break;
+ }
+ }
+
+ void WaypointReached(uint32 uiPointId)
+ {
+ switch (uiPointId)
+ {
+ case 0:
+ if (GameObject* pCage = me->GetMap()->GetGameObject(m_uiGalensCageGUID))
+ pCage->ResetDoorOrButton();
+ break;
+ case 20:
+ if (Player* pPlayer = GetPlayerForEscort())
+ {
+ me->SetFacingToObject(pPlayer);
+ DoScriptText(SAY_QUEST_COMPLETE, me, pPlayer);
+ DoScriptText(EMOTE_WHISPER, me, pPlayer);
+ pPlayer->GroupEventHappens(QUEST_GALENS_ESCAPE, me);
+ }
+ SetRun(true);
+ break;
+ }
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ npc_escortAI::UpdateAI(uiDiff);
+
+ if (HasEscortState(STATE_ESCORT_NONE))
+ return;
+
+ if (m_uiPeriodicSay < uiDiff)
+ {
+ if (!HasEscortState(STATE_ESCORT_ESCORTING))
+ DoScriptText(SAY_PERIODIC, me);
+ m_uiPeriodicSay = 15000;
+ }
+ else
+ m_uiPeriodicSay -= uiDiff;
+
+ DoMeleeAttackIfReady();
+ }
+ };
+};
+
+void AddSC_swamp_of_sorrows()
+{
+ new npc_galen_goodward();
+}