[Cleanup] Make use of AccountStatus constants wherever status is checked or used. (#1764)

* [Cleanup] Make use of AccountStatus constants wherever status is checked or used.
- Cleanup all instances of SendEmoteMessage.
- Cleanup all instances of SendEmoteMessageRaw.
- Cleanup all instances of MessageStatus.
- Convert Quest API method defaults to use constants.

* Cleanup constant names.
This commit is contained in:
Kinglykrab 2021-11-14 22:01:13 -05:00 committed by GitHub
parent 5d75b7b365
commit 293361a1f7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
38 changed files with 1369 additions and 870 deletions

View File

@ -230,31 +230,6 @@ namespace EQ
const int STANCE_TYPE_LAST = stanceBurnAE; const int STANCE_TYPE_LAST = stanceBurnAE;
const int STANCE_TYPE_COUNT = stanceBurnAE; const int STANCE_TYPE_COUNT = stanceBurnAE;
enum ServerLockType : int {
List,
Lock,
Unlock
};
enum AccountStatus : uint8 {
Player = 0,
Steward = 10,
ApprenticeGuide = 20,
Guide = 50,
QuestTroupe = 80,
SeniorGuide = 81,
GMTester = 85,
EQSupport = 90,
GMStaff = 95,
GMAdmin = 100,
GMLeadAdmin = 150,
QuestMaster = 160,
GMAreas = 170,
GMCoder = 180,
GMMgmt = 200,
GMImpossible = 250,
Max = 255
};
} /*constants*/ } /*constants*/
namespace profile { namespace profile {
@ -353,13 +328,32 @@ namespace EQ
Guild Guild
}; };
}; // namespace consent }; // namespace consent
} /*EQEmu*/ } /*EQEmu*/
enum ServerLockType : int {
List,
Lock,
Unlock
};
enum AccountStatus : uint8 {
Player = 0,
Steward = 10,
ApprenticeGuide = 20,
Guide = 50,
QuestTroupe = 80,
SeniorGuide = 81,
GMTester = 85,
EQSupport = 90,
GMStaff = 95,
GMAdmin = 100,
GMLeadAdmin = 150,
QuestMaster = 160,
GMAreas = 170,
GMCoder = 180,
GMMgmt = 200,
GMImpossible = 250,
Max = 255
};
#endif /*COMMON_EMU_CONSTANTS_H*/ #endif /*COMMON_EMU_CONSTANTS_H*/
/* hack list to prevent circular references
eq_limits.h:EQ::inventory::LookupEntry::InventoryTypeSize[n];
*/

View File

@ -1208,7 +1208,7 @@ BaseGuildManager::RankInfo::RankInfo() {
BaseGuildManager::GuildInfo::GuildInfo() { BaseGuildManager::GuildInfo::GuildInfo() {
leader_char_id = 0; leader_char_id = 0;
minstatus = 0; minstatus = AccountStatus::Player;
} }
uint32 BaseGuildManager::DoesAccountContainAGuildLeader(uint32 AccountID) uint32 BaseGuildManager::DoesAccountContainAGuildLeader(uint32 AccountID)

View File

@ -15,7 +15,7 @@ EQ::Net::ConsoleServerConnection::ConsoleServerConnection(ConsoleServer *parent,
memset(m_line, 0, MaxConsoleLineLength); memset(m_line, 0, MaxConsoleLineLength);
m_accept_messages = false; m_accept_messages = false;
m_user_id = 0; m_user_id = 0;
m_admin = 0; m_admin = AccountStatus::Player;
m_connection->OnRead(std::bind(&ConsoleServerConnection::OnRead, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); m_connection->OnRead(std::bind(&ConsoleServerConnection::OnRead, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
m_connection->OnDisconnect(std::bind(&ConsoleServerConnection::OnDisconnect, this, std::placeholders::_1)); m_connection->OnDisconnect(std::bind(&ConsoleServerConnection::OnDisconnect, this, std::placeholders::_1));
@ -29,7 +29,7 @@ EQ::Net::ConsoleServerConnection::ConsoleServerConnection(ConsoleServer *parent,
if (addr.find("127.0.0.1") != std::string::npos || addr.find("::0") != std::string::npos) { if (addr.find("127.0.0.1") != std::string::npos || addr.find("::0") != std::string::npos) {
SendLine("Connection established from localhost, assuming admin"); SendLine("Connection established from localhost, assuming admin");
m_status = ConsoleStatusLoggedIn; m_status = ConsoleStatusLoggedIn;
m_admin = 255; m_admin = AccountStatus::Max;
SendPrompt(); SendPrompt();
} }
else { else {

View File

@ -5,6 +5,7 @@
#include <map> #include <map>
#include <unordered_set> #include <unordered_set>
#include <array> #include <array>
#include "../emu_constants.h"
struct MethodHandlerEntry struct MethodHandlerEntry
{ {
@ -174,13 +175,13 @@ Json::Value EQ::Net::WebsocketServer::Login(WebsocketServerConnection *connectio
auto r = _impl->login_handler(connection, user, pass); auto r = _impl->login_handler(connection, user, pass);
if (r.logged_in) { if (r.logged_in) {
connection->SetAuthorized(true, r.account_name, r.account_id, 255); connection->SetAuthorized(true, r.account_name, r.account_id, AccountStatus::Max);
ret["status"] = "Ok"; ret["status"] = "Ok";
} }
else if (user == "admin" && (connection->RemoteIP() == "127.0.0.1" || connection->RemoteIP() == "::")) { else if (user == "admin" && (connection->RemoteIP() == "127.0.0.1" || connection->RemoteIP() == "::")) {
r.logged_in = true; r.logged_in = true;
r.account_id = 0; r.account_id = 0;
connection->SetAuthorized(true, r.account_name, r.account_id, 255); connection->SetAuthorized(true, r.account_name, r.account_id, AccountStatus::Max);
ret["status"] = "Ok"; ret["status"] = "Ok";
} }
else { else {

View File

@ -274,7 +274,7 @@ void ClientListEntry::ClearVars(bool iAll)
paccountid = 0; paccountid = 0;
memset(paccountname, 0, sizeof(paccountname)); memset(paccountname, 0, sizeof(paccountname));
padmin = 0; padmin = AccountStatus::Player;
} }
pzoneserver = 0; pzoneserver = 0;
pzone = 0; pzone = 0;
@ -365,7 +365,7 @@ bool ClientListEntry::CheckAuth(uint32 loginserver_account_id, const char *key_p
} }
std::string lsworldadmin; std::string lsworldadmin;
if (database.GetVariable("honorlsworldadmin", lsworldadmin)) { if (database.GetVariable("honorlsworldadmin", lsworldadmin)) {
if (atoi(lsworldadmin.c_str()) == 1 && pworldadmin != 0 && (padmin < pworldadmin || padmin == 0)) { if (atoi(lsworldadmin.c_str()) == 1 && pworldadmin != 0 && (padmin < pworldadmin || padmin == AccountStatus::Player)) {
padmin = pworldadmin; padmin = pworldadmin;
} }
} }

View File

@ -60,7 +60,7 @@ public:
* @param scl * @param scl
* @param iOnline * @param iOnline
*/ */
ClientListEntry(uint32 id, uint32 iAccID, const char* iAccName, MD5& iMD5Pass, int16 iAdmin = 0); ClientListEntry(uint32 id, uint32 iAccID, const char* iAccName, MD5& iMD5Pass, int16 iAdmin = AccountStatus::Player);
ClientListEntry(uint32 id, ZoneServer* iZS, ServerClientList_Struct* scl, CLE_Status iOnline); ClientListEntry(uint32 id, ZoneServer* iZS, ServerClientList_Struct* scl, CLE_Status iOnline);
~ClientListEntry(); ~ClientListEntry();
bool CheckStale(); bool CheckStale();

View File

@ -296,7 +296,13 @@ void ClientList::SendCLEList(const int16& admin, const char* to, WorldTCPConnect
fmt:format_to(out, "{} CharID: {} CharName: {} Zone: {} ({})", newline, cle->CharID(), cle->name(), ZoneName(cle->zone()), cle->zone()); fmt:format_to(out, "{} CharID: {} CharName: {} Zone: {} ({})", newline, cle->CharID(), cle->name(), ZoneName(cle->zone()), cle->zone());
if (out.size() >= 3072) { if (out.size() >= 3072) {
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
addnewline = false; addnewline = false;
out.clear(); out.clear();
} else { } else {
@ -309,7 +315,13 @@ void ClientList::SendCLEList(const int16& admin, const char* to, WorldTCPConnect
} }
fmt::format_to(out, "{}{} CLEs in memory. {} CLEs listed. numplayers = {}.", newline, x, y, numplayers); fmt::format_to(out, "{}{} CLEs in memory. {} CLEs listed. numplayers = {}.", newline, x, y, numplayers);
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
} }
@ -558,7 +570,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
(countcle->Online() >= CLE_Status::Zoning) && (countcle->Online() >= CLE_Status::Zoning) &&
(!countcle->GetGM() || countcle->Anon() != 1 || admin >= countcle->Admin()) && (!countcle->GetGM() || countcle->Anon() != 1 || admin >= countcle->Admin()) &&
(whom == 0 || ( (whom == 0 || (
((countcle->Admin() >= 80 && countcle->GetGM()) || whom->gmlookup == 0xFFFF) && ((countcle->Admin() >= AccountStatus::QuestTroupe && countcle->GetGM()) || whom->gmlookup == 0xFFFF) &&
(whom->lvllow == 0xFFFF || (countcle->level() >= whom->lvllow && countcle->level() <= whom->lvlhigh && (countcle->Anon()==0 || admin > countcle->Admin()))) && (whom->lvllow == 0xFFFF || (countcle->level() >= whom->lvllow && countcle->level() <= whom->lvlhigh && (countcle->Anon()==0 || admin > countcle->Admin()))) &&
(whom->wclass == 0xFFFF || (countcle->class_() == whom->wclass && (countcle->Anon()==0 || admin > countcle->Admin()))) && (whom->wclass == 0xFFFF || (countcle->class_() == whom->wclass && (countcle->Anon()==0 || admin > countcle->Admin()))) &&
(whom->wrace == 0xFFFF || (countcle->race() == whom->wrace && (countcle->Anon()==0 || admin > countcle->Admin()))) && (whom->wrace == 0xFFFF || (countcle->race() == whom->wrace && (countcle->Anon()==0 || admin > countcle->Admin()))) &&
@ -566,18 +578,18 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
(tmpZone != 0 && strncasecmp(tmpZone, whom->whom, whomlen) == 0) || (tmpZone != 0 && strncasecmp(tmpZone, whom->whom, whomlen) == 0) ||
strncasecmp(countcle->name(),whom->whom, whomlen) == 0 || strncasecmp(countcle->name(),whom->whom, whomlen) == 0 ||
(strncasecmp(guild_mgr.GetGuildName(countcle->GuildID()), whom->whom, whomlen) == 0) || (strncasecmp(guild_mgr.GetGuildName(countcle->GuildID()), whom->whom, whomlen) == 0) ||
(admin >= 100 && strncasecmp(countcle->AccountName(), whom->whom, whomlen) == 0) (admin >= AccountStatus::GMAdmin && strncasecmp(countcle->AccountName(), whom->whom, whomlen) == 0)
)) ))
)) ))
) { ) {
if((countcle->Anon()>0 && admin>=countcle->Admin() && admin>0) || countcle->Anon()==0 ){ if((countcle->Anon()>0 && admin >= countcle->Admin() && admin > AccountStatus::Player) || countcle->Anon()==0 ){
totalusers++; totalusers++;
if(totalusers<=20 || admin>=100) if(totalusers<=20 || admin >= AccountStatus::GMAdmin)
totallength=totallength+strlen(countcle->name())+strlen(countcle->AccountName())+strlen(guild_mgr.GetGuildName(countcle->GuildID()))+5; totallength=totallength+strlen(countcle->name())+strlen(countcle->AccountName())+strlen(guild_mgr.GetGuildName(countcle->GuildID()))+5;
} }
else if((countcle->Anon()>0 && admin<=countcle->Admin()) || (countcle->Anon()==0 && !countcle->GetGM())) { else if((countcle->Anon()>0 && admin<=countcle->Admin()) || (countcle->Anon()==0 && !countcle->GetGM())) {
totalusers++; totalusers++;
if(totalusers<=20 || admin>=100) if(totalusers<=20 || admin >= AccountStatus::GMAdmin)
totallength=totallength+strlen(countcle->name())+strlen(guild_mgr.GetGuildName(countcle->GuildID()))+5; totallength=totallength+strlen(countcle->name())+strlen(guild_mgr.GetGuildName(countcle->GuildID()))+5;
} }
} }
@ -589,7 +601,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
uint8 unknown35=0x0A; uint8 unknown35=0x0A;
uint32 unknown36=0; uint32 unknown36=0;
uint32 playersinzonestring=5028; uint32 playersinzonestring=5028;
if(totalusers>20 && admin<100){ if(totalusers>20 && admin<AccountStatus::GMAdmin){
totalusers=20; totalusers=20;
playersinzonestring=5033; playersinzonestring=5033;
} }
@ -638,7 +650,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
(cle->Online() >= CLE_Status::Zoning) && (cle->Online() >= CLE_Status::Zoning) &&
(!cle->GetGM() || cle->Anon() != 1 || admin >= cle->Admin()) && (!cle->GetGM() || cle->Anon() != 1 || admin >= cle->Admin()) &&
(whom == 0 || ( (whom == 0 || (
((cle->Admin() >= 80 && cle->GetGM()) || whom->gmlookup == 0xFFFF) && ((cle->Admin() >= AccountStatus::QuestTroupe && cle->GetGM()) || whom->gmlookup == 0xFFFF) &&
(whom->lvllow == 0xFFFF || (cle->level() >= whom->lvllow && cle->level() <= whom->lvlhigh && (cle->Anon()==0 || admin>cle->Admin()))) && (whom->lvllow == 0xFFFF || (cle->level() >= whom->lvllow && cle->level() <= whom->lvlhigh && (cle->Anon()==0 || admin>cle->Admin()))) &&
(whom->wclass == 0xFFFF || (cle->class_() == whom->wclass && (cle->Anon()==0 || admin>cle->Admin()))) && (whom->wclass == 0xFFFF || (cle->class_() == whom->wclass && (cle->Anon()==0 || admin>cle->Admin()))) &&
(whom->wrace == 0xFFFF || (cle->race() == whom->wrace && (cle->Anon()==0 || admin>cle->Admin()))) && (whom->wrace == 0xFFFF || (cle->race() == whom->wrace && (cle->Anon()==0 || admin>cle->Admin()))) &&
@ -646,46 +658,46 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
(tmpZone != 0 && strncasecmp(tmpZone, whom->whom, whomlen) == 0) || (tmpZone != 0 && strncasecmp(tmpZone, whom->whom, whomlen) == 0) ||
strncasecmp(cle->name(),whom->whom, whomlen) == 0 || strncasecmp(cle->name(),whom->whom, whomlen) == 0 ||
(strncasecmp(guild_mgr.GetGuildName(cle->GuildID()), whom->whom, whomlen) == 0) || (strncasecmp(guild_mgr.GetGuildName(cle->GuildID()), whom->whom, whomlen) == 0) ||
(admin >= 100 && strncasecmp(cle->AccountName(), whom->whom, whomlen) == 0) (admin >= AccountStatus::GMAdmin && strncasecmp(cle->AccountName(), whom->whom, whomlen) == 0)
)) ))
)) ))
) { ) {
line[0] = 0; line[0] = 0;
uint32 rankstring = 0xFFFFFFFF; uint32 rankstring = 0xFFFFFFFF;
if((cle->Anon()==1 && cle->GetGM() && cle->Admin()>admin) || (idx>=20 && admin<100)){ //hide gms that are anon from lesser gms and normal players, cut off at 20 if((cle->Anon()==1 && cle->GetGM() && cle->Admin()>admin) || (idx>=20 && admin < AccountStatus::GMAdmin)){ //hide gms that are anon from lesser gms and normal players, cut off at 20
rankstring = 0; rankstring = 0;
iterator.Advance(); iterator.Advance();
continue; continue;
} else if (cle->GetGM()) { } else if (cle->GetGM()) {
if (cle->Admin() >=250) if (cle->Admin() >= AccountStatus::GMImpossible)
rankstring = 5021; rankstring = 5021;
else if (cle->Admin() >= 200) else if (cle->Admin() >= AccountStatus::GMMgmt)
rankstring = 5020; rankstring = 5020;
else if (cle->Admin() >= 180) else if (cle->Admin() >= AccountStatus::GMCoder)
rankstring = 5019; rankstring = 5019;
else if (cle->Admin() >= 170) else if (cle->Admin() >= AccountStatus::GMAreas)
rankstring = 5018; rankstring = 5018;
else if (cle->Admin() >= 160) else if (cle->Admin() >= AccountStatus::QuestMaster)
rankstring = 5017; rankstring = 5017;
else if (cle->Admin() >= 150) else if (cle->Admin() >= AccountStatus::GMLeadAdmin)
rankstring = 5016; rankstring = 5016;
else if (cle->Admin() >= 100) else if (cle->Admin() >= AccountStatus::GMAdmin)
rankstring = 5015; rankstring = 5015;
else if (cle->Admin() >= 95) else if (cle->Admin() >= AccountStatus::GMStaff)
rankstring = 5014; rankstring = 5014;
else if (cle->Admin() >= 90) else if (cle->Admin() >= AccountStatus::EQSupport)
rankstring = 5013; rankstring = 5013;
else if (cle->Admin() >= 85) else if (cle->Admin() >= AccountStatus::GMTester)
rankstring = 5012; rankstring = 5012;
else if (cle->Admin() >= 81) else if (cle->Admin() >= AccountStatus::SeniorGuide)
rankstring = 5011; rankstring = 5011;
else if (cle->Admin() >= 80) else if (cle->Admin() >= AccountStatus::QuestTroupe)
rankstring = 5010; rankstring = 5010;
else if (cle->Admin() >= 50) else if (cle->Admin() >= AccountStatus::Guide)
rankstring = 5009; rankstring = 5009;
else if (cle->Admin() >= 20) else if (cle->Admin() >= AccountStatus::ApprenticeGuide)
rankstring = 5008; rankstring = 5008;
else if (cle->Admin() >= 10) else if (cle->Admin() >= AccountStatus::Steward)
rankstring = 5007; rankstring = 5007;
} }
idx++; idx++;
@ -693,13 +705,13 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
if (cle->GuildID() != GUILD_NONE && cle->GuildID()>0) if (cle->GuildID() != GUILD_NONE && cle->GuildID()>0)
sprintf(guildbuffer,"<%s>", guild_mgr.GetGuildName(cle->GuildID())); sprintf(guildbuffer,"<%s>", guild_mgr.GetGuildName(cle->GuildID()));
uint32 formatstring=5025; uint32 formatstring=5025;
if(cle->Anon()==1 && (admin<cle->Admin() || admin==0)) if(cle->Anon()==1 && (admin<cle->Admin() || admin == AccountStatus::Player))
formatstring=5024; formatstring=5024;
else if(cle->Anon()==1 && admin>=cle->Admin() && admin>0) else if(cle->Anon()==1 && admin>=cle->Admin() && admin > AccountStatus::Player)
formatstring=5022; formatstring=5022;
else if(cle->Anon()==2 && (admin<cle->Admin() || admin==0)) else if(cle->Anon()==2 && (admin<cle->Admin() || admin == AccountStatus::Player))
formatstring=5023;//display guild formatstring=5023;//display guild
else if(cle->Anon()==2 && admin>=cle->Admin() && admin>0) else if(cle->Anon()==2 && admin>=cle->Admin() && admin > AccountStatus::Player)
formatstring=5022;//display everything formatstring=5022;//display everything
//war* wars2 = (war*)pack2->pBuffer; //war* wars2 = (war*)pack2->pBuffer;
@ -711,10 +723,10 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
uint32 zonestring=0xFFFFFFFF; uint32 zonestring=0xFFFFFFFF;
uint32 plzone=0; uint32 plzone=0;
uint32 unknown80[2]; uint32 unknown80[2];
if(cle->Anon()==0 || (admin>=cle->Admin() && admin>0)){ if(cle->Anon()==0 || (admin>=cle->Admin() && admin> AccountStatus::Player)){
plclass_=cle->class_(); plclass_=cle->class_();
pllevel=cle->level(); pllevel=cle->level();
if(admin>=100) if(admin>=AccountStatus::GMAdmin)
pidstring=5003; pidstring=5003;
plrace=cle->race(); plrace=cle->race();
zonestring=5006; zonestring=5006;
@ -722,7 +734,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
} }
if(admin>=cle->Admin() && admin>0) if(admin>=cle->Admin() && admin > AccountStatus::Player)
unknown80[0]=cle->Admin(); unknown80[0]=cle->Admin();
else else
unknown80[0]=0xFFFFFFFF; unknown80[0]=0xFFFFFFFF;
@ -735,7 +747,7 @@ void ClientList::SendWhoAll(uint32 fromid,const char* to, int16 admin, Who_All_S
strcpy(plname,cle->name()); strcpy(plname,cle->name());
char placcount[30]={0}; char placcount[30]={0};
if(admin>=cle->Admin() && admin>0) if(admin>=cle->Admin() && admin > AccountStatus::Player)
strcpy(placcount,cle->AccountName()); strcpy(placcount,cle->AccountName());
memcpy(bufptr,&formatstring, sizeof(uint32)); memcpy(bufptr,&formatstring, sizeof(uint32));
@ -1020,7 +1032,7 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
if ( if (
(cle->Online() >= CLE_Status::Zoning) (cle->Online() >= CLE_Status::Zoning)
&& (whom == 0 || ( && (whom == 0 || (
((cle->Admin() >= 80 && cle->GetGM()) || whom->gmlookup == 0xFFFF) && ((cle->Admin() >= AccountStatus::QuestTroupe && cle->GetGM()) || whom->gmlookup == 0xFFFF) &&
(whom->lvllow == 0xFFFF || (cle->level() >= whom->lvllow && cle->level() <= whom->lvlhigh)) && (whom->lvllow == 0xFFFF || (cle->level() >= whom->lvllow && cle->level() <= whom->lvlhigh)) &&
(whom->wclass == 0xFFFF || cle->class_() == whom->wclass) && (whom->wclass == 0xFFFF || cle->class_() == whom->wclass) &&
(whom->wrace == 0xFFFF || cle->race() == whom->wrace) && (whom->wrace == 0xFFFF || cle->race() == whom->wrace) &&
@ -1028,41 +1040,41 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
(tmpZone != 0 && strncasecmp(tmpZone, whom->whom, whomlen) == 0) || (tmpZone != 0 && strncasecmp(tmpZone, whom->whom, whomlen) == 0) ||
strncasecmp(cle->name(), whom->whom, whomlen) == 0 || strncasecmp(cle->name(), whom->whom, whomlen) == 0 ||
(strncasecmp(guild_mgr.GetGuildName(cle->GuildID()), whom->whom, whomlen) == 0) || (strncasecmp(guild_mgr.GetGuildName(cle->GuildID()), whom->whom, whomlen) == 0) ||
(admin >= 100 && strncasecmp(cle->AccountName(), whom->whom, whomlen) == 0) (admin >= AccountStatus::GMAdmin && strncasecmp(cle->AccountName(), whom->whom, whomlen) == 0)
)) ))
)) ))
) { ) {
line[0] = 0; line[0] = 0;
// MYRA - use new (5.x) Status labels in who for telnet connection // MYRA - use new (5.x) Status labels in who for telnet connection
if (cle->Admin() >= 250) if (cle->Admin() >= AccountStatus::GMImpossible)
strcpy(tmpgm, "* GM-Impossible * "); strcpy(tmpgm, "* GM-Impossible * ");
else if (cle->Admin() >= 200) else if (cle->Admin() >= AccountStatus::GMMgmt)
strcpy(tmpgm, "* GM-Mgmt * "); strcpy(tmpgm, "* GM-Mgmt * ");
else if (cle->Admin() >= 180) else if (cle->Admin() >= AccountStatus::GMCoder)
strcpy(tmpgm, "* GM-Coder * "); strcpy(tmpgm, "* GM-Coder * ");
else if (cle->Admin() >= 170) else if (cle->Admin() >= AccountStatus::GMAreas)
strcpy(tmpgm, "* GM-Areas * "); strcpy(tmpgm, "* GM-Areas * ");
else if (cle->Admin() >= 160) else if (cle->Admin() >= AccountStatus::QuestMaster)
strcpy(tmpgm, "* QuestMaster * "); strcpy(tmpgm, "* QuestMaster * ");
else if (cle->Admin() >= 150) else if (cle->Admin() >= AccountStatus::GMLeadAdmin)
strcpy(tmpgm, "* GM-Lead Admin * "); strcpy(tmpgm, "* GM-Lead Admin * ");
else if (cle->Admin() >= 100) else if (cle->Admin() >= AccountStatus::GMAdmin)
strcpy(tmpgm, "* GM-Admin * "); strcpy(tmpgm, "* GM-Admin * ");
else if (cle->Admin() >= 95) else if (cle->Admin() >= AccountStatus::GMStaff)
strcpy(tmpgm, "* GM-Staff * "); strcpy(tmpgm, "* GM-Staff * ");
else if (cle->Admin() >= 90) else if (cle->Admin() >= AccountStatus::EQSupport)
strcpy(tmpgm, "* EQ Support * "); strcpy(tmpgm, "* EQ Support * ");
else if (cle->Admin() >= 85) else if (cle->Admin() >= AccountStatus::GMTester)
strcpy(tmpgm, "* GM-Tester * "); strcpy(tmpgm, "* GM-Tester * ");
else if (cle->Admin() >= 81) else if (cle->Admin() >= AccountStatus::SeniorGuide)
strcpy(tmpgm, "* Senior Guide * "); strcpy(tmpgm, "* Senior Guide * ");
else if (cle->Admin() >= 80) else if (cle->Admin() >= AccountStatus::QuestTroupe)
strcpy(tmpgm, "* QuestTroupe * "); strcpy(tmpgm, "* QuestTroupe * ");
else if (cle->Admin() >= 50) else if (cle->Admin() >= AccountStatus::Guide)
strcpy(tmpgm, "* Guide * "); strcpy(tmpgm, "* Guide * ");
else if (cle->Admin() >= 20) else if (cle->Admin() >= AccountStatus::ApprenticeGuide)
strcpy(tmpgm, "* Apprentice Guide * "); strcpy(tmpgm, "* Apprentice Guide * ");
else if (cle->Admin() >= 10) else if (cle->Admin() >= AccountStatus::Steward)
strcpy(tmpgm, "* Steward * "); strcpy(tmpgm, "* Steward * ");
else else
tmpgm[0] = 0; tmpgm[0] = 0;
@ -1079,16 +1091,16 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
else else
LFG[0] = 0; LFG[0] = 0;
if (admin >= 150 && admin >= cle->Admin()) { if (admin >= AccountStatus::GMLeadAdmin && admin >= cle->Admin()) {
sprintf(accinfo, " AccID: %i AccName: %s LSID: %i Status: %i", cle->AccountID(), cle->AccountName(), cle->LSAccountID(), cle->Admin()); sprintf(accinfo, " AccID: %i AccName: %s LSID: %i Status: %i", cle->AccountID(), cle->AccountName(), cle->LSAccountID(), cle->Admin());
} }
else else
accinfo[0] = 0; accinfo[0] = 0;
if (cle->Anon() == 2) { // Roleplay if (cle->Anon() == 2) { // Roleplay
if (admin >= 100 && admin >= cle->Admin()) if (admin >= AccountStatus::GMAdmin && admin >= cle->Admin())
sprintf(line, " %s[RolePlay %i %s] %s (%s)%s zone: %s%s%s", tmpgm, cle->level(), GetClassIDName(cle->class_(), cle->level()), cle->name(), GetRaceIDName(cle->race()), tmpguild, tmpZone, LFG, accinfo); sprintf(line, " %s[RolePlay %i %s] %s (%s)%s zone: %s%s%s", tmpgm, cle->level(), GetClassIDName(cle->class_(), cle->level()), cle->name(), GetRaceIDName(cle->race()), tmpguild, tmpZone, LFG, accinfo);
else if (cle->Admin() >= 80 && admin < 80 && cle->GetGM()) { else if (cle->Admin() >= AccountStatus::QuestTroupe && admin < AccountStatus::QuestTroupe && cle->GetGM()) {
iterator.Advance(); iterator.Advance();
continue; continue;
} }
@ -1096,9 +1108,9 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
sprintf(line, " %s[ANONYMOUS] %s%s%s%s", tmpgm, cle->name(), tmpguild, LFG, accinfo); sprintf(line, " %s[ANONYMOUS] %s%s%s%s", tmpgm, cle->name(), tmpguild, LFG, accinfo);
} }
else if (cle->Anon() == 1) { // Anon else if (cle->Anon() == 1) { // Anon
if (admin >= 100 && admin >= cle->Admin()) if (admin >= AccountStatus::GMAdmin && admin >= cle->Admin())
sprintf(line, " %s[ANON %i %s] %s (%s)%s zone: %s%s%s", tmpgm, cle->level(), GetClassIDName(cle->class_(), cle->level()), cle->name(), GetRaceIDName(cle->race()), tmpguild, tmpZone, LFG, accinfo); sprintf(line, " %s[ANON %i %s] %s (%s)%s zone: %s%s%s", tmpgm, cle->level(), GetClassIDName(cle->class_(), cle->level()), cle->name(), GetRaceIDName(cle->race()), tmpguild, tmpZone, LFG, accinfo);
else if (cle->Admin() >= 80 && cle->GetGM()) { else if (cle->Admin() >= AccountStatus::QuestTroupe && cle->GetGM()) {
iterator.Advance(); iterator.Advance();
continue; continue;
} }
@ -1111,7 +1123,13 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
fmt::format_to(out, line); fmt::format_to(out, line);
if (out.size() >= 3584) { if (out.size() >= 3584) {
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
out.clear(); out.clear();
} }
else { else {
@ -1121,17 +1139,17 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
fmt::format_to(out, "\n"); fmt::format_to(out, "\n");
} }
x++; x++;
if (x >= 20 && admin < 80) if (x >= 20 && admin < AccountStatus::QuestTroupe)
break; break;
} }
iterator.Advance(); iterator.Advance();
} }
if (x >= 20 && admin < 80) if (x >= 20 && admin < AccountStatus::QuestTroupe)
fmt::format_to(out, "too many results...20 players shown"); fmt::format_to(out, "too many results...20 players shown");
else else
fmt::format_to(out, "{} players online", x); fmt::format_to(out, "{} players online", x);
if (admin >= 150 && (whom == 0 || whom->gmlookup != 0xFFFF)) { if (admin >= AccountStatus::GMAdmin && (whom == 0 || whom->gmlookup != 0xFFFF)) {
if (connection->IsConsole()) if (connection->IsConsole())
fmt::format_to(out, "\r\n"); fmt::format_to(out, "\r\n");
else else
@ -1140,7 +1158,13 @@ void ClientList::ConsoleSendWhoAll(const char* to, int16 admin, Who_All_Struct*
//console_list.SendConsoleWho(connection, to, admin, &output, &outsize, &outlen); //console_list.SendConsoleWho(connection, to, admin, &output, &outsize, &outlen);
} }
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
} }
void ClientList::Add(Client* client) { void ClientList::Add(Client* client) {
@ -1386,7 +1410,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
zoneserver_list.SendEmoteMessage( zoneserver_list.SendEmoteMessage(
Name, Name,
0, 0,
0, AccountStatus::Player,
Chat::White, Chat::White,
fmt::format( fmt::format(
"There {} {} Titanium, {} SoF, {} SoD, {} UF, {} RoF, and {} RoF2 Client{} currently connected for a total of {} Client{} and {} Unique IP{} connected.", "There {} {} Titanium, {} SoF, {} SoD, {} UF, {} RoF, and {} RoF2 Client{} currently connected for a total of {} Client{} and {} Unique IP{} connected.",

View File

@ -62,7 +62,7 @@ public:
void DisconnectByIP(uint32 iIP); void DisconnectByIP(uint32 iIP);
void CLCheckStale(); void CLCheckStale();
void CLEKeepAlive(uint32 numupdates, uint32* wid); void CLEKeepAlive(uint32 numupdates, uint32* wid);
void CLEAdd(uint32 iLSID, const char* iLoginServerName, const char* iLoginName, const char* iLoginKey, int16 iWorldAdmin = 0, uint32 ip = 0, uint8 local=0); void CLEAdd(uint32 iLSID, const char* iLoginServerName, const char* iLoginName, const char* iLoginKey, int16 iWorldAdmin = AccountStatus::Player, uint32 ip = 0, uint8 local=0);
void UpdateClientGuild(uint32 char_id, uint32 guild_id); void UpdateClientGuild(uint32 char_id, uint32 guild_id);
void RemoveCLEByLSID(uint32 iLSID); void RemoveCLEByLSID(uint32 iLSID);
bool IsAccountInGame(uint32 iLSID); bool IsAccountInGame(uint32 iLSID);

View File

@ -280,20 +280,33 @@ void ConsoleEmote(
join_args.erase(join_args.begin(), join_args.begin() + 2); join_args.erase(join_args.begin(), join_args.begin() + 2);
if (strcasecmp(args[0].c_str(), "world") == 0) { if (strcasecmp(args[0].c_str(), "world") == 0) {
zoneserver_list.SendEmoteMessageRaw(0, 0, 0, atoi(args[1].c_str()), JoinString(join_args, " ").c_str()); zoneserver_list.SendEmoteMessageRaw(
0,
0,
AccountStatus::Player,
atoi(args[1].c_str()),
JoinString(join_args, " ").c_str()
);
} }
else { else {
ZoneServer *zs = zoneserver_list.FindByName(args[0].c_str()); ZoneServer *zs = zoneserver_list.FindByName(args[0].c_str());
if (zs != 0) { if (zs != 0) {
zs->SendEmoteMessageRaw(0, 0, 0, atoi(args[1].c_str()), JoinString(join_args, " ").c_str()); zs->SendEmoteMessageRaw(
0,
0,
AccountStatus::Player,
atoi(args[1].c_str()),
JoinString(join_args, " ").c_str()
);
} }
else { else {
zoneserver_list.SendEmoteMessageRaw( zoneserver_list.SendEmoteMessageRaw(
args[0].c_str(), args[0].c_str(),
0, 0,
0, AccountStatus::Player,
atoi(args[1].c_str()), atoi(args[1].c_str()),
JoinString(join_args, " ").c_str()); JoinString(join_args, " ").c_str()
);
} }
} }
} }
@ -637,7 +650,16 @@ void ConsoleZoneLock(
uint16 tmp = ZoneID(args[1].c_str()); uint16 tmp = ZoneID(args[1].c_str());
if (tmp) { if (tmp) {
if (zoneserver_list.SetLockedZone(tmp, true)) { if (zoneserver_list.SetLockedZone(tmp, true)) {
zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone locked: %s", ZoneName(tmp)); zoneserver_list.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
fmt::format(
"Zone locked: {}",
ZoneName(tmp)
).c_str()
);
} }
else { else {
connection->SendLine("Failed to change lock"); connection->SendLine("Failed to change lock");
@ -655,7 +677,16 @@ void ConsoleZoneLock(
uint16 tmp = ZoneID(args[1].c_str()); uint16 tmp = ZoneID(args[1].c_str());
if (tmp) { if (tmp) {
if (zoneserver_list.SetLockedZone(tmp, false)) { if (zoneserver_list.SetLockedZone(tmp, false)) {
zoneserver_list.SendEmoteMessage(0, 0, 80, 15, "Zone unlocked: %s", ZoneName(tmp)); zoneserver_list.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
fmt::format(
"Zone unlocked: {}",
ZoneName(tmp)
).c_str()
);
} }
else { else {
connection->SendLine("Failed to change lock"); connection->SendLine("Failed to change lock");
@ -782,7 +813,7 @@ void ConsoleWorldShutdown(
zoneserver_list.SendEmoteMessage( zoneserver_list.SendEmoteMessage(
0, 0,
0, 0,
0, AccountStatus::Player,
Chat::Yellow, Chat::Yellow,
"[SYSTEM] World shutdown has been aborted." "[SYSTEM] World shutdown has been aborted."
); );

View File

@ -481,10 +481,10 @@ void Console::ProcessCommand(const char* command) {
SendMessage(1, " version"); SendMessage(1, " version");
SendMessage(1, " worldshutdown"); SendMessage(1, " worldshutdown");
} }
if (admin >= 201) { if (admin >= AccountStatus::GMMgmt) {
SendMessage(1, " IPLookup [name]"); SendMessage(1, " IPLookup [name]");
} }
if (admin >= 100) { if (admin >= AccountStatus::GMAdmin) {
SendMessage(1, " LSReconnect"); SendMessage(1, " LSReconnect");
SendMessage(1, " signalcharbyname charname ID"); SendMessage(1, " signalcharbyname charname ID");
SendMessage(1, " reloadworld"); SendMessage(1, " reloadworld");
@ -799,7 +799,7 @@ void Console::ProcessCommand(const char* command) {
SendMessage(1, " Compiled on: %s at %s", COMPILE_DATE, COMPILE_TIME); SendMessage(1, " Compiled on: %s at %s", COMPILE_DATE, COMPILE_TIME);
SendMessage(1, " Last modified on: %s", LAST_MODIFIED); SendMessage(1, " Last modified on: %s", LAST_MODIFIED);
} }
else if (strcasecmp(sep.arg[0], "serverinfo") == 0 && admin >= 200) { else if (strcasecmp(sep.arg[0], "serverinfo") == 0 && admin >= AccountStatus::GMMgmt) {
if (strcasecmp(sep.arg[1], "os") == 0) { if (strcasecmp(sep.arg[1], "os") == 0) {
#ifdef _WINDOWS #ifdef _WINDOWS
GetOS(); GetOS();
@ -821,10 +821,10 @@ void Console::ProcessCommand(const char* command) {
SendMessage(1, " OS - Operating system version information."); SendMessage(1, " OS - Operating system version information.");
} }
} }
else if (strcasecmp(sep.arg[0], "IPLookup") == 0 && admin >= 201) { else if (strcasecmp(sep.arg[0], "IPLookup") == 0 && admin >= AccountStatus::GMMgmt) {
client_list.SendCLEList(admin, 0, this, sep.argplus[1]); client_list.SendCLEList(admin, 0, this, sep.argplus[1]);
} }
else if (strcasecmp(sep.arg[0], "LSReconnect") == 0 && admin >= 100) { else if (strcasecmp(sep.arg[0], "LSReconnect") == 0 && admin >= AccountStatus::GMAdmin) {
#ifdef _WINDOWS #ifdef _WINDOWS
_beginthread(AutoInitLoginServer, 0, nullptr); _beginthread(AutoInitLoginServer, 0, nullptr);
#else #else
@ -839,7 +839,7 @@ void Console::ProcessCommand(const char* command) {
if (strcasecmp(sep.arg[1], "list") == 0) { if (strcasecmp(sep.arg[1], "list") == 0) {
zoneserver_list.ListLockedZones(0, this); zoneserver_list.ListLockedZones(0, this);
} }
else if (strcasecmp(sep.arg[1], "lock") == 0 && admin >= 101) { else if (strcasecmp(sep.arg[1], "lock") == 0 && admin >= AccountStatus::GMAdmin) {
uint16 tmp = ZoneID(sep.arg[2]); uint16 tmp = ZoneID(sep.arg[2]);
if (tmp) { if (tmp) {
if (zoneserver_list.SetLockedZone(tmp, true)) if (zoneserver_list.SetLockedZone(tmp, true))
@ -850,7 +850,7 @@ void Console::ProcessCommand(const char* command) {
else else
SendMessage(1, "Usage: #zonelock lock [zonename]"); SendMessage(1, "Usage: #zonelock lock [zonename]");
} }
else if (strcasecmp(sep.arg[1], "unlock") == 0 && admin >= 101) { else if (strcasecmp(sep.arg[1], "unlock") == 0 && admin >= AccountStatus::GMAdmin) {
uint16 tmp = ZoneID(sep.arg[2]); uint16 tmp = ZoneID(sep.arg[2]);
if (tmp) { if (tmp) {
if (zoneserver_list.SetLockedZone(tmp, false)) if (zoneserver_list.SetLockedZone(tmp, false))
@ -864,13 +864,13 @@ void Console::ProcessCommand(const char* command) {
else { else {
SendMessage(1, "#zonelock sub-commands"); SendMessage(1, "#zonelock sub-commands");
SendMessage(1, " list"); SendMessage(1, " list");
if (admin >= 101) { if (admin >= AccountStatus::GMAdmin) {
SendMessage(1, " lock [zonename]"); SendMessage(1, " lock [zonename]");
SendMessage(1, " unlock [zonename]"); SendMessage(1, " unlock [zonename]");
} }
} }
} }
else if (strcasecmp(sep.arg[0], "reloadworld") == 0 && admin > 101) else if (strcasecmp(sep.arg[0], "reloadworld") == 0 && admin > AccountStatus::GMAdmin)
{ {
SendEmoteMessage(0,0,0,15,"Reloading World..."); SendEmoteMessage(0,0,0,15,"Reloading World...");
auto pack = new ServerPacket(ServerOP_ReloadWorld, sizeof(ReloadWorld_Struct)); auto pack = new ServerPacket(ServerOP_ReloadWorld, sizeof(ReloadWorld_Struct));

View File

@ -37,6 +37,7 @@
#include "launcher_list.h" #include "launcher_list.h"
#include "launcher_link.h" #include "launcher_link.h"
#include "wguild_mgr.h" #include "wguild_mgr.h"
#include "../common/emu_constants.h"
#ifdef seed #ifdef seed
#undef seed #undef seed
@ -360,7 +361,13 @@ void EQW::ResolveBug(const char *id) {
} }
void EQW::SendMessage(uint32 type, const char *msg) { void EQW::SendMessage(uint32 type, const char *msg) {
zoneserver_list.SendEmoteMessage(0, 0, 0, type, msg); zoneserver_list.SendEmoteMessage(
0,
0,
AccountStatus::Player,
type,
msg
);
} }
void EQW::WorldShutDown(uint32 time, uint32 interval) { void EQW::WorldShutDown(uint32 time, uint32 interval) {

View File

@ -306,7 +306,13 @@ void LoginServer::ProcessSystemwideMessage(uint16_t opcode, EQ::Net::Packet &p)
LogNetcode("Received ServerPacket from LS OpCode {:#04x}", opcode); LogNetcode("Received ServerPacket from LS OpCode {:#04x}", opcode);
ServerSystemwideMessage *swm = (ServerSystemwideMessage *) p.Data(); ServerSystemwideMessage *swm = (ServerSystemwideMessage *) p.Data();
zoneserver_list.SendEmoteMessageRaw(0, 0, 0, swm->type, swm->message); zoneserver_list.SendEmoteMessageRaw(
0,
0,
AccountStatus::Player,
swm->type,
swm->message
);
} }
void LoginServer::ProcessLSRemoteAddr(uint16_t opcode, EQ::Net::Packet &p) void LoginServer::ProcessLSRemoteAddr(uint16_t opcode, EQ::Net::Packet &p)

View File

@ -252,13 +252,15 @@ static void GMSayHookCallBackProcessWorld(uint16 log_category, std::string messa
for (size_t iter = 0; iter < message_split.size(); ++iter) { for (size_t iter = 0; iter < message_split.size(); ++iter) {
zoneserver_list.SendEmoteMessage( zoneserver_list.SendEmoteMessage(
nullptr,
0, 0,
80, 0,
AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category), LogSys.GetGMSayColorFromCategory(log_category),
" %s%s", fmt::format(
" {}{}",
(iter == 0 ? " ---" : ""), (iter == 0 ? " ---" : ""),
message_split[iter].c_str() message_split[iter]
).c_str()
); );
} }
@ -266,9 +268,9 @@ static void GMSayHookCallBackProcessWorld(uint16 log_category, std::string messa
} }
zoneserver_list.SendEmoteMessage( zoneserver_list.SendEmoteMessage(
nullptr,
0, 0,
80, 0,
AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category), LogSys.GetGMSayColorFromCategory(log_category),
"%s", "%s",
message.c_str() message.c_str()

View File

@ -45,7 +45,13 @@ void WorldEventScheduler::Process(ZSList *zs_list)
if (ValidateEventReadyToActivate(e)) { if (ValidateEventReadyToActivate(e)) {
if (e.event_type == ServerEvents::EVENT_TYPE_BROADCAST) { if (e.event_type == ServerEvents::EVENT_TYPE_BROADCAST) {
LogScheduler("Sending broadcast [{}]", e.event_data.c_str()); LogScheduler("Sending broadcast [{}]", e.event_data.c_str());
zs_list->SendEmoteMessage(nullptr, 0, 0, 15, e.event_data.c_str()); zs_list->SendEmoteMessage(
0,
0,
AccountStatus::Player,
Chat::Yellow,
e.event_data.c_str()
);
} }
if (e.event_type == ServerEvents::EVENT_TYPE_RELOAD_WORLD) { if (e.event_type == ServerEvents::EVENT_TYPE_RELOAD_WORLD) {

View File

@ -51,19 +51,17 @@ ZSList::~ZSList() {
void ZSList::ShowUpTime(WorldTCPConnection* con, const char* adminname) { void ZSList::ShowUpTime(WorldTCPConnection* con, const char* adminname) {
uint32 ms = Timer::GetCurrentTime(); uint32 ms = Timer::GetCurrentTime();
uint32 d = ms / 86400000; std::string time_string = ConvertSecondsToTime(ms);
ms -= d * 86400000; con->SendEmoteMessage(
uint32 h = ms / 3600000; adminname,
ms -= h * 3600000; 0,
uint32 m = ms / 60000; AccountStatus::Player,
ms -= m * 60000; Chat::White,
uint32 s = ms / 1000; fmt::format(
if (d) "Worldserver Uptime | {}",
con->SendEmoteMessage(adminname, 0, 0, 0, "Worldserver Uptime: %02id %02ih %02im %02is", d, h, m, s); time_string
else if (h) ).c_str()
con->SendEmoteMessage(adminname, 0, 0, 0, "Worldserver Uptime: %02ih %02im %02is", h, m, s); );
else
con->SendEmoteMessage(adminname, 0, 0, 0, "Worldserver Uptime: %02im %02is", m, s);
} }
void ZSList::Add(ZoneServer* zoneserver) { void ZSList::Add(ZoneServer* zoneserver) {
@ -113,7 +111,7 @@ void ZSList::Process() {
SendEmoteMessage( SendEmoteMessage(
0, 0,
0, 0,
0, AccountStatus::Player,
Chat::Yellow, Chat::Yellow,
fmt::format( fmt::format(
"[SYSTEM] World will be shutting down in {} minutes.", "[SYSTEM] World will be shutting down in {} minutes.",
@ -277,7 +275,7 @@ void ZSList::ListLockedZones(const char* to, WorldTCPConnection* connection) {
connection->SendEmoteMessageRaw( connection->SendEmoteMessageRaw(
to, to,
0, 0,
EQ::constants::AccountStatus::Player, AccountStatus::Player,
Chat::White, Chat::White,
fmt::format( fmt::format(
"Zone {} | Name: {} ({}) ID: {}", "Zone {} | Name: {} ({}) ID: {}",
@ -299,7 +297,7 @@ void ZSList::ListLockedZones(const char* to, WorldTCPConnection* connection) {
connection->SendEmoteMessage( connection->SendEmoteMessage(
to, to,
0, 0,
EQ::constants::AccountStatus::Player, AccountStatus::Player,
Chat::White, Chat::White,
zone_message.c_str() zone_message.c_str()
); );
@ -355,7 +353,7 @@ void ZSList::SendZoneStatus(const char* to, int16 admin, WorldTCPConnection* con
else else
is_static_string[0] = 'D'; is_static_string[0] = 'D';
if (admin >= 150) { if (admin >= AccountStatus::GMLeadAdmin) {
if (zone_server_data->GetZoneID()) { if (zone_server_data->GetZoneID()) {
snprintf(zone_data_string, sizeof(zone_data_string), "%s (%i)", zone_server_data->GetZoneName(), zone_server_data->GetZoneID()); snprintf(zone_data_string, sizeof(zone_data_string), "%s (%i)", zone_server_data->GetZoneName(), zone_server_data->GetZoneID());
} }
@ -381,7 +379,13 @@ void ZSList::SendZoneStatus(const char* to, int16 admin, WorldTCPConnection* con
if (out.size() >= 3584) { if (out.size() >= 3584) {
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
out.clear(); out.clear();
} }
else { else {
@ -400,7 +404,13 @@ void ZSList::SendZoneStatus(const char* to, int16 admin, WorldTCPConnection* con
fmt::format_to(out, " #{} {} {}", zone_server_data->GetID(), is_static_string, zone_data_string); fmt::format_to(out, " #{} {} {}", zone_server_data->GetID(), is_static_string, zone_data_string);
if (out.size() >= 3584) { if (out.size() >= 3584) {
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
out.clear(); out.clear();
} }
else { else {
@ -427,7 +437,13 @@ void ZSList::SendZoneStatus(const char* to, int16 admin, WorldTCPConnection* con
fmt::format_to(out, "{} zones are static zones, {} zones are booted zones, {} zones available.", z, w, v); fmt::format_to(out, "{} zones are static zones, {} zones are booted zones, {} zones available.", z, w, v);
auto output = fmt::to_string(out); auto output = fmt::to_string(out);
connection->SendEmoteMessageRaw(to, 0, 0, 10, output.c_str()); connection->SendEmoteMessageRaw(
to,
0,
AccountStatus::Player,
Chat::NPCQuestSay,
output.c_str()
);
} }
void ZSList::SendChannelMessage(const char* from, const char* to, uint8 chan_num, uint8 language, const char* message, ...) { void ZSList::SendChannelMessage(const char* from, const char* to, uint8 chan_num, uint8 language, const char* message, ...) {
@ -558,20 +574,52 @@ void ZSList::SOPZoneBootup(const char* adminname, uint32 ZoneServerID, const cha
ZoneServer* zs = 0; ZoneServer* zs = 0;
ZoneServer* zs2 = 0; ZoneServer* zs2 = 0;
uint32 zoneid; uint32 zoneid;
if (!(zoneid = ZoneID(zonename))) if (!(zoneid = ZoneID(zonename))) {
SendEmoteMessage(adminname, 0, 0, 0, "Error: SOP_ZoneBootup: zone '%s' not found in 'zone' table. Typo protection=ON.", zonename); SendEmoteMessage(
else { adminname,
if (ZoneServerID != 0) 0,
AccountStatus::Player,
Chat::White,
fmt::format(
"Error: SOP_ZoneBootup: Zone '{}' not found in 'zone' table.",
zonename
).c_str()
);
} else {
if (ZoneServerID != 0) {
zs = FindByID(ZoneServerID); zs = FindByID(ZoneServerID);
else } else {
SendEmoteMessage(adminname, 0, 0, 0, "Error: SOP_ZoneBootup: ServerID must be specified"); SendEmoteMessage(
adminname,
0,
AccountStatus::Player,
Chat::White,
"Error: SOP_ZoneBootup: Server ID must be specified."
);
}
if (zs == 0) if (!zs) {
SendEmoteMessage(adminname, 0, 0, 0, "Error: SOP_ZoneBootup: zoneserver not found"); SendEmoteMessage(
else { adminname,
0,
AccountStatus::Player,
Chat::White,
"Error: SOP_ZoneBootup: Zoneserver not found."
);
} else {
zs2 = FindByName(zonename); zs2 = FindByName(zonename);
if (zs2 != 0) if (zs2 != 0)
SendEmoteMessage(adminname, 0, 0, 0, "Error: SOP_ZoneBootup: zone '%s' already being hosted by ZoneServer #%i", zonename, zs2->GetID()); SendEmoteMessage(
adminname,
0,
AccountStatus::Player,
Chat::White,
fmt::format(
"Error: SOP_ZoneBootup: Zone '{}' already being hosted by Zoneserver ID {}.",
zonename,
zs2->GetID()
).c_str()
);
else { else {
zs->TriggerBootup(zoneid, 0, adminname, iMakeStatic); zs->TriggerBootup(zoneid, 0, adminname, iMakeStatic);
} }
@ -714,7 +762,7 @@ void ZSList::WorldShutDown(uint32 time, uint32 interval)
SendEmoteMessage( SendEmoteMessage(
0, 0,
0, 0,
0, AccountStatus::Player,
Chat::Yellow, Chat::Yellow,
fmt::format( fmt::format(
"[SYSTEM] World will be shutting down in {} minutes.", "[SYSTEM] World will be shutting down in {} minutes.",
@ -733,7 +781,13 @@ void ZSList::WorldShutDown(uint32 time, uint32 interval)
reminder->Start(); reminder->Start();
} }
else { else {
SendEmoteMessage(0, 0, 0, 15, "[SYSTEM] World is shutting down."); SendEmoteMessage(
0,
0,
AccountStatus::Player,
Chat::Yellow,
"[SYSTEM] World is shutting down."
);
auto pack = new ServerPacket; auto pack = new ServerPacket;
pack->opcode = ServerOP_ShutdownAll; pack->opcode = ServerOP_ShutdownAll;
pack->size = 0; pack->size = 0;

View File

@ -438,7 +438,16 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
safe_delete(pack); safe_delete(pack);
}))) && (!scm->noreply)) }))) && (!scm->noreply))
{ {
zoneserver_list.SendEmoteMessage(scm->from, 0, 0, 0, "%s is not online at this time.", scm->to); zoneserver_list.SendEmoteMessage(
scm->from,
0,
AccountStatus::Player,
Chat::White,
fmt::format(
"{} is not online at this time.",
scm->to
).c_str()
);
} }
} }
break; break;
@ -446,7 +455,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
ClientListEntry* cle = client_list.FindCharacter(scm->deliverto); ClientListEntry* cle = client_list.FindCharacter(scm->deliverto);
if (cle == 0 || cle->Online() < CLE_Status::Zoning || if (cle == 0 || cle->Online() < CLE_Status::Zoning ||
(cle->TellsOff() && ((cle->Anon() == 1 && scm->fromadmin < cle->Admin()) || scm->fromadmin < 80))) { (cle->TellsOff() && ((cle->Anon() == 1 && scm->fromadmin < cle->Admin()) || scm->fromadmin < AccountStatus::QuestTroupe))) {
if (!scm->noreply) { if (!scm->noreply) {
ClientListEntry* sender = client_list.FindCharacter(scm->from); ClientListEntry* sender = client_list.FindCharacter(scm->from);
if (!sender || !sender->Server()) if (!sender || !sender->Server())
@ -491,7 +500,17 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
} }
else if (cle->Server() == 0) { else if (cle->Server() == 0) {
if (!scm->noreply) if (!scm->noreply)
zoneserver_list.SendEmoteMessage(scm->from, 0, 0, 0, "You told %s, '%s is not contactable at this time'", scm->to, scm->to); zoneserver_list.SendEmoteMessage(
scm->from,
0,
AccountStatus::Player,
Chat::White,
fmt::format(
"You told {}, '{} is not contactable at this time'",
scm->to,
scm->to
).c_str()
);
} }
else else
cle->Server()->SendPacket(pack); cle->Server()->SendPacket(pack);
@ -518,29 +537,36 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
} }
case ServerOP_EmoteMessage: { case ServerOP_EmoteMessage: {
ServerEmoteMessage_Struct* sem = (ServerEmoteMessage_Struct*)pack->pBuffer; ServerEmoteMessage_Struct* sem = (ServerEmoteMessage_Struct*)pack->pBuffer;
zoneserver_list.SendEmoteMessageRaw(sem->to, sem->guilddbid, sem->minstatus, sem->type, sem->message); zoneserver_list.SendEmoteMessageRaw(
sem->to,
sem->guilddbid,
sem->minstatus,
sem->type,
sem->message
);
break; break;
} }
case ServerOP_VoiceMacro: { case ServerOP_VoiceMacro: {
ServerVoiceMacro_Struct* svm = (ServerVoiceMacro_Struct*)pack->pBuffer; ServerVoiceMacro_Struct* svm = (ServerVoiceMacro_Struct*)pack->pBuffer;
if (svm->Type == VoiceMacroTell) { if (svm->Type == VoiceMacroTell) {
ClientListEntry* cle = client_list.FindCharacter(svm->To); ClientListEntry* cle = client_list.FindCharacter(svm->To);
if (!cle || (cle->Online() < CLE_Status::Zoning) || !cle->Server()) { if (!cle || (cle->Online() < CLE_Status::Zoning) || !cle->Server()) {
zoneserver_list.SendEmoteMessage(
zoneserver_list.SendEmoteMessage(svm->From, 0, 0, 0, "'%s is not online at this time'", svm->To); svm->From,
0,
AccountStatus::Player,
Chat::White,
fmt::format(
"'{} is not online at this time'",
svm->To
).c_str()
);
break; break;
} }
cle->Server()->SendPacket(pack); cle->Server()->SendPacket(pack);
} } else {
else
zoneserver_list.SendPacket(pack); zoneserver_list.SendPacket(pack);
}
break; break;
} }
@ -656,17 +682,31 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
case ServerOP_ZoneShutdown: { case ServerOP_ZoneShutdown: {
ServerZoneStateChange_struct* s = (ServerZoneStateChange_struct *)pack->pBuffer; ServerZoneStateChange_struct* s = (ServerZoneStateChange_struct *)pack->pBuffer;
ZoneServer* zs = 0; ZoneServer* zs = 0;
if (s->ZoneServerID != 0) if (s->ZoneServerID != 0) {
zs = zoneserver_list.FindByID(s->ZoneServerID); zs = zoneserver_list.FindByID(s->ZoneServerID);
else if (s->zoneid != 0) } else if (s->zoneid != 0) {
zs = zoneserver_list.FindByName(ZoneName(s->zoneid)); zs = zoneserver_list.FindByName(ZoneName(s->zoneid));
else } else {
zoneserver_list.SendEmoteMessage(s->adminname, 0, 0, 0, "Error: SOP_ZoneShutdown: neither ID nor name specified"); zoneserver_list.SendEmoteMessage(
s->adminname,
0,
AccountStatus::Player,
Chat::White,
"Error: SOP_ZoneShutdown: neither ID nor name specified"
);
}
if (zs == 0) if (!zs) {
zoneserver_list.SendEmoteMessage(s->adminname, 0, 0, 0, "Error: SOP_ZoneShutdown: zoneserver not found"); zoneserver_list.SendEmoteMessage(
else s->adminname,
0,
AccountStatus::Player,
Chat::White,
"Error: SOP_ZoneShutdown: zoneserver not found"
);
} else {
zs->SendPacket(pack); zs->SendPacket(pack);
}
break; break;
} }
case ServerOP_ZoneBootup: { case ServerOP_ZoneBootup: {
@ -717,7 +757,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
if (GetZoneID() == ztz->current_zone_id && GetInstanceID() == ztz->current_instance_id) { if (GetZoneID() == ztz->current_zone_id && GetInstanceID() == ztz->current_instance_id) {
LogInfo("Processing ZTZ for egress from zone for client [{}]", ztz->name); LogInfo("Processing ZTZ for egress from zone for client [{}]", ztz->name);
if (ztz->admin < 80 && ztz->ignorerestrictions < 2 && zoneserver_list.IsZoneLocked(ztz->requested_zone_id)) { if (ztz->admin < AccountStatus::QuestTroupe && ztz->ignorerestrictions < 2 && zoneserver_list.IsZoneLocked(ztz->requested_zone_id)) {
ztz->response = 0; ztz->response = 0;
SendPacket(pack); SendPacket(pack);
break; break;
@ -909,15 +949,43 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
ServerGMGoto_Struct* gmg = (ServerGMGoto_Struct*)pack->pBuffer; ServerGMGoto_Struct* gmg = (ServerGMGoto_Struct*)pack->pBuffer;
ClientListEntry* cle = client_list.FindCharacter(gmg->gotoname); ClientListEntry* cle = client_list.FindCharacter(gmg->gotoname);
if (cle != 0) { if (cle != 0) {
if (cle->Server() == 0) if (!cle->Server()) {
this->SendEmoteMessage(gmg->myname, 0, 0, 13, "Error: Cannot identify %s's zoneserver.", gmg->gotoname); SendEmoteMessage(
else if (cle->Anon() == 1 && cle->Admin() > gmg->admin) // no snooping for anon GMs gmg->myname,
this->SendEmoteMessage(gmg->myname, 0, 0, 13, "Error: %s not found", gmg->gotoname); 0,
else AccountStatus::Player,
Chat::Red,
fmt::format(
"Error: Cannot identify {}'s zoneserver.",
gmg->gotoname
).c_str()
);
} else if (cle->Anon() == 1 && cle->Admin() > gmg->admin) { // no snooping for anon GMs
SendEmoteMessage(
gmg->myname,
0,
AccountStatus::Player,
Chat::Red,
fmt::format(
"Error: {} not found.",
gmg->gotoname
).c_str()
);
} else {
cle->Server()->SendPacket(pack); cle->Server()->SendPacket(pack);
} }
}
else { else {
this->SendEmoteMessage(gmg->myname, 0, 0, 13, "Error: %s not found", gmg->gotoname); SendEmoteMessage(
gmg->myname,
0,
AccountStatus::Player,
Chat::Red,
fmt::format(
"Error: {} not found",
gmg->gotoname
).c_str()
);
} }
break; break;
} }
@ -933,16 +1001,28 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
WorldConfig::UnlockWorld(); WorldConfig::UnlockWorld();
if (loginserverlist.Connected()) { if (loginserverlist.Connected()) {
loginserverlist.SendStatus(); loginserverlist.SendStatus();
if (slock->mode >= 1) SendEmoteMessage(
this->SendEmoteMessage(slock->myname, 0, 0, 13, "World locked"); slock->myname,
else 0,
this->SendEmoteMessage(slock->myname, 0, 0, 13, "World unlocked"); AccountStatus::Player,
Chat::Red,
fmt::format(
"World {}.",
slock->mode ? "locked" : "unlocked"
).c_str()
);
} }
else { else {
if (slock->mode >= 1) SendEmoteMessage(
this->SendEmoteMessage(slock->myname, 0, 0, 13, "World locked, but login server not connected."); slock->myname,
else 0,
this->SendEmoteMessage(slock->myname, 0, 0, 13, "World unlocked, but login server not conencted."); AccountStatus::Player,
Chat::Red,
fmt::format(
"World {}, but login server not connected.",
slock->mode ? "locked" : "unlocked"
).c_str()
);
} }
break; break;
} }
@ -953,7 +1033,6 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
} }
ServerMotd_Struct* smotd = (ServerMotd_Struct*)pack->pBuffer; ServerMotd_Struct* smotd = (ServerMotd_Struct*)pack->pBuffer;
database.SetVariable("MOTD", smotd->motd); database.SetVariable("MOTD", smotd->motd);
//this->SendEmoteMessage(smotd->myname, 0, 0, 13, "Updated Motd.");
zoneserver_list.SendPacket(pack); zoneserver_list.SendPacket(pack);
break; break;
} }
@ -1024,22 +1103,22 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
} }
ServerLockZone_Struct* lock_zone = (ServerLockZone_Struct*) pack->pBuffer; ServerLockZone_Struct* lock_zone = (ServerLockZone_Struct*) pack->pBuffer;
if (lock_zone->op == EQ::constants::ServerLockType::List) { if (lock_zone->op == ServerLockType::List) {
zoneserver_list.ListLockedZones(lock_zone->adminname, this); zoneserver_list.ListLockedZones(lock_zone->adminname, this);
break; break;
} else if ( } else if (
lock_zone->op == EQ::constants::ServerLockType::Lock || lock_zone->op == ServerLockType::Lock ||
lock_zone->op == EQ::constants::ServerLockType::Unlock lock_zone->op == ServerLockType::Unlock
) { ) {
if (zoneserver_list.SetLockedZone(lock_zone->zoneID, lock_zone->op == EQ::constants::ServerLockType::Lock)) { if (zoneserver_list.SetLockedZone(lock_zone->zoneID, lock_zone->op == ServerLockType::Lock)) {
zoneserver_list.SendEmoteMessage( zoneserver_list.SendEmoteMessage(
0, 0,
0, 0,
EQ::constants::AccountStatus::QuestTroupe, AccountStatus::QuestTroupe,
Chat::White, Chat::White,
fmt::format( fmt::format(
"Zone {} | Name: {} ({}) ID: {}", "Zone {} | Name: {} ({}) ID: {}",
lock_zone->op == EQ::constants::ServerLockType::Lock ? "Locked" : "Unlocked", lock_zone->op == ServerLockType::Lock ? "Locked" : "Unlocked",
ZoneLongName(lock_zone->zoneID), ZoneLongName(lock_zone->zoneID),
ZoneName(lock_zone->zoneID), ZoneName(lock_zone->zoneID),
lock_zone->zoneID lock_zone->zoneID
@ -1049,11 +1128,11 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
SendEmoteMessageRaw( SendEmoteMessageRaw(
lock_zone->adminname, lock_zone->adminname,
0, 0,
EQ::constants::AccountStatus::Player, AccountStatus::Player,
Chat::White, Chat::White,
fmt::format( fmt::format(
"Zone Failed to {} | Name: {} ({}) ID: {}", "Zone Failed to {} | Name: {} ({}) ID: {}",
lock_zone->op == EQ::constants::ServerLockType::Lock ? "Lock" : "Unlock", lock_zone->op == ServerLockType::Lock ? "Lock" : "Unlock",
ZoneLongName(lock_zone->zoneID), ZoneLongName(lock_zone->zoneID),
ZoneName(lock_zone->zoneID), ZoneName(lock_zone->zoneID),
lock_zone->zoneID lock_zone->zoneID
@ -1404,7 +1483,13 @@ void ZoneServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, int16 to_
va_start(argptr, message); va_start(argptr, message);
vsnprintf(buffer, sizeof(buffer), message, argptr); vsnprintf(buffer, sizeof(buffer), message, argptr);
va_end(argptr); va_end(argptr);
SendEmoteMessageRaw(to, to_guilddbid, to_minstatus, type, buffer); SendEmoteMessageRaw(
to,
to_guilddbid,
to_minstatus,
type,
buffer
);
} }
void ZoneServer::SendEmoteMessageRaw(const char* to, uint32 to_guilddbid, int16 to_minstatus, uint32 type, const char* message) { void ZoneServer::SendEmoteMessageRaw(const char* to, uint32 to_guilddbid, int16 to_minstatus, uint32 type, const char* message) {

View File

@ -1656,43 +1656,64 @@ void bot_command_log_command(Client *c, const char *message)
bool continueevents = false; bool continueevents = false;
switch (zone->loglevelvar){ //catch failsafe switch (zone->loglevelvar){ //catch failsafe
case 9: // log only LeadGM case 9: { // log only LeadGM
if ((admin >= 150) && (admin <200)) if (
admin >= AccountStatus::GMLeadAdmin &&
admin < AccountStatus::GMMgmt
) {
continueevents = true;
}
break;
}
case 8: { // log only GM
if (
admin >= AccountStatus::GMAdmin &&
admin < AccountStatus::GMLeadAdmin
) {
continueevents = true;
}
break;
}
case 1: {
if (admin >= AccountStatus::GMMgmt) {
continueevents = true;
}
break;
}
case 2: {
if (admin >= AccountStatus::GMLeadAdmin) {
continueevents = true;
}
break;
}
case 3: {
if (admin >= AccountStatus::GMAdmin) {
continueevents = true;
}
break;
}
case 4: {
if (admin >= AccountStatus::QuestTroupe) {
continueevents = true;
}
break;
}
case 5: {
if (admin >= AccountStatus::ApprenticeGuide) {
continueevents = true;
}
break;
}
case 6: {
if (admin >= AccountStatus::Steward) {
continueevents = true;
}
break;
}
case 7: {
continueevents = true; continueevents = true;
break; break;
case 8: // log only GM }
if ((admin >= 100) && (admin <150))
continueevents = true;
break;
case 1:
if ((admin >= 200))
continueevents = true;
break;
case 2:
if ((admin >= 150))
continueevents = true;
break;
case 3:
if ((admin >= 100))
continueevents = true;
break;
case 4:
if ((admin >= 80))
continueevents = true;
break;
case 5:
if ((admin >= 20))
continueevents = true;
break;
case 6:
if ((admin >= 10))
continueevents = true;
break;
case 7:
continueevents = true;
break;
default:
break;
} }
if (continueevents) if (continueevents)
@ -3382,7 +3403,7 @@ void bot_command_heal_rotation(Client *c, const Seperator *sep)
return; return;
#if (EQDEBUG >= 12) #if (EQDEBUG >= 12)
while (c->Admin() >= 250) { while (c->Admin() >= AccountStatus::GMImpossible) {
if (strcasecmp(sep->arg[1], "shone")) { break; } if (strcasecmp(sep->arg[1], "shone")) { break; }
Bot* my_bot = ActionableBots::AsTarget_ByBot(c); Bot* my_bot = ActionableBots::AsTarget_ByBot(c);
if (!my_bot || !(my_bot->IsHealRotationMember())) { break; } if (!my_bot || !(my_bot->IsHealRotationMember())) { break; }

View File

@ -200,7 +200,7 @@ Client::Client(EQStreamInterface* ieqs)
TrackingID = 0; TrackingID = 0;
WID = 0; WID = 0;
account_id = 0; account_id = 0;
admin = 0; admin = AccountStatus::Player;
lsaccountid = 0; lsaccountid = 0;
guild_id = GUILD_NONE; guild_id = GUILD_NONE;
guildrank = 0; guildrank = 0;
@ -1013,7 +1013,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
else else
return; return;
} }
if(worldserver.IsOOCMuted() && admin < 100) if(worldserver.IsOOCMuted() && admin < AccountStatus::GMAdmin)
{ {
Message(0,"OOC has been muted. Try again later."); Message(0,"OOC has been muted. Try again later.");
return; return;
@ -1052,7 +1052,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
} }
case ChatChannel_Broadcast: /* Broadcast */ case ChatChannel_Broadcast: /* Broadcast */
case ChatChannel_GMSAY: { /* GM Say */ case ChatChannel_GMSAY: { /* GM Say */
if (!(admin >= 80)) if (!(admin >= AccountStatus::QuestTroupe))
Message(0, "Error: Only GMs can use this channel"); Message(0, "Error: Only GMs can use this channel");
else if (!worldserver.SendChannelMessage(this, targetname, chan_num, 0, language, lang_skill, message)) else if (!worldserver.SendChannelMessage(this, targetname, chan_num, 0, language, lang_skill, message))
Message(0, "Error: World server disconnected"); Message(0, "Error: World server disconnected");
@ -1230,7 +1230,7 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
} }
void Client::ChannelMessageSend(const char* from, const char* to, uint8 chan_num, uint8 language, uint8 lang_skill, const char* message, ...) { void Client::ChannelMessageSend(const char* from, const char* to, uint8 chan_num, uint8 language, uint8 lang_skill, const char* message, ...) {
if ((chan_num==11 && !(this->GetGM())) || (chan_num==10 && this->Admin()<80)) // dont need to send /pr & /petition to everybody if ((chan_num==11 && !(this->GetGM())) || (chan_num==10 && this->Admin() < AccountStatus::QuestTroupe)) // dont need to send /pr & /petition to everybody
return; return;
va_list argptr; va_list argptr;
char buffer[4096]; char buffer[4096];
@ -2647,7 +2647,7 @@ void Client::GMKill() {
} }
bool Client::CheckAccess(int16 iDBLevel, int16 iDefaultLevel) { bool Client::CheckAccess(int16 iDBLevel, int16 iDefaultLevel) {
if ((admin >= iDBLevel) || (iDBLevel == 255 && admin >= iDefaultLevel)) if ((admin >= iDBLevel) || (iDBLevel == AccountStatus::Max && admin >= iDefaultLevel))
return true; return true;
else else
return false; return false;
@ -7007,7 +7007,7 @@ void Client::SendStatsWindow(Client* client, bool use_window)
Extra_Info: Extra_Info:
client->Message(Chat::White, " BaseRace: %i Gender: %i BaseGender: %i Texture: %i HelmTexture: %i", GetBaseRace(), GetGender(), GetBaseGender(), GetTexture(), GetHelmTexture()); client->Message(Chat::White, " BaseRace: %i Gender: %i BaseGender: %i Texture: %i HelmTexture: %i", GetBaseRace(), GetGender(), GetBaseGender(), GetTexture(), GetHelmTexture());
if (client->Admin() >= 100) { if (client->Admin() >= AccountStatus::GMAdmin) {
client->Message(Chat::White, " CharID: %i EntityID: %i PetID: %i OwnerID: %i AIControlled: %i Targetted: %i", CharacterID(), GetID(), GetPetID(), GetOwnerID(), IsAIControlled(), targeted); client->Message(Chat::White, " CharID: %i EntityID: %i PetID: %i OwnerID: %i AIControlled: %i Targetted: %i", CharacterID(), GetID(), GetPetID(), GetOwnerID(), IsAIControlled(), targeted);
} }
} }
@ -8566,14 +8566,25 @@ void Client::ExpeditionSay(const char *str, int ExpID) {
return; return;
if(results.RowCount() == 0) { if(results.RowCount() == 0) {
this->Message(Chat::Lime, "You say to the expedition, '%s'", str); Message(Chat::Lime, "You say to the expedition, '%s'", str);
return; return;
} }
for(auto row = results.begin(); row != results.end(); ++row) { for(auto row = results.begin(); row != results.end(); ++row) {
const char* charName = row[0]; const char* charName = row[0];
if(strcmp(charName, this->GetCleanName()) != 0) if(strcmp(charName, GetCleanName()) != 0) {
worldserver.SendEmoteMessage(charName, 0, 0, 14, "%s says to the expedition, '%s'", this->GetCleanName(), str); worldserver.SendEmoteMessage(
charName,
0,
AccountStatus::Player,
Chat::Lime,
fmt::format(
"{} says to the expedition, '{}'",
GetCleanName(),
str
).c_str()
);
}
// ChannelList->CreateChannel(ChannelName, ChannelOwner, ChannelPassword, true, atoi(row[3])); // ChannelList->CreateChannel(ChannelName, ChannelOwner, ChannelPassword, true, atoi(row[3]));
} }

View File

@ -4756,7 +4756,7 @@ void Client::Handle_OP_ClientUpdate(const EQApplicationPacket *app) {
MakeSpawnUpdate(position_update); MakeSpawnUpdate(position_update);
if (gm_hide_me) { if (gm_hide_me) {
entity_list.QueueClientsStatus(this, outapp, true, Admin(), 255); entity_list.QueueClientsStatus(this, outapp, true, Admin(), AccountStatus::Max);
} else { } else {
entity_list.QueueCloseClients(this, outapp, true, RuleI(Range, ClientPositionUpdates), nullptr, true); entity_list.QueueCloseClients(this, outapp, true, RuleI(Range, ClientPositionUpdates), nullptr, true);
} }
@ -6667,7 +6667,7 @@ void Client::Handle_OP_GMZoneRequest(const EQApplicationPacket *app)
GMZoneRequest_Struct* gmzr = (GMZoneRequest_Struct*)app->pBuffer; GMZoneRequest_Struct* gmzr = (GMZoneRequest_Struct*)app->pBuffer;
float target_x = -1, target_y = -1, target_z = -1, target_heading; float target_x = -1, target_y = -1, target_z = -1, target_heading;
int16 min_status = 0; int16 min_status = AccountStatus::Player;
uint8 min_level = 0; uint8 min_level = 0;
char target_zone[32]; char target_zone[32];
uint16 zone_id = gmzr->zone_id; uint16 zone_id = gmzr->zone_id;
@ -7797,16 +7797,30 @@ void Client::Handle_OP_GuildInviteAccept(const EQApplicationPacket *app)
{ {
//dont care if the check fails (since we dont know the rank), just want to clear the entry. //dont care if the check fails (since we dont know the rank), just want to clear the entry.
guild_mgr.VerifyAndClearInvite(CharacterID(), gj->guildeqid, gj->response); guild_mgr.VerifyAndClearInvite(CharacterID(), gj->guildeqid, gj->response);
worldserver.SendEmoteMessage(gj->inviter, 0, 0, "%s has declined to join the guild.", this->GetName()); worldserver.SendEmoteMessage(
gj->inviter,
0,
Chat::White,
fmt::format(
"{} has declined to join the guild.",
GetCleanName()
).c_str()
);
return; return;
} }
} }
if (gj->response == 5 || gj->response == 4) { if (gj->response == 5 || gj->response == 4) {
//dont care if the check fails (since we dont know the rank), just want to clear the entry. //dont care if the check fails (since we dont know the rank), just want to clear the entry.
guild_mgr.VerifyAndClearInvite(CharacterID(), gj->guildeqid, gj->response); guild_mgr.VerifyAndClearInvite(CharacterID(), gj->guildeqid, gj->response);
worldserver.SendEmoteMessage(
worldserver.SendEmoteMessage(gj->inviter, 0, 0, "%s has declined to join the guild.", this->GetName()); gj->inviter,
0,
Chat::White,
fmt::format(
"{} has declined to join the guild.",
GetCleanName()
).c_str()
);
return; return;
} }
@ -7838,7 +7852,15 @@ void Client::Handle_OP_GuildInviteAccept(const EQApplicationPacket *app)
//we dont really care a lot about what this packet means, as long as //we dont really care a lot about what this packet means, as long as
//it has been authorized with the guild manager //it has been authorized with the guild manager
if (!guild_mgr.VerifyAndClearInvite(CharacterID(), gj->guildeqid, guildrank)) { if (!guild_mgr.VerifyAndClearInvite(CharacterID(), gj->guildeqid, guildrank)) {
worldserver.SendEmoteMessage(gj->inviter, 0, 0, "%s has sent an invalid response to your invite!", GetName()); worldserver.SendEmoteMessage(
gj->inviter,
0,
Chat::White,
fmt::format(
"{} has sent an invalid response to your invite!",
GetCleanName()
).c_str()
);
Message(Chat::Red, "Invalid invite response packet!"); Message(Chat::Red, "Invalid invite response packet!");
return; return;
} }
@ -10913,7 +10935,17 @@ void Client::Handle_OP_Petition(const EQApplicationPacket *app)
database.InsertPetitionToDB(pet); database.InsertPetitionToDB(pet);
petition_list.UpdateGMQueue(); petition_list.UpdateGMQueue();
petition_list.UpdateZoneListQueue(); petition_list.UpdateZoneListQueue();
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s has made a petition. #%i", GetName(), pet->GetID()); worldserver.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
fmt::format(
"{} has made a petition. ID: {}",
GetCleanName(),
pet->GetID()
).c_str()
);
} }
return; return;
} }
@ -15300,7 +15332,7 @@ void Client::Handle_OP_YellForHelp(const EQApplicationPacket *app)
void Client::Handle_OP_ResetAA(const EQApplicationPacket *app) void Client::Handle_OP_ResetAA(const EQApplicationPacket *app)
{ {
if (Admin() >= 50) { if (Admin() >= AccountStatus::Guide) {
Message(0, "Resetting AA points."); Message(0, "Resetting AA points.");
ResetAA(); ResetAA();
} }

View File

@ -533,7 +533,7 @@ bool Client::Process() {
OnDisconnect(true); OnDisconnect(true);
LogInfo("Client linkdead: {}", name); LogInfo("Client linkdead: {}", name);
if (Admin() > 100) { if (Admin() > AccountStatus::GMAdmin) {
if (GetMerc()) { if (GetMerc()) {
GetMerc()->Save(); GetMerc()->Save();
GetMerc()->Depop(); GetMerc()->Depop();
@ -1729,7 +1729,7 @@ void Client::OPGMSummon(const EQApplicationPacket *app)
} }
else else
{ {
if(admin < 80) if(admin < AccountStatus::QuestTroupe)
{ {
return; return;
} }

View File

@ -162,310 +162,310 @@ int command_init(void)
commandaliases.clear(); commandaliases.clear();
if ( if (
command_add("acceptrules", "[acceptrules] - Accept the EQEmu Agreement", 0, command_acceptrules) || command_add("acceptrules", "[acceptrules] - Accept the EQEmu Agreement", AccountStatus::Player, command_acceptrules) ||
command_add("advnpcspawn", "[maketype|makegroup|addgroupentry|addgroupspawn][removegroupspawn|movespawn|editgroupbox|cleargroupbox]", 150, command_advnpcspawn) || command_add("advnpcspawn", "[maketype|makegroup|addgroupentry|addgroupspawn][removegroupspawn|movespawn|editgroupbox|cleargroupbox]", AccountStatus::GMLeadAdmin, command_advnpcspawn) ||
command_add("aggro", "(range) [-v] - Display aggro information for all mobs 'range' distance from your target. -v is verbose faction info.", 80, command_aggro) || command_add("aggro", "(range) [-v] - Display aggro information for all mobs 'range' distance from your target. -v is verbose faction info.", AccountStatus::QuestTroupe, command_aggro) ||
command_add("aggrozone", "[aggro] - Aggro every mob in the zone with X aggro. Default is 0. Not recommend if you're not invulnerable.", 100, command_aggrozone) || command_add("aggrozone", "[aggro] - Aggro every mob in the zone with X aggro. Default is 0. Not recommend if you're not invulnerable.", AccountStatus::GMAdmin, command_aggrozone) ||
command_add("ai", "[factionid/spellslist/con/guard/roambox/stop/start] - Modify AI on NPC target", 100, command_ai) || command_add("ai", "[factionid/spellslist/con/guard/roambox/stop/start] - Modify AI on NPC target", AccountStatus::GMAdmin, command_ai) ||
command_add("appearance", "[type] [value] - Send an appearance packet for you or your target", 150, command_appearance) || command_add("appearance", "[type] [value] - Send an appearance packet for you or your target", AccountStatus::GMLeadAdmin, command_appearance) ||
command_add("apply_shared_memory", "[shared_memory_name] - Tells every zone and world to apply a specific shared memory segment by name.", 250, command_apply_shared_memory) || command_add("apply_shared_memory", "[shared_memory_name] - Tells every zone and world to apply a specific shared memory segment by name.", AccountStatus::GMImpossible, command_apply_shared_memory) ||
command_add("attack", "[targetname] - Make your NPC target attack targetname", 150, command_attack) || command_add("attack", "[targetname] - Make your NPC target attack targetname", AccountStatus::GMLeadAdmin, command_attack) ||
command_add("augmentitem", "Force augments an item. Must have the augment item window open.", 250, command_augmentitem) || command_add("augmentitem", "Force augments an item. Must have the augment item window open.", AccountStatus::GMImpossible, command_augmentitem) ||
command_add("ban", "[name] [reason]- Ban by character name", 150, command_ban) || command_add("ban", "[name] [reason]- Ban by character name", AccountStatus::GMLeadAdmin, command_ban) ||
command_add("beard", "- Change the beard of your target", 80, command_beard) || command_add("beard", "- Change the beard of your target", AccountStatus::QuestTroupe, command_beard) ||
command_add("beardcolor", "- Change the beard color of your target", 80, command_beardcolor) || command_add("beardcolor", "- Change the beard color of your target", AccountStatus::QuestTroupe, command_beardcolor) ||
command_add("bestz", "- Ask map for a good Z coord for your x,y coords.", 0, command_bestz) || command_add("bestz", "- Ask map for a good Z coord for your x,y coords.", AccountStatus::Player, command_bestz) ||
command_add("bind", "- Sets your targets bind spot to their current location", 200, command_bind) || command_add("bind", "- Sets your targets bind spot to their current location", AccountStatus::GMMgmt, command_bind) ||
#ifdef BOTS #ifdef BOTS
command_add("bot", "- Type \"#bot help\" or \"^help\" to the see the list of available commands for bots.", 0, command_bot) || command_add("bot", "- Type \"#bot help\" or \"^help\" to the see the list of available commands for bots.", AccountStatus::Player, command_bot) ||
#endif #endif
command_add("camerashake", "Shakes the camera on everyone's screen globally.", 80, command_camerashake) || command_add("camerashake", "Shakes the camera on everyone's screen globally.", AccountStatus::QuestTroupe, command_camerashake) ||
command_add("castspell", "[Spell ID] [Instant (0 = False, 1 = True, Default is 1 if Unused)] - Cast a spell", 50, command_castspell) || command_add("castspell", "[Spell ID] [Instant (0 = False, 1 = True, Default is 1 if Unused)] - Cast a spell", AccountStatus::Guide, command_castspell) ||
command_add("chat", "[channel num] [message] - Send a channel message to all zones", 200, command_chat) || command_add("chat", "[channel num] [message] - Send a channel message to all zones", AccountStatus::GMMgmt, command_chat) ||
command_add("checklos", "- Check for line of sight to your target", 50, command_checklos) || command_add("checklos", "- Check for line of sight to your target", AccountStatus::Guide, command_checklos) ||
command_add("copycharacter", "[source_char_name] [dest_char_name] [dest_account_name] Copies character to destination account", 250, command_copycharacter) || command_add("copycharacter", "[source_char_name] [dest_char_name] [dest_account_name] Copies character to destination account", AccountStatus::GMImpossible, command_copycharacter) ||
command_add("corpse", "- Manipulate corpses, use with no arguments for help", 50, command_corpse) || command_add("corpse", "- Manipulate corpses, use with no arguments for help", AccountStatus::Guide, command_corpse) ||
command_add("corpsefix", "Attempts to bring corpses from underneath the ground within close proximity of the player", 0, command_corpsefix) || command_add("corpsefix", "Attempts to bring corpses from underneath the ground within close proximity of the player", AccountStatus::Player, command_corpsefix) ||
command_add("cvs", "- Summary of client versions currently online.", 200, command_cvs) || command_add("cvs", "- Summary of client versions currently online.", AccountStatus::GMMgmt, command_cvs) ||
command_add("damage", "[amount] - Damage your target", 100, command_damage) || command_add("damage", "[amount] - Damage your target", AccountStatus::GMAdmin, command_damage) ||
command_add("databuckets", "View|Delete [key] [limit]- View data buckets, limit 50 default or Delete databucket by key", 80, command_databuckets) || command_add("databuckets", "View|Delete [key] [limit]- View data buckets, limit 50 default or Delete databucket by key", AccountStatus::QuestTroupe, command_databuckets) ||
command_add("date", "[yyyy] [mm] [dd] [HH] [MM] - Set EQ time", 90, command_date) || command_add("date", "[yyyy] [mm] [dd] [HH] [MM] - Set EQ time", AccountStatus::EQSupport, command_date) ||
command_add("dbspawn2", "[spawngroup] [respawn] [variance] - Spawn an NPC from a predefined row in the spawn2 table", 100, command_dbspawn2) || command_add("dbspawn2", "[spawngroup] [respawn] [variance] - Spawn an NPC from a predefined row in the spawn2 table", AccountStatus::GMAdmin, command_dbspawn2) ||
command_add("delacct", "[accountname] - Delete an account", 150, command_delacct) || command_add("delacct", "[accountname] - Delete an account", AccountStatus::GMLeadAdmin, command_delacct) ||
command_add("deletegraveyard", "[zone name] - Deletes the graveyard for the specified zone.", 200, command_deletegraveyard) || command_add("deletegraveyard", "[zone name] - Deletes the graveyard for the specified zone.", AccountStatus::GMMgmt, command_deletegraveyard) ||
command_add("delpetition", "[petition number] - Delete a petition", 20, command_delpetition) || command_add("delpetition", "[petition number] - Delete a petition", AccountStatus::ApprenticeGuide, command_delpetition) ||
command_add("depop", "- Depop your NPC target", 50, command_depop) || command_add("depop", "- Depop your NPC target", AccountStatus::Guide, command_depop) ||
command_add("depopzone", "- Depop the zone", 100, command_depopzone) || command_add("depopzone", "- Depop the zone", AccountStatus::GMAdmin, command_depopzone) ||
command_add("devtools", "- Manages devtools", 200, command_devtools) || command_add("devtools", "- Manages devtools", AccountStatus::GMMgmt, command_devtools) ||
command_add("details", "- Change the details of your target (Drakkin Only)", 80, command_details) || command_add("details", "- Change the details of your target (Drakkin Only)", AccountStatus::QuestTroupe, command_details) ||
command_add("disablerecipe", "[recipe_id] - Disables a recipe using the recipe id.", 80, command_disablerecipe) || command_add("disablerecipe", "[recipe_id] - Disables a recipe using the recipe id.", AccountStatus::QuestTroupe, command_disablerecipe) ||
command_add("disarmtrap", "Analog for ldon disarm trap for the newer clients since we still don't have it working.", 80, command_disarmtrap) || command_add("disarmtrap", "Analog for ldon disarm trap for the newer clients since we still don't have it working.", AccountStatus::QuestTroupe, command_disarmtrap) ||
command_add("distance", "- Reports the distance between you and your target.", 80, command_distance) || command_add("distance", "- Reports the distance between you and your target.", AccountStatus::QuestTroupe, command_distance) ||
command_add("door", "Door editing command", 80, command_door) || command_add("door", "Door editing command", AccountStatus::QuestTroupe, command_door) ||
command_add("doanim", "[animnum] [type] - Send an EmoteAnim for you or your target", 50, command_doanim) || command_add("doanim", "[animnum] [type] - Send an EmoteAnim for you or your target", AccountStatus::Guide, command_doanim) ||
command_add("dye", "[slot|'help'] [red] [green] [blue] [use_tint] - Dyes the specified armor slot to Red, Green, and Blue provided, allows you to bypass darkness limits.", 20, command_dye) || command_add("dye", "[slot|'help'] [red] [green] [blue] [use_tint] - Dyes the specified armor slot to Red, Green, and Blue provided, allows you to bypass darkness limits.", AccountStatus::ApprenticeGuide, command_dye) ||
command_add("dz", "Manage expeditions and dynamic zone instances", 80, command_dz) || command_add("dz", "Manage expeditions and dynamic zone instances", AccountStatus::QuestTroupe, command_dz) ||
command_add("dzkickplayers", "Removes all players from current expedition. (/kickplayers alternative for pre-RoF clients)", 0, command_dzkickplayers) || command_add("dzkickplayers", "Removes all players from current expedition. (/kickplayers alternative for pre-RoF clients)", AccountStatus::Player, command_dzkickplayers) ||
command_add("editmassrespawn", "[name-search] [second-value] - Mass (Zone wide) NPC respawn timer editing command", 100, command_editmassrespawn) || command_add("editmassrespawn", "[name-search] [second-value] - Mass (Zone wide) NPC respawn timer editing command", AccountStatus::GMAdmin, command_editmassrespawn) ||
command_add("emote", "['name'/'world'/'zone'] [type] [message] - Send an emote message", 80, command_emote) || command_add("emote", "['name'/'world'/'zone'] [type] [message] - Send an emote message", AccountStatus::QuestTroupe, command_emote) ||
command_add("emotesearch", "Searches NPC Emotes", 80, command_emotesearch) || command_add("emotesearch", "Searches NPC Emotes", AccountStatus::QuestTroupe, command_emotesearch) ||
command_add("emoteview", "Lists all NPC Emotes", 80, command_emoteview) || command_add("emoteview", "Lists all NPC Emotes", AccountStatus::QuestTroupe, command_emoteview) ||
command_add("emptyinventory", "- Clears you or your target's entire inventory (Equipment, General, Bank, and Shared Bank)", 250, command_emptyinventory) || command_add("emptyinventory", "- Clears you or your target's entire inventory (Equipment, General, Bank, and Shared Bank)", AccountStatus::GMImpossible, command_emptyinventory) ||
command_add("enablerecipe", "[recipe_id] - Enables a recipe using the recipe id.", 80, command_enablerecipe) || command_add("enablerecipe", "[recipe_id] - Enables a recipe using the recipe id.", AccountStatus::QuestTroupe, command_enablerecipe) ||
command_add("endurance", "Restores you or your target's endurance.", 50, command_endurance) || command_add("endurance", "Restores you or your target's endurance.", AccountStatus::Guide, command_endurance) ||
command_add("equipitem", "[slotid(0-21)] - Equip the item on your cursor into the specified slot", 50, command_equipitem) || command_add("equipitem", "[slotid(0-21)] - Equip the item on your cursor into the specified slot", AccountStatus::Guide, command_equipitem) ||
command_add("face", "- Change the face of your target", 80, command_face) || command_add("face", "- Change the face of your target", AccountStatus::QuestTroupe, command_face) ||
command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", 80, command_faction) || command_add("faction", "[Find (criteria | all ) | Review (criteria | all) | Reset (id)] - Resets Player's Faction", AccountStatus::QuestTroupe, command_faction) ||
command_add("findaliases", "[search criteria]- Searches for available command aliases, by alias or command", 0, command_findaliases) || command_add("findaliases", "[search criteria]- Searches for available command aliases, by alias or command", AccountStatus::Player, command_findaliases) ||
command_add("findclass", "[search criteria] - Search for a class", 50, command_findclass) || command_add("findclass", "[search criteria] - Search for a class", AccountStatus::Guide, command_findclass) ||
command_add("findfaction", "[search criteria] - Search for a faction", 50, command_findfaction) || command_add("findfaction", "[search criteria] - Search for a faction", AccountStatus::Guide, command_findfaction) ||
command_add("findnpctype", "[search criteria] - Search database NPC types", 100, command_findnpctype) || command_add("findnpctype", "[search criteria] - Search database NPC types", AccountStatus::GMAdmin, command_findnpctype) ||
command_add("findrace", "[search criteria] - Search for a race", 50, command_findrace) || command_add("findrace", "[search criteria] - Search for a race", AccountStatus::Guide, command_findrace) ||
command_add("findskill", "[search criteria] - Search for a skill", 50, command_findskill) || command_add("findskill", "[search criteria] - Search for a skill", AccountStatus::Guide, command_findskill) ||
command_add("findspell", "[search criteria] - Search for a spell", 50, command_findspell) || command_add("findspell", "[search criteria] - Search for a spell", AccountStatus::Guide, command_findspell) ||
command_add("findtask", "[search criteria] - Search for a task", 50, command_findtask) || command_add("findtask", "[search criteria] - Search for a task", AccountStatus::Guide, command_findtask) ||
command_add("findzone", "[search criteria] - Search database zones", 100, command_findzone) || command_add("findzone", "[search criteria] - Search database zones", AccountStatus::GMAdmin, command_findzone) ||
command_add("fixmob", "[race|gender|texture|helm|face|hair|haircolor|beard|beardcolor|heritage|tattoo|detail] [next|prev] - Manipulate appearance of your target", 80, command_fixmob) || command_add("fixmob", "[race|gender|texture|helm|face|hair|haircolor|beard|beardcolor|heritage|tattoo|detail] [next|prev] - Manipulate appearance of your target", AccountStatus::QuestTroupe, command_fixmob) ||
command_add("flag", "[status] [acctname] - Refresh your admin status, or set an account's admin status if arguments provided", 0, command_flag) || command_add("flag", "[status] [acctname] - Refresh your admin status, or set an account's admin status if arguments provided", AccountStatus::Player, command_flag) ||
command_add("flagedit", "- Edit zone flags on your target", 100, command_flagedit) || command_add("flagedit", "- Edit zone flags on your target", AccountStatus::GMAdmin, command_flagedit) ||
command_add("flags", "- displays the flags of you or your target", 0, command_flags) || command_add("flags", "- displays the flags of you or your target", AccountStatus::Player, command_flags) ||
command_add("flymode", "[0/1/2/3/4/5] - Set your or your player target's flymode to ground/flying/levitate/water/floating/levitate_running", 50, command_flymode) || command_add("flymode", "[0/1/2/3/4/5] - Set your or your player target's flymode to ground/flying/levitate/water/floating/levitate_running", AccountStatus::Guide, command_flymode) ||
command_add("fov", "- Check wether you're behind or in your target's field of view", 80, command_fov) || command_add("fov", "- Check wether you're behind or in your target's field of view", AccountStatus::QuestTroupe, command_fov) ||
command_add("freeze", "- Freeze your target", 80, command_freeze) || command_add("freeze", "- Freeze your target", AccountStatus::QuestTroupe, command_freeze) ||
command_add("gassign", "[id] - Assign targetted NPC to predefined wandering grid id", 100, command_gassign) || command_add("gassign", "[id] - Assign targetted NPC to predefined wandering grid id", AccountStatus::GMAdmin, command_gassign) ||
command_add("gearup", "Developer tool to quickly equip a character", 200, command_gearup) || command_add("gearup", "Developer tool to quickly equip a character", AccountStatus::GMMgmt, command_gearup) ||
command_add("gender", "[0/1/2] - Change your or your target's gender to male/female/neuter", 50, command_gender) || command_add("gender", "[0/1/2] - Change your or your target's gender to male/female/neuter", AccountStatus::Guide, command_gender) ||
command_add("getplayerburiedcorpsecount", "- Get the target's total number of buried player corpses.", 100, command_getplayerburiedcorpsecount) || command_add("getplayerburiedcorpsecount", "- Get the target's total number of buried player corpses.", AccountStatus::GMAdmin, command_getplayerburiedcorpsecount) ||
command_add("getvariable", "[varname] - Get the value of a variable from the database", 200, command_getvariable) || command_add("getvariable", "[varname] - Get the value of a variable from the database", AccountStatus::GMMgmt, command_getvariable) ||
command_add("ginfo", "- get group info on target.", 20, command_ginfo) || command_add("ginfo", "- get group info on target.", AccountStatus::ApprenticeGuide, command_ginfo) ||
command_add("giveitem", "[itemid] [charges] - Summon an item onto your target's cursor. Charges are optional.", 200, command_giveitem) || command_add("giveitem", "[itemid] [charges] - Summon an item onto your target's cursor. Charges are optional.", AccountStatus::GMMgmt, command_giveitem) ||
command_add("givemoney", "[pp] [gp] [sp] [cp] - Gives specified amount of money to the target player.", 200, command_givemoney) || command_add("givemoney", "[pp] [gp] [sp] [cp] - Gives specified amount of money to the target player.", AccountStatus::GMMgmt, command_givemoney) ||
command_add("globalview", "Lists all qglobals in cache if you were to do a quest with this target.", 80, command_globalview) || command_add("globalview", "Lists all qglobals in cache if you were to do a quest with this target.", AccountStatus::QuestTroupe, command_globalview) ||
command_add("gm", "- Turn player target's or your GM flag on or off", 80, command_gm) || command_add("gm", "- Turn player target's or your GM flag on or off", AccountStatus::QuestTroupe, command_gm) ||
command_add("gmspeed", "[on/off] - Turn GM speed hack on/off for you or your player target", 100, command_gmspeed) || command_add("gmspeed", "[on/off] - Turn GM speed hack on/off for you or your player target", AccountStatus::GMAdmin, command_gmspeed) ||
command_add("gmzone", "[zone_short_name] [zone_version=0] [identifier=gmzone] - Zones to a private GM instance", 100, command_gmzone) || command_add("gmzone", "[zone_short_name] [zone_version=0] [identifier=gmzone] - Zones to a private GM instance", AccountStatus::GMAdmin, command_gmzone) ||
command_add("goto", "[playername] or [x y z] [h] - Teleport to the provided coordinates or to your target", 10, command_goto) || command_add("goto", "[playername] or [x y z] [h] - Teleport to the provided coordinates or to your target", AccountStatus::Steward, command_goto) ||
command_add("grid", "[add/delete] [grid_num] [wandertype] [pausetype] - Create/delete a wandering grid", 170, command_grid) || command_add("grid", "[add/delete] [grid_num] [wandertype] [pausetype] - Create/delete a wandering grid", AccountStatus::GMAreas, command_grid) ||
command_add("guild", "- Guild manipulation commands. Use argument help for more info.", 10, command_guild) || command_add("guild", "- Guild manipulation commands. Use argument help for more info.", AccountStatus::Steward, command_guild) ||
command_add("guildapprove", "[guildapproveid] - Approve a guild with specified ID (guild creator receives the id)", 0, command_guildapprove) || command_add("guildapprove", "[guildapproveid] - Approve a guild with specified ID (guild creator receives the id)", AccountStatus::Player, command_guildapprove) ||
command_add("guildcreate", "[guildname] - Creates an approval setup for guild name specified", 0, command_guildcreate) || command_add("guildcreate", "[guildname] - Creates an approval setup for guild name specified", AccountStatus::Player, command_guildcreate) ||
command_add("guildlist", "[guildapproveid] - Lists character names who have approved the guild specified by the approve id", 0, command_guildlist) || command_add("guildlist", "[guildapproveid] - Lists character names who have approved the guild specified by the approve id", AccountStatus::Player, command_guildlist) ||
command_add("hair", "- Change the hair style of your target", 80, command_hair) || command_add("hair", "- Change the hair style of your target", AccountStatus::QuestTroupe, command_hair) ||
command_add("haircolor", "- Change the hair color of your target", 80, command_haircolor) || command_add("haircolor", "- Change the hair color of your target", AccountStatus::QuestTroupe, command_haircolor) ||
command_add("haste", "[percentage] - Set your haste percentage", 100, command_haste) || command_add("haste", "[percentage] - Set your haste percentage", AccountStatus::GMAdmin, command_haste) ||
command_add("hatelist", " - Display hate list for target.", 80, command_hatelist) || command_add("hatelist", " - Display hate list for target.", AccountStatus::QuestTroupe, command_hatelist) ||
command_add("heal", "- Completely heal your target", 10, command_heal) || command_add("heal", "- Completely heal your target", AccountStatus::Steward, command_heal) ||
command_add("helm", "- Change the helm of your target", 80, command_helm) || command_add("helm", "- Change the helm of your target", AccountStatus::QuestTroupe, command_helm) ||
command_add("help", "[search term] - List available commands and their description, specify partial command as argument to search", 0, command_help) || command_add("help", "[search term] - List available commands and their description, specify partial command as argument to search", AccountStatus::Player, command_help) ||
command_add("heritage", "- Change the heritage of your target (Drakkin Only)", 80, command_heritage) || command_add("heritage", "- Change the heritage of your target (Drakkin Only)", AccountStatus::QuestTroupe, command_heritage) ||
command_add("heromodel", "[hero model] [slot] - Full set of Hero's Forge Armor appearance. If slot is set, sends exact model just to slot.", 200, command_heromodel) || command_add("heromodel", "[hero model] [slot] - Full set of Hero's Forge Armor appearance. If slot is set, sends exact model just to slot.", AccountStatus::GMMgmt, command_heromodel) ||
command_add("hideme", "[on/off] - Hide yourself from spawn lists.", 80, command_hideme) || command_add("hideme", "[on/off] - Hide yourself from spawn lists.", AccountStatus::QuestTroupe, command_hideme) ||
command_add("hotfix", "[hotfix_name] - Reloads shared memory into a hotfix, equiv to load_shared_memory followed by apply_shared_memory", 250, command_hotfix) || command_add("hotfix", "[hotfix_name] - Reloads shared memory into a hotfix, equiv to load_shared_memory followed by apply_shared_memory", AccountStatus::GMImpossible, command_hotfix) ||
command_add("hp", "- Refresh your HP bar from the server.", 0, command_hp) || command_add("hp", "- Refresh your HP bar from the server.", AccountStatus::Player, command_hp) ||
command_add("incstat", "- Increases or Decreases a client's stats permanently.", 200, command_incstat) || command_add("incstat", "- Increases or Decreases a client's stats permanently.", AccountStatus::GMMgmt, command_incstat) ||
command_add("instance", "- Modify Instances", 200, command_instance) || command_add("instance", "- Modify Instances", AccountStatus::GMMgmt, command_instance) ||
command_add("interrogateinv", "- use [help] argument for available options", 0, command_interrogateinv) || command_add("interrogateinv", "- use [help] argument for available options", AccountStatus::Player, command_interrogateinv) ||
command_add("interrupt", "[message id] [color] - Interrupt your casting. Arguments are optional.", 50, command_interrupt) || command_add("interrupt", "[message id] [color] - Interrupt your casting. Arguments are optional.", AccountStatus::Guide, command_interrupt) ||
command_add("invsnapshot", "- Manipulates inventory snapshots for your current target", 80, command_invsnapshot) || command_add("invsnapshot", "- Manipulates inventory snapshots for your current target", AccountStatus::QuestTroupe, command_invsnapshot) ||
command_add("invul", "[on/off] - Turn player target's or your invulnerable flag on or off", 80, command_invul) || command_add("invul", "[on/off] - Turn player target's or your invulnerable flag on or off", AccountStatus::QuestTroupe, command_invul) ||
command_add("ipban", "[IP address] - Ban IP by character name", 200, command_ipban) || command_add("ipban", "[IP address] - Ban IP by character name", AccountStatus::GMMgmt, command_ipban) ||
command_add("iplookup", "[charname] - Look up IP address of charname", 200, command_iplookup) || command_add("iplookup", "[charname] - Look up IP address of charname", AccountStatus::GMMgmt, command_iplookup) ||
command_add("iteminfo", "- Get information about the item on your cursor", 10, command_iteminfo) || command_add("iteminfo", "- Get information about the item on your cursor", AccountStatus::Steward, command_iteminfo) ||
command_add("itemsearch", "[search criteria] - Search for an item", 10, command_itemsearch) || command_add("itemsearch", "[search criteria] - Search for an item", AccountStatus::Steward, command_itemsearch) ||
command_add("kick", "[charname] - Disconnect charname", 150, command_kick) || command_add("kick", "[charname] - Disconnect charname", AccountStatus::GMLeadAdmin, command_kick) ||
command_add("kill", "- Kill your target", 100, command_kill) || command_add("kill", "- Kill your target", AccountStatus::GMAdmin, command_kill) ||
command_add("killallnpcs", " [npc_name] Kills all npcs by search name, leave blank for all attackable NPC's", 200, command_killallnpcs) || command_add("killallnpcs", " [npc_name] Kills all npcs by search name, leave blank for all attackable NPC's", AccountStatus::GMMgmt, command_killallnpcs) ||
command_add("lastname", "[new lastname] - Set your or your player target's lastname", 50, command_lastname) || command_add("lastname", "[new lastname] - Set your or your player target's lastname", AccountStatus::Guide, command_lastname) ||
command_add("level", "[level] - Set your or your target's level", 10, command_level) || command_add("level", "[level] - Set your or your target's level", AccountStatus::Steward, command_level) ||
command_add("list", "[npcs|players|corpses|doors|objects] [search] - Search entities", 20, command_list) || command_add("list", "[npcs|players|corpses|doors|objects] [search] - Search entities", AccountStatus::ApprenticeGuide, command_list) ||
command_add("listpetition", "- List petitions", 50, command_listpetition) || command_add("listpetition", "- List petitions", AccountStatus::Guide, command_listpetition) ||
command_add("load_shared_memory", "[shared_memory_name] - Reloads shared memory and uses the input as output", 250, command_load_shared_memory) || command_add("load_shared_memory", "[shared_memory_name] - Reloads shared memory and uses the input as output", AccountStatus::GMImpossible, command_load_shared_memory) ||
command_add("loc", "- Print out your or your target's current location and heading", 0, command_loc) || command_add("loc", "- Print out your or your target's current location and heading", AccountStatus::Player, command_loc) ||
command_add("lock", "- Lock the worldserver", 150, command_lock) || command_add("lock", "- Lock the worldserver", AccountStatus::GMLeadAdmin, command_lock) ||
command_add("logs", "Manage anything to do with logs", 250, command_logs) || command_add("logs", "Manage anything to do with logs", AccountStatus::GMImpossible, command_logs) ||
command_add("makepet", "[level] [class] [race] [texture] - Make a pet", 50, command_makepet) || command_add("makepet", "[level] [class] [race] [texture] - Make a pet", AccountStatus::Guide, command_makepet) ||
command_add("mana", "- Fill your or your target's mana", 50, command_mana) || command_add("mana", "- Fill your or your target's mana", AccountStatus::Guide, command_mana) ||
command_add("maxskills", "Maxes skills for you.", 200, command_max_all_skills) || command_add("maxskills", "Maxes skills for you.", AccountStatus::GMMgmt, command_max_all_skills) ||
command_add("memspell", "[slotid] [spellid] - Memorize spellid in the specified slot", 50, command_memspell) || command_add("memspell", "[slotid] [spellid] - Memorize spellid in the specified slot", AccountStatus::Guide, command_memspell) ||
command_add("merchant_close_shop", "Closes a merchant shop", 100, command_merchantcloseshop) || command_add("merchant_close_shop", "Closes a merchant shop", AccountStatus::GMAdmin, command_merchantcloseshop) ||
command_add("merchant_open_shop", "Opens a merchants shop", 100, command_merchantopenshop) || command_add("merchant_open_shop", "Opens a merchants shop", AccountStatus::GMAdmin, command_merchantopenshop) ||
command_add("modifynpcstat", "- Modifys a NPC's stats", 150, command_modifynpcstat) || command_add("modifynpcstat", "- Modifys a NPC's stats", AccountStatus::GMLeadAdmin, command_modifynpcstat) ||
command_add("motd", "[new motd] - Set message of the day", 150, command_motd) || command_add("motd", "[new motd] - Set message of the day", AccountStatus::GMLeadAdmin, command_motd) ||
command_add("movechar", "[charname] [zonename] - Move charname to zonename", 50, command_movechar) || command_add("movechar", "[charname] [zonename] - Move charname to zonename", AccountStatus::Guide, command_movechar) ||
command_add("movement", "Various movement commands", 200, command_movement) || command_add("movement", "Various movement commands", AccountStatus::GMMgmt, command_movement) ||
command_add("myskills", "- Show details about your current skill levels", 0, command_myskills) || command_add("myskills", "- Show details about your current skill levels", AccountStatus::Player, command_myskills) ||
command_add("mysql", "Mysql CLI, see 'help' for options.", 250, command_mysql) || command_add("mysql", "Mysql CLI, see 'help' for options.", AccountStatus::GMImpossible, command_mysql) ||
command_add("mystats", "- Show details about you or your pet", 50, command_mystats) || command_add("mystats", "- Show details about you or your pet", AccountStatus::Guide, command_mystats) ||
command_add("name", "[newname] - Rename your player target", 150, command_name) || command_add("name", "[newname] - Rename your player target", AccountStatus::GMLeadAdmin, command_name) ||
command_add("netstats", "- Gets the network stats for a stream.", 200, command_netstats) || command_add("netstats", "- Gets the network stats for a stream.", AccountStatus::GMMgmt, command_netstats) ||
command_add("network", "- Admin commands for the udp network interface.", 250, command_network) || command_add("network", "- Admin commands for the udp network interface.", AccountStatus::GMImpossible, command_network) ||
command_add("npccast", "[targetname/entityid] [spellid] - Causes NPC target to cast spellid on targetname/entityid", 80, command_npccast) || command_add("npccast", "[targetname/entityid] [spellid] - Causes NPC target to cast spellid on targetname/entityid", AccountStatus::QuestTroupe, command_npccast) ||
command_add("npcedit", "[column] [value] - Mega NPC editing command", 100, command_npcedit) || command_add("npcedit", "[column] [value] - Mega NPC editing command", AccountStatus::GMAdmin, command_npcedit) ||
command_add("npceditmass", "[name-search] [column] [value] - Mass (Zone wide) NPC data editing command", 100, command_npceditmass) || command_add("npceditmass", "[name-search] [column] [value] - Mass (Zone wide) NPC data editing command", AccountStatus::GMAdmin, command_npceditmass) ||
command_add("npcemote", "[message] - Make your NPC target emote a message.", 150, command_npcemote) || command_add("npcemote", "[message] - Make your NPC target emote a message.", AccountStatus::GMLeadAdmin, command_npcemote) ||
command_add("npcloot", "[show/money/add/remove] [itemid/all/money: pp gp sp cp] - Manipulate the loot an NPC is carrying", 80, command_npcloot) || command_add("npcloot", "[show/money/add/remove] [itemid/all/money: pp gp sp cp] - Manipulate the loot an NPC is carrying", AccountStatus::QuestTroupe, command_npcloot) ||
command_add("npcsay", "[message] - Make your NPC target say a message.", 150, command_npcsay) || command_add("npcsay", "[message] - Make your NPC target say a message.", AccountStatus::GMLeadAdmin, command_npcsay) ||
command_add("npcshout", "[message] - Make your NPC target shout a message.", 150, command_npcshout) || command_add("npcshout", "[message] - Make your NPC target shout a message.", AccountStatus::GMLeadAdmin, command_npcshout) ||
command_add("npcspawn", "[create/add/update/remove/delete] - Manipulate spawn DB", 170, command_npcspawn) || command_add("npcspawn", "[create/add/update/remove/delete] - Manipulate spawn DB", AccountStatus::GMAreas, command_npcspawn) ||
command_add("npcspecialattk", "[flagchar] [perm] - Set NPC special attack flags. Flags are E(nrage) F(lurry) R(ampage) S(ummon).", 80, command_npcspecialattk) || command_add("npcspecialattk", "[flagchar] [perm] - Set NPC special attack flags. Flags are E(nrage) F(lurry) R(ampage) S(ummon).", AccountStatus::QuestTroupe, command_npcspecialattk) ||
command_add("npcstats", "- Show stats about target NPC", 80, command_npcstats) || command_add("npcstats", "- Show stats about target NPC", AccountStatus::QuestTroupe, command_npcstats) ||
command_add("npctype_cache", "[id] or all - Clears the npc type cache for either the id or all npcs.", 250, command_npctype_cache) || command_add("npctype_cache", "[id] or all - Clears the npc type cache for either the id or all npcs.", AccountStatus::GMImpossible, command_npctype_cache) ||
command_add("npctypespawn", "[npctypeid] [factionid] - Spawn an NPC from the db", 10, command_npctypespawn) || command_add("npctypespawn", "[npctypeid] [factionid] - Spawn an NPC from the db", AccountStatus::Steward, command_npctypespawn) ||
command_add("nudge", "- Nudge your target's current position by specific values", 80, command_nudge) || command_add("nudge", "- Nudge your target's current position by specific values", AccountStatus::QuestTroupe, command_nudge) ||
command_add("nukebuffs", "- Strip all buffs on you or your target", 50, command_nukebuffs) || command_add("nukebuffs", "- Strip all buffs on you or your target", AccountStatus::Guide, command_nukebuffs) ||
command_add("nukeitem", "[itemid] - Remove itemid from your player target's inventory", 150, command_nukeitem) || command_add("nukeitem", "[itemid] - Remove itemid from your player target's inventory", AccountStatus::GMLeadAdmin, command_nukeitem) ||
command_add("object", "List|Add|Edit|Move|Rotate|Copy|Save|Undo|Delete - Manipulate static and tradeskill objects within the zone", 100, command_object) || command_add("object", "List|Add|Edit|Move|Rotate|Copy|Save|Undo|Delete - Manipulate static and tradeskill objects within the zone", AccountStatus::GMAdmin, command_object) ||
command_add("oocmute", "[1/0] - Mutes OOC chat", 200, command_oocmute) || command_add("oocmute", "[1/0] - Mutes OOC chat", AccountStatus::GMMgmt, command_oocmute) ||
command_add("opcode", "- opcode management", 250, command_opcode) || command_add("opcode", "- opcode management", AccountStatus::GMImpossible, command_opcode) ||
#ifdef PACKET_PROFILER #ifdef PACKET_PROFILER
command_add("packetprofile", "- Dump packet profile for target or self.", 250, command_packetprofile) || command_add("packetprofile", "- Dump packet profile for target or self.", AccountStatus::GMImpossible, command_packetprofile) ||
#endif #endif
command_add("path", "- view and edit pathing", 200, command_path) || command_add("path", "- view and edit pathing", AccountStatus::GMMgmt, command_path) ||
command_add("peekinv", "[equip/gen/cursor/poss/limbo/curlim/trib/bank/shbank/allbank/trade/world/all] - Print out contents of your player target's inventory", 100, command_peekinv) || command_add("peekinv", "[equip/gen/cursor/poss/limbo/curlim/trib/bank/shbank/allbank/trade/world/all] - Print out contents of your player target's inventory", AccountStatus::GMAdmin, command_peekinv) ||
command_add("peqzone", "[zonename] - Go to specified zone, if you have > 75% health", 0, command_peqzone) || command_add("peqzone", "[zonename] - Go to specified zone, if you have > 75% health", AccountStatus::Player, command_peqzone) ||
command_add("permaclass", "[classnum] - Change your or your player target's class (target is disconnected)", 80, command_permaclass) || command_add("permaclass", "[classnum] - Change your or your player target's class (target is disconnected)", AccountStatus::QuestTroupe, command_permaclass) ||
command_add("permagender", "[gendernum] - Change your or your player target's gender (zone to take effect)", 80, command_permagender) || command_add("permagender", "[gendernum] - Change your or your player target's gender (zone to take effect)", AccountStatus::QuestTroupe, command_permagender) ||
command_add("permarace", "[racenum] - Change your or your player target's race (zone to take effect)", 80, command_permarace) || command_add("permarace", "[racenum] - Change your or your player target's race (zone to take effect)", AccountStatus::QuestTroupe, command_permarace) ||
command_add("petitioninfo", "[petition number] - Get info about a petition", 20, command_petitioninfo) || command_add("petitioninfo", "[petition number] - Get info about a petition", AccountStatus::ApprenticeGuide, command_petitioninfo) ||
command_add("pf", "- Display additional mob coordinate and wandering data", 0, command_pf) || command_add("pf", "- Display additional mob coordinate and wandering data", AccountStatus::Player, command_pf) ||
command_add("picklock", "Analog for ldon pick lock for the newer clients since we still don't have it working.", 0, command_picklock) || command_add("picklock", "Analog for ldon pick lock for the newer clients since we still don't have it working.", AccountStatus::Player, command_picklock) ||
command_add("profanity", "Manage censored language.", 150, command_profanity) || command_add("profanity", "Manage censored language.", AccountStatus::GMLeadAdmin, command_profanity) ||
#ifdef EQPROFILE #ifdef EQPROFILE
command_add("profiledump", "- Dump profiling info to logs", 250, command_profiledump) || command_add("profiledump", "- Dump profiling info to logs", AccountStatus::GMImpossible, command_profiledump) ||
command_add("profilereset", "- Reset profiling info", 250, command_profilereset) || command_add("profilereset", "- Reset profiling info", AccountStatus::GMImpossible, command_profilereset) ||
#endif #endif
command_add("push", "Lets you do spell push", 150, command_push) || command_add("push", "Lets you do spell push", AccountStatus::GMLeadAdmin, command_push) ||
command_add("proximity", "Shows NPC proximity", 150, command_proximity) || command_add("proximity", "Shows NPC proximity", AccountStatus::GMLeadAdmin, command_proximity) ||
command_add("pvp", "[on/off] - Set your or your player target's PVP status", 100, command_pvp) || command_add("pvp", "[on/off] - Set your or your player target's PVP status", AccountStatus::GMAdmin, command_pvp) ||
command_add("qglobal", "[on/off/view] - Toggles qglobal functionality on an NPC", 100, command_qglobal) || command_add("qglobal", "[on/off/view] - Toggles qglobal functionality on an NPC", AccountStatus::GMAdmin, command_qglobal) ||
command_add("questerrors", "Shows quest errors.", 100, command_questerrors) || command_add("questerrors", "Shows quest errors.", AccountStatus::GMAdmin, command_questerrors) ||
command_add("race", "[racenum] - Change your or your target's race. Use racenum 0 to return to normal", 50, command_race) || command_add("race", "[racenum] - Change your or your target's race. Use racenum 0 to return to normal", AccountStatus::Guide, command_race) ||
command_add("raidloot", "[All|GroupLeader|RaidLeader|Selected] - Sets your Raid Loot Type if you have permission to do so.", 0, command_raidloot) || command_add("raidloot", "[All|GroupLeader|RaidLeader|Selected] - Sets your Raid Loot Type if you have permission to do so.", AccountStatus::Player, command_raidloot) ||
command_add("randomfeatures", "- Temporarily randomizes the Facial Features of your target", 80, command_randomfeatures) || command_add("randomfeatures", "- Temporarily randomizes the Facial Features of your target", AccountStatus::QuestTroupe, command_randomfeatures) ||
command_add("refreshgroup", "- Refreshes Group.", 0, command_refreshgroup) || command_add("refreshgroup", "- Refreshes Group.", AccountStatus::Player, command_refreshgroup) ||
command_add("reloadaa", "Reloads AA data", 200, command_reloadaa) || command_add("reloadaa", "Reloads AA data", AccountStatus::GMMgmt, command_reloadaa) ||
command_add("reloadallrules", "Executes a reload of all rules.", 80, command_reloadallrules) || command_add("reloadallrules", "Executes a reload of all rules.", AccountStatus::QuestTroupe, command_reloadallrules) ||
command_add("reloademote", "Reloads NPC Emotes", 80, command_reloademote) || command_add("reloademote", "Reloads NPC Emotes", AccountStatus::QuestTroupe, command_reloademote) ||
command_add("reloadlevelmods", nullptr, 255, command_reloadlevelmods) || command_add("reloadlevelmods", nullptr, AccountStatus::Max, command_reloadlevelmods) ||
command_add("reloadmerchants", nullptr, 255, command_reloadmerchants) || command_add("reloadmerchants", nullptr, AccountStatus::Max, command_reloadmerchants) ||
command_add("reloadperlexportsettings", nullptr, 255, command_reloadperlexportsettings) || command_add("reloadperlexportsettings", nullptr, AccountStatus::Max, command_reloadperlexportsettings) ||
command_add("reloadqst", " - Clear quest cache (any argument causes it to also stop all timers)", 150, command_reloadqst) || command_add("reloadqst", " - Clear quest cache (any argument causes it to also stop all timers)", AccountStatus::GMLeadAdmin, command_reloadqst) ||
command_add("reloadrulesworld", "Executes a reload of all rules in world specifically.", 80, command_reloadworldrules) || command_add("reloadrulesworld", "Executes a reload of all rules in world specifically.", AccountStatus::QuestTroupe, command_reloadworldrules) ||
command_add("reloadstatic", "- Reload Static Zone Data", 150, command_reloadstatic) || command_add("reloadstatic", "- Reload Static Zone Data", AccountStatus::GMLeadAdmin, command_reloadstatic) ||
command_add("reloadtraps", "- Repops all traps in the current zone.", 80, command_reloadtraps) || command_add("reloadtraps", "- Repops all traps in the current zone.", AccountStatus::QuestTroupe, command_reloadtraps) ||
command_add("reloadtitles", "- Reload player titles from the database", 150, command_reloadtitles) || command_add("reloadtitles", "- Reload player titles from the database", AccountStatus::GMLeadAdmin, command_reloadtitles) ||
command_add("reloadworld", "[0|1] - Clear quest cache (0 - no repop, 1 - repop)", 255, command_reloadworld) || command_add("reloadworld", "[0|1] - Clear quest cache (0 - no repop, 1 - repop)", AccountStatus::Max, command_reloadworld) ||
command_add("reloadzps", "- Reload zone points from database", 150, command_reloadzps) || command_add("reloadzps", "- Reload zone points from database", AccountStatus::GMLeadAdmin, command_reloadzps) ||
command_add("repop", "[delay] - Repop the zone with optional delay", 100, command_repop) || command_add("repop", "[delay] - Repop the zone with optional delay", AccountStatus::GMAdmin, command_repop) ||
command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, may disconnect player.", 200, command_resetaa) || command_add("resetaa", "- Resets a Player's AA in their profile and refunds spent AA's to unspent, may disconnect player.", AccountStatus::GMMgmt, command_resetaa) ||
command_add("resetaa_timer", "Command to reset AA cooldown timers.", 200, command_resetaa_timer) || command_add("resetaa_timer", "Command to reset AA cooldown timers.", AccountStatus::GMMgmt, command_resetaa_timer) ||
command_add("resetdisc_timer", "Command to reset all discipline cooldown timers.", 200, command_resetdisc_timer) || command_add("resetdisc_timer", "Command to reset all discipline cooldown timers.", AccountStatus::GMMgmt, command_resetdisc_timer) ||
command_add("revoke", "[charname] [1/0] - Makes charname unable to talk on OOC", 200, command_revoke) || command_add("revoke", "[charname] [1/0] - Makes charname unable to talk on OOC", AccountStatus::GMMgmt, command_revoke) ||
command_add("roambox", "Manages roambox settings for an NPC", 200, command_roambox) || command_add("roambox", "Manages roambox settings for an NPC", AccountStatus::GMMgmt, command_roambox) ||
command_add("rules", "(subcommand) - Manage server rules", 250, command_rules) || command_add("rules", "(subcommand) - Manage server rules", AccountStatus::GMImpossible, command_rules) ||
command_add("save", "- Force your player or player corpse target to be saved to the database", 50, command_save) || command_add("save", "- Force your player or player corpse target to be saved to the database", AccountStatus::Guide, command_save) ||
command_add("scale", "- Handles npc scaling", 150, command_scale) || command_add("scale", "- Handles npc scaling", AccountStatus::GMLeadAdmin, command_scale) ||
command_add("scribespell", "[spellid] - Scribe specified spell in your target's spell book.", 180, command_scribespell) || command_add("scribespell", "[spellid] - Scribe specified spell in your target's spell book.", AccountStatus::GMCoder, command_scribespell) ||
command_add("scribespells", "[max level] [min level] - Scribe all spells for you or your player target that are usable by them, up to level specified. (may freeze client for a few seconds)", 150, command_scribespells) || command_add("scribespells", "[max level] [min level] - Scribe all spells for you or your player target that are usable by them, up to level specified. (may freeze client for a few seconds)", AccountStatus::GMLeadAdmin, command_scribespells) ||
command_add("sendzonespawns", "- Refresh spawn list for all clients in zone", 150, command_sendzonespawns) || command_add("sendzonespawns", "- Refresh spawn list for all clients in zone", AccountStatus::GMLeadAdmin, command_sendzonespawns) ||
command_add("sensetrap", "Analog for ldon sense trap for the newer clients since we still don't have it working.", 0, command_sensetrap) || command_add("sensetrap", "Analog for ldon sense trap for the newer clients since we still don't have it working.", AccountStatus::Player, command_sensetrap) ||
command_add("serverinfo", "- Get OS info about server host", 200, command_serverinfo) || command_add("serverinfo", "- Get OS info about server host", AccountStatus::GMMgmt, command_serverinfo) ||
command_add("serverrules", "- Read this server's rules", 0, command_serverrules) || command_add("serverrules", "- Read this server's rules", AccountStatus::Player, command_serverrules) ||
command_add("setaapts", "[AA|Group|Raid] [AA Amount] - Set your or your player target's Available AA Points by Type", 100, command_setaapts) || command_add("setaapts", "[AA|Group|Raid] [AA Amount] - Set your or your player target's Available AA Points by Type", AccountStatus::GMAdmin, command_setaapts) ||
command_add("setaaxp", "[AA|Group|Raid] [AA Experience] - Set your or your player target's AA Experience by Type", 100, command_setaaxp) || command_add("setaaxp", "[AA|Group|Raid] [AA Experience] - Set your or your player target's AA Experience by Type", AccountStatus::GMAdmin, command_setaaxp) ||
command_add("setadventurepoints", "- Set your or your player target's available adventure points", 150, command_set_adventure_points) || command_add("setadventurepoints", "- Set your or your player target's available adventure points", AccountStatus::GMLeadAdmin, command_set_adventure_points) ||
command_add("setanim", "[animnum] - Set target's appearance to animnum", 200, command_setanim) || command_add("setanim", "[animnum] - Set target's appearance to animnum", AccountStatus::GMMgmt, command_setanim) ||
command_add("setcrystals", "[value] - Set your or your player target's available radiant or ebon crystals", 100, command_setcrystals) || command_add("setcrystals", "[value] - Set your or your player target's available radiant or ebon crystals", AccountStatus::GMAdmin, command_setcrystals) ||
command_add("setfaction", "[faction number] - Sets targeted NPC's faction in the database", 170, command_setfaction) || command_add("setfaction", "[faction number] - Sets targeted NPC's faction in the database", AccountStatus::GMAreas, command_setfaction) ||
command_add("setgraveyard", "[zone name] - Creates a graveyard for the specified zone based on your target's LOC.", 200, command_setgraveyard) || command_add("setgraveyard", "[zone name] - Creates a graveyard for the specified zone based on your target's LOC.", AccountStatus::GMMgmt, command_setgraveyard) ||
command_add("setlanguage", "[language ID] [value] - Set your target's language skillnum to value", 50, command_setlanguage) || command_add("setlanguage", "[language ID] [value] - Set your target's language skillnum to value", AccountStatus::Guide, command_setlanguage) ||
command_add("setlsinfo", "[email] [password] - Set login server email address and password (if supported by login server)", 10, command_setlsinfo) || command_add("setlsinfo", "[email] [password] - Set login server email address and password (if supported by login server)", AccountStatus::Steward, command_setlsinfo) ||
command_add("setpass", "[accountname] [password] - Set local password for accountname", 150, command_setpass) || command_add("setpass", "[accountname] [password] - Set local password for accountname", AccountStatus::GMLeadAdmin, command_setpass) ||
command_add("setpvppoints", "[Amount] - Set your or your player target's PVP points", 100, command_setpvppoints) || command_add("setpvppoints", "[Amount] - Set your or your player target's PVP points", AccountStatus::GMAdmin, command_setpvppoints) ||
command_add("setskill", "[skillnum] [value] - Set your target's skill skillnum to value", 50, command_setskill) || command_add("setskill", "[skillnum] [value] - Set your target's skill skillnum to value", AccountStatus::Guide, command_setskill) ||
command_add("setskillall", "[value] - Set all of your target's skills to value", 50, command_setskillall) || command_add("setskillall", "[value] - Set all of your target's skills to value", AccountStatus::Guide, command_setskillall) ||
command_add("setstartzone", "[zoneid] - Set target's starting zone. Set to zero to allow the player to use /setstartcity", 80, command_setstartzone) || command_add("setstartzone", "[zoneid] - Set target's starting zone. Set to zero to allow the player to use /setstartcity", AccountStatus::QuestTroupe, command_setstartzone) ||
command_add("setstat", "- Sets the stats to a specific value.", 255, command_setstat) || command_add("setstat", "- Sets the stats to a specific value.", AccountStatus::Max, command_setstat) ||
command_add("setxp", "[value] - Set your or your player target's experience", 100, command_setxp) || command_add("setxp", "[value] - Set your or your player target's experience", AccountStatus::GMAdmin, command_setxp) ||
command_add("showbonusstats", "[item|spell|all] Shows bonus stats for target from items or spells. Shows both by default.", 50, command_showbonusstats) || command_add("showbonusstats", "[item|spell|all] Shows bonus stats for target from items or spells. Shows both by default.", AccountStatus::Guide, command_showbonusstats) ||
command_add("showbuffs", "- List buffs active on your target or you if no target", 50, command_showbuffs) || command_add("showbuffs", "- List buffs active on your target or you if no target", AccountStatus::Guide, command_showbuffs) ||
command_add("shownumhits", "Shows buffs numhits for yourself.", 0, command_shownumhits) || command_add("shownumhits", "Shows buffs numhits for yourself.", AccountStatus::Player, command_shownumhits) ||
command_add("shownpcgloballoot", "Show GlobalLoot entires on this npc", 50, command_shownpcgloballoot) || command_add("shownpcgloballoot", "Show GlobalLoot entires on this npc", AccountStatus::Guide, command_shownpcgloballoot) ||
command_add("showskills", "- Show the values of your or your player target's skills", 50, command_showskills) || command_add("showskills", "- Show the values of your or your player target's skills", AccountStatus::Guide, command_showskills) ||
command_add("showspellslist", "Shows spell list of targeted NPC", 100, command_showspellslist) || command_add("showspellslist", "Shows spell list of targeted NPC", AccountStatus::GMAdmin, command_showspellslist) ||
command_add("showstats", "- Show details about you or your target", 50, command_showstats) || command_add("showstats", "- Show details about you or your target", AccountStatus::Guide, command_showstats) ||
command_add("showzonegloballoot", "Show GlobalLoot entires on this zone", 50, command_showzonegloballoot) || command_add("showzonegloballoot", "Show GlobalLoot entires on this zone", AccountStatus::Guide, command_showzonegloballoot) ||
command_add("showzonepoints", "Show zone points for current zone", 50, command_showzonepoints) || command_add("showzonepoints", "Show zone points for current zone", AccountStatus::Guide, command_showzonepoints) ||
command_add("shutdown", "- Shut this zone process down", 150, command_shutdown) || command_add("shutdown", "- Shut this zone process down", AccountStatus::GMLeadAdmin, command_shutdown) ||
command_add("size", "[size] - Change size of you or your target", 50, command_size) || command_add("size", "[size] - Change size of you or your target", AccountStatus::Guide, command_size) ||
command_add("spawn", "[name] [race] [level] [material] [hp] [gender] [class] [priweapon] [secweapon] [merchantid] - Spawn an NPC", 10, command_spawn) || command_add("spawn", "[name] [race] [level] [material] [hp] [gender] [class] [priweapon] [secweapon] [merchantid] - Spawn an NPC", AccountStatus::Steward, command_spawn) ||
command_add("spawneditmass", "Mass editing spawn command", 150, command_spawneditmass) || command_add("spawneditmass", "Mass editing spawn command", AccountStatus::GMLeadAdmin, command_spawneditmass) ||
command_add("spawnfix", "- Find targeted NPC in database based on its X/Y/heading and update the database to make it spawn at your current location/heading.", 170, command_spawnfix) || command_add("spawnfix", "- Find targeted NPC in database based on its X/Y/heading and update the database to make it spawn at your current location/heading.", AccountStatus::GMAreas, command_spawnfix) ||
command_add("spawnstatus", "- Show respawn timer status", 100, command_spawnstatus) || command_add("spawnstatus", "- Show respawn timer status", AccountStatus::GMAdmin, command_spawnstatus) ||
command_add("spellinfo", "[spellid] - Get detailed info about a spell", 10, command_spellinfo) || command_add("spellinfo", "[spellid] - Get detailed info about a spell", AccountStatus::Steward, command_spellinfo) ||
command_add("stun", "[duration] - Stuns you or your target for duration", 100, command_stun) || command_add("stun", "[duration] - Stuns you or your target for duration", AccountStatus::GMAdmin, command_stun) ||
command_add("summon", "[charname] - Summons your player/npc/corpse target, or charname if specified", 80, command_summon) || command_add("summon", "[charname] - Summons your player/npc/corpse target, or charname if specified", AccountStatus::QuestTroupe, command_summon) ||
command_add("summonburiedplayercorpse", "- Summons the target's oldest buried corpse, if any exist.", 100, command_summonburiedplayercorpse) || command_add("summonburiedplayercorpse", "- Summons the target's oldest buried corpse, if any exist.", AccountStatus::GMAdmin, command_summonburiedplayercorpse) ||
command_add("summonitem", "[itemid] [charges] - Summon an item onto your cursor. Charges are optional.", 200, command_summonitem) || command_add("summonitem", "[itemid] [charges] - Summon an item onto your cursor. Charges are optional.", AccountStatus::GMMgmt, command_summonitem) ||
command_add("suspend", "[name] [days] [reason] - Suspend by character name and for specificed number of days", 150, command_suspend) || command_add("suspend", "[name] [days] [reason] - Suspend by character name and for specificed number of days", AccountStatus::GMLeadAdmin, command_suspend) ||
command_add("task", "(subcommand) - Task system commands", 150, command_task) || command_add("task", "(subcommand) - Task system commands", AccountStatus::GMLeadAdmin, command_task) ||
command_add("tattoo", "- Change the tattoo of your target (Drakkin Only)", 80, command_tattoo) || command_add("tattoo", "- Change the tattoo of your target (Drakkin Only)", AccountStatus::QuestTroupe, command_tattoo) ||
command_add("tempname", "[newname] - Temporarily renames your target. Leave name blank to restore the original name.", 100, command_tempname) || command_add("tempname", "[newname] - Temporarily renames your target. Leave name blank to restore the original name.", AccountStatus::GMAdmin, command_tempname) ||
command_add("petname", "[newname] - Temporarily renames your pet. Leave name blank to restore the original name.", 100, command_petname) || command_add("petname", "[newname] - Temporarily renames your pet. Leave name blank to restore the original name.", AccountStatus::GMAdmin, command_petname) ||
command_add("texture", "[texture] [helmtexture] - Change your or your target's appearance, use 255 to show equipment", 10, command_texture) || command_add("texture", "[texture] [helmtexture] - Change your or your target's appearance, use 255 to show equipment", AccountStatus::Steward, command_texture) ||
command_add("time", "[HH] [MM] - Set EQ time", 90, command_time) || command_add("time", "[HH] [MM] - Set EQ time", AccountStatus::EQSupport, command_time) ||
command_add("timers", "- Display persistent timers for target", 200, command_timers) || command_add("timers", "- Display persistent timers for target", AccountStatus::GMMgmt, command_timers) ||
command_add("timezone", "[HH] [MM] - Set timezone. Minutes are optional", 90, command_timezone) || command_add("timezone", "[HH] [MM] - Set timezone. Minutes are optional", AccountStatus::EQSupport, command_timezone) ||
command_add("title", "[text] [1 = create title table row] - Set your or your player target's title", 50, command_title) || command_add("title", "[text] [1 = create title table row] - Set your or your player target's title", AccountStatus::Guide, command_title) ||
command_add("titlesuffix", "[text] [1 = create title table row] - Set your or your player target's title suffix", 50, command_titlesuffix) || command_add("titlesuffix", "[text] [1 = create title table row] - Set your or your player target's title suffix", AccountStatus::Guide, command_titlesuffix) ||
command_add("traindisc", "[level] - Trains all the disciplines usable by the target, up to level specified. (may freeze client for a few seconds)", 150, command_traindisc) || command_add("traindisc", "[level] - Trains all the disciplines usable by the target, up to level specified. (may freeze client for a few seconds)", AccountStatus::GMLeadAdmin, command_traindisc) ||
command_add("trapinfo", "- Gets infomation about the traps currently spawned in the zone.", 81, command_trapinfo) || command_add("trapinfo", "- Gets infomation about the traps currently spawned in the zone.", AccountStatus::QuestTroupe, command_trapinfo) ||
command_add("tune", "Calculate statistical values related to combat.", 100, command_tune) || command_add("tune", "Calculate statistical values related to combat.", AccountStatus::GMAdmin, command_tune) ||
command_add("ucs", "- Attempts to reconnect to the UCS server", 0, command_ucs) || command_add("ucs", "- Attempts to reconnect to the UCS server", AccountStatus::Player, command_ucs) ||
command_add("undyeme", "- Remove dye from all of your armor slots", 0, command_undyeme) || command_add("undyeme", "- Remove dye from all of your armor slots", AccountStatus::Player, command_undyeme) ||
command_add("unfreeze", "- Unfreeze your target", 80, command_unfreeze) || command_add("unfreeze", "- Unfreeze your target", AccountStatus::QuestTroupe, command_unfreeze) ||
command_add("unlock", "- Unlock the worldserver", 150, command_unlock) || command_add("unlock", "- Unlock the worldserver", AccountStatus::GMLeadAdmin, command_unlock) ||
command_add("unscribespell", "[spellid] - Unscribe specified spell from your target's spell book.", 180, command_unscribespell) || command_add("unscribespell", "[spellid] - Unscribe specified spell from your target's spell book.", AccountStatus::GMCoder, command_unscribespell) ||
command_add("unscribespells", "- Clear out your or your player target's spell book.", 180, command_unscribespells) || command_add("unscribespells", "- Clear out your or your player target's spell book.", AccountStatus::GMCoder, command_unscribespells) ||
command_add("untraindisc", "[spellid] - Untrain specified discipline from your target.", 180, command_untraindisc) || command_add("untraindisc", "[spellid] - Untrain specified discipline from your target.", AccountStatus::GMCoder, command_untraindisc) ||
command_add("untraindiscs", "- Untrains all disciplines from your target.", 180, command_untraindiscs) || command_add("untraindiscs", "- Untrains all disciplines from your target.", AccountStatus::GMCoder, command_untraindiscs) ||
command_add("uptime", "[zone server id] - Get uptime of worldserver, or zone server if argument provided", 10, command_uptime) || command_add("uptime", "[zone server id] - Get uptime of worldserver, or zone server if argument provided", AccountStatus::Steward, command_uptime) ||
command_add("version", "- Display current version of EQEmu server", 0, command_version) || command_add("version", "- Display current version of EQEmu server", AccountStatus::Player, command_version) ||
command_add("viewnpctype", "[NPC ID] - Show stats for an NPC by NPC ID", 100, command_viewnpctype) || command_add("viewnpctype", "[NPC ID] - Show stats for an NPC by NPC ID", AccountStatus::GMAdmin, command_viewnpctype) ||
command_add("viewpetition", "[petition number] - View a petition", 20, command_viewpetition) || command_add("viewpetition", "[petition number] - View a petition", AccountStatus::ApprenticeGuide, command_viewpetition) ||
command_add("viewzoneloot", "[item id] - Allows you to search a zone's loot for a specific item ID. (0 shows all loot in the zone)", 80, command_viewzoneloot) || command_add("viewzoneloot", "[item id] - Allows you to search a zone's loot for a specific item ID. (0 shows all loot in the zone)", AccountStatus::QuestTroupe, command_viewzoneloot) ||
command_add("wc", "[wear slot] [material] - Sends an OP_WearChange for your target", 200, command_wc) || command_add("wc", "[wear slot] [material] - Sends an OP_WearChange for your target", AccountStatus::GMMgmt, command_wc) ||
command_add("weather", "[0/1/2/3] (Off/Rain/Snow/Manual) - Change the weather", 80, command_weather) || command_add("weather", "[0/1/2/3] (Off/Rain/Snow/Manual) - Change the weather", AccountStatus::QuestTroupe, command_weather) ||
command_add("who", "[search]", 20, command_who) || command_add("who", "[search]", AccountStatus::ApprenticeGuide, command_who) ||
command_add("worldshutdown", "- Shut down world and all zones", 200, command_worldshutdown) || command_add("worldshutdown", "- Shut down world and all zones", AccountStatus::GMMgmt, command_worldshutdown) ||
command_add("wp", "[add|delete] [grid_id] [pause] [waypoint_id] [-h] - Add or delete a waypoint by grid ID. (-h to use current heading)", 170, command_wp) || command_add("wp", "[add|delete] [grid_id] [pause] [waypoint_id] [-h] - Add or delete a waypoint by grid ID. (-h to use current heading)", AccountStatus::GMAreas, command_wp) ||
command_add("wpadd", "[pause] [-h] - Add your current location as a waypoint to your NPC target's AI path. (-h to use current heading)", 170, command_wpadd) || command_add("wpadd", "[pause] [-h] - Add your current location as a waypoint to your NPC target's AI path. (-h to use current heading)", AccountStatus::GMAreas, command_wpadd) ||
command_add("wpinfo", "- Show waypoint info about your NPC target", 170, command_wpinfo) || command_add("wpinfo", "- Show waypoint info about your NPC target", AccountStatus::GMAreas, command_wpinfo) ||
command_add("worldwide", "Performs world-wide GM functions such as cast (can be extended for other commands). Use caution", 250, command_worldwide) || command_add("worldwide", "Performs world-wide GM functions such as cast (can be extended for other commands). Use caution", AccountStatus::GMImpossible, command_worldwide) ||
command_add("xtargets", "Show your targets Extended Targets and optionally set how many xtargets they can have.", 250, command_xtargets) || command_add("xtargets", "Show your targets Extended Targets and optionally set how many xtargets they can have.", AccountStatus::GMImpossible, command_xtargets) ||
command_add("zclip", "[min] [max] - modifies and resends zhdr packet", 80, command_zclip) || command_add("zclip", "[min] [max] - modifies and resends zhdr packet", AccountStatus::QuestTroupe, command_zclip) ||
command_add("zcolor", "[red] [green] [blue] - Change sky color", 80, command_zcolor) || command_add("zcolor", "[red] [green] [blue] - Change sky color", AccountStatus::QuestTroupe, command_zcolor) ||
command_add("zheader", "[zonename] - Load zheader for zonename from the database", 80, command_zheader) || command_add("zheader", "[zonename] - Load zheader for zonename from the database", AccountStatus::QuestTroupe, command_zheader) ||
command_add("zone", "[zonename] [x] [y] [z] - Go to specified zone (coords optional)", 50, command_zone) || command_add("zone", "[zonename] [x] [y] [z] - Go to specified zone (coords optional)", AccountStatus::Guide, command_zone) ||
command_add("zonebootup", "[ZoneServerID] [shortname] - Make a zone server boot a specific zone", 150, command_zonebootup) || command_add("zonebootup", "[ZoneServerID] [shortname] - Make a zone server boot a specific zone", AccountStatus::GMLeadAdmin, command_zonebootup) ||
command_add("zoneinstance", "[instanceid] [x] [y] [z] - Go to specified instance zone (coords optional)", 50, command_zone_instance) || command_add("zoneinstance", "[instanceid] [x] [y] [z] - Go to specified instance zone (coords optional)", AccountStatus::Guide, command_zone_instance) ||
command_add("zonelock", "[List|Lock|Unlock] [Zone ID|Zone Short Name] - Set or get lock status of a Zone by ID or Short Name", 100, command_zonelock) || command_add("zonelock", "[List|Lock|Unlock] [Zone ID|Zone Short Name] - Set or get lock status of a Zone by ID or Short Name", AccountStatus::GMAdmin, command_zonelock) ||
command_add("zoneshutdown", "[shortname] - Shut down a zone server", 150, command_zoneshutdown) || command_add("zoneshutdown", "[shortname] - Shut down a zone server", AccountStatus::GMLeadAdmin, command_zoneshutdown) ||
command_add("zonespawn", "- Not implemented", 250, command_zonespawn) || command_add("zonespawn", "- Not implemented", AccountStatus::GMImpossible, command_zonespawn) ||
command_add("zonestatus", "- Show connected zoneservers, synonymous with /servers", 150, command_zonestatus) || command_add("zonestatus", "- Show connected zoneservers, synonymous with /servers", AccountStatus::GMLeadAdmin, command_zonestatus) ||
command_add("zopp", "Troubleshooting command - Sends a fake item packet to you. No server reference is created.", 250, command_zopp) || command_add("zopp", "Troubleshooting command - Sends a fake item packet to you. No server reference is created.", AccountStatus::GMImpossible, command_zopp) ||
command_add("zsafecoords", "[x] [y] [z] - Set safe coords", 80, command_zsafecoords) || command_add("zsafecoords", "[x] [y] [z] - Set safe coords", AccountStatus::QuestTroupe, command_zsafecoords) ||
command_add("zsave", " - Saves zheader to the database", 80, command_zsave) || command_add("zsave", " - Saves zheader to the database", AccountStatus::QuestTroupe, command_zsave) ||
command_add("zsky", "[skytype] - Change zone sky type", 80, command_zsky) || command_add("zsky", "[skytype] - Change zone sky type", AccountStatus::QuestTroupe, command_zsky) ||
command_add("zstats", "- Show info about zone header", 80, command_zstats) || command_add("zstats", "- Show info about zone header", AccountStatus::QuestTroupe, command_zstats) ||
command_add("zunderworld", "[zcoord] - Sets the underworld using zcoord", 80, command_zunderworld) || command_add("zunderworld", "[zcoord] - Sets the underworld using zcoord", AccountStatus::QuestTroupe, command_zunderworld) ||
command_add("zuwcoords", "[z coord] - Set underworld coord", 80, command_zuwcoords) command_add("zuwcoords", "[z coord] - Set underworld coord", AccountStatus::QuestTroupe, command_zuwcoords)
) { ) {
command_deinit(); command_deinit();
return -1; return -1;
@ -686,43 +686,57 @@ void command_logcommand(Client *c, const char *message)
bool continueevents = false; bool continueevents = false;
switch (zone->loglevelvar){ //catch failsafe switch (zone->loglevelvar){ //catch failsafe
case 9: { // log only LeadGM case 9: { // log only LeadGM
if ((admin>= 150) && (admin <200)) if (
admin >= AccountStatus::GMLeadAdmin &&
admin < AccountStatus::GMMgmt
) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 8: { // log only GM case 8: { // log only GM
if ((admin>= 100) && (admin <150)) if (
admin >= AccountStatus::GMAdmin &&
admin < AccountStatus::GMLeadAdmin
) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 1: { case 1: {
if ((admin>= 200)) if (admin >= AccountStatus::GMMgmt) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 2: { case 2: {
if ((admin>= 150)) if (admin >= AccountStatus::GMLeadAdmin) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 3: { case 3: {
if ((admin>= 100)) if (admin >= AccountStatus::GMAdmin) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 4: { case 4: {
if ((admin>= 80)) if (admin >= AccountStatus::QuestTroupe) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 5: { case 5: {
if ((admin>= 20)) if (admin >= AccountStatus::ApprenticeGuide) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 6: { case 6: {
if ((admin>= 10)) if (admin >= AccountStatus::Steward) {
continueevents = true; continueevents = true;
}
break; break;
} }
case 7: { case 7: {
@ -1274,9 +1288,6 @@ void command_summon(Client *c, const Seperator *sep)
t=c->GetTarget(); t=c->GetTarget();
else else
{ {
/*if(c->Admin() < 150)
c->Message(Chat::White, "You need a NPC/corpse target for this command");
else*/
c->Message(Chat::White, "Usage: #summon [charname] Either target or charname is required"); c->Message(Chat::White, "Usage: #summon [charname] Either target or charname is required");
return; return;
} }
@ -1297,11 +1308,6 @@ void command_summon(Client *c, const Seperator *sep)
} }
else if (t->IsClient()) else if (t->IsClient())
{ {
/*if(c->Admin() < 150)
{
c->Message(Chat::White, "You may not summon a player.");
return;
}*/
c->Message(Chat::White, "Summoning player %s to %1.1f, %1.1f, %1.1f", t->GetName(), c->GetX(), c->GetY(), c->GetZ()); c->Message(Chat::White, "Summoning player %s to %1.1f, %1.1f, %1.1f", t->GetName(), c->GetX(), c->GetY(), c->GetZ());
t->CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), c->GetX(), c->GetY(), c->GetZ(), c->GetHeading(), 2, GMSummon); t->CastToClient()->MovePC(zone->GetZoneID(), zone->GetInstanceID(), c->GetX(), c->GetY(), c->GetZ(), c->GetHeading(), 2, GMSummon);
} }
@ -2016,13 +2022,23 @@ void command_emote(Client *c, const Seperator *sep)
for(newmessage = strtok((char*)sep->arg[3],"^");newmessage!=nullptr;newmessage=strtok(nullptr, "^")) for(newmessage = strtok((char*)sep->arg[3],"^");newmessage!=nullptr;newmessage=strtok(nullptr, "^"))
entity_list.Message(0, atoi(sep->arg[2]), newmessage); entity_list.Message(0, atoi(sep->arg[2]), newmessage);
} }
} } else if (!worldserver.Connected()) {
else if (!worldserver.Connected())
c->Message(Chat::White, "Error: World server disconnected"); c->Message(Chat::White, "Error: World server disconnected");
else if (strcasecmp(sep->arg[1], "world") == 0) } else if (!strcasecmp(sep->arg[1], "world")) {
worldserver.SendEmoteMessage(0, 0, atoi(sep->arg[2]), sep->argplus[3]); worldserver.SendEmoteMessage(
else 0,
worldserver.SendEmoteMessage(sep->arg[1], 0, atoi(sep->arg[2]), sep->argplus[3]); 0,
atoi(sep->arg[2]),
sep->argplus[3]
);
} else {
worldserver.SendEmoteMessage(
sep->arg[1],
0,
atoi(sep->arg[2]),
sep->argplus[3]
);
}
} }
} }
@ -5785,7 +5801,7 @@ void command_zonelock(Client *c, const Seperator *sep)
strn0cpy(lock_zone->adminname, c->GetName(), sizeof(lock_zone->adminname)); strn0cpy(lock_zone->adminname, c->GetName(), sizeof(lock_zone->adminname));
if (is_list) { if (is_list) {
lock_zone->op = EQ::constants::ServerLockType::List; lock_zone->op = ServerLockType::List;
worldserver.SendPacket(pack); worldserver.SendPacket(pack);
} else if (!is_list && c->Admin() >= commandLockZones) { } else if (!is_list && c->Admin() >= commandLockZones) {
auto zone_id = ( auto zone_id = (
@ -5796,7 +5812,7 @@ void command_zonelock(Client *c, const Seperator *sep)
std::string zone_short_name = str_tolower(ZoneName(zone_id, true)); std::string zone_short_name = str_tolower(ZoneName(zone_id, true));
bool is_unknown_zone = zone_short_name.find("unknown") != std::string::npos; bool is_unknown_zone = zone_short_name.find("unknown") != std::string::npos;
if (zone_id && !is_unknown_zone) { if (zone_id && !is_unknown_zone) {
lock_zone->op = is_lock ? EQ::constants::ServerLockType::Lock : EQ::constants::ServerLockType::Unlock; lock_zone->op = is_lock ? ServerLockType::Lock : ServerLockType::Unlock;
lock_zone->zoneID = zone_id; lock_zone->zoneID = zone_id;
worldserver.SendPacket(pack); worldserver.SendPacket(pack);
} else { } else {
@ -6274,7 +6290,7 @@ void command_gmzone(Client *c, const Seperator *sep)
if (instance_id > 0) { if (instance_id > 0) {
float target_x = -1, target_y = -1, target_z = -1, target_heading = -1; float target_x = -1, target_y = -1, target_z = -1, target_heading = -1;
int16 min_status = 0; int16 min_status = AccountStatus::Player;
uint8 min_level = 0; uint8 min_level = 0;
if (!content_db.GetSafePoints( if (!content_db.GetSafePoints(
@ -7494,7 +7510,7 @@ void command_iteminfo(Client *c, const Seperator *sep)
c->Message(Chat::White, ">> EffectType: 0x%02X, CastTime: %.2f", (uint8)item->Click.Type, ((double)item->CastTime / 1000)); c->Message(Chat::White, ">> EffectType: 0x%02X, CastTime: %.2f", (uint8)item->Click.Type, ((double)item->CastTime / 1000));
} }
if (c->Admin() >= 200) if (c->Admin() >= AccountStatus::GMMgmt)
c->Message(Chat::White, ">> MinStatus: %u", item->MinStatus); c->Message(Chat::White, ">> MinStatus: %u", item->MinStatus);
} }
@ -7638,58 +7654,6 @@ void command_guild(Client *c, const Seperator *sep)
guild_mgr.DescribeGuild(c, tmp); guild_mgr.DescribeGuild(c, tmp);
} }
} }
/*
else if (strcasecmp(sep->arg[1], "edit") == 0) {
if (c->GuildDBID() == 0)
c->Message(Chat::White, "You arent in a guild!");
else if (!sep->IsNumber(2))
c->Message(Chat::White, "Error: invalid rank #.");
else if (atoi(sep->arg[2]) < 0 || atoi(sep->arg[2]) > GUILD_MAX_RANK)
c->Message(Chat::White, "Error: invalid rank #.");
else if (!c->GuildRank() == 0)
c->Message(Chat::White, "You must be rank %s to use edit.", guilds[c->GuildEQID()].rank[0].rankname);
else if (!worldserver.Connected())
c->Message(Chat::White, "Error: World server dirconnected");
else {
if (!helper_guild_edit(c, c->GuildDBID(), c->GuildEQID(), atoi(sep->arg[2]), sep->arg[3], sep->argplus[4])) {
c->Message(Chat::White, " #guild edit rank title newtitle");
c->Message(Chat::White, " #guild edit rank permission 0/1");
}
else {
ServerPacket* pack = new ServerPacket(ServerOP_RefreshGuild, 5);
int32 geqid=c->GuildEQID();
memcpy(pack->pBuffer, &geqid, 4);
worldserver.SendPacket(pack);
safe_delete(pack);
}
}
}
else if (strcasecmp(sep->arg[1], "gmedit") == 0 && admin >= 100) {
if (!sep->IsNumber(2))
c->Message(Chat::White, "Error: invalid guilddbid.");
else if (!sep->IsNumber(3))
c->Message(Chat::White, "Error: invalid rank #.");
else if (atoi(sep->arg[3]) < 0 || atoi(sep->arg[3]) > GUILD_MAX_RANK)
c->Message(Chat::White, "Error: invalid rank #.");
else if (!worldserver.Connected())
c->Message(Chat::White, "Error: World server dirconnected");
else {
uint32 eqid = database.GetGuildEQID(atoi(sep->arg[2]));
if (eqid == GUILD_NONE)
c->Message(Chat::White, "Error: Guild not found");
else if (!helper_guild_edit(c, atoi(sep->arg[2]), eqid, atoi(sep->arg[3]), sep->arg[4], sep->argplus[5])) {
c->Message(Chat::White, " #guild gmedit guilddbid rank title newtitle");
c->Message(Chat::White, " #guild gmedit guilddbid rank permission 0/1");
}
else {
ServerPacket* pack = new ServerPacket(ServerOP_RefreshGuild, 5);
memcpy(pack->pBuffer, &eqid, 4);
worldserver.SendPacket(pack);
safe_delete(pack);
}
}
}
*/
else if (strcasecmp(sep->arg[1], "set") == 0) { else if (strcasecmp(sep->arg[1], "set") == 0) {
if (!sep->IsNumber(3)) if (!sep->IsNumber(3))
c->Message(Chat::White, "Usage: #guild set charname guildgbid (0 = clear guildtag)"); c->Message(Chat::White, "Usage: #guild set charname guildgbid (0 = clear guildtag)");

View File

@ -953,7 +953,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a
// return; // return;
} }
if(is_locked && client->Admin() < 100) { if(is_locked && client->Admin() < AccountStatus::GMAdmin) {
SendLootReqErrorPacket(client, LootResponse::SomeoneElse); SendLootReqErrorPacket(client, LootResponse::SomeoneElse);
client->Message(Chat::Red, "Error: Corpse locked by GM."); client->Message(Chat::Red, "Error: Corpse locked by GM.");
return; return;
@ -977,7 +977,7 @@ void Corpse::MakeLootRequestPackets(Client* client, const EQApplicationPacket* a
// loot_request_type is scoped to class Corpse and reset on a per-loot session basis // loot_request_type is scoped to class Corpse and reset on a per-loot session basis
if (client->GetGM()) { if (client->GetGM()) {
if (client->Admin() >= 100) if (client->Admin() >= AccountStatus::GMAdmin)
loot_request_type = LootRequestType::GMAllowed; loot_request_type = LootRequestType::GMAllowed;
else else
loot_request_type = LootRequestType::GMPeek; loot_request_type = LootRequestType::GMPeek;
@ -1203,14 +1203,14 @@ void Corpse::LootItem(Client *client, const EQApplicationPacket *app)
} }
if (IsPlayerCorpse() && !CanPlayerLoot(client->CharacterID()) && !become_npc && if (IsPlayerCorpse() && !CanPlayerLoot(client->CharacterID()) && !become_npc &&
(char_id != client->CharacterID() && client->Admin() < 150)) { (char_id != client->CharacterID() && client->Admin() < AccountStatus::GMLeadAdmin)) {
client->Message(Chat::Red, "Error: This is a player corpse and you dont own it."); client->Message(Chat::Red, "Error: This is a player corpse and you dont own it.");
client->QueuePacket(app); client->QueuePacket(app);
SendEndLootErrorPacket(client); SendEndLootErrorPacket(client);
return; return;
} }
if (is_locked && client->Admin() < 100) { if (is_locked && client->Admin() < AccountStatus::GMAdmin) {
client->QueuePacket(app); client->QueuePacket(app);
SendLootReqErrorPacket(client, LootResponse::SomeoneElse); SendLootReqErrorPacket(client, LootResponse::SomeoneElse);
client->Message(Chat::Red, "Error: Corpse locked by GM."); client->Message(Chat::Red, "Error: Corpse locked by GM.");
@ -1580,7 +1580,7 @@ bool Corpse::Summon(Client* client, bool spell, bool CheckDistance) {
uint32 dist2 = 10000; // pow(100, 2); uint32 dist2 = 10000; // pow(100, 2);
if (!spell) { if (!spell) {
if (this->GetCharID() == client->CharacterID()) { if (this->GetCharID() == client->CharacterID()) {
if (IsLocked() && client->Admin() < 100) { if (IsLocked() && client->Admin() < AccountStatus::GMAdmin) {
client->Message(Chat::Red, "That corpse is locked by a GM."); client->Message(Chat::Red, "That corpse is locked by a GM.");
return false; return false;
} }

View File

@ -7473,8 +7473,8 @@ XS(XS__worldwideaddldonloss) {
uint8 update_type = CZLDoNUpdateSubtype_AddLoss; uint8 update_type = CZLDoNUpdateSubtype_AddLoss;
uint32 theme_id = (uint32)SvUV(ST(0)); uint32 theme_id = (uint32)SvUV(ST(0));
int points = 1; int points = 1;
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8)SvUV(ST(1)); min_status = (uint8)SvUV(ST(1));
@ -7495,8 +7495,8 @@ XS(XS__worldwideaddldonpoints) {
uint8 update_type = CZLDoNUpdateSubtype_AddPoints; uint8 update_type = CZLDoNUpdateSubtype_AddPoints;
uint32 theme_id = (uint32)SvUV(ST(0)); uint32 theme_id = (uint32)SvUV(ST(0));
int points = 1; int points = 1;
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
points = (int)SvIV(ST(1)); points = (int)SvIV(ST(1));
@ -7520,8 +7520,8 @@ XS(XS__worldwideaddldonwin) {
uint8 update_type = CZLDoNUpdateSubtype_AddWin; uint8 update_type = CZLDoNUpdateSubtype_AddWin;
uint32 theme_id = (uint32)SvUV(ST(0)); uint32 theme_id = (uint32)SvUV(ST(0));
int points = 1; int points = 1;
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8)SvUV(ST(1)); min_status = (uint8)SvUV(ST(1));
@ -7541,8 +7541,8 @@ XS(XS__worldwideassigntask) {
{ {
uint8 update_type = WWTaskUpdateType_AssignTask; uint8 update_type = WWTaskUpdateType_AssignTask;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int task_subidentifier = -1; int task_subidentifier = -1;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
@ -7565,8 +7565,8 @@ XS(XS__worldwidecastspell) {
{ {
uint8 update_type = WWSpellUpdateType_Cast; uint8 update_type = WWSpellUpdateType_Cast;
uint32 spell_id = (uint32) SvUV(ST(0)); uint32 spell_id = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8) SvUV(ST(1)); min_status = (uint8) SvUV(ST(1));
@ -7585,8 +7585,8 @@ XS(XS__worldwidedialoguewindow) {
Perl_croak(aTHX_ "Usage: quest::worldwidedialoguewindow(string message, [uint8 min_status = 0, uint8 max_status = 0])"); Perl_croak(aTHX_ "Usage: quest::worldwidedialoguewindow(string message, [uint8 min_status = 0, uint8 max_status = 0])");
{ {
const char* message = (const char*) SvPV_nolen(ST(0)); const char* message = (const char*) SvPV_nolen(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8)SvUV(ST(1)); min_status = (uint8)SvUV(ST(1));
@ -7606,8 +7606,8 @@ XS(XS__worldwidedisabletask) {
{ {
uint8 update_type = WWTaskUpdateType_DisableTask; uint8 update_type = WWTaskUpdateType_DisableTask;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int task_subidentifier = -1; int task_subidentifier = -1;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
@ -7630,8 +7630,8 @@ XS(XS__worldwideenabletask) {
{ {
uint8 update_type = WWTaskUpdateType_EnableTask; uint8 update_type = WWTaskUpdateType_EnableTask;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int task_subidentifier = -1; int task_subidentifier = -1;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
@ -7654,8 +7654,8 @@ XS(XS__worldwidefailtask) {
{ {
uint8 update_type = WWTaskUpdateType_FailTask; uint8 update_type = WWTaskUpdateType_FailTask;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int task_subidentifier = -1; int task_subidentifier = -1;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
@ -7682,8 +7682,8 @@ XS(XS__worldwidemarquee) {
uint32 fade_out = (uint32) SvUV(ST(3)); uint32 fade_out = (uint32) SvUV(ST(3));
uint32 duration = (uint32) SvUV(ST(4)); uint32 duration = (uint32) SvUV(ST(4));
const char* message = (const char*) SvPV_nolen(ST(5)); const char* message = (const char*) SvPV_nolen(ST(5));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 7) if (items == 7)
min_status = (uint8) SvUV(ST(6)); min_status = (uint8) SvUV(ST(6));
@ -7703,8 +7703,8 @@ XS(XS__worldwidemessage) {
{ {
uint32 type = (uint32) SvUV(ST(0)); uint32 type = (uint32) SvUV(ST(0));
const char* message = (const char*) SvPV_nolen(ST(1)); const char* message = (const char*) SvPV_nolen(ST(1));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 3) if (items == 3)
min_status = (uint8) SvUV(ST(2)); min_status = (uint8) SvUV(ST(2));
@ -7725,8 +7725,8 @@ XS(XS__worldwidemove) {
uint8 update_type = WWMoveUpdateType_MoveZone; uint8 update_type = WWMoveUpdateType_MoveZone;
const char* zone_short_name = (const char*) SvPV_nolen(ST(0)); const char* zone_short_name = (const char*) SvPV_nolen(ST(0));
uint16 instance_id = 0; uint16 instance_id = 0;
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8) SvUV(ST(1)); min_status = (uint8) SvUV(ST(1));
@ -7747,8 +7747,8 @@ XS(XS__worldwidemoveinstance) {
uint8 update_type = WWMoveUpdateType_MoveZoneInstance; uint8 update_type = WWMoveUpdateType_MoveZoneInstance;
const char* zone_short_name = ""; const char* zone_short_name = "";
uint16 instance_id = (uint16) SvUV(ST(0)); uint16 instance_id = (uint16) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8) SvUV(ST(1)); min_status = (uint8) SvUV(ST(1));
@ -7769,8 +7769,8 @@ XS(XS__worldwideremoveldonloss) {
uint8 update_type = CZLDoNUpdateSubtype_RemoveLoss; uint8 update_type = CZLDoNUpdateSubtype_RemoveLoss;
uint32 theme_id = (uint32)SvUV(ST(0)); uint32 theme_id = (uint32)SvUV(ST(0));
int points = 1; int points = 1;
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8)SvUV(ST(1)); min_status = (uint8)SvUV(ST(1));
@ -7791,8 +7791,8 @@ XS(XS__worldwideremoveldonwin) {
uint8 update_type = CZLDoNUpdateSubtype_RemoveWin; uint8 update_type = CZLDoNUpdateSubtype_RemoveWin;
uint32 theme_id = (uint32)SvUV(ST(0)); uint32 theme_id = (uint32)SvUV(ST(0));
int points = 1; int points = 1;
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8)SvUV(ST(1)); min_status = (uint8)SvUV(ST(1));
@ -7812,8 +7812,8 @@ XS(XS__worldwideremovespell) {
{ {
uint8 update_type = WWSpellUpdateType_Remove; uint8 update_type = WWSpellUpdateType_Remove;
uint32 spell_id = (uint32) SvUV(ST(0)); uint32 spell_id = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8) SvUV(ST(1)); min_status = (uint8) SvUV(ST(1));
@ -7833,8 +7833,8 @@ XS(XS__worldwideremovetask) {
{ {
uint8 update_type = WWTaskUpdateType_RemoveTask; uint8 update_type = WWTaskUpdateType_RemoveTask;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int task_subidentifier = -1; int task_subidentifier = -1;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
@ -7859,8 +7859,8 @@ XS(XS__worldwideresetactivity) {
uint8 update_type = WWTaskUpdateType_ActivityReset; uint8 update_type = WWTaskUpdateType_ActivityReset;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
int task_subidentifier = (int) SvIV(ST(1)); int task_subidentifier = (int) SvIV(ST(1));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
if (items == 3) if (items == 3)
@ -7883,8 +7883,8 @@ XS(XS__worldwidesetentityvariableclient) {
uint8 update_type = WWSetEntityVariableUpdateType_Character; uint8 update_type = WWSetEntityVariableUpdateType_Character;
const char* variable_name = (const char*) SvPV_nolen(ST(0)); const char* variable_name = (const char*) SvPV_nolen(ST(0));
const char* variable_value = (const char*) SvPV_nolen(ST(1)); const char* variable_value = (const char*) SvPV_nolen(ST(1));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 3) if (items == 3)
min_status = (uint8) SvUV(ST(2)); min_status = (uint8) SvUV(ST(2));
@ -7931,8 +7931,8 @@ XS(XS__worldwidesignalclient) {
{ {
uint8 update_type = WWSignalUpdateType_Character; uint8 update_type = WWSignalUpdateType_Character;
uint32 signal = (uint32) SvUV(ST(0)); uint32 signal = (uint32) SvUV(ST(0));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
if (items == 2) if (items == 2)
min_status = (uint8) SvUV(ST(1)); min_status = (uint8) SvUV(ST(1));
@ -7953,8 +7953,8 @@ XS(XS__worldwideupdateactivity) {
uint8 update_type = WWTaskUpdateType_ActivityUpdate; uint8 update_type = WWTaskUpdateType_ActivityUpdate;
uint32 task_identifier = (uint32) SvUV(ST(0)); uint32 task_identifier = (uint32) SvUV(ST(0));
int task_subidentifier = (int) SvIV(ST(1)); int task_subidentifier = (int) SvIV(ST(1));
uint8 min_status = 0; uint8 min_status = AccountStatus::Player;
uint8 max_status = 0; uint8 max_status = AccountStatus::Player;
int update_count = 1; int update_count = 1;
bool enforce_level_requirement = false; bool enforce_level_requirement = false;
if (items == 3) if (items == 3)

View File

@ -3243,7 +3243,7 @@ void EntityList::SendPetitionToAdmins()
pcus->quetotal=0; pcus->quetotal=0;
auto it = client_list.begin(); auto it = client_list.begin();
while (it != client_list.end()) { while (it != client_list.end()) {
if (it->second->CastToClient()->Admin() >= 80) if (it->second->CastToClient()->Admin() >= AccountStatus::QuestTroupe)
it->second->CastToClient()->QueuePacket(outapp); it->second->CastToClient()->QueuePacket(outapp);
++it; ++it;
} }
@ -3271,7 +3271,7 @@ void EntityList::SendPetitionToAdmins(Petition *pet)
pcus->quetotal = petition_list.GetTotalPetitions(); pcus->quetotal = petition_list.GetTotalPetitions();
auto it = client_list.begin(); auto it = client_list.begin();
while (it != client_list.end()) { while (it != client_list.end()) {
if (it->second->CastToClient()->Admin() >= 80) { if (it->second->CastToClient()->Admin() >= AccountStatus::QuestTroupe) {
if (pet->CheckedOut()) if (pet->CheckedOut())
strcpy(pcus->gmsenttoo, ""); strcpy(pcus->gmsenttoo, "");
else else
@ -3296,7 +3296,7 @@ void EntityList::ClearClientPetitionQueue()
pet->quetotal = petition_list.GetTotalPetitions(); pet->quetotal = petition_list.GetTotalPetitions();
auto it = client_list.begin(); auto it = client_list.begin();
while (it != client_list.end()) { while (it != client_list.end()) {
if (it->second->CastToClient()->Admin() >= 100) { if (it->second->CastToClient()->Admin() >= AccountStatus::GMAdmin) {
int x = 0; int x = 0;
for (x = 0; x < 64; x++) { for (x = 0; x < 64; x++) {
pet->petnumber = x; pet->petnumber = x;
@ -4686,7 +4686,7 @@ void EntityList::ZoneWho(Client *c, Who_All_Struct *Who)
WAPP2->RankMSGID = 12315; WAPP2->RankMSGID = 12315;
else if (ClientEntry->IsBuyer()) else if (ClientEntry->IsBuyer())
WAPP2->RankMSGID = 6056; WAPP2->RankMSGID = 6056;
else if (ClientEntry->Admin() >= 10 && ClientEntry->GetGM()) else if (ClientEntry->Admin() >= AccountStatus::Steward && ClientEntry->GetGM())
WAPP2->RankMSGID = 12312; WAPP2->RankMSGID = 12312;
else else
WAPP2->RankMSGID = 0xFFFFFFFF; WAPP2->RankMSGID = 0xFFFFFFFF;

View File

@ -391,7 +391,7 @@ public:
void ReplaceWithTarget(Mob* pOldMob, Mob*pNewTarget); void ReplaceWithTarget(Mob* pOldMob, Mob*pNewTarget);
void QueueCloseClients(Mob* sender, const EQApplicationPacket* app, bool ignore_sender=false, float distance=200, Mob* skipped_mob = 0, bool is_ack_required = true, eqFilterType filter=FilterNone); void QueueCloseClients(Mob* sender, const EQApplicationPacket* app, bool ignore_sender=false, float distance=200, Mob* skipped_mob = 0, bool is_ack_required = true, eqFilterType filter=FilterNone);
void QueueClients(Mob* sender, const EQApplicationPacket* app, bool ignore_sender=false, bool ackreq = true); void QueueClients(Mob* sender, const EQApplicationPacket* app, bool ignore_sender=false, bool ackreq = true);
void QueueClientsStatus(Mob* sender, const EQApplicationPacket* app, bool ignore_sender = false, uint8 minstatus = 0, uint8 maxstatus = 0); void QueueClientsStatus(Mob* sender, const EQApplicationPacket* app, bool ignore_sender = false, uint8 minstatus = AccountStatus::Player, uint8 maxstatus = AccountStatus::Player);
void QueueClientsGuild(Mob* sender, const EQApplicationPacket* app, bool ignore_sender = false, uint32 guildeqid = 0); void QueueClientsGuild(Mob* sender, const EQApplicationPacket* app, bool ignore_sender = false, uint32 guildeqid = 0);
void QueueClientsGuildBankItemUpdate(const GuildBankItemUpdate_Struct *gbius, uint32 GuildID); void QueueClientsGuildBankItemUpdate(const GuildBankItemUpdate_Struct *gbius, uint32 GuildID);
void QueueClientsByTarget(Mob* sender, const EQApplicationPacket* app, bool iSendToSender = true, Mob* SkipThisMob = 0, bool ackreq = true, void QueueClientsByTarget(Mob* sender, const EQApplicationPacket* app, bool iSendToSender = true, Mob* SkipThisMob = 0, bool ackreq = true,

View File

@ -793,7 +793,7 @@ void Client::SetEXP(uint32 set_exp, uint32 set_aaxp, bool isrezzexp) {
FastQueuePacket(&outapp); FastQueuePacket(&outapp);
} }
if (admin>=100 && GetGM()) { if (admin >= AccountStatus::GMAdmin && GetGM()) {
char val1[20]={0}; char val1[20]={0};
char val2[20]={0}; char val2[20]={0};
char val3[20]={0}; char val3[20]={0};

View File

@ -1513,7 +1513,17 @@ void GuildApproval::GuildApproved()
database.InsertPetitionToDB(pet); database.InsertPetitionToDB(pet);
petition_list.UpdateGMQueue(); petition_list.UpdateGMQueue();
petition_list.UpdateZoneListQueue(); petition_list.UpdateZoneListQueue();
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s has made a petition. #%i", owner->CastToClient()->GetName(), pet->GetID()); worldserver.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
fmt::format(
"{} has made a petition. ID: {}",
owner->CastToClient()->GetName(),
pet->GetID()
).c_str()
);
auto pack = new ServerPacket; auto pack = new ServerPacket;
pack->opcode = ServerOP_RefreshGuild; pack->opcode = ServerOP_RefreshGuild;
pack->size = tmp; pack->size = tmp;

View File

@ -217,7 +217,12 @@ void Lua_EntityList::Message(uint32 guild_dbid, uint32 type, const char *message
void Lua_EntityList::MessageStatus(uint32 guild_dbid, int min_status, uint32 type, const char *message) { void Lua_EntityList::MessageStatus(uint32 guild_dbid, int min_status, uint32 type, const char *message) {
Lua_Safe_Call_Void(); Lua_Safe_Call_Void();
self->MessageStatus(guild_dbid, min_status, type, message); self->MessageStatus(
guild_dbid,
min_status,
type,
message
);
} }
void Lua_EntityList::MessageClose(Lua_Mob sender, bool skip_sender, float dist, uint32 type, const char *message) { void Lua_EntityList::MessageClose(Lua_Mob sender, bool skip_sender, float dist, uint32 type, const char *message) {

View File

@ -3935,7 +3935,7 @@ void Mob::SetTarget(Mob *mob)
else if (IsClient()) { else if (IsClient()) {
parse->EventPlayer(EVENT_TARGET_CHANGE, CastToClient(), "", 0); parse->EventPlayer(EVENT_TARGET_CHANGE, CastToClient(), "", 0);
if (CastToClient()->admin > 200) { if (CastToClient()->admin > AccountStatus::GMMgmt) {
DisplayInfo(mob); DisplayInfo(mob);
} }

View File

@ -49,7 +49,7 @@ void Client::SendPathPacket(const std::vector<FindPerson_Point> &points) {
.Then([this](const EQ::Any &result) { .Then([this](const EQ::Any &result) {
auto points = EQ::any_cast<std::vector<FindPerson_Point>>(result); auto points = EQ::any_cast<std::vector<FindPerson_Point>>(result);
if (points.size() < 2) { if (points.size() < 2) {
if (Admin() > 10) { if (Admin() > AccountStatus::Steward) {
Message(Chat::System, "Too few points"); Message(Chat::System, "Too few points");
} }
@ -59,7 +59,7 @@ void Client::SendPathPacket(const std::vector<FindPerson_Point> &points) {
} }
if (points.size() > 36) { if (points.size() > 36) {
if (Admin() > 10) { if (Admin() > AccountStatus::Steward) {
Message(Chat::System, "Too many points %u", points.size()); Message(Chat::System, "Too many points %u", points.size());
} }
@ -68,7 +68,7 @@ void Client::SendPathPacket(const std::vector<FindPerson_Point> &points) {
return; return;
} }
if (Admin() > 10) { if (Admin() > AccountStatus::Steward) {
Message(Chat::System, "Total points %u", points.size()); Message(Chat::System, "Total points %u", points.size());
} }

View File

@ -856,7 +856,12 @@ XS(XS_EntityList_MessageStatus) {
uint32 type = (uint32) SvUV(ST(3)); uint32 type = (uint32) SvUV(ST(3));
char *message = (char *) SvPV_nolen(ST(4)); char *message = (char *) SvPV_nolen(ST(4));
VALIDATE_THIS_IS_ENTITY; VALIDATE_THIS_IS_ENTITY;
THIS->MessageStatus(to_guilddbid, to_minstatus, type, message); THIS->MessageStatus(
to_guilddbid,
to_minstatus,
type,
message
);
} }
XSRETURN_EMPTY; XSRETURN_EMPTY;
} }

View File

@ -765,18 +765,39 @@ void QuestManager::shout2(const char *str) {
if (!owner) { if (!owner) {
LogQuests("QuestManager::shout2 called with nullptr owner. Probably syntax error in quest file"); LogQuests("QuestManager::shout2 called with nullptr owner. Probably syntax error in quest file");
return; return;
} } else {
else { worldserver.SendEmoteMessage(
worldserver.SendEmoteMessage(0,0,0,13, "%s shouts, '%s'", owner->GetCleanName(), str); 0,
0,
AccountStatus::Player,
Chat::Red,
fmt::format(
"{} shouts, '{}'",
owner->GetCleanName(),
str
).c_str()
);
} }
} }
void QuestManager::gmsay(const char *str, uint32 color, bool send_to_world, uint32 to_guilddbid, uint32 to_minstatus) { void QuestManager::gmsay(const char *str, uint32 color, bool send_to_world, uint32 to_guilddbid, uint32 to_minstatus) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if(send_to_world) if(send_to_world) {
worldserver.SendEmoteMessage(0, to_guilddbid, to_minstatus, color, "%s", str); worldserver.SendEmoteMessage(
else 0,
entity_list.MessageStatus(to_guilddbid, to_minstatus, color, "%s", str); to_guilddbid,
to_minstatus,
color,
str
);
} else {
entity_list.MessageStatus(
to_guilddbid,
to_minstatus,
color,
str
);
}
} }
void QuestManager::depop(int npc_type) { void QuestManager::depop(int npc_type) {
@ -1349,29 +1370,65 @@ void QuestManager::setguild(uint32 new_guild_id, uint8 new_rank) {
void QuestManager::CreateGuild(const char *guild_name, const char *leader) { void QuestManager::CreateGuild(const char *guild_name, const char *leader) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
uint32 cid = database.GetCharacterID(leader); uint32 character_id = database.GetCharacterID(leader);
char hString[250]; if (character_id == 0) {
if (cid == 0) { worldserver.SendEmoteMessage(
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s", "Guild Creation: Guild leader not found."); 0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
"Guild Error | Guild leader not found."
);
return; return;
} }
uint32 tmp = guild_mgr.FindGuildByLeader(cid); uint32 tmp = guild_mgr.FindGuildByLeader(character_id);
if (tmp != GUILD_NONE) { if (tmp != GUILD_NONE) {
sprintf(hString, "Guild Creation: Error: %s already is the leader of DB# %u '%s'.", leader, tmp, guild_mgr.GetGuildName(tmp)); worldserver.SendEmoteMessage(
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s", hString); 0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
fmt::format(
"Guild Error | {} already is the leader of {} ({}).",
leader,
guild_mgr.GetGuildName(tmp),
tmp
).c_str()
);
} else {
uint32 gid = guild_mgr.CreateGuild(guild_name, character_id);
if (gid == GUILD_NONE) {
worldserver.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
"Guild Error | Guild creation failed."
);
} else {
worldserver.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
fmt::format(
"Guild Created | Leader: {} ({}) ID: {}",
leader,
character_id,
gid
).c_str()
);
if (!guild_mgr.SetGuild(character_id, gid, GUILD_LEADER)) {
worldserver.SendEmoteMessage(
0,
0,
AccountStatus::QuestTroupe,
Chat::Yellow,
"Unable to set guild leader's guild in the database. Use #guild set."
);
} }
else {
uint32 gid = guild_mgr.CreateGuild(guild_name, cid);
if (gid == GUILD_NONE)
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s", "Guild Creation: Guild creation failed");
else {
sprintf(hString, "Guild Creation: Guild created: Leader: %u, number %u: %s", cid, gid, leader);
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s", hString);
if(!guild_mgr.SetGuild(cid, gid, GUILD_LEADER))
worldserver.SendEmoteMessage(0, 0, 80, 15, "%s", "Unable to set guild leader's guild in the database. Your going to have to run #guild set");
} }
} }
} }
@ -2458,7 +2515,12 @@ void QuestManager::ze(int type, const char *str) {
} }
void QuestManager::we(int type, const char *str) { void QuestManager::we(int type, const char *str) {
worldserver.SendEmoteMessage(0, 0, type, str); worldserver.SendEmoteMessage(
0,
0,
type,
str
);
} }
void QuestManager::message(int color, const char *message) { void QuestManager::message(int color, const char *message) {

View File

@ -302,15 +302,15 @@ public:
void CrossZoneSignal(uint8 update_type, int update_identifier, uint32 signal, const char* client_name = ""); void CrossZoneSignal(uint8 update_type, int update_identifier, uint32 signal, const char* client_name = "");
void CrossZoneSpell(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 spell_id, const char* client_name = ""); void CrossZoneSpell(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 spell_id, const char* client_name = "");
void CrossZoneTaskUpdate(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 task_identifier, int task_subidentifier = -1, int update_count = 1, bool enforce_level_requirement = false, const char* client_name = ""); void CrossZoneTaskUpdate(uint8 update_type, uint8 update_subtype, int update_identifier, uint32 task_identifier, int task_subidentifier = -1, int update_count = 1, bool enforce_level_requirement = false, const char* client_name = "");
void WorldWideDialogueWindow(const char* message, uint8 min_status = 0, uint8 max_status = 0); void WorldWideDialogueWindow(const char* message, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideLDoNUpdate(uint8 update_type, uint32 theme_id, int points = 1, uint8 min_status = 0, uint8 max_status = 0); void WorldWideLDoNUpdate(uint8 update_type, uint32 theme_id, int points = 1, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideMarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char* message, uint8 min_status = 0, uint8 max_status = 0); void WorldWideMarquee(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, const char* message, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideMessage(uint32 type, const char* message, uint8 min_status = 0, uint8 max_status = 0); void WorldWideMessage(uint32 type, const char* message, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideMove(uint8 update_type, const char* zone_short_name, uint16 instance_id = 0, uint8 min_status = 0, uint8 max_status = 0); void WorldWideMove(uint8 update_type, const char* zone_short_name, uint16 instance_id = 0, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideSetEntityVariable(uint8 update_type, const char* variable_name, const char* variable_value, uint8 min_status = 0, uint8 max_status = 0); void WorldWideSetEntityVariable(uint8 update_type, const char* variable_name, const char* variable_value, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideSignal(uint8 update_type, uint32 signal, uint8 min_status = 0, uint8 max_status = 0); void WorldWideSignal(uint8 update_type, uint32 signal, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideSpell(uint8 update_type, uint32 spell_id, uint8 min_status = 0, uint8 max_status = 0); void WorldWideSpell(uint8 update_type, uint32 spell_id, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
void WorldWideTaskUpdate(uint8 update_type, uint32 task_identifier, int task_subidentifier = -1, int update_count = 1, bool enforce_level_requirement = false, uint8 min_status = 0, uint8 max_status = 0); void WorldWideTaskUpdate(uint8 update_type, uint32 task_identifier, int task_subidentifier = -1, int update_count = 1, bool enforce_level_requirement = false, uint8 min_status = AccountStatus::Player, uint8 max_status = AccountStatus::Player);
bool EnableRecipe(uint32 recipe_id); bool EnableRecipe(uint32 recipe_id);
bool DisableRecipe(uint32 recipe_id); bool DisableRecipe(uint32 recipe_id);
void ClearNPCTypeCache(int npctype_id); void ClearNPCTypeCache(int npctype_id);

View File

@ -2183,7 +2183,7 @@ bool Mob::SpellFinished(uint16 spell_id, Mob *spell_target, CastingSlot slot, ui
( (
this->IsClient() && this->IsClient() &&
(zone->GetZoneID() == 183 || zone->GetZoneID() == 184) && // load (zone->GetZoneID() == 183 || zone->GetZoneID() == 184) && // load
CastToClient()->Admin() < 80 CastToClient()->Admin() < AccountStatus::QuestTroupe
) )
{ {
if if

View File

@ -205,41 +205,45 @@ void Trade::LogTrade()
item_count++; item_count++;
} }
if (((this->cp + this->sp + this->gp + this->pp)>0) || (item_count>0)) if ((cp + sp + gp + pp) || item_count) {
admin_level = trader->Admin(); admin_level = trader->Admin();
else } else {
admin_level = 999; admin_level = (AccountStatus::Max + 1);
}
if (zone->tradevar == 7) { if (zone->tradevar == 7) {
logtrade = true; logtrade = true;
} } else if (
else if ((admin_level>=10) && (admin_level<20)) { admin_level >= AccountStatus::Steward &&
if ((zone->tradevar<8) && (zone->tradevar>5)) admin_level < AccountStatus::ApprenticeGuide
) {
if (zone->tradevar < 8 && zone->tradevar > 5) {
logtrade = true; logtrade = true;
} }
else if (admin_level<=20) { } else if (admin_level <= AccountStatus::ApprenticeGuide) {
if ((zone->tradevar<8) && (zone->tradevar>4)) if (zone->tradevar < 8 && zone->tradevar > 4) {
logtrade = true; logtrade = true;
} }
else if (admin_level<=80) { } else if (admin_level <= AccountStatus::QuestTroupe) {
if ((zone->tradevar<8) && (zone->tradevar>3)) if (zone->tradevar < 8 && zone->tradevar > 3) {
logtrade = true; logtrade = true;
} }
else if (admin_level<=100){ } else if (admin_level <= AccountStatus::GMAdmin) {
if ((zone->tradevar<9) && (zone->tradevar>2)) if (zone->tradevar < 9 && zone->tradevar > 2) {
logtrade = true; logtrade = true;
} }
else if (admin_level<=150){ } else if (admin_level <= AccountStatus::GMLeadAdmin) {
if (((zone->tradevar<8) && (zone->tradevar>1)) || (zone->tradevar==9)) if ((zone->tradevar < 8 && zone->tradevar > 1) || zone->tradevar == 9) {
logtrade = true; logtrade = true;
} }
else if (admin_level<=255){ } else if (admin_level <= AccountStatus::Max){
if ((zone->tradevar<8) && (zone->tradevar>0)) if (zone->tradevar < 8 && zone->tradevar > 0) {
logtrade = true; logtrade = true;
} }
} }
}
if (logtrade == true) { if (logtrade) {
char logtext[1000] = {0}; char logtext[1000] = {0};
uint32 cash = 0; uint32 cash = 0;
bool comma = false; bool comma = false;

View File

@ -161,13 +161,22 @@ void WorldServer::OnConnected() {
safe_delete(pack); safe_delete(pack);
if (is_zone_loaded) { if (is_zone_loaded) {
this->SetZoneData(zone->GetZoneID(), zone->GetInstanceID()); SetZoneData(zone->GetZoneID(), zone->GetInstanceID());
entity_list.UpdateWho(true); entity_list.UpdateWho(true);
this->SendEmoteMessage(0, 0, 15, "Zone connect: %s", zone->GetLongName()); SendEmoteMessage(
0,
0,
Chat::Yellow,
fmt::format(
"Zone Connected | {} ({})",
zone->GetLongName(),
zone->GetZoneID()
).c_str()
);
zone->GetTimeSync(); zone->GetTimeSync();
} }
else { else {
this->SetZoneData(0); SetZoneData(0);
} }
pack = new ServerPacket(ServerOP_LSZoneBoot, sizeof(ZoneBoot_Struct)); pack = new ServerPacket(ServerOP_LSZoneBoot, sizeof(ZoneBoot_Struct));
@ -449,7 +458,12 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
ServerEmoteMessage_Struct* sem = (ServerEmoteMessage_Struct*)pack->pBuffer; ServerEmoteMessage_Struct* sem = (ServerEmoteMessage_Struct*)pack->pBuffer;
if (sem->to[0] != 0) { if (sem->to[0] != 0) {
if (strcasecmp(sem->to, zone->GetShortName()) == 0) if (strcasecmp(sem->to, zone->GetShortName()) == 0)
entity_list.MessageStatus(sem->guilddbid, sem->minstatus, sem->type, (char*)sem->message); entity_list.MessageStatus(
sem->guilddbid,
sem->minstatus,
sem->type,
(char*)sem->message
);
else { else {
Client* client = entity_list.GetClientByName(sem->to); Client* client = entity_list.GetClientByName(sem->to);
if (client) { if (client) {
@ -465,11 +479,22 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
} }
else { else {
char* newmessage = 0; char* newmessage = 0;
if (strstr(sem->message, "^") == 0) if (strstr(sem->message, "^") == 0) {
entity_list.MessageStatus(sem->guilddbid, sem->minstatus, sem->type, sem->message); entity_list.MessageStatus(
else { sem->guilddbid,
for (newmessage = strtok((char*)sem->message, "^"); newmessage != nullptr; newmessage = strtok(nullptr, "^")) sem->minstatus,
entity_list.MessageStatus(sem->guilddbid, sem->minstatus, sem->type, newmessage); sem->type,
sem->message
);
} else {
for (newmessage = strtok((char*)sem->message, "^"); newmessage != nullptr; newmessage = strtok(nullptr, "^")) {
entity_list.MessageStatus(
sem->guilddbid,
sem->minstatus,
sem->type,
newmessage
);
}
} }
} }
break; break;
@ -502,7 +527,16 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
SetZoneData(0); SetZoneData(0);
} }
else { else {
SendEmoteMessage(0, 0, 15, "Zone shutdown: %s", zone->GetLongName()); SendEmoteMessage(
0,
0,
Chat::Yellow,
fmt::format(
"Zone Shutdown | {} ({})",
zone->GetLongName(),
zone->GetZoneID()
).c_str()
);
ServerZoneStateChange_struct* zst = (ServerZoneStateChange_struct *)pack->pBuffer; ServerZoneStateChange_struct* zst = (ServerZoneStateChange_struct *)pack->pBuffer;
std::cout << "Zone shutdown by " << zst->adminname << std::endl; std::cout << "Zone shutdown by " << zst->adminname << std::endl;
@ -523,7 +557,16 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
zone->StartShutdownTimer(AUTHENTICATION_TIMEOUT * 1000); zone->StartShutdownTimer(AUTHENTICATION_TIMEOUT * 1000);
} }
else { else {
SendEmoteMessage(zst->adminname, 0, 0, "Zone bootup failed: Already running '%s'", zone->GetShortName()); SendEmoteMessage(
zst->adminname,
0,
Chat::White,
fmt::format(
"Zone Bootup Failed | {} ({}) Already running",
zone->GetLongName(),
zone->GetZoneID()
).c_str()
);
} }
break; break;
} }
@ -590,7 +633,19 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
else if (client->GetAnon() == 1 && client->Admin() > szp->adminrank) else if (client->GetAnon() == 1 && client->Admin() > szp->adminrank)
break; break;
else { else {
SendEmoteMessage(szp->adminname, 0, 0, "Summoning %s to %s %1.1f, %1.1f, %1.1f", szp->name, szp->zone, szp->x_pos, szp->y_pos, szp->z_pos); SendEmoteMessage(
szp->adminname,
0,
Chat::White,
fmt::format(
"Summoning {} to {} at {:.2f}, {:.2f}, {:.2f}",
szp->name,
szp->zone,
szp->x_pos,
szp->y_pos,
szp->z_pos
).c_str()
);
} }
if (!szp->instance_id) { if (!szp->instance_id) {
client->MovePC(ZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon); client->MovePC(ZoneID(szp->zone), szp->instance_id, szp->x_pos, szp->y_pos, szp->z_pos, client->GetHeading(), szp->ignorerestrictions, GMSummon);
@ -615,13 +670,33 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
if (client) { if (client) {
if (skp->adminrank >= client->Admin()) { if (skp->adminrank >= client->Admin()) {
client->WorldKick(); client->WorldKick();
if (is_zone_loaded) SendEmoteMessage(
SendEmoteMessage(skp->adminname, 0, 0, "Remote Kick: %s booted in zone %s.", skp->name, zone->GetShortName()); skp->adminname,
else 0,
SendEmoteMessage(skp->adminname, 0, 0, "Remote Kick: %s booted.", skp->name); Chat::White,
fmt::format(
"Remote Kick | {} booted{}",
skp->name,
is_zone_loaded ?
fmt::format(
"in {} ({})",
zone->GetLongName(),
zone->GetZoneID()
) :
""
).c_str()
);
} else if (client->GetAnon() != 1) {
SendEmoteMessage(
skp->adminname,
0,
Chat::White,
fmt::format(
"Remote Kick | Your Status Level is not high enough to kick {}.",
skp->name
).c_str()
);
} }
else if (client->GetAnon() != 1)
SendEmoteMessage(skp->adminname, 0, 0, "Remote Kick: Your avatar level is not high enough to kick %s", skp->name);
} }
break; break;
} }
@ -631,13 +706,33 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
if (client) { if (client) {
if (skp->admin >= client->Admin()) { if (skp->admin >= client->Admin()) {
client->GMKill(); client->GMKill();
if (is_zone_loaded) SendEmoteMessage(
SendEmoteMessage(skp->gmname, 0, 0, "Remote Kill: %s killed in zone %s.", skp->target, zone->GetShortName()); skp->gmname,
else 0,
SendEmoteMessage(skp->gmname, 0, 0, "Remote Kill: %s killed.", skp->target); Chat::White,
fmt::format(
"Remote Kill | {} killed{}",
skp->target,
is_zone_loaded ?
fmt::format(
"in {} ({})",
zone->GetLongName(),
zone->GetZoneID()
) :
""
).c_str()
);
} else if (client->GetAnon() != 1) {
SendEmoteMessage(
skp->gmname,
0,
Chat::White,
fmt::format(
"Remote Kill | Your Status Level is not high enough to kill {}",
skp->target
).c_str()
);
} }
else if (client->GetAnon() != 1)
SendEmoteMessage(skp->gmname, 0, 0, "Remote Kill: Your avatar level is not high enough to kill %s", skp->target);
} }
break; break;
} }
@ -674,7 +769,20 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
ServerGMGoto_Struct* gmg = (ServerGMGoto_Struct*)pack->pBuffer; ServerGMGoto_Struct* gmg = (ServerGMGoto_Struct*)pack->pBuffer;
Client* client = entity_list.GetClientByName(gmg->gotoname); Client* client = entity_list.GetClientByName(gmg->gotoname);
if (client) { if (client) {
SendEmoteMessage(gmg->myname, 0, 13, "Summoning you to: %s @ %s, %1.1f, %1.1f, %1.1f", client->GetName(), zone->GetShortName(), client->GetX(), client->GetY(), client->GetZ()); SendEmoteMessage(
gmg->myname,
0,
Chat::Red,
fmt::format(
"Summoning you to {} ({}) in {} at {:.2f}, {:.2f}, {:.2f}",
client->GetCleanName(),
zone->GetLongName(),
zone->GetZoneID(),
client->GetX(),
client->GetY(),
client->GetZ()
).c_str()
);
auto outpack = new ServerPacket(ServerOP_ZonePlayer, sizeof(ServerZonePlayer_Struct)); auto outpack = new ServerPacket(ServerOP_ZonePlayer, sizeof(ServerZonePlayer_Struct));
ServerZonePlayer_Struct* szp = (ServerZonePlayer_Struct*)outpack->pBuffer; ServerZonePlayer_Struct* szp = (ServerZonePlayer_Struct*)outpack->pBuffer;
strcpy(szp->adminname, gmg->myname); strcpy(szp->adminname, gmg->myname);
@ -688,7 +796,15 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
safe_delete(outpack); safe_delete(outpack);
} }
else { else {
SendEmoteMessage(gmg->myname, 0, 13, "Error: %s not found", gmg->gotoname); SendEmoteMessage(
gmg->myname,
0,
Chat::Red,
fmt::format(
"Error: {} not found.",
gmg->gotoname
).c_str()
);
} }
break; break;
} }
@ -710,19 +826,17 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
} }
ServerUptime_Struct* sus = (ServerUptime_Struct*)pack->pBuffer; ServerUptime_Struct* sus = (ServerUptime_Struct*)pack->pBuffer;
uint32 ms = Timer::GetCurrentTime(); uint32 ms = Timer::GetCurrentTime();
uint32 d = ms / 86400000; std::string time_string = ConvertSecondsToTime(ms);
ms -= d * 86400000; SendEmoteMessage(
uint32 h = ms / 3600000; sus->adminname,
ms -= h * 3600000; 0,
uint32 m = ms / 60000; Chat::White,
ms -= m * 60000; fmt::format(
uint32 s = ms / 1000; "Zoneserver {} | Uptime: {}",
if (d) sus->zoneserverid,
this->SendEmoteMessage(sus->adminname, 0, 0, "Zone #%i Uptime: %02id %02ih %02im %02is", sus->zoneserverid, d, h, m, s); time_string
else if (h) ).c_str()
this->SendEmoteMessage(sus->adminname, 0, 0, "Zone #%i Uptime: %02ih %02im %02is", sus->zoneserverid, h, m, s); );
else
this->SendEmoteMessage(sus->adminname, 0, 0, "Zone #%i Uptime: %02im %02is", sus->zoneserverid, m, s);
} }
case ServerOP_Petition: { case ServerOP_Petition: {
std::cout << "Got Server Requested Petition List Refresh" << std::endl; std::cout << "Got Server Requested Petition List Refresh" << std::endl;
@ -856,9 +970,19 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
case ServerOP_Revoke: { case ServerOP_Revoke: {
RevokeStruct* rev = (RevokeStruct*)pack->pBuffer; RevokeStruct* rev = (RevokeStruct*)pack->pBuffer;
Client* client = entity_list.GetClientByName(rev->name); Client* client = entity_list.GetClientByName(rev->name);
if (client) if (client) {
{ SendEmoteMessage(
SendEmoteMessage(rev->adminname, 0, 0, "%s: %srevoking %s", zone->GetShortName(), rev->toggle ? "" : "un", client->GetName()); rev->adminname,
0,
Chat::White,
fmt::format(
"Zone {} ({}) | {} {}.",
zone->GetLongName(),
zone->GetZoneID(),
rev->toggle ? "Revoking" : "Unrevoking",
client->GetCleanName()
).c_str()
);
client->SetRevoked(rev->toggle); client->SetRevoked(rev->toggle);
} }
break; break;
@ -1826,12 +1950,30 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
break; break;
} }
case ServerOP_ReloadRules: { case ServerOP_ReloadRules: {
if (zone) {
worldserver.SendEmoteMessage( worldserver.SendEmoteMessage(
0, 0, 100, 15, 0,
"Rules reloaded for Zone: '%s' Instance ID: %u", 0,
(zone ? zone->GetLongName() : StringFormat("Null zone pointer [pid]:[%i]", getpid()).c_str()), AccountStatus::GMAdmin,
(zone ? zone->GetInstanceID() : 0xFFFFFFFFF) Chat::Yellow,
fmt::format(
"Rules reloaded for {}.",
fmt::format(
"{} ({})",
zone->GetLongName(),
zone->GetZoneID()
),
(
zone->GetInstanceID() ?
fmt::format(
"Instance ID: {}",
zone->GetInstanceID()
) :
""
)
).c_str()
); );
}
RuleManager::Instance()->LoadRules(&database, RuleManager::Instance()->GetActiveRuleset(), true); RuleManager::Instance()->LoadRules(&database, RuleManager::Instance()->GetActiveRuleset(), true);
break; break;
} }
@ -2716,7 +2858,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 min_status = WWDW->min_status; uint8 min_status = WWDW->min_status;
uint8 max_status = WWDW->max_status; uint8 max_status = WWDW->max_status;
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
DialogueWindow::Render(client.second, message); DialogueWindow::Render(client.second, message);
} }
} }
@ -2733,27 +2875,27 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
switch (update_type) { switch (update_type) {
case WWLDoNUpdateType_AddLoss: case WWLDoNUpdateType_AddLoss:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->UpdateLDoNWinLoss(theme_id, false); client.second->UpdateLDoNWinLoss(theme_id, false);
} }
break; break;
case WWLDoNUpdateType_AddPoints: case WWLDoNUpdateType_AddPoints:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->UpdateLDoNPoints(theme_id, points); client.second->UpdateLDoNPoints(theme_id, points);
} }
break; break;
case WWLDoNUpdateType_AddWin: case WWLDoNUpdateType_AddWin:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->UpdateLDoNWinLoss(theme_id, true); client.second->UpdateLDoNWinLoss(theme_id, true);
} }
break; break;
case WWLDoNUpdateType_RemoveLoss: case WWLDoNUpdateType_RemoveLoss:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->UpdateLDoNWinLoss(theme_id, false, true); client.second->UpdateLDoNWinLoss(theme_id, false, true);
} }
break; break;
case WWLDoNUpdateType_RemoveWin: case WWLDoNUpdateType_RemoveWin:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->UpdateLDoNWinLoss(theme_id, true, true); client.second->UpdateLDoNWinLoss(theme_id, true, true);
} }
break; break;
@ -2773,7 +2915,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 min_status = WWM->min_status; uint8 min_status = WWM->min_status;
uint8 max_status = WWM->max_status; uint8 max_status = WWM->max_status;
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message); client.second->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message);
} }
} }
@ -2787,7 +2929,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 min_status = WWM->min_status; uint8 min_status = WWM->min_status;
uint8 max_status = WWM->max_status; uint8 max_status = WWM->max_status;
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->Message(type, message); client.second->Message(type, message);
} }
} }
@ -2804,12 +2946,12 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
switch (update_type) { switch (update_type) {
case WWMoveUpdateType_MoveZone: case WWMoveUpdateType_MoveZone:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->MoveZone(zone_short_name); client.second->MoveZone(zone_short_name);
} }
break; break;
case WWMoveUpdateType_MoveZoneInstance: case WWMoveUpdateType_MoveZoneInstance:
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->MoveZoneInstance(instance_id); client.second->MoveZoneInstance(instance_id);
} }
break; break;
@ -2827,7 +2969,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 max_status = WWSEV->max_status; uint8 max_status = WWSEV->max_status;
if (update_type == WWSetEntityVariableUpdateType_Character) { if (update_type == WWSetEntityVariableUpdateType_Character) {
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->SetEntityVariable(variable_name, variable_value); client.second->SetEntityVariable(variable_name, variable_value);
} }
} }
@ -2847,7 +2989,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 max_status = WWS->max_status; uint8 max_status = WWS->max_status;
if (update_type == WWSignalUpdateType_Character) { if (update_type == WWSignalUpdateType_Character) {
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->Signal(signal); client.second->Signal(signal);
} }
} }
@ -2867,13 +3009,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 max_status = WWS->max_status; uint8 max_status = WWS->max_status;
if (update_type == WWSpellUpdateType_Cast) { if (update_type == WWSpellUpdateType_Cast) {
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->SpellFinished(spell_id, client.second); client.second->SpellFinished(spell_id, client.second);
} }
} }
} else if (update_type == WWSpellUpdateType_Remove) { } else if (update_type == WWSpellUpdateType_Remove) {
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
client.second->BuffFadeBySpellID(spell_id); client.second->BuffFadeBySpellID(spell_id);
} }
} }
@ -2891,7 +3033,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
uint8 min_status = WWTU->min_status; uint8 min_status = WWTU->min_status;
uint8 max_status = WWTU->max_status; uint8 max_status = WWTU->max_status;
for (auto &client : entity_list.GetClientList()) { for (auto &client : entity_list.GetClientList()) {
if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == 0)) { if (client.second->Admin() >= min_status && (client.second->Admin() <= max_status || max_status == AccountStatus::Player)) {
switch (update_type) { switch (update_type) {
case WWTaskUpdateType_ActivityReset: case WWTaskUpdateType_ActivityReset:
client.second->ResetTaskActivity(task_identifier, task_subidentifier); client.second->ResetTaskActivity(task_identifier, task_subidentifier);
@ -2959,11 +3101,28 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
if (request_zone_short_name == local_zone_short_name || can_reload_global_script) { if (request_zone_short_name == local_zone_short_name || can_reload_global_script) {
zone->SetQuestHotReloadQueued(true); zone->SetQuestHotReloadQueued(true);
} else if (request_zone_short_name == "all") { } else if (request_zone_short_name == "all") {
std::string reload_quest_saylink = EQ::SayLinkEngine::GenerateQuestSaylink("#reloadquest", false, "Locally"); std::string reload_quest_saylink = EQ::SayLinkEngine::GenerateQuestSaylink(
std::string reload_world_saylink = EQ::SayLinkEngine::GenerateQuestSaylink("#reloadworld", false, "Globally"); "#reloadquest",
worldserver.SendEmoteMessage(0, 0, 20, 15, "A quest, plugin, or global script has changed reload quests [%s] [%s].", reload_quest_saylink.c_str(), reload_world_saylink.c_str()); false,
"Locally"
);
std::string reload_world_saylink = EQ::SayLinkEngine::GenerateQuestSaylink(
"#reloadworld",
false,
"Globally"
);
worldserver.SendEmoteMessage(
0,
0,
AccountStatus::ApprenticeGuide,
Chat::Yellow,
fmt::format(
"A quest, plugin, or global script has changed. Reload: [{}] [{}]",
reload_quest_saylink,
reload_world_saylink
).c_str()
);
} }
break; break;
} }
case ServerOP_ChangeSharedMem: case ServerOP_ChangeSharedMem:
@ -3075,7 +3234,7 @@ bool WorldServer::SendChannelMessage(Client* from, const char* to, uint8 chan_nu
if (from == 0) { if (from == 0) {
strcpy(scm->from, "ZServer"); strcpy(scm->from, "ZServer");
scm->fromadmin = 0; scm->fromadmin = AccountStatus::Player;
} }
else { else {
strcpy(scm->from, from->GetName()); strcpy(scm->from, from->GetName());
@ -3110,7 +3269,13 @@ bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, uint32 t
vsnprintf(buffer, sizeof(buffer) - 1, message, argptr); vsnprintf(buffer, sizeof(buffer) - 1, message, argptr);
va_end(argptr); va_end(argptr);
return SendEmoteMessage(to, to_guilddbid, 0, type, buffer); return SendEmoteMessage(
to,
to_guilddbid,
AccountStatus::Player,
type,
buffer
);
} }
bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, int16 to_minstatus, uint32 type, const char* message, ...) { bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, int16 to_minstatus, uint32 type, const char* message, ...) {
@ -3122,7 +3287,12 @@ bool WorldServer::SendEmoteMessage(const char* to, uint32 to_guilddbid, int16 to
va_end(argptr); va_end(argptr);
if (!Connected() && to == 0) { if (!Connected() && to == 0) {
entity_list.MessageStatus(to_guilddbid, to_minstatus, type, buffer); entity_list.MessageStatus(
to_guilddbid,
to_minstatus,
type,
buffer
);
return false; return false;
} }

View File

@ -328,24 +328,29 @@ public:
auto message_split = SplitString(message, '\n'); auto message_split = SplitString(message, '\n');
entity_list.MessageStatus( entity_list.MessageStatus(
0, 0,
80, AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category), LogSys.GetGMSayColorFromCategory(log_category),
"%s",
message_split[0].c_str() message_split[0].c_str()
); );
for (size_t iter = 1; iter < message_split.size(); ++iter) { for (size_t iter = 1; iter < message_split.size(); ++iter) {
entity_list.MessageStatus( entity_list.MessageStatus(
0, 0,
80, AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category), LogSys.GetGMSayColorFromCategory(log_category),
"--- %s", fmt::format(
message_split[iter].c_str() "--- {}",
message_split[iter]
).c_str()
); );
} }
} } else {
else { entity_list.MessageStatus(
entity_list.MessageStatus(0, 80, LogSys.GetGMSayColorFromCategory(log_category), "%s", message.c_str()); 0,
AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category),
message.c_str()
);
} }
} }

View File

@ -181,7 +181,7 @@ void Client::Handle_OP_ZoneChange(const EQApplicationPacket *app) {
/* Load up the Safe Coordinates, restrictions and verify the zone name*/ /* Load up the Safe Coordinates, restrictions and verify the zone name*/
float safe_x, safe_y, safe_z, safe_heading; float safe_x, safe_y, safe_z, safe_heading;
int16 min_status = 0; int16 min_status = AccountStatus::Player;
uint8 min_level = 0; uint8 min_level = 0;
char flag_needed[128]; char flag_needed[128];
if(!content_db.GetSafePoints( if(!content_db.GetSafePoints(
@ -1059,7 +1059,7 @@ void Client::SendZoneFlagInfo(Client *to) const {
const char* zone_short_name = ZoneName(zone_id); const char* zone_short_name = ZoneName(zone_id);
std::string zone_long_name = zone_store.GetZoneLongName(zone_id); std::string zone_long_name = zone_store.GetZoneLongName(zone_id);
float safe_x, safe_y, safe_z, safe_heading; float safe_x, safe_y, safe_z, safe_heading;
int16 min_status = 0; int16 min_status = AccountStatus::Player;
uint8 min_level = 0; uint8 min_level = 0;
char flag_name[128]; char flag_name[128];
if(!content_db.GetSafePoints( if(!content_db.GetSafePoints(
@ -1089,7 +1089,7 @@ bool Client::CanBeInZone() {
return(true); return(true);
float safe_x, safe_y, safe_z, safe_heading; float safe_x, safe_y, safe_z, safe_heading;
int16 min_status = 0; int16 min_status = AccountStatus::Player;
uint8 min_level = 0; uint8 min_level = 0;
char flag_needed[128]; char flag_needed[128];
if(!content_db.GetSafePoints( if(!content_db.GetSafePoints(