mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 18:51:29 +00:00
[Commands] Cleanup #zonebootup and #zoneshutdown Commands (#3729)
# Notes - Cleanup messages and logic.
This commit is contained in:
parent
e719aa43cf
commit
11a81d8e8a
@ -461,12 +461,12 @@ struct SPackSendQueue {
|
|||||||
uchar buffer[0];
|
uchar buffer[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ServerZoneStateChange_struct {
|
struct ServerZoneStateChange_Struct {
|
||||||
uint32 ZoneServerID;
|
uint32 zone_server_id;
|
||||||
char adminname[64];
|
uint32 zone_id;
|
||||||
uint32 zoneid;
|
uint16 instance_id;
|
||||||
uint16 instanceid;
|
bool is_static;
|
||||||
bool makestatic;
|
char admin_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ServerZoneIncomingClient_Struct {
|
struct ServerZoneIncomingClient_Struct {
|
||||||
|
|||||||
@ -578,25 +578,25 @@ void ConsoleZoneShutdown(
|
|||||||
strcpy(&tmpname[1], connection->UserName().c_str());
|
strcpy(&tmpname[1], connection->UserName().c_str());
|
||||||
|
|
||||||
auto pack = new ServerPacket;
|
auto pack = new ServerPacket;
|
||||||
pack->size = sizeof(ServerZoneStateChange_struct);
|
pack->size = sizeof(ServerZoneStateChange_Struct);
|
||||||
pack->pBuffer = new uchar[pack->size];
|
pack->pBuffer = new uchar[pack->size];
|
||||||
memset(pack->pBuffer, 0, sizeof(ServerZoneStateChange_struct));
|
memset(pack->pBuffer, 0, sizeof(ServerZoneStateChange_Struct));
|
||||||
ServerZoneStateChange_struct *s = (ServerZoneStateChange_struct *) pack->pBuffer;
|
auto *s = (ServerZoneStateChange_Struct *) pack->pBuffer;
|
||||||
pack->opcode = ServerOP_ZoneShutdown;
|
pack->opcode = ServerOP_ZoneShutdown;
|
||||||
strcpy(s->adminname, tmpname);
|
strcpy(s->admin_name, tmpname);
|
||||||
if (Strings::IsNumber(args[0])) {
|
if (Strings::IsNumber(args[0])) {
|
||||||
s->ZoneServerID = Strings::ToInt(args[0]);
|
s->zone_server_id = Strings::ToInt(args[0]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
s->zoneid = ZoneID(args[0].c_str());
|
s->zone_id = ZoneID(args[0].c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
ZoneServer *zs = 0;
|
ZoneServer *zs = 0;
|
||||||
if (s->ZoneServerID != 0) {
|
if (s->zone_server_id != 0) {
|
||||||
zs = zoneserver_list.FindByID(s->ZoneServerID);
|
zs = zoneserver_list.FindByID(s->zone_server_id);
|
||||||
}
|
}
|
||||||
else if (s->zoneid != 0) {
|
else if (s->zone_id != 0) {
|
||||||
zs = zoneserver_list.FindByName(ZoneName(s->zoneid));
|
zs = zoneserver_list.FindByName(ZoneName(s->zone_id));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
connection->SendLine("Error: ZoneShutdown: neither ID nor name specified");
|
connection->SendLine("Error: ZoneShutdown: neither ID nor name specified");
|
||||||
|
|||||||
@ -720,15 +720,15 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_ZoneShutdown: {
|
case ServerOP_ZoneShutdown: {
|
||||||
auto s = (ServerZoneStateChange_struct*) pack->pBuffer;
|
auto *s = (ServerZoneStateChange_Struct*) pack->pBuffer;
|
||||||
ZoneServer* zs = 0;
|
ZoneServer* zs = 0;
|
||||||
if (s->ZoneServerID) {
|
if (s->zone_server_id) {
|
||||||
zs = zoneserver_list.FindByID(s->ZoneServerID);
|
zs = zoneserver_list.FindByID(s->zone_server_id);
|
||||||
} else if (s->zoneid) {
|
} else if (s->zone_id) {
|
||||||
zs = zoneserver_list.FindByName(ZoneName(s->zoneid));
|
zs = zoneserver_list.FindByName(ZoneName(s->zone_id));
|
||||||
} else {
|
} else {
|
||||||
zoneserver_list.SendEmoteMessage(
|
zoneserver_list.SendEmoteMessage(
|
||||||
s->adminname,
|
s->admin_name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
Chat::White,
|
Chat::White,
|
||||||
@ -738,7 +738,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
|
|||||||
|
|
||||||
if (!zs) {
|
if (!zs) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
zoneserver_list.SendEmoteMessage(
|
||||||
s->adminname,
|
s->admin_name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
Chat::White,
|
Chat::White,
|
||||||
@ -751,8 +751,8 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_ZoneBootup: {
|
case ServerOP_ZoneBootup: {
|
||||||
auto s = (ServerZoneStateChange_struct*) pack->pBuffer;
|
auto *s = (ServerZoneStateChange_Struct*) pack->pBuffer;
|
||||||
zoneserver_list.SOPZoneBootup(s->adminname, s->ZoneServerID, ZoneName(s->zoneid), s->makestatic);
|
zoneserver_list.SOPZoneBootup(s->admin_name, s->zone_server_id, ZoneName(s->zone_id), s->is_static);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_ZoneStatus: {
|
case ServerOP_ZoneStatus: {
|
||||||
@ -1606,20 +1606,23 @@ void ZoneServer::ChangeWID(uint32 iCharID, uint32 iWID) {
|
|||||||
|
|
||||||
|
|
||||||
void ZoneServer::TriggerBootup(uint32 in_zone_id, uint32 in_instance_id, const char* admin_name, bool is_static_zone) {
|
void ZoneServer::TriggerBootup(uint32 in_zone_id, uint32 in_instance_id, const char* admin_name, bool is_static_zone) {
|
||||||
is_booting_up = true;
|
is_booting_up = true;
|
||||||
zone_server_zone_id = in_zone_id;
|
zone_server_zone_id = in_zone_id;
|
||||||
instance_id = in_instance_id;
|
instance_id = in_instance_id;
|
||||||
|
|
||||||
|
auto pack = new ServerPacket(ServerOP_ZoneBootup, sizeof(ServerZoneStateChange_Struct));
|
||||||
|
auto *s = (ServerZoneStateChange_Struct*) pack->pBuffer;
|
||||||
|
|
||||||
|
s->zone_server_id = zone_server_id;
|
||||||
|
|
||||||
|
s->zone_id = in_zone_id ? in_zone_id : GetZoneID();
|
||||||
|
s->instance_id = in_instance_id;
|
||||||
|
s->is_static = is_static_zone;
|
||||||
|
|
||||||
auto pack = new ServerPacket(ServerOP_ZoneBootup, sizeof(ServerZoneStateChange_struct));
|
|
||||||
auto s = (ServerZoneStateChange_struct*) pack->pBuffer;
|
|
||||||
s->ZoneServerID = zone_server_id;
|
|
||||||
if (admin_name) {
|
if (admin_name) {
|
||||||
strn0cpy(s->adminname, admin_name, sizeof(s->adminname));
|
strn0cpy(s->admin_name, admin_name, sizeof(s->admin_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
s->zoneid = in_zone_id ? in_zone_id : GetZoneID();
|
|
||||||
s->instanceid = in_instance_id;
|
|
||||||
s->makestatic = is_static_zone;
|
|
||||||
SendPacket(pack);
|
SendPacket(pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
LSBootUpdate(in_zone_id, in_instance_id);
|
LSBootUpdate(in_zone_id, in_instance_id);
|
||||||
|
|||||||
@ -5,21 +5,43 @@ extern WorldServer worldserver;
|
|||||||
|
|
||||||
void command_zonebootup(Client *c, const Seperator *sep)
|
void command_zonebootup(Client *c, const Seperator *sep)
|
||||||
{
|
{
|
||||||
if (!worldserver.Connected()) {
|
const int arguments = sep->argnum;
|
||||||
c->Message(Chat::White, "Error: World server disconnected");
|
if (arguments < 2 || !sep->IsNumber(1)) {
|
||||||
|
c->Message(Chat::White, "Usage: #zonebootup [Zone Server ID] [Zone ID|Zone Short Name] [Instance ID]");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (sep->arg[2][0] == 0) {
|
|
||||||
c->Message(Chat::White, "Usage: #zonebootup ZoneServerID# zoneshortname");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
auto pack = new ServerPacket(ServerOP_ZoneBootup, sizeof(ServerZoneStateChange_struct));
|
|
||||||
ServerZoneStateChange_struct *s = (ServerZoneStateChange_struct *) pack->pBuffer;
|
|
||||||
s->ZoneServerID = Strings::ToInt(sep->arg[1]);
|
|
||||||
strcpy(s->adminname, c->GetName());
|
|
||||||
s->zoneid = ZoneID(sep->arg[2]);
|
|
||||||
s->makestatic = (bool) (strcasecmp(sep->arg[3], "static") == 0);
|
|
||||||
worldserver.SendPacket(pack);
|
|
||||||
safe_delete(pack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!worldserver.Connected()) {
|
||||||
|
c->Message(Chat::White, "World server disconnected.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint32 zone_server_id = Strings::ToUnsignedInt(sep->arg[1]);
|
||||||
|
const uint32 zone_id = Strings::IsNumber(sep->arg[2]) ? Strings::ToUnsignedInt(sep->arg[2]) : ZoneID(sep->arg[2]);
|
||||||
|
const bool is_static = arguments > 2 ? !strcasecmp(sep->arg[3], "static") : false;
|
||||||
|
const uint16 instance_id = arguments > 3 ? static_cast<uint16>(Strings::ToUnsignedInt(sep->arg[4])) : 0;
|
||||||
|
|
||||||
|
if (!zone_id) {
|
||||||
|
c->Message(
|
||||||
|
Chat::White,
|
||||||
|
fmt::format(
|
||||||
|
"Zone '{}' does not exist.",
|
||||||
|
sep->arg[1]
|
||||||
|
).c_str()
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto pack = new ServerPacket(ServerOP_ZoneBootup, sizeof(ServerZoneStateChange_Struct));
|
||||||
|
auto *s = (ServerZoneStateChange_Struct *) pack->pBuffer;
|
||||||
|
|
||||||
|
s->zone_server_id = zone_server_id;
|
||||||
|
s->zone_id = zone_id;
|
||||||
|
s->instance_id = instance_id;
|
||||||
|
s->is_static = is_static;
|
||||||
|
|
||||||
|
strn0cpy(s->admin_name, c->GetName(), sizeof(s->admin_name));
|
||||||
|
|
||||||
|
worldserver.SendPacket(pack);
|
||||||
|
safe_delete(pack);
|
||||||
|
}
|
||||||
|
|||||||
@ -5,26 +5,37 @@ extern WorldServer worldserver;
|
|||||||
|
|
||||||
void command_zoneshutdown(Client *c, const Seperator *sep)
|
void command_zoneshutdown(Client *c, const Seperator *sep)
|
||||||
{
|
{
|
||||||
if (!worldserver.Connected()) {
|
const int arguments = sep->argnum;
|
||||||
c->Message(Chat::White, "Error: World server disconnected");
|
if (!arguments) {
|
||||||
|
c->Message(Chat::White, "Usage: #zoneshutdown [Zone ID|Zone Short Name]");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (sep->arg[1][0] == 0) {
|
|
||||||
c->Message(Chat::White, "Usage: #zoneshutdown zoneshortname");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
auto pack = new ServerPacket(
|
|
||||||
ServerOP_ZoneShutdown,
|
|
||||||
sizeof(ServerZoneStateChange_struct));
|
|
||||||
ServerZoneStateChange_struct *s = (ServerZoneStateChange_struct *) pack->pBuffer;
|
|
||||||
strcpy(s->adminname, c->GetName());
|
|
||||||
if (sep->arg[1][0] >= '0' && sep->arg[1][0] <= '9') {
|
|
||||||
s->ZoneServerID = Strings::ToInt(sep->arg[1]);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
s->zoneid = ZoneID(sep->arg[1]);
|
|
||||||
}
|
|
||||||
worldserver.SendPacket(pack);
|
|
||||||
safe_delete(pack);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (!worldserver.Connected()) {
|
||||||
|
c->Message(Chat::White, "World server disconnected.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint32 zone_id = sep->IsNumber(1) ? Strings::ToUnsignedInt(sep->arg[1]) : ZoneID(sep->arg[1]);
|
||||||
|
|
||||||
|
if (!zone_id) {
|
||||||
|
c->Message(
|
||||||
|
Chat::White,
|
||||||
|
fmt::format(
|
||||||
|
"Zone '{}' does not exist.",
|
||||||
|
sep->arg[1]
|
||||||
|
).c_str()
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto pack = new ServerPacket(ServerOP_ZoneShutdown, sizeof(ServerZoneStateChange_Struct));
|
||||||
|
auto *s = (ServerZoneStateChange_Struct *) pack->pBuffer;
|
||||||
|
|
||||||
|
s->zone_id = zone_id;
|
||||||
|
|
||||||
|
strn0cpy(s->admin_name, c->GetName(), sizeof(s->admin_name));
|
||||||
|
|
||||||
|
worldserver.SendPacket(pack);
|
||||||
|
safe_delete(pack);
|
||||||
|
}
|
||||||
|
|||||||
@ -550,15 +550,14 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_ZoneShutdown: {
|
case ServerOP_ZoneShutdown: {
|
||||||
if (pack->size != sizeof(ServerZoneStateChange_struct)) {
|
if (pack->size != sizeof(ServerZoneStateChange_Struct)) {
|
||||||
std::cout << "Wrong size on ServerOP_ZoneShutdown. Got: " << pack->size << ", Expected: " << sizeof(ServerZoneStateChange_struct) << std::endl;
|
LogError("Wrong size on ServerOP_ZoneShutdown. Got: [{}] Expected: [{}]", pack->size, sizeof(ServerZoneStateChange_Struct));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// Annouce the change to the world
|
|
||||||
if (!is_zone_loaded) {
|
if (!is_zone_loaded) {
|
||||||
SetZoneData(0);
|
SetZoneData(0);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
SendEmoteMessage(
|
SendEmoteMessage(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@ -569,27 +568,24 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
).c_str()
|
).c_str()
|
||||||
);
|
);
|
||||||
|
|
||||||
ServerZoneStateChange_struct* zst = (ServerZoneStateChange_struct *)pack->pBuffer;
|
auto *s = (ServerZoneStateChange_Struct *) pack->pBuffer;
|
||||||
std::cout << "Zone shutdown by " << zst->adminname << std::endl;
|
LogInfo("Zone shutdown by {}.", s->admin_name);
|
||||||
Zone::Shutdown();
|
Zone::Shutdown();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_ZoneBootup: {
|
case ServerOP_ZoneBootup: {
|
||||||
if (pack->size != sizeof(ServerZoneStateChange_struct)) {
|
if (pack->size != sizeof(ServerZoneStateChange_Struct)) {
|
||||||
std::cout << "Wrong size on ServerOP_ZoneBootup. Got: " << pack->size << ", Expected: " << sizeof(ServerZoneStateChange_struct) << std::endl;
|
LogError("Wrong size on ServerOP_ZoneShutdown. Got: [{}] Expected: [{}]", pack->size, sizeof(ServerZoneStateChange_Struct));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ServerZoneStateChange_struct* zst = (ServerZoneStateChange_struct *)pack->pBuffer;
|
|
||||||
|
auto *s = (ServerZoneStateChange_Struct *) pack->pBuffer;
|
||||||
if (is_zone_loaded) {
|
if (is_zone_loaded) {
|
||||||
SetZoneData(zone->GetZoneID(), zone->GetInstanceID());
|
SetZoneData(zone->GetZoneID(), zone->GetInstanceID());
|
||||||
if (zst->zoneid == zone->GetZoneID()) {
|
if (s->zone_id != zone->GetZoneID()) {
|
||||||
// This packet also doubles as "incoming client" notification, lets not shut down before they get here
|
|
||||||
// zone->StartShutdownTimer(AUTHENTICATION_TIMEOUT * 1000);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SendEmoteMessage(
|
SendEmoteMessage(
|
||||||
zst->adminname,
|
s->admin_name,
|
||||||
0,
|
0,
|
||||||
Chat::White,
|
Chat::White,
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -601,10 +597,11 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (zst->adminname[0] != 0)
|
if (s->admin_name[0] != 0) {
|
||||||
std::cout << "Zone bootup by " << zst->adminname << std::endl;
|
LogInfo("Zone bootup by {}.", s->admin_name);
|
||||||
|
}
|
||||||
|
|
||||||
Zone::Bootup(zst->zoneid, zst->instanceid, zst->makestatic);
|
Zone::Bootup(s->zone_id, s->instance_id, s->is_static);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_ZoneIncClient: {
|
case ServerOP_ZoneIncClient: {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user