diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 8 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 43 | ||||
-rw-r--r-- | src/server/game/Scripting/ScriptLoader.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/World/npc_taxi.cpp | 117 |
5 files changed, 32 insertions, 142 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index be8553ed47a..711196f6a2b 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -408,10 +408,10 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU data << questTitle; data << questDetails; data << questObjectives; - data << uint8(activateAccept ? 1 : 0); // auto finish + data << uint8(activateAccept ? 1 : 0); // CGQuestInfo::m_autoLaunched data << uint32(quest->GetFlags()); // 3.3.3 questFlags data << uint32(quest->GetSuggestedPlayers()); - data << uint8(0); // IsFinished? value is sent back to server in quest accept packet + data << uint8(0); // CGQuestInfo::m_startQuestCheat if (quest->HasFlag(QUEST_FLAGS_HIDDEN_REWARDS)) { diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4fdf25e41c3..95e76a25763 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15638,13 +15638,7 @@ QuestStatus Player::GetQuestStatus(uint32 quest_id) const bool Player::CanShareQuest(uint32 quest_id) const { Quest const* qInfo = sObjectMgr->GetQuestTemplate(quest_id); - if (qInfo && qInfo->HasFlag(QUEST_FLAGS_SHARABLE)) - { - QuestStatusMap::const_iterator itr = m_QuestStatus.find(quest_id); - if (itr != m_QuestStatus.end()) - return itr->second.Status == QUEST_STATUS_INCOMPLETE; - } - return false; + return qInfo && qInfo->HasFlag(QUEST_FLAGS_SHARABLE) && IsActiveQuest(quest_id); } void Player::SetQuestStatus(uint32 questId, QuestStatus status, bool update /*= true*/) diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index 31ba812ab98..faf6677c901 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -102,12 +102,16 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) { ObjectGuid guid; uint32 questId; - uint32 unk1; - recvData >> guid >> questId >> unk1; + uint32 startCheat; + recvData >> guid >> questId >> startCheat; - TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST %s, quest = %u, unk1 = %u", guid.ToString().c_str(), questId, unk1); + TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST %s, quest = %u, startCheat = %u", guid.ToString().c_str(), questId, startCheat); - Object* object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM|TYPEMASK_PLAYER); + Object* object; + if (!guid.IsPlayer()) + object = ObjectAccessor::GetObjectByTypeMask(*_player, guid, TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_ITEM); + else + object = ObjectAccessor::FindPlayer(guid); #define CLOSE_GOSSIP_CLEAR_DIVIDER() \ do { \ @@ -129,6 +133,11 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) CLOSE_GOSSIP_CLEAR_DIVIDER(); return; } + if (_player->GetGroup() != playerQuestObject->GetGroup() || (_player != playerQuestObject && !playerQuestObject->GetGroup())) + { + CLOSE_GOSSIP_CLEAR_DIVIDER(); + return; + } } else { @@ -141,7 +150,10 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) // some kind of WPE protection if (!_player->CanInteractWithQuestGiver(object)) + { + CLOSE_GOSSIP_CLEAR_DIVIDER(); return; + } if (Quest const* quest = sObjectMgr->GetQuestTemplate(questId)) { @@ -199,7 +211,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPacket& recvData) } } - _player->PlayerTalkClass->SendCloseGossip(); + CLOSE_GOSSIP_CLEAR_DIVIDER(); #undef CLOSE_GOSSIP_CLEAR_DIVIDER } @@ -588,7 +600,7 @@ void WorldSession::HandlePushQuestToParty(WorldPacket& recvPacket) else { receiver->SetDivider(sender->GetGUID()); - receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, sender->GetGUID(), true); + receiver->PlayerTalkClass->SendQuestGiverQuestDetails(quest, receiver->GetGUID(), true); } } } @@ -602,17 +614,20 @@ void WorldSession::HandleQuestPushResult(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "WORLD: Received MSG_QUEST_PUSH_RESULT"); - if (_player->GetDivider() && _player->GetDivider() == guid) + if (_player->GetDivider()) { - Player* player = ObjectAccessor::FindPlayer(_player->GetDivider()); - if (player) + if (_player->GetDivider() == guid) { - WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1); - data << uint64(_player->GetGUID()); - data << uint8(msg); // valid values: 0-8 - player->SendDirectMessage(&data); - _player->SetDivider(ObjectGuid::Empty); + Player* player = ObjectAccessor::FindPlayer(_player->GetDivider()); + if (player) + { + WorldPacket data(MSG_QUEST_PUSH_RESULT, 8 + 4 + 1); + data << uint64(_player->GetGUID()); + data << uint8(msg); // valid values: 0-8 + player->SendDirectMessage(&data); + } } + _player->SetDivider(ObjectGuid::Empty); } } diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 0b9a53649a9..2922e4ef58d 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -89,7 +89,6 @@ void AddSC_item_scripts(); void AddSC_npc_professions(); void AddSC_npc_innkeeper(); void AddSC_npcs_special(); -void AddSC_npc_taxi(); void AddSC_achievement_scripts(); void AddSC_action_ip_logger(); void AddSC_duel_reset(); @@ -781,7 +780,6 @@ void AddWorldScripts() AddSC_npc_professions(); AddSC_npc_innkeeper(); AddSC_npcs_special(); - AddSC_npc_taxi(); AddSC_achievement_scripts(); AddSC_chat_log(); // location: scripts\World\chat_log.cpp // To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not. diff --git a/src/server/scripts/World/npc_taxi.cpp b/src/server/scripts/World/npc_taxi.cpp deleted file mode 100644 index a200ba545d8..00000000000 --- a/src/server/scripts/World/npc_taxi.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2008-2016 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/>. - */ - -/* ScriptData -SDName: Npc_Taxi -SD%Complete: 0% -SDComment: To be used for taxi NPCs that are located globally. -SDCategory: NPCs -EndScriptData -*/ - -#include "ScriptMgr.h" -#include "ScriptedCreature.h" -#include "ScriptedGossip.h" -#include "Player.h" -#include "WorldSession.h" - -#define GOSSIP_SUSURRUS "I am ready." -#define GOSSIP_NETHER_DRAKE "I'm ready to fly! Take me up, dragon!" -#define GOSSIP_BRAZEN "I am ready to go to Durnholde Keep." -#define GOSSIP_VERONIA "Fly me to Manaforge Coruu please" -#define GOSSIP_CRIMSONWING "<Ride the gryphons to Survey Alcaz Island>" - -class npc_taxi : public CreatureScript -{ -public: - npc_taxi() : CreatureScript("npc_taxi") { } - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (creature->IsQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - switch (creature->GetEntry()) - { - case 17435: // Azuremyst Isle - Susurrus - if (player->HasItemCount(23843, 1, true)) - 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)) - 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 - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BRAZEN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - break; - case 20162: // Netherstorm - Veronia - //Behind Enemy Lines - if (player->GetQuestStatus(10652) != QUEST_STATUS_REWARDED) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_VERONIA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); - break; - case 23704: // Dustwallow Marsh - Cassa Crimsonwing - if (player->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CRIMSONWING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+25); - break; - } - - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override - { - player->PlayerTalkClass->ClearMenus(); - switch (action) - { - case GOSSIP_ACTION_INFO_DEF: - //spellId is correct, however it gives flight a somewhat funny effect //TaxiPath 506. - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 32474, true); - break; - case GOSSIP_ACTION_INFO_DEF + 1: - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(627); //TaxiPath 627 (possibly 627+628(152->153->154->155)) - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (!player->HasItemCount(25853)) - player->SEND_GOSSIP_MENU(9780, creature->GetGUID()); - else - { - player->CLOSE_GOSSIP_MENU(); - player->ActivateTaxiPathTo(534); //TaxiPath 534 - } - break; - case GOSSIP_ACTION_INFO_DEF + 15: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 34905, true); //TaxiPath 606 - break; - case GOSSIP_ACTION_INFO_DEF + 25: - player->CLOSE_GOSSIP_MENU(); - player->CastSpell(player, 42295, true); - break; - } - - return true; - } -}; - -void AddSC_npc_taxi() -{ - new npc_taxi; -} |