mirror of
https://github.com/araxiaonline/azerothshard-core.git
synced 2026-06-13 02:42:24 -04:00
[AZTH-MS] Add condtition for open gossip npc dimension
* Update code style * Added config option
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "AzthUtils.h"
|
||||
#include "AzthSharedDefines.h"
|
||||
#include "AZTH.h"
|
||||
#include "StringFormat.h"
|
||||
|
||||
class PhaseDimensionsNPC : public CreatureScript
|
||||
{
|
||||
@@ -16,60 +17,72 @@ public:
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature) override
|
||||
{
|
||||
uint32 currDimension=sAZTH->GetAZTHPlayer(player)->getCurrentDimensionByMark();
|
||||
std::string msg=sAzthLang->get(AZTH_LANG_DIMENSION_CURRENT, player);
|
||||
std::string dimName= sAzthUtils->getDimensionName(currDimension);
|
||||
msg += dimName;
|
||||
if (!CanOpenGossip(player))
|
||||
{
|
||||
ChatHandler(player->GetSession()).SendSysMessage("You're not allowed");
|
||||
return true;
|
||||
}
|
||||
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, msg.c_str(), GOSSIP_SENDER_MAIN, 0);
|
||||
uint32 currDimension = sAZTH->GetAZTHPlayer(player)->getCurrentDimensionByMark();
|
||||
std::string dimensionCurrent = ACORE::StringFormat("%s%s", sAzthLang->get(AZTH_LANG_DIMENSION_CURRENT, player), sAzthUtils->getDimensionName(currDimension).c_str());
|
||||
|
||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, dimensionCurrent, GOSSIP_SENDER_MAIN, 0);
|
||||
|
||||
if (!sAZTH->GetAZTHPlayer(player)->isPvP() && currDimension != uint32(DIMENSION_NORMAL))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_ILLUSORY, player), GOSSIP_SENDER_MAIN, DIMENSION_NORMAL);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_ILLUSORY, player), GOSSIP_SENDER_MAIN, DIMENSION_NORMAL);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_GUILD))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_GUILD, player), GOSSIP_SENDER_MAIN, DIMENSION_GUILD);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_GUILD, player), GOSSIP_SENDER_MAIN, DIMENSION_GUILD);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_PVP))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_PVP, player), GOSSIP_SENDER_MAIN, DIMENSION_PVP);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_PVP, player), GOSSIP_SENDER_MAIN, DIMENSION_PVP);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_ENTERTAINMENT))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_ENTERTAIN, player), GOSSIP_SENDER_MAIN, DIMENSION_ENTERTAINMENT);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_ENTERTAIN, player), GOSSIP_SENDER_MAIN, DIMENSION_ENTERTAINMENT);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_RPG))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_GDR, player), GOSSIP_SENDER_MAIN, DIMENSION_RPG);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_GDR, player), GOSSIP_SENDER_MAIN, DIMENSION_RPG);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_60))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_LVL60, player), GOSSIP_SENDER_MAIN, DIMENSION_60);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_LVL60, player), GOSSIP_SENDER_MAIN, DIMENSION_60);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_70))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_LVL70, player), GOSSIP_SENDER_MAIN, DIMENSION_70);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_LVL70, player), GOSSIP_SENDER_MAIN, DIMENSION_70);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_TEST))
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_TEST, player), GOSSIP_SENDER_MAIN, DIMENSION_TEST);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_TEST, player), GOSSIP_SENDER_MAIN, DIMENSION_TEST);
|
||||
|
||||
if (currDimension != uint32(DIMENSION_GM) && player->GetSession()->GetSecurity() > SEC_PLAYER)
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_GM, player), GOSSIP_SENDER_MAIN, DIMENSION_GM);
|
||||
AddGossipItemFor(player, GOSSIP_ICON_TAXI, sAzthLang->get(AZTH_LANG_DIMENSION_GM, player), GOSSIP_SENDER_MAIN, DIMENSION_GM);
|
||||
|
||||
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
|
||||
SendGossipMenuFor(player, 1, creature);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 sender, uint32 action) override
|
||||
{
|
||||
player->PlayerTalkClass->SendCloseGossip();
|
||||
CloseGossipMenuFor(player);
|
||||
|
||||
if (!action)
|
||||
return true;
|
||||
|
||||
if (sender == GOSSIP_SENDER_MAIN)
|
||||
{
|
||||
sAZTH->GetAZTHPlayer(player)->changeDimension(action, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
bool CanOpenGossip(Player* player)
|
||||
{
|
||||
uint32 accountLevel = player->GetSession()->GetSecurity();
|
||||
uint32 minLevel = sConfigMgr->GetIntDefault("Azth.Dimension.NPC.AccountSec.Min", 4);
|
||||
|
||||
if (accountLevel >= minLevel)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
class PhaseDimensions : public PlayerScript
|
||||
@@ -85,51 +98,54 @@ public:
|
||||
if (target->GetTypeId() != TYPEID_PLAYER)
|
||||
return true;
|
||||
|
||||
Player *pTarget = target->ToPlayer();
|
||||
Player* _target = target->ToPlayer();
|
||||
|
||||
if (player->GetGUIDLow() == pTarget->GetGUIDLow())
|
||||
return true; //strange case but could happen
|
||||
if (player->GetGUIDLow() == _target->GetGUIDLow())
|
||||
return true; // strange case but could happen
|
||||
|
||||
uint32 playerPhaseDimension = sAZTH->GetAZTHPlayer(player)->getCurrentDimensionByPhase();
|
||||
uint32 targetPhaseDimension = sAZTH->GetAZTHPlayer(pTarget)->getCurrentDimensionByPhase();
|
||||
uint32 targetPhaseDimension = sAZTH->GetAZTHPlayer(_target)->getCurrentDimensionByPhase();
|
||||
|
||||
if (targetPhaseDimension == playerPhaseDimension)
|
||||
return true;
|
||||
|
||||
if (targetPhaseDimension == DIMENSION_NORMAL || player->IsGameMaster()) {
|
||||
if (!sAZTH->GetAZTHPlayer(player)->changeDimension(targetPhaseDimension, true))
|
||||
return false;
|
||||
} else {
|
||||
if (targetPhaseDimension == DIMENSION_NORMAL || player->IsGameMaster() && !sAZTH->GetAZTHPlayer(player)->changeDimension(targetPhaseDimension, true))
|
||||
return false;
|
||||
else
|
||||
{
|
||||
std::string dimSource = sAzthUtils->getDimensionName(playerPhaseDimension);
|
||||
std::string dimDest = sAzthUtils->getDimensionName(targetPhaseDimension);
|
||||
|
||||
ChatHandler(player->GetSession()).SendSysMessage(sAzthLang->get(AZTH_LANG_MULTIDIMENSION_CANNOT_BE_SUMMONED, player));
|
||||
ChatHandler(pTarget->GetSession()).SendSysMessage(sAzthLang->getf(AZTH_LANG_MULTIDIMENSION_CANNOT_BE_SUMMONED_SUMMONER, player, dimSource.c_str(), dimDest.c_str()));
|
||||
ChatHandler(_target->GetSession()).SendSysMessage(sAzthLang->getf(AZTH_LANG_MULTIDIMENSION_CANNOT_BE_SUMMONED_SUMMONER, player, dimSource.c_str(), dimDest.c_str()));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnMapChanged(Player* player) override {
|
||||
void OnMapChanged(Player* player) override
|
||||
{
|
||||
_zoneCheck(player, player->GetMapId(), player->GetZoneId(), player->GetAreaId());
|
||||
}
|
||||
|
||||
void OnUpdateZone(Player *player, uint32 zone, uint32 area) override {
|
||||
void OnUpdateZone(Player *player, uint32 zone, uint32 area) override
|
||||
{
|
||||
AreaTableEntry const* aEntry = sAreaTableStore.LookupEntry(area);
|
||||
if (!aEntry)
|
||||
return;
|
||||
|
||||
_zoneCheck(player, aEntry->mapid , zone, area);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void _zoneCheck(Player *player, uint32 mapid, uint32 zoneid, uint32 areaid) {
|
||||
void _zoneCheck(Player *player, uint32 mapid, uint32 zoneid, uint32 areaid)
|
||||
{
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
uint32 curDimension = sAZTH->GetAZTHPlayer(player)->getCurrentDimensionByMark();
|
||||
uint32 aurDimension = sAZTH->GetAZTHPlayer(player)->getCurrentDimensionByAura();
|
||||
|
||||
// we should make an integrity check with phase
|
||||
// avoiding cases where we're on a special dimension
|
||||
// without aura (hacking/exploit)
|
||||
@@ -137,35 +153,44 @@ public:
|
||||
|
||||
MapEntry const* mEntry = sMapStore.LookupEntry(mapid);
|
||||
|
||||
if (sAzthUtils->isPhasedDimension(curDimension) && sAzthUtils->isSharedArea(player, mEntry, zoneid, areaid)) {
|
||||
if (sAzthUtils->isPhasedDimension(curDimension) && sAzthUtils->isSharedArea(player, mEntry, zoneid, areaid))
|
||||
{
|
||||
// TEMPORARY DISABLE DIMENSION IN BG BUT DO NOT REMOVE THE MARKER
|
||||
sAZTH->GetAZTHPlayer(player)->changeDimension(DIMENSION_NORMAL, false, true);
|
||||
} else if (phaseDimension == DIMENSION_60 && mEntry->Expansion() > 0) {
|
||||
}
|
||||
else if (phaseDimension == DIMENSION_60 && mEntry->Expansion() > 0)
|
||||
{
|
||||
// CLASSIC EXPANSION CHECK
|
||||
player->TeleportTo(AzthSharedDef::blackMarket);
|
||||
ChatHandler(player->GetSession()).SendSysMessage(sAzthLang->get(AZTH_LANG_MULTIDIMENSION_CLASSIC_EXPCHECK, player));
|
||||
} else if (phaseDimension == DIMENSION_70 && mEntry->Expansion() > 1) {
|
||||
}
|
||||
else if (phaseDimension == DIMENSION_70 && mEntry->Expansion() > 1)
|
||||
{
|
||||
// TBC EXPANSION CHECK
|
||||
player->TeleportTo(AzthSharedDef::blackMarket);
|
||||
ChatHandler(player->GetSession()).SendSysMessage(sAzthLang->get(AZTH_LANG_MULTIDIMENSION_TBC_EXPCHECK, player));
|
||||
} else if (phaseDimension == DIMENSION_GM && player->GetSession()->GetSecurity() > SEC_PLAYER) {
|
||||
}
|
||||
else if (phaseDimension == DIMENSION_GM && player->GetSession()->GetSecurity() > SEC_PLAYER)
|
||||
{
|
||||
// GM security check
|
||||
player->TeleportTo(AzthSharedDef::blackMarket);
|
||||
sAZTH->GetAZTHPlayer(player)->changeDimension(DIMENSION_NORMAL);
|
||||
ChatHandler(player->GetSession()).SendSysMessage(sAzthLang->get(AZTH_LANG_MULTIDIMENSION_GM_ACCESSCHECK, player));
|
||||
} else if (phaseDimension == DIMENSION_GUILD && !player->GetGuild()) {
|
||||
}
|
||||
else if (phaseDimension == DIMENSION_GUILD && !player->GetGuild())
|
||||
{
|
||||
// GUILD security check
|
||||
player->TeleportTo(AzthSharedDef::blackMarket);
|
||||
sAZTH->GetAZTHPlayer(player)->changeDimension(DIMENSION_NORMAL);
|
||||
ChatHandler(player->GetSession()).SendSysMessage(sAzthLang->get(AZTH_LANG_MULTIDIMENSION_GUILD_ACCESSCHECK, player));
|
||||
} else {
|
||||
// integrity check: re-enable temporary disabled dimensions or just fix possible exploits
|
||||
if (curDimension != aurDimension || curDimension != phaseDimension) {
|
||||
sAZTH->GetAZTHPlayer(player)->changeDimension(curDimension);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// integrity check: re-enable temporary disabled dimensions or just fix possible exploits
|
||||
if (curDimension != aurDimension || curDimension != phaseDimension)
|
||||
sAZTH->GetAZTHPlayer(player)->changeDimension(curDimension);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_PhaseDimensions()
|
||||
|
||||
Reference in New Issue
Block a user