V cs_#.cpp si nájdi ten commad)
{ "mailbox", rbac::RBAC_PERM_COMMAND_MAILBOX, false, &HandleMailBoxCommand, "", NULL },
Example:
static bool HandleMailBoxCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
+ if (!player->GetMapId() == #MapId)
+ return false; // bool
handler->GetSession()->SendShowMailBox(player->GetGUID());
return true;
}
Ak chceš aby ti ten command .mailbox išiel len v určitej zone jednoducho pridáš podmienku:
if (player->GetMapId() == #MapId) - Namiesto #MapId zadaš Id z .gps
return false; // bool
Ak chceš na určitú zónu alebo area tak zadaš GetZoneId() alebo GetAreaId() namiesto GetMapId().
Ak chceš spraviť aby cmd išiel by v určitom range od bodu x,y,z tak je dobre použiť nejaký trigger a v podmienke budeš checkovať 2d / 3d distance medzi tebou a triggerom alebo fce IsWithinDist3d(float x, float y, float z, float dist)
takže to bude if (player->IsWithinDist3d(#X, #Y, #z, #maxvzdialenosť))
k tejto podmienke doporučujem pridať aj mapId čiže výsledne
if (player->IsWithinDist3d(#X, #Y, #z, #vzdialenosť) && player->GetMapId() == #Mapid)
{
// CMD code
}
else
return false;
Ak to implikujem do toho commandu čo som uviedol vyššie.
static bool HandleMailBoxCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
if (player->IsWithinDist3d(#X, #Y, #z, #vzdialenosť) && player->GetMapId() == #Mapid)
{
handler->GetSession()->SendShowMailBox(player->GetGUID());
return true;
}
else
return false;
}
K return false môžeš dodať errormsg