modules fix 2/2
This commit is contained in:
257
modules/mod-mxwow-servant/src/mxwow_servant.cpp
Normal file
257
modules/mod-mxwow-servant/src/mxwow_servant.cpp
Normal file
@@ -0,0 +1,257 @@
|
||||
//// MxWoW Official Module
|
||||
//// Servant
|
||||
//// Dev: mikx
|
||||
//// Git: https://mxgit.ovh/MxWoW/mod_mxwow_servant
|
||||
//// Credits:
|
||||
//// based on works by gtao725 "mod-npc-buffer" https://github.com/azerothcore/mod-npc-buffer
|
||||
//// based on works by acidmanifesto "mod-npc-services" https://github.com/azerothcore/mod-npc-services
|
||||
|
||||
#include "Define.h"
|
||||
#include "GossipDef.h"
|
||||
#include "Item.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedGossip.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "Spell.h"
|
||||
#include "Configuration/Config.h"
|
||||
#include "Chat.h"
|
||||
|
||||
enum ServantString
|
||||
{
|
||||
MXW_SERVANT_ACORE_STRING_MESSAGE = 60000
|
||||
};
|
||||
|
||||
class mxwow_servantPlayer : public PlayerScript
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
mxwow_servantPlayer() : PlayerScript("mxwow_servantPlayer") { }
|
||||
|
||||
void OnLogin(Player* player) override
|
||||
{
|
||||
ChatHandler(player->GetSession()).SendSysMessage("This server is running the |cff4CFF00MxW Servant |rmodule.");
|
||||
}
|
||||
};
|
||||
|
||||
class mxwow_servantCreature : public CreatureScript
|
||||
{
|
||||
public:
|
||||
|
||||
mxwow_servantCreature() : CreatureScript("mxwow_servantCreature") { }
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature) override
|
||||
{
|
||||
if (!sConfigMgr->GetOption<bool>("MxWoW_Servant.Enabled", true))
|
||||
return false;
|
||||
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/inv_hammer_08:30:30:-18|t Réparer (Tout)", GOSSIP_SENDER_MAIN, 1);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/inv_misc_enggizmos_18:30:30:-18|t Banque", GOSSIP_SENDER_MAIN, 2);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/INV_Letter_11:30:30:-18|t Courrier", GOSSIP_SENDER_MAIN, 3);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/spell_shadow_teleport:30:30:-18|t Buff", GOSSIP_SENDER_MAIN, 4);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/Achievement_BG_AB_defendflags:30:30:-18|t Mettre fin au combat", GOSSIP_SENDER_MAIN, 5);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/inv_misc_bag_11:30:30:-18|t Marchant", GOSSIP_SENDER_MAIN, 6);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/inv_misc_coin_17:30:30:-18|t Enchère", GOSSIP_SENDER_MAIN, 7);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/Ability_paladin_beaconoflight:30:30:-18|t Transmo", GOSSIP_SENDER_MAIN, 8);
|
||||
AddGossipItemFor(player, 10, "|TInterface/Icons/inv_crate_01:30:30:-18|t Matériaux", GOSSIP_SENDER_MAIN, 9);
|
||||
|
||||
SendGossipMenuFor(player, 20000000, creature->GetGUID());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
|
||||
{
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
uint32 pLevel = player->GetLevel();
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case 1:
|
||||
CloseGossipMenuFor(player);
|
||||
player->DurabilityRepairAll(true, 0, false);
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 2:
|
||||
CloseGossipMenuFor(player);
|
||||
player->GetSession()->SendShowBank(player->GetGUID());
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 3:
|
||||
CloseGossipMenuFor(player);
|
||||
player->GetSession()->SendShowMailBox(player->GetGUID());
|
||||
break;
|
||||
case 4:
|
||||
CloseGossipMenuFor(player);
|
||||
if (player->GetMap()->IsDungeon() || player->GetMap()->IsRaid()) {
|
||||
if (pLevel < 10)
|
||||
{
|
||||
// Dish out the buffs
|
||||
player->CastSpell(player, 21562, true); // Prayer of Fortitude (Rank 1)
|
||||
player->CastSpell(player, 1126, true); // Mark of the Wild (Rank 1)
|
||||
player->CastSpell(player, 27683, true); // Prayer of Shadow Protection (Rank 1)
|
||||
|
||||
} // 1-9
|
||||
else if (pLevel >= 10 && pLevel < 20)
|
||||
{
|
||||
player->CastSpell(player, 21562, true); // Prayer of Fortitude (Rank 1)
|
||||
player->CastSpell(player, 1126, true); // Mark of the Wild (Rank 1)
|
||||
player->CastSpell(player, 27683, true); // Prayer of Shadow Protection (Rank 1)
|
||||
|
||||
} // 10-19
|
||||
else if (pLevel >= 20 && pLevel < 30)
|
||||
{
|
||||
player->CastSpell(player, 21562, true); // Prayer of Fortitude (Rank 1)
|
||||
player->CastSpell(player, 1126, true); // Mark of the Wild (Rank 1)
|
||||
player->CastSpell(player, 27683, true); // Prayer of Shadow Protection (Rank 1)
|
||||
player->CastSpell(player, 13326, true); // Arcane Intellect (Rank 1)
|
||||
|
||||
} // 20-29
|
||||
else if (pLevel >= 30 && pLevel < 40)
|
||||
{
|
||||
player->CastSpell(player, 21562, true); // Prayer of Fortitude (Rank 1)
|
||||
player->CastSpell(player, 25898, true); // Greater Blessing of Kings (Rank 1)
|
||||
player->CastSpell(player, 1126, true); // Mark of the Wild (Rank 1)
|
||||
player->CastSpell(player, 27681, true); // Prayer of Spirit (Rank 1)
|
||||
player->CastSpell(player, 27683, true); // Prayer of Shadow Protection (Rank 1)
|
||||
player->CastSpell(player, 13326, true); // Arcane Intellect (Rank 1)
|
||||
|
||||
} // 30-39
|
||||
else if (pLevel >= 40 && pLevel < 50)
|
||||
{
|
||||
player->CastSpell(player, 21562, true); // Prayer of Fortitude (Rank 1)
|
||||
player->CastSpell(player, 48469, true); // Mark of the Wild(48469)
|
||||
player->CastSpell(player, 27681, true); // Prayer of Spirit (Rank 1)
|
||||
player->CastSpell(player, 48170, true); // Prayer of Shadow Protection(48170)
|
||||
player->CastSpell(player, 13326, true); // Arcane Intellect (Rank 1)
|
||||
|
||||
} // 40-49
|
||||
else if (pLevel >= 50 && pLevel < 60)
|
||||
{
|
||||
player->CastSpell(player, 48162, true); // Prayer of Fortitude(48162)
|
||||
player->CastSpell(player, 43223, true); // Greater Blessing of Kings(43223)
|
||||
player->CastSpell(player, 48469, true); // Mark of the Wild(48469)
|
||||
player->CastSpell(player, 48074, true); // Prayer of Spirit(48074)
|
||||
player->CastSpell(player, 48170, true); // Prayer of Shadow Protection(48170)
|
||||
player->CastSpell(player, 36880, true); // Arcane Intellect(36880)
|
||||
|
||||
} // 50-59
|
||||
else if (pLevel >= 60 && pLevel < 70)
|
||||
{
|
||||
player->CastSpell(player, 48162, true); // Prayer of Fortitude(48162)
|
||||
player->CastSpell(player, 43223, true); // Greater Blessing of Kings(43223)
|
||||
player->CastSpell(player, 48469, true); // Mark of the Wild(48469)
|
||||
player->CastSpell(player, 48074, true); // Prayer of Spirit(48074)
|
||||
player->CastSpell(player, 48170, true); // Prayer of Shadow Protection(48170)
|
||||
player->CastSpell(player, 36880, true); // Arcane Intellect(36880)
|
||||
|
||||
} // 60-69
|
||||
else if (pLevel >= 70 && pLevel < 80)
|
||||
{
|
||||
player->CastSpell(player, 48162, true); // Prayer of Fortitude(48162)
|
||||
player->CastSpell(player, 43223, true); // Greater Blessing of Kings(43223)
|
||||
player->CastSpell(player, 48469, true); // Mark of the Wild(48469)
|
||||
player->CastSpell(player, 48074, true); // Prayer of Spirit(48074)
|
||||
player->CastSpell(player, 48170, true); // Prayer of Shadow Protection(48170)
|
||||
player->CastSpell(player, 36880, true); // Arcane Intellect(36880)
|
||||
|
||||
} // 70-79
|
||||
else
|
||||
{
|
||||
player->CastSpell(player, 48162, true); // Prayer of Fortitude(48162)
|
||||
player->CastSpell(player, 43223, true); // Greater Blessing of Kings(43223)
|
||||
player->CastSpell(player, 48469, true); // Mark of the Wild(48469)
|
||||
player->CastSpell(player, 48074, true); // Prayer of Spirit(48074)
|
||||
player->CastSpell(player, 48170, true); // Prayer of Shadow Protection(48170)
|
||||
player->CastSpell(player, 36880, true); // Arcane Intellect(36880)
|
||||
|
||||
} // LEVEL 80
|
||||
}
|
||||
else {
|
||||
ChatHandler(player->GetSession()).SendSysMessage(MXW_SERVANT_ACORE_STRING_MESSAGE);
|
||||
}
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 5:
|
||||
CloseGossipMenuFor(player);
|
||||
player->CombatStop();
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 6:
|
||||
CloseGossipMenuFor(player);
|
||||
SummonTempNPC(player, 32639, 300000);
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 7:
|
||||
CloseGossipMenuFor(player);
|
||||
SummonTempNPC(player, 8670, 300000);
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 8:
|
||||
CloseGossipMenuFor(player);
|
||||
SummonTempNPC(player, 190010, 300000);
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
case 9:
|
||||
CloseGossipMenuFor(player);
|
||||
SummonTempNPC(player, 190011, 300000);
|
||||
player->CastSpell(player, 31726);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void SummonTempNPC(Player* player, uint32 entry, uint32 despawn)
|
||||
{
|
||||
if (!player || entry == 0)
|
||||
return;
|
||||
|
||||
Creature* npc = player->SummonCreature(entry, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
|
||||
npc->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
npc->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle());
|
||||
npc->SetFaction(player->GetFaction());
|
||||
|
||||
std::ostringstream ss;
|
||||
ss << "Salut " << player->GetName() << "! Je suis à ton service pour 5 minutes.";
|
||||
npc->Whisper(ss.str().c_str(), LANG_UNIVERSAL, player, false);
|
||||
}
|
||||
};
|
||||
|
||||
class mxwow_servantItem : public ItemScript
|
||||
{
|
||||
public:
|
||||
|
||||
mxwow_servantItem() : ItemScript("mxwow_servantItem") { }
|
||||
|
||||
bool OnUse(Player* p, Item* i, SpellCastTargets const& /*targets*/) override
|
||||
{
|
||||
p->PlayerTalkClass->ClearMenus();
|
||||
|
||||
if (!sConfigMgr->GetOption<bool>("MxWoW_Servant.Enabled", true))
|
||||
return false;
|
||||
|
||||
SummonTempNPC(p, 9000001, 120000);
|
||||
}
|
||||
|
||||
void SummonTempNPC(Player* player, uint32 entry, uint32 despawn)
|
||||
{
|
||||
if (!player || entry == 0)
|
||||
return;
|
||||
|
||||
Creature* npc = player->SummonCreature(entry, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 120000);
|
||||
npc->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
npc->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, player->GetFollowAngle());
|
||||
npc->SetFaction(player->GetFaction());
|
||||
|
||||
std::ostringstream ss;
|
||||
ss << "Salut " << player->GetName() << "! Je suis à ton service pour 2 minutes.";
|
||||
npc->Whisper(ss.str().c_str(), LANG_UNIVERSAL, player, false);
|
||||
}
|
||||
};
|
||||
|
||||
void AddMxWoWServantScripts()
|
||||
{
|
||||
new mxwow_servantPlayer();
|
||||
new mxwow_servantCreature();
|
||||
new mxwow_servantItem();
|
||||
}
|
||||
11
modules/mod-mxwow-servant/src/mxwow_servant_loader.cpp
Normal file
11
modules/mod-mxwow-servant/src/mxwow_servant_loader.cpp
Normal file
@@ -0,0 +1,11 @@
|
||||
//// MxWoW Official Module
|
||||
//// Servant
|
||||
//// Dev: mikx
|
||||
//// Git: https://mxgit.ovh/MxWoW/mod_mxwow_servant
|
||||
|
||||
void AddMxWoWServantScripts();
|
||||
|
||||
void Addmod_mxwow_servantScripts()
|
||||
{
|
||||
AddMxWoWServantScripts();
|
||||
}
|
||||
Reference in New Issue
Block a user