From 302ebf069b9fd4537dc17d679179c9bab6649078 Mon Sep 17 00:00:00 2001 From: lee1991 Date: Sun, 28 May 2017 20:23:24 +0100 Subject: [PATCH] Players will now get there race mount if mount is enabled, and now spawn their class trainers, also implemented NPC check. --- conf/premium.conf.dist | 39 +-- src/premium.cpp | 524 ++++++++++++++++++++++++++++++----------- 2 files changed, 418 insertions(+), 145 deletions(-) diff --git a/conf/premium.conf.dist b/conf/premium.conf.dist index b841c9a..5dfecbf 100644 --- a/conf/premium.conf.dist +++ b/conf/premium.conf.dist @@ -13,33 +13,44 @@ PremiumAccount = 1 # 0 - (Disabled) Morph = 1 -# Bank -# Description: Allow Players to use mobile bank -# Default: 1 - (Enabled) -# 0 - (Disabled) -Bank = 1 - -# Auction -# Description: Allow Players to use mobile Auction -# Default: 1 - (Enabled) -# 0 - (Disabled) -Auction = 1 - # Mount # Description: Allow Players to use mount # Default: 1 - (Enabled) # 0 - (Disabled) Mount = 1 +# Class Trainers +# Description: Allows players to spawn class trainers +# Default: 1 - (Enabled) +# 0 - (Disabled) +Trainers = 1 + +################################################################################################################## +# PlayerInteraction +# Description: This enables the submenu for the below +# Default: 1 - (Enabled) +# 0 - (Disabled) +PlayerInteraction = 1 +# +# Bank +# Description: Allow Players to use mobile bank +# Default: 1 - (Enabled) +# 0 - (Disabled) +Bank = 1 +# +# Auction +# Description: Allow Players to use mobile Auction +# Default: 1 - (Enabled) +# 0 - (Disabled) +Auction = 1 # Vendor # Description: Allow Players to use vendor # Default: 1 - (Enabled) # 0 - (Disabled) Vendor = 1 - +# # Mail Box # Description: Allow Players Access ingame Mail # Default: 1 - (Enabled) # 0 - (Disabled) MailBox = 1 - diff --git a/src/premium.cpp b/src/premium.cpp index 9459110..eb724b0 100644 --- a/src/premium.cpp +++ b/src/premium.cpp @@ -9,171 +9,433 @@ enum vendor { - NPC_VENDOR = 54, - NPC_AUCTION = 9856, //Horde - NPC_AUCTION2 = 8670, //Alliance - ALLIANCE_MOUNT = 470, - HORDE_MOUNT = 6653 + NPC_VENDOR = 54, //Alliance + NPC_VENDOR2 = 3163, //Horde + NPC_AUCTION = 9856, //Horde + NPC_AUCTION2 = 8670 //Alliance +}; + +enum trainers +{ + //Alliance NPC's + AROGUE = 918, + AWARRIOR = 5479, + AHUNTER = 5515, + APRIEST = 376, + APALADIN = 928, + ADRUID = 5504, + ASHAMAN = 20407, + AMAGE = 5497, + AWARLOCK = 461, + + //Horde NPCS + HHUNTER = 3406, + HWARRIOR = 3354, + HSHAMAN = 3344, + HPALADIN = 23128, + HROGUE = 3401, + HWARLOCK = 3324, + HMAGE = 5883, + HPRIEST = 3045, + HDRUID = 3033, + + DKTRAINER = 28472 +}; + +enum mounts +{ + HUMAN_MOUNT = 470, + ORC_MOUNT = 6653, + GNOME_MOUNT = 17454, + NIGHTELF_MOUNT = 8394, + DWARF_MOUNT = 6899, + UNEAD_MOUNT = 17463, + TAUREN_MOUNT = 64657, + TROLL_MOUNT = 8395, + BLOODELF_MOUNT = 35022, + DRAENEI_MOUNT = 34406 }; class premium_account : public ItemScript { public: - premium_account() : ItemScript("premium_account") { } + premium_account() : ItemScript("premium_account") { } - bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) override // Any hook here - { + bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/) override // Any hook here + { if (!sConfigMgr->GetBoolDefault("PremiumAccount", true)) return false; - QueryResult result = CharacterDatabase.PQuery("SELECT AccountId FROM premium WHERE active = 1 and AccountId = %u", player->GetSession()->GetAccountId()); + QueryResult result = CharacterDatabase.PQuery("SELECT AccountId FROM premium WHERE active = 1 and AccountId = %u", player->GetSession()->GetAccountId()); - if (!result) - return false; + if (!result) + return false; - if (player->IsInCombat()) - return false; + if (player->IsInCombat()) + return false; - player->PlayerTalkClass->ClearMenus(); + if (player->FindNearestCreature(NPC_AUCTION2, 10.0f) || + player->FindNearestCreature(NPC_AUCTION, 10.0f) || + player->FindNearestCreature(NPC_VENDOR, 10.0f) || + player->FindNearestCreature(NPC_VENDOR2, 10.0f) || + player->FindNearestCreature(AROGUE, 10.0f) || + player->FindNearestCreature(AWARRIOR, 10.0f) || + player->FindNearestCreature(AHUNTER, 10.0f) || + player->FindNearestCreature(APRIEST, 10.0f) || + player->FindNearestCreature(APALADIN, 10.0f) || + player->FindNearestCreature(ADRUID, 10.0f) || + player->FindNearestCreature(ASHAMAN, 10.0f) || + player->FindNearestCreature(AMAGE, 10.0f) || + player->FindNearestCreature(AWARLOCK, 10.0f) || + player->FindNearestCreature(HHUNTER, 10.0f) || + player->FindNearestCreature(HWARRIOR, 10.0f) || + player->FindNearestCreature(HSHAMAN, 10.0f) || + player->FindNearestCreature(HPALADIN, 10.0f) || + player->FindNearestCreature(HROGUE, 10.0f) || + player->FindNearestCreature(HWARLOCK, 10.0f) || + player->FindNearestCreature(HMAGE, 10.0f) || + player->FindNearestCreature(HPRIEST, 10.0f) || + player->FindNearestCreature(HDRUID, 10.0f) || + player->FindNearestCreature(DKTRAINER, 10.0f)) + return false; + + player->PlayerTalkClass->ClearMenus(); if (sConfigMgr->GetBoolDefault("Morph", true)) { player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Morph", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Demorph", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); } - if (sConfigMgr->GetBoolDefault("Bank", true)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Show Bank", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - if (sConfigMgr->GetBoolDefault("MailBox", true)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Mail Box", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - if (sConfigMgr->GetBoolDefault("Vendor", true)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Vendor", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); if (sConfigMgr->GetBoolDefault("Mount", true)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT_16, "Mount", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - if (sConfigMgr->GetBoolDefault("Auction", true)) - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Auction House", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, item->GetGUID()); - return false; // Cast the spell on use normally - } + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT_16, "Mount", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + if (sConfigMgr->GetBoolDefault("Trainers", true)) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + if (sConfigMgr->GetBoolDefault("PlayerInteraction", true)) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Player interactions", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, item->GetGUID()); - void OnGossipSelect(Player* player, Item* /*item*/, uint32 /*sender*/, uint32 action) override - { + return false; // Cast the spell on use normally + } - switch (action) - { - case GOSSIP_ACTION_INFO_DEF + 1: /*Morph*/ - { - player->CLOSE_GOSSIP_MENU(); - uint32 random = (urand(1, 26)); /* change this line when adding more morphs */ - { - switch (random) - { - case 1: player->SetDisplayId(10134); break; // Troll Female 'Orb of Deception' - case 2: player->SetDisplayId(10135); break; // Troll Male 'Orb of Deception' - case 3: player->SetDisplayId(10136); break; // Tauren Male 'Orb of Deception' - case 4: player->SetDisplayId(10137); break; // Human Male 'Orb of Deception' - case 5: player->SetDisplayId(10138); break; // Human Female 'Orb of Deception' - case 6: player->SetDisplayId(10139); break; // Orc Male 'Orb of Deception' - case 7: player->SetDisplayId(10140); break; // Orc Female 'Orb of Deception' - case 8: player->SetDisplayId(10141); break; // Dwarf Male 'Orb of Deception' - case 9: player->SetDisplayId(10142); break; // Dwarf Female 'Orb of Deception' - case 10: player->SetDisplayId(10143); break; // NightElf Male 'Orb of Deception' - case 11: player->SetDisplayId(10144); break; // NightElf Female 'Orb of Deception' - case 12: player->SetDisplayId(10145); break; // Undead Female 'Orb of Deception' - case 13: player->SetDisplayId(10146); break; // Undead Male 'Orb of Deception' - case 14: player->SetDisplayId(10147); break; // Tauren Female 'Orb of Deception' - case 15: player->SetDisplayId(10148); break; // Gnome Male 'Orb of Deception' - case 16: player->SetDisplayId(10149); break; // Gnome Female 'Orb of Deception' - case 17: player->SetDisplayId(4527); break; // Thrall 'Orgrimmar Boss' - case 18: player->SetDisplayId(11657); break; // Lady Sylvanas 'Undercity Boss' - case 19: player->SetDisplayId(4307); break; // Cairne Bloodhoof 'Thunderbluff Boss' - case 20: player->SetDisplayId(17122); break; // Lorīthemar Theron 'Silvermoon City Boss' - case 21: player->SetDisplayId(3597); break; // King Magni Bronzebeard 'Ironforge Boss' - case 22: player->SetDisplayId(5566); break; // Highlord Bolvar Fordragon 'Stormwind Boss' - case 23: player->SetDisplayId(7006); break; // High Tinker Mekkatorque 'Gnomer Boss' - case 24: player->SetDisplayId(7274); break; // Tyrande Whisperwind 'Darnassus Boss' - case 25: player->SetDisplayId(21976); break; // Arthus Small 'Arthus' - case 26: player->SetDisplayId(24641); break; // Arthus Ghost 'Arthus Ghost' + void OnGossipSelect(Player* player, Item* item, uint32 /*sender*/, uint32 action) + { + switch (action) + { + case GOSSIP_ACTION_INFO_DEF + 1: /*Morph*/ + { + player->CLOSE_GOSSIP_MENU(); + uint32 random = (urand(1, 26)); /* change this line when adding more morphs */ + { + switch (random) + { + case 1: player->SetDisplayId(10134); break; // Troll Female 'Orb of Deception' + case 2: player->SetDisplayId(10135); break; // Troll Male 'Orb of Deception' + case 3: player->SetDisplayId(10136); break; // Tauren Male 'Orb of Deception' + case 4: player->SetDisplayId(10137); break; // Human Male 'Orb of Deception' + case 5: player->SetDisplayId(10138); break; // Human Female 'Orb of Deception' + case 6: player->SetDisplayId(10139); break; // Orc Male 'Orb of Deception' + case 7: player->SetDisplayId(10140); break; // Orc Female 'Orb of Deception' + case 8: player->SetDisplayId(10141); break; // Dwarf Male 'Orb of Deception' + case 9: player->SetDisplayId(10142); break; // Dwarf Female 'Orb of Deception' + case 10: player->SetDisplayId(10143); break; // NightElf Male 'Orb of Deception' + case 11: player->SetDisplayId(10144); break; // NightElf Female 'Orb of Deception' + case 12: player->SetDisplayId(10145); break; // Undead Female 'Orb of Deception' + case 13: player->SetDisplayId(10146); break; // Undead Male 'Orb of Deception' + case 14: player->SetDisplayId(10147); break; // Tauren Female 'Orb of Deception' + case 15: player->SetDisplayId(10148); break; // Gnome Male 'Orb of Deception' + case 16: player->SetDisplayId(10149); break; // Gnome Female 'Orb of Deception' + case 17: player->SetDisplayId(4527); break; // Thrall 'Orgrimmar Boss' + case 18: player->SetDisplayId(11657); break; // Lady Sylvanas 'Undercity Boss' + case 19: player->SetDisplayId(4307); break; // Cairne Bloodhoof 'Thunderbluff Boss' + case 20: player->SetDisplayId(17122); break; // Lorīthemar Theron 'Silvermoon City Boss' + case 21: player->SetDisplayId(3597); break; // King Magni Bronzebeard 'Ironforge Boss' + case 22: player->SetDisplayId(5566); break; // Highlord Bolvar Fordragon 'Stormwind Boss' + case 23: player->SetDisplayId(7006); break; // High Tinker Mekkatorque 'Gnomer Boss' + case 24: player->SetDisplayId(7274); break; // Tyrande Whisperwind 'Darnassus Boss' + case 25: player->SetDisplayId(21976); break; // Arthus Small 'Arthus' + case 26: player->SetDisplayId(24641); break; // Arthus Ghost 'Arthus Ghost' - default: - break; - } - } - break; - } - case GOSSIP_ACTION_INFO_DEF + 2: /*Demorph*/ - player->DeMorph(); - player->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 3: /*Show Bank*/ - player->GetSession()->SendShowBank(player->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: /*Mail Box*/ - player->GetSession()->SendShowMailBox(player->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: /*Vendor*/ - { - Creature* vendor = player->SummonCreature(NPC_VENDOR, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); - vendor->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - vendor->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); - vendor->setFaction(player->getFaction()); - vendor->MonsterWhisper("At your service", player, false); - player->CLOSE_GOSSIP_MENU(); - } - break; - case GOSSIP_ACTION_INFO_DEF + 6: /*Mount*/ - player->CLOSE_GOSSIP_MENU(); - if (player->GetTeamId() == TEAM_HORDE) - player->CastSpell(player, HORDE_MOUNT); - else - player->CastSpell(player, ALLIANCE_MOUNT); - break; - case GOSSIP_ACTION_INFO_DEF + 7: /*Auction House*/ + default: + break; + } + } + break; + } + case GOSSIP_ACTION_INFO_DEF + 2: /*Demorph*/ + player->DeMorph(); + player->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 3: /*Show Bank*/ + player->GetSession()->SendShowBank(player->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: /*Mail Box*/ + player->GetSession()->SendShowMailBox(player->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: /*Vendor*/ + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* vendor = player->SummonCreature(NPC_VENDOR, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + vendor->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + vendor->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + vendor->setFaction(player->getFaction()); + vendor->MonsterWhisper("Greetings", player, false); + player->CLOSE_GOSSIP_MENU(); + } + else + { + Creature* vendor = player->SummonCreature(NPC_VENDOR2, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + vendor->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + vendor->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + vendor->setFaction(player->getFaction()); + vendor->MonsterWhisper("Zug Zug", player, false); + player->CLOSE_GOSSIP_MENU(); + } + break; + case GOSSIP_ACTION_INFO_DEF + 6: /*Mount*/ + player->CLOSE_GOSSIP_MENU(); + switch (player->getRace()) + { + case RACE_HUMAN: + player->CastSpell(player, HUMAN_MOUNT); + break; + case RACE_ORC: + player->CastSpell(player, ORC_MOUNT); + break; + case RACE_GNOME: + player->CastSpell(player, GNOME_MOUNT); + break; + case RACE_NIGHTELF: + player->CastSpell(player, NIGHTELF_MOUNT); + break; + case RACE_DWARF: + player->CastSpell(player, DWARF_MOUNT); + break; + case RACE_DRAENEI: + player->CastSpell(player, DRAENEI_MOUNT); + break; + case RACE_UNDEAD_PLAYER: + player->CastSpell(player, UNEAD_MOUNT); + break; + case RACE_TAUREN: + player->CastSpell(player, TAUREN_MOUNT); + break; + case RACE_TROLL: + player->CastSpell(player, TROLL_MOUNT); + break; + case RACE_BLOODELF: + player->CastSpell(player, BLOODELF_MOUNT); + break; + } + break; + case GOSSIP_ACTION_INFO_DEF + 7: /*Auction House*/ - if (player->GetTeamId() == TEAM_HORDE) - { - Creature* auction = player->SummonCreature(NPC_AUCTION, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - auction->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - auction->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); - auction->setFaction(player->getFaction()); - auction->MonsterWhisper("I will go shortly, i need to get back to Orgrimmar", player, false); - } - else - { - Creature* auction = player->SummonCreature(NPC_AUCTION2, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - auction->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - auction->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); - auction->setFaction(player->getFaction()); - auction->MonsterWhisper("I will go shortly, i need to get back to Stormwind City", player, false); - } - player->CLOSE_GOSSIP_MENU(); - - break; - } - player->PlayerTalkClass->ClearMenus(); - } + if (player->GetTeamId() == TEAM_HORDE) + { + Creature* npc_auction = player->SummonCreature(NPC_AUCTION, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + npc_auction->MonsterWhisper("I will go shortly, i need to get back to Orgrimmar", player, false); + npc_auction->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + npc_auction->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + npc_auction->setFaction(player->getFaction()); + } + else + { + Creature* npc_auction = player->SummonCreature(NPC_AUCTION2, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + npc_auction->MonsterWhisper("I will go shortly, i need to get back to Stormwind City", player, false); + npc_auction->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + npc_auction->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + npc_auction->setFaction(player->getFaction()); + } + player->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 8: /* Class Trainers*/ + switch (player->getClass()) + { + case CLASS_ROGUE: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(AROGUE, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HROGUE, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_WARRIOR: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(AWARRIOR, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HWARRIOR, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_PRIEST: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(APRIEST, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HPRIEST, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_MAGE: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(AMAGE, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HMAGE, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + } + break; + case CLASS_PALADIN: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(APALADIN, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + } + else + { + Creature* trainer = player->SummonCreature(HPALADIN, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_HUNTER: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(AHUNTER, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HHUNTER, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_DRUID: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(ADRUID, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HDRUID, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_SHAMAN: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(ASHAMAN, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HSHAMAN, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_WARLOCK: + if (player->GetTeamId() == TEAM_ALLIANCE) + { + Creature* trainer = player->SummonCreature(AWARLOCK, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + else + { + Creature* trainer = player->SummonCreature(HWARLOCK, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + } + break; + case CLASS_DEATH_KNIGHT: + Creature* trainer = player->SummonCreature(DKTRAINER, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); + trainer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + trainer->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle()); + trainer->setFaction(player->getFaction()); + break; + } + break; + case GOSSIP_ACTION_INFO_DEF + 9: /*Player Interactions*/ + { + player->PlayerTalkClass->ClearMenus(); + if (sConfigMgr->GetBoolDefault("Vendor", true)) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Vendor", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + if (sConfigMgr->GetBoolDefault("MailBox", true)) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Mail Box", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + if (sConfigMgr->GetBoolDefault("Bank", true)) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Show Bank", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + if (sConfigMgr->GetBoolDefault("Auction", true)) + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, "Auction House", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, item->GetGUID()); + break; + } + break; + } + } }; class premium_world : public WorldScript { public: - premium_world() : WorldScript("premiumworld") { } + premium_world() : WorldScript("premiumworld") { } - void OnBeforeConfigLoad(bool reload) override - { - if (!reload) { - std::string cfg_file = "premium.conf"; - std::string cfg_def_file = cfg_file + ".dist"; + void OnBeforeConfigLoad(bool reload) override + { + if (!reload) { + std::string cfg_file = "premium.conf"; + std::string cfg_def_file = cfg_file + ".dist"; - sConfigMgr->LoadMore(cfg_def_file.c_str()); + sConfigMgr->LoadMore(cfg_def_file.c_str()); - sConfigMgr->LoadMore(cfg_file.c_str()); - } - } + sConfigMgr->LoadMore(cfg_file.c_str()); + } + } }; void AddSC_premium_account() { - new premium_account(); - new premium_world(); + new premium_account(); + new premium_world(); } \ No newline at end of file