diff --git a/common/servertalk.h b/common/servertalk.h
index 7f14a1f6c0..f9740752f6 100644
--- a/common/servertalk.h
+++ b/common/servertalk.h
@@ -1824,6 +1824,11 @@ struct ServerOOCMute_Struct {
bool is_muted;
};
+struct ServerZoneStatus_Struct {
+ char name[64];
+ int16 admin;
+};
+
#pragma pack()
#endif
diff --git a/world/zoneserver.cpp b/world/zoneserver.cpp
index bfd8ecd6f6..c79debaafe 100644
--- a/world/zoneserver.cpp
+++ b/world/zoneserver.cpp
@@ -748,7 +748,8 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
}
case ServerOP_ZoneStatus: {
if (pack->size >= 1) {
- zoneserver_list.SendZoneStatus((char *)&pack->pBuffer[1], (uint8)pack->pBuffer[0], this);
+ auto z = (ServerZoneStatus_Struct*) pack->pBuffer;
+ zoneserver_list.SendZoneStatus(z->name, z->admin, this);
}
break;
diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp
index fb3b00a6bb..d52b26cb44 100644
--- a/zone/client_packet.cpp
+++ b/zone/client_packet.cpp
@@ -6779,16 +6779,14 @@ void Client::Handle_OP_GMSearchCorpse(const EQApplicationPacket *app)
void Client::Handle_OP_GMServers(const EQApplicationPacket *app)
{
- if (!worldserver.Connected())
- Message(Chat::Red, "Error: World server disconnected");
- else {
- auto pack = new ServerPacket(ServerOP_ZoneStatus, strlen(GetName()) + 2);
- memset(pack->pBuffer, (uint8)admin, 1);
- strcpy((char *)&pack->pBuffer[1], GetName());
- worldserver.SendPacket(pack);
- safe_delete(pack);
- }
- return;
+ auto pack = new ServerPacket(ServerOP_ZoneStatus, sizeof(ServerZoneStatus_Struct));
+
+ auto z = (ServerZoneStatus_Struct *) pack->pBuffer;
+ z->admin = Admin();
+ strn0cpy(z->name, GetName(), sizeof(z->name));
+
+ worldserver.SendPacket(pack);
+ delete pack;
}
void Client::Handle_OP_GMSummon(const EQApplicationPacket *app)
diff --git a/zone/command.cpp b/zone/command.cpp
index 3bb662d0c9..9284d67223 100644
--- a/zone/command.cpp
+++ b/zone/command.cpp
@@ -86,7 +86,6 @@ int command_init(void)
if (
command_add("acceptrules", "[acceptrules] - Accept the EQEmu Agreement", AccountStatus::Player, command_acceptrules) ||
command_add("advnpcspawn", "[maketype|makegroup|addgroupentry|addgroupspawn][removegroupspawn|movespawn|editgroupbox|cleargroupbox]", AccountStatus::GMLeadAdmin, command_advnpcspawn) ||
- command_add("aggro", "[Distance] [-v] - Display aggro information for all mobs 'Distance' distance from your target. (-v is verbose Faction Information)", 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.", AccountStatus::GMAdmin, command_aggrozone) ||
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", AccountStatus::GMLeadAdmin, command_appearance) ||
@@ -101,12 +100,10 @@ int command_init(void)
command_add("camerashake", "[Duration (Milliseconds)] [Intensity (1-10)] - 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", AccountStatus::Guide, command_castspell) ||
command_add("chat", "[Channel ID] [Message] - Send a channel message to all zones", AccountStatus::GMMgmt, command_chat) ||
- 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", AccountStatus::GMImpossible, command_copycharacter) ||
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", AccountStatus::Player, command_corpsefix) ||
command_add("countitem", "[Item ID] - Counts the specified Item ID in your or your target's inventory", AccountStatus::GMLeadAdmin, command_countitem) ||
- command_add("cvs", "Summary of client versions currently online.", AccountStatus::GMMgmt, command_cvs) ||
command_add("damage", "[Amount] - Damage yourself or your target", AccountStatus::GMAdmin, command_damage) ||
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", "[Year] [Month] [Day] [Hour] [Minute] - Set EQ time (Hour and Minute are optional)", AccountStatus::EQSupport, command_date) ||
@@ -118,7 +115,6 @@ int command_init(void)
command_add("devtools", "[Enable|Disable] - Manages Developer Tools (send no parameter for menu)", AccountStatus::GMMgmt, command_devtools) ||
command_add("disablerecipe", "[Recipe ID] - Disables a Recipe", AccountStatus::QuestTroupe, command_disablerecipe) ||
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.", AccountStatus::QuestTroupe, command_distance) ||
command_add("door", "Door editing command", AccountStatus::QuestTroupe, command_door) ||
command_add("doanim", "[Animation ID|Animation Name] [Speed] - Send an animation by ID or name at the specified speed to you or your target (Speed is optional)", 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.", AccountStatus::ApprenticeGuide, command_dye) ||
@@ -126,7 +122,6 @@ int command_init(void)
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", AccountStatus::GMAdmin, command_editmassrespawn) ||
command_add("emote", "[Name|World|Zone] [type] [message] - Send an emote message by name, to the world, or to your zone (^ separator allows multiple messages to be sent at once)", AccountStatus::QuestTroupe, command_emote) ||
- command_add("emoteview", "Lists all NPC Emotes", AccountStatus::QuestTroupe, command_emoteview) ||
command_add("emptyinventory", "Clears your or your target's entire inventory (Equipment, General, Bank, and Shared Bank)", AccountStatus::GMImpossible, command_emptyinventory) ||
command_add("enablerecipe", "[Recipe ID] - Enables a Recipe", AccountStatus::QuestTroupe, command_enablerecipe) ||
command_add("endurance", "Restores your or your target's endurance.", AccountStatus::Guide, command_endurance) ||
@@ -140,19 +135,13 @@ int command_init(void)
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] [Account Name] - 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. Use #flagedit help for more info.", AccountStatus::GMAdmin, command_flagedit) ||
- command_add("flags", "displays the Zone 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", AccountStatus::Guide, command_flymode) ||
- 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", AccountStatus::QuestTroupe, command_freeze) ||
command_add("gassign", "[Grid ID] - Assign targetted NPC to predefined wandering grid id", AccountStatus::GMAdmin, command_gassign) ||
command_add("gearup", "Developer tool to quickly equip yourself or your target", AccountStatus::GMMgmt, command_gearup) ||
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 your or your target's total number of buried player corpses.", AccountStatus::GMAdmin, command_getplayerburiedcorpsecount) ||
- command_add("getvariable", "[Variable Name] - Get the value of a variable from the database", AccountStatus::GMMgmt, command_getvariable) ||
- 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.", AccountStatus::GMMgmt, command_giveitem) ||
command_add("givemoney", "[Platinum] [Gold] [Silver] [Copper] - Gives specified amount of money to you or your player target", AccountStatus::GMMgmt, command_givemoney) ||
- 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", "[On|Off] - Modify your or your target's GM Flag", AccountStatus::QuestTroupe, command_gm) ||
command_add("gmspeed", "[On|Off] - Turn GM Speed On or Off for you or your player target", AccountStatus::GMAdmin, command_gmspeed) ||
command_add("gmzone", "[Zone ID|Zone Short Name] [Version] [Instance Identifier] - Zones to a private GM instance (Version defaults to 0 and Instance Identifier defaults to 'gmzone' if not used)", AccountStatus::GMAdmin, command_gmzone) ||
@@ -161,7 +150,6 @@ int command_init(void)
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.", AccountStatus::Steward, command_guild) ||
command_add("haste", "[Percentage] - Set your or your target's GM Bonus Haste (100 is 100% more Attack Speed)", AccountStatus::GMAdmin, command_haste) ||
- command_add("hatelist", "Display hate list for NPC.", AccountStatus::QuestTroupe, command_hatelist) ||
command_add("heal", "Completely heal your target", AccountStatus::Steward, command_heal) ||
command_add("help", "[Search Criteria] - List available commands and their description, specify partial command as argument to search", AccountStatus::Player, command_help) ||
command_add("heromodel", "[Hero Model] [Slot] - Set your or your target's appearance to a full set of Hero's Forge Armor, if slot is set, sends exact model just to slot.", AccountStatus::GMMgmt, command_heromodel) ||
@@ -175,14 +163,12 @@ int command_init(void)
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", AccountStatus::QuestTroupe, command_invul) ||
command_add("ipban", "[IP] - Ban IP", AccountStatus::GMMgmt, command_ipban) ||
- command_add("iplookup", "[charname] - Look up IP address of charname", AccountStatus::GMMgmt, command_iplookup) ||
command_add("kick", "[Character Name] - Disconnect a player by name", AccountStatus::GMLeadAdmin, command_kick) ||
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", AccountStatus::GMMgmt, command_killallnpcs) ||
command_add("lastname", "[Last Name] - Set your or your player target's last name (use \"-1\" to remove last name)", AccountStatus::Guide, command_lastname) ||
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", AccountStatus::ApprenticeGuide, command_list) ||
- command_add("listpetition", "List petitions", AccountStatus::Guide, command_listpetition) ||
command_add("lootsim", "[npc_type_id] [loottable_id] [iterations] - Runs benchmark simulations using real loot logic to report numbers and data", AccountStatus::GMImpossible, command_lootsim) ||
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", AccountStatus::Player, command_loc) ||
@@ -200,8 +186,6 @@ int command_init(void)
command_add("mysql", "[Help|Query] [SQL Query] - Mysql CLI, see 'Help' for options.", AccountStatus::GMImpossible, command_mysql) ||
command_add("mystats", "Show details about you or your pet", AccountStatus::Guide, command_mystats) ||
command_add("name", "[New Name] - Rename your player target", AccountStatus::GMLeadAdmin, command_name) ||
- command_add("netstats", "Gets the network stats for a stream.", AccountStatus::GMMgmt, command_netstats) ||
- 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", AccountStatus::QuestTroupe, command_npccast) ||
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", AccountStatus::GMAdmin, command_npceditmass) ||
@@ -210,7 +194,6 @@ int command_init(void)
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.", AccountStatus::GMLeadAdmin, command_npcshout) ||
command_add("npcspawn", "[create/add/update/remove/delete] - Manipulate spawn DB", AccountStatus::GMAreas, command_npcspawn) ||
- command_add("npcstats", "Show stats about target NPC", AccountStatus::QuestTroupe, command_npcstats) ||
command_add("npctypespawn", "[NPC ID] [Faction ID] - Spawn an NPC by ID from the database with an option of setting its Faction ID", AccountStatus::Steward, command_npctypespawn) ||
command_add("nudge", "Nudge your target's current position by specific values", AccountStatus::QuestTroupe, command_nudge) ||
command_add("nukebuffs", "[Beneficial|Detrimental|Help] - Strip all buffs by type on you or your target (no argument to remove all buffs)", AccountStatus::Guide, command_nukebuffs) ||
@@ -219,21 +202,16 @@ int command_init(void)
command_add("oocmute", "[0|1] - Enable or Disable Server OOC", AccountStatus::GMMgmt, command_oocmute) ||
command_add("opcode", "Reloads all opcodes from server patch files", AccountStatus::GMMgmt, command_reload) ||
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", AccountStatus::GMAdmin, command_peekinv) ||
command_add("peqzone", "[Zone ID|Zone Short Name] - Teleports you to the specified zone if you meet the requirements.", AccountStatus::Player, command_peqzone) ||
- command_add("peqzone_flags", "displays the PEQZone Flags of you or your target", AccountStatus::Player, command_peqzone_flags) ||
command_add("permaclass", "[Class ID] - Change your or your player target's class, changed client is disconnected", AccountStatus::QuestTroupe, command_permaclass) ||
command_add("permagender", "[Gender ID] - Change your or your player target's gender", AccountStatus::QuestTroupe, command_permagender) ||
command_add("permarace", "[Race ID] - Change your or your player target's race", AccountStatus::QuestTroupe, command_permarace) ||
command_add("petitems", "View your pet's items if you have one", AccountStatus::ApprenticeGuide, command_petitems) ||
- command_add("petitioninfo", "[petition number] - Get info about a petition", AccountStatus::ApprenticeGuide, command_petitioninfo) ||
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.", AccountStatus::GMLeadAdmin, command_profanity) ||
command_add("push", "[Back Push] [Up Push] - Lets you do spell push on an NPC", AccountStatus::GMLeadAdmin, command_push) ||
- command_add("proximity", "Shows NPC proximity", AccountStatus::GMLeadAdmin, command_proximity) ||
command_add("pvp", "[On|Off] - Set you or your player target's PVP status", AccountStatus::GMAdmin, command_pvp) ||
command_add("qglobal", "[On|Off|View] - Toggles quest global functionality for your NPC target", AccountStatus::GMAdmin, command_qglobal) ||
- 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", AccountStatus::Guide, command_race) ||
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", AccountStatus::QuestTroupe, command_randomfeatures) ||
@@ -255,7 +233,6 @@ int command_init(void)
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", AccountStatus::GMLeadAdmin, command_sendzonespawns) ||
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 CPU, Operating System, and Process Information about the server", AccountStatus::GMMgmt, command_serverinfo) ||
command_add("serverlock", "[0|1] - Lock or Unlock the World Server (0 = Unlocked, 1 = Locked)", AccountStatus::GMLeadAdmin, command_serverlock) ||
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", AccountStatus::GMAdmin, command_setaapts) ||
@@ -278,19 +255,11 @@ int command_init(void)
command_add("setstartzone", "[Zone ID|Zone Short Name] - Sets your or your target's starting zone (Use '0' or 'Reset' to allow the player use of /setstartcity)", AccountStatus::QuestTroupe, command_setstartzone) ||
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", AccountStatus::GMAdmin, command_setxp) ||
- command_add("showbuffs", "List buffs active on your target or you if no target", AccountStatus::Guide, command_showbuffs) ||
- command_add("shownpcgloballoot", "Show global loot entries for your target NPC", AccountStatus::Guide, command_shownpcgloballoot) ||
- command_add("showskills", "[Start Skill ID] [All] - Show the values of your or your player target's skills in a popup 50 at a time, use 'all' as second argument to show non-usable skill's values", AccountStatus::Guide, command_showskills) ||
- command_add("showspells", "[disciplines|spells] - Show your or your target's memorized spells or learned disciplines", AccountStatus::GMAdmin, command_showspells) ||
- command_add("showspellslist", "Shows spell list of targeted NPC", AccountStatus::GMAdmin, command_showspellslist) ||
- command_add("showstats", "Show details about you or your target", AccountStatus::Guide, command_showstats) ||
- command_add("showzonegloballoot", "Show global loot entries for your current zone", AccountStatus::Guide, command_showzonegloballoot) ||
- command_add("showzonepoints", "Show zone points for current zone", AccountStatus::Guide, command_showzonepoints) ||
+ command_add("show", "List command used to show various things", AccountStatus::Guide, command_show) ||
command_add("shutdown", "Shut this zone process down", AccountStatus::GMLeadAdmin, command_shutdown) ||
command_add("spawn", "[name] [race] [level] [material] [hp] [gender] [class] [priweapon] [secweapon] [merchantid] - Spawn an NPC", AccountStatus::Steward, command_spawn) ||
command_add("spawneditmass", "[Search Criteria] [Edit Option] [Edit Value] [Apply] Mass editing spawn command (Apply is optional, 0 = False, 1 = True, default is False)", 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.", AccountStatus::GMAreas, command_spawnfix) ||
- command_add("spawnstatus", "[All|Disabled|Enabled|Spawn ID] - Show respawn timer status", AccountStatus::GMAdmin, command_spawnstatus) ||
command_add("stun", "[duration] - Stuns you or your target for duration", AccountStatus::GMAdmin, command_stun) ||
command_add("summon", "[Character Name] - Summons your corpse, NPC, or player target, or by character name if specified", AccountStatus::QuestTroupe, command_summon) ||
command_add("summonburiedplayercorpse", "Summons the target's oldest buried corpse, if any exist.", AccountStatus::GMAdmin, command_summonburiedplayercorpse) ||
@@ -302,12 +271,10 @@ int command_init(void)
command_add("petname", "[newname] - Temporarily renames your pet. Leave name blank to restore the original name.", AccountStatus::GMAdmin, command_petname) ||
command_add("texture", "[Texture] [Helmet Texture] - Change your or your target's texture (Helmet Texture defaults to 0 if not used)", AccountStatus::Steward, command_texture) ||
command_add("time", "[Hour] [Minute] - Set world time to specified time", AccountStatus::EQSupport, command_time) ||
- command_add("timers", "Display persistent timers for target", AccountStatus::GMMgmt, command_timers) ||
command_add("timezone", "[Hour] [Minutes] - Set timezone (Minutes are optional)", AccountStatus::EQSupport, command_timezone) ||
command_add("title", "[Title] - Set your or your player target's title (use \"-1\" to remove title)", AccountStatus::Guide, command_title) ||
command_add("titlesuffix", "[Title Suffix] - Set your or your player target's title suffix (use \"-1\" to remove 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)", AccountStatus::GMLeadAdmin, command_traindisc) ||
- 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.", AccountStatus::GMAdmin, command_tune) ||
command_add("undye", "Remove dye from all of your or your target's armor slots", AccountStatus::GMAdmin, command_undye) ||
command_add("unfreeze", "Unfreeze your target", AccountStatus::QuestTroupe, command_unfreeze) ||
@@ -318,22 +285,12 @@ int command_init(void)
command_add("untraindisc", "[Spell ID] - Untrain your or your target's discipline by Spell ID", AccountStatus::GMCoder, command_untraindisc) ||
command_add("untraindiscs", "Untrains all disciplines from your target.", AccountStatus::GMCoder, command_untraindiscs) ||
command_add("updatechecksum", "update client checksum", AccountStatus::GMImpossible, command_updatechecksum) ||
- 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", AccountStatus::Player, command_version) ||
- command_add("viewcurrencies", "View your or your target's currencies", AccountStatus::GMAdmin, command_viewcurrencies) ||
- 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", AccountStatus::ApprenticeGuide, command_viewpetition) ||
- command_add("viewrecipe", "[Recipe ID] - Show a recipe's entries", AccountStatus::GMAdmin, command_viewrecipe) ||
- 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", "[Slot ID] [Material] [Hero Forge Model] [Elite Material] - Sets the specified slot for you or your target to a material, Hero Forge Model and Elite Material are optional", AccountStatus::GMMgmt, command_wc) ||
command_add("weather", "[0/1/2/3] (Off/Rain/Snow/Manual) - Change the weather", AccountStatus::QuestTroupe, command_weather) ||
- command_add("who", "[search]", AccountStatus::ApprenticeGuide, command_who) ||
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)", 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)", AccountStatus::GMAreas, command_wpadd) ||
- 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", AccountStatus::GMImpossible, command_worldwide) ||
- command_add("xtargets", "[New Max XTargets] - Show your or your target's XTargets and optionally set max XTargets.", AccountStatus::GMImpossible, command_xtargets) ||
command_add("zclip", "[Minimum Clip] [Maximum Clip] [Fog Minimum Clip] [Fog Maximum Clip] [Permanent (0 = False, 1 = True)] - Change zone clipping", AccountStatus::QuestTroupe, command_zclip) ||
command_add("zcolor", "[Red] [Green] [Blue] [Permanent (0 = False, 1 = True)] - Change sky color", AccountStatus::QuestTroupe, command_zcolor) ||
command_add("zheader", "[Zone ID|Zone Short Name] [Version] - Load a zone header from the database", AccountStatus::QuestTroupe, command_zheader) ||
@@ -342,12 +299,10 @@ int command_init(void)
command_add("zoneinstance", "[Instance ID] [X] [Y] [Z] - Teleport to specified Instance by ID (coordinates are 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", AccountStatus::GMAdmin, command_zonelock) ||
command_add("zoneshutdown", "[shortname] - Shut down a zone server", AccountStatus::GMLeadAdmin, command_zoneshutdown) ||
- 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.", AccountStatus::GMImpossible, command_zopp) ||
command_add("zsafecoords", "[X] [Y] [Z] [Heading] [Permanent (0 = False, 1 = True)] - Set the current zone's safe coordinates", AccountStatus::QuestTroupe, command_zsafecoords) ||
command_add("zsave", " Saves zheader to the database", AccountStatus::QuestTroupe, command_zsave) ||
command_add("zsky", "[Sky Type] [Permanent (0 = False, 1 = True)] - Change zone sky type", AccountStatus::QuestTroupe, command_zsky) ||
- command_add("zstats", "Show info about zone header", AccountStatus::QuestTroupe, command_zstats) ||
command_add("zunderworld", "[Z] [Permanent (0 = False, 1 = True)] - Change zone underworld Z", AccountStatus::QuestTroupe, command_zunderworld)
) {
command_deinit();
@@ -393,6 +348,57 @@ int command_init(void)
"findzone",
}
},
+ {
+ .command = "show",
+ .aliases = {
+ "aggro",
+ "checklos",
+ "cvs",
+ "distance",
+ "emoteview",
+ "flags",
+ "fov",
+ "getplayerburiedcorpsecount",
+ "getvariable",
+ "ginfo",
+ "globalview",
+ "hatelist",
+ "iplookup",
+ "listpetition",
+ "network",
+ "netstats",
+ "npcstats",
+ "peekinv",
+ "petitioninfo",
+ "peqzone_flags",
+ "proximity",
+ "questerrors",
+ "serverinfo",
+ "showbuffs",
+ "shownpcgloballoot",
+ "showskills",
+ "showspells",
+ "showspellslist",
+ "showstats",
+ "showzonegloballoot",
+ "showzonepoints",
+ "spawnstatus",
+ "timers",
+ "trapinfo",
+ "uptime",
+ "version",
+ "viewcurrencies",
+ "viewnpctype",
+ "viewpetition",
+ "viewrecipe",
+ "viewzoneloot",
+ "who",
+ "wpinfo",
+ "xtargets",
+ "zonestatus",
+ "zstats"
+ }
+ },
};
// inject static aliases
@@ -963,7 +969,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/acceptrules.cpp"
#include "gm_commands/advnpcspawn.cpp"
-#include "gm_commands/aggro.cpp"
#include "gm_commands/aggrozone.cpp"
#include "gm_commands/ai.cpp"
#include "gm_commands/appearance.cpp"
@@ -976,12 +981,10 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/camerashake.cpp"
#include "gm_commands/castspell.cpp"
#include "gm_commands/chat.cpp"
-#include "gm_commands/checklos.cpp"
#include "gm_commands/copycharacter.cpp"
#include "gm_commands/corpse.cpp"
#include "gm_commands/corpsefix.cpp"
#include "gm_commands/countitem.cpp"
-#include "gm_commands/cvs.cpp"
#include "gm_commands/damage.cpp"
#include "gm_commands/databuckets.cpp"
#include "gm_commands/date.cpp"
@@ -993,7 +996,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/devtools.cpp"
#include "gm_commands/disablerecipe.cpp"
#include "gm_commands/disarmtrap.cpp"
-#include "gm_commands/distance.cpp"
#include "gm_commands/doanim.cpp"
#include "gm_commands/door.cpp"
#include "gm_commands/door_manipulation.cpp"
@@ -1002,7 +1004,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/dzkickplayers.cpp"
#include "gm_commands/editmassrespawn.cpp"
#include "gm_commands/emote.cpp"
-#include "gm_commands/emoteview.cpp"
#include "gm_commands/emptyinventory.cpp"
#include "gm_commands/enablerecipe.cpp"
#include "gm_commands/endurance.cpp"
@@ -1014,19 +1015,13 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/fixmob.cpp"
#include "gm_commands/flag.cpp"
#include "gm_commands/flagedit.cpp"
-#include "gm_commands/flags.cpp"
#include "gm_commands/flymode.cpp"
-#include "gm_commands/fov.cpp"
#include "gm_commands/freeze.cpp"
#include "gm_commands/gassign.cpp"
#include "gm_commands/gearup.cpp"
#include "gm_commands/gender.cpp"
-#include "gm_commands/getplayerburiedcorpsecount.cpp"
-#include "gm_commands/getvariable.cpp"
-#include "gm_commands/ginfo.cpp"
#include "gm_commands/giveitem.cpp"
#include "gm_commands/givemoney.cpp"
-#include "gm_commands/globalview.cpp"
#include "gm_commands/gm.cpp"
#include "gm_commands/gmspeed.cpp"
#include "gm_commands/gmzone.cpp"
@@ -1035,7 +1030,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/grid.cpp"
#include "gm_commands/guild.cpp"
#include "gm_commands/haste.cpp"
-#include "gm_commands/hatelist.cpp"
#include "gm_commands/heal.cpp"
#include "gm_commands/heromodel.cpp"
#include "gm_commands/hideme.cpp"
@@ -1047,14 +1041,12 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/invsnapshot.cpp"
#include "gm_commands/invul.cpp"
#include "gm_commands/ipban.cpp"
-#include "gm_commands/iplookup.cpp"
#include "gm_commands/kick.cpp"
#include "gm_commands/kill.cpp"
#include "gm_commands/killallnpcs.cpp"
#include "gm_commands/lastname.cpp"
#include "gm_commands/level.cpp"
#include "gm_commands/list.cpp"
-#include "gm_commands/listpetition.cpp"
#include "gm_commands/lootsim.cpp"
#include "gm_commands/loc.cpp"
#include "gm_commands/logs.cpp"
@@ -1071,8 +1063,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/mysql.cpp"
#include "gm_commands/mystats.cpp"
#include "gm_commands/name.cpp"
-#include "gm_commands/netstats.cpp"
-#include "gm_commands/network.cpp"
#include "gm_commands/npccast.cpp"
#include "gm_commands/npcedit.cpp"
#include "gm_commands/npceditmass.cpp"
@@ -1081,7 +1071,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/npcsay.cpp"
#include "gm_commands/npcshout.cpp"
#include "gm_commands/npcspawn.cpp"
-#include "gm_commands/npcstats.cpp"
#include "gm_commands/npctypespawn.cpp"
#include "gm_commands/nudge.cpp"
#include "gm_commands/nukebuffs.cpp"
@@ -1089,22 +1078,17 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/object.cpp"
#include "gm_commands/oocmute.cpp"
#include "gm_commands/path.cpp"
-#include "gm_commands/peekinv.cpp"
#include "gm_commands/peqzone.cpp"
-#include "gm_commands/peqzone_flags.cpp"
#include "gm_commands/permaclass.cpp"
#include "gm_commands/permagender.cpp"
#include "gm_commands/permarace.cpp"
#include "gm_commands/petitems.cpp"
-#include "gm_commands/petitioninfo.cpp"
#include "gm_commands/petname.cpp"
#include "gm_commands/picklock.cpp"
#include "gm_commands/profanity.cpp"
-#include "gm_commands/proximity.cpp"
#include "gm_commands/push.cpp"
#include "gm_commands/pvp.cpp"
#include "gm_commands/qglobal.cpp"
-#include "gm_commands/questerrors.cpp"
#include "gm_commands/race.cpp"
#include "gm_commands/raidloot.cpp"
#include "gm_commands/randomfeatures.cpp"
@@ -1124,7 +1108,6 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/scribespells.cpp"
#include "gm_commands/sendzonespawns.cpp"
#include "gm_commands/sensetrap.cpp"
-#include "gm_commands/serverinfo.cpp"
#include "gm_commands/serverlock.cpp"
#include "gm_commands/serverrules.cpp"
#include "gm_commands/set_adventure_points.cpp"
@@ -1147,19 +1130,11 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/setstartzone.cpp"
#include "gm_commands/setstat.cpp"
#include "gm_commands/setxp.cpp"
-#include "gm_commands/showbuffs.cpp"
-#include "gm_commands/shownpcgloballoot.cpp"
-#include "gm_commands/showskills.cpp"
-#include "gm_commands/showspells.cpp"
-#include "gm_commands/showspellslist.cpp"
-#include "gm_commands/showstats.cpp"
-#include "gm_commands/showzonegloballoot.cpp"
-#include "gm_commands/showzonepoints.cpp"
+#include "gm_commands/show.cpp"
#include "gm_commands/shutdown.cpp"
#include "gm_commands/spawn.cpp"
#include "gm_commands/spawneditmass.cpp"
#include "gm_commands/spawnfix.cpp"
-#include "gm_commands/spawnstatus.cpp"
#include "gm_commands/faction_association.cpp"
#include "gm_commands/stun.cpp"
#include "gm_commands/summon.cpp"
@@ -1171,12 +1146,10 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/tempname.cpp"
#include "gm_commands/texture.cpp"
#include "gm_commands/time.cpp"
-#include "gm_commands/timers.cpp"
#include "gm_commands/timezone.cpp"
#include "gm_commands/title.cpp"
#include "gm_commands/titlesuffix.cpp"
#include "gm_commands/traindisc.cpp"
-#include "gm_commands/trapinfo.cpp"
#include "gm_commands/tune.cpp"
#include "gm_commands/undye.cpp"
#include "gm_commands/unfreeze.cpp"
@@ -1187,22 +1160,12 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/updatechecksum.cpp"
#include "gm_commands/untraindisc.cpp"
#include "gm_commands/untraindiscs.cpp"
-#include "gm_commands/uptime.cpp"
-#include "gm_commands/version.cpp"
-#include "gm_commands/viewcurrencies.cpp"
-#include "gm_commands/viewnpctype.cpp"
-#include "gm_commands/viewpetition.cpp"
-#include "gm_commands/viewrecipe.cpp"
-#include "gm_commands/viewzoneloot.cpp"
#include "gm_commands/wc.cpp"
#include "gm_commands/weather.cpp"
-#include "gm_commands/who.cpp"
#include "gm_commands/worldshutdown.cpp"
#include "gm_commands/worldwide.cpp"
#include "gm_commands/wp.cpp"
#include "gm_commands/wpadd.cpp"
-#include "gm_commands/wpinfo.cpp"
-#include "gm_commands/xtargets.cpp"
#include "gm_commands/zclip.cpp"
#include "gm_commands/zcolor.cpp"
#include "gm_commands/zheader.cpp"
@@ -1210,11 +1173,9 @@ void command_bot(Client *c, const Seperator *sep)
#include "gm_commands/zonebootup.cpp"
#include "gm_commands/zonelock.cpp"
#include "gm_commands/zoneshutdown.cpp"
-#include "gm_commands/zonestatus.cpp"
#include "gm_commands/zone_instance.cpp"
#include "gm_commands/zopp.cpp"
#include "gm_commands/zsafecoords.cpp"
#include "gm_commands/zsave.cpp"
#include "gm_commands/zsky.cpp"
-#include "gm_commands/zstats.cpp"
#include "gm_commands/zunderworld.cpp"
diff --git a/zone/command.h b/zone/command.h
index c746cf21ff..34cad6fad1 100644
--- a/zone/command.h
+++ b/zone/command.h
@@ -33,12 +33,11 @@ std::string GetModifyNPCStatDescription(std::string stat);
void SendNPCEditSubCommands(Client *c);
void SendRuleSubCommands(Client *c);
void SendGuildSubCommands(Client *c);
-void SendPeekInvSubCommands(Client *c);
+void SendShowInventorySubCommands(Client *c);
// Commands
void command_acceptrules(Client *c, const Seperator *sep);
void command_advnpcspawn(Client *c, const Seperator *sep);
-void command_aggro(Client *c, const Seperator *sep);
void command_aggrozone(Client *c, const Seperator *sep);
void command_ai(Client *c, const Seperator *sep);
void command_appearance(Client *c, const Seperator *sep);
@@ -52,12 +51,10 @@ void command_bugs(Client *c, const Seperator *sep);
void command_camerashake(Client *c, const Seperator *sep);
void command_castspell(Client *c, const Seperator *sep);
void command_chat(Client *c, const Seperator *sep);
-void command_checklos(Client *c, const Seperator *sep);
void command_copycharacter(Client *c, const Seperator *sep);
void command_corpse(Client *c, const Seperator *sep);
void command_corpsefix(Client *c, const Seperator *sep);
void command_countitem(Client *c, const Seperator *sep);
-void command_cvs(Client *c, const Seperator *sep);
void command_damage(Client *c, const Seperator *sep);
void command_databuckets(Client *c, const Seperator *sep);
void command_date(Client *c, const Seperator *sep);
@@ -70,14 +67,12 @@ void command_devtools(Client *c, const Seperator *sep);
void command_disablerecipe(Client *c, const Seperator *sep);
void command_disarmtrap(Client *c, const Seperator *sep);
void command_door(Client *c, const Seperator *sep);
-void command_distance(Client *c, const Seperator *sep);
void command_doanim(Client *c, const Seperator *sep);
void command_dye(Client *c, const Seperator *sep);
void command_dz(Client *c, const Seperator *sep);
void command_dzkickplayers(Client *c, const Seperator *sep);
void command_editmassrespawn(Client *c, const Seperator *sep);
void command_emote(Client *c, const Seperator *sep);
-void command_emoteview(Client *c, const Seperator *sep);
void command_emptyinventory(Client *c, const Seperator *sep);
void command_enablerecipe(Client *c, const Seperator *sep);
void command_endurance(Client *c, const Seperator *sep);
@@ -90,19 +85,13 @@ void command_find(Client *c, const Seperator *sep);
void command_fixmob(Client *c, const Seperator *sep);
void command_flag(Client *c, const Seperator *sep);
void command_flagedit(Client *c, const Seperator *sep);
-void command_flags(Client *c, const Seperator *sep);
void command_flymode(Client *c, const Seperator *sep);
-void command_fov(Client *c, const Seperator *sep);
void command_freeze(Client *c, const Seperator *sep);
void command_gassign(Client *c, const Seperator *sep);
void command_gearup(Client *c, const Seperator *sep);
void command_gender(Client *c, const Seperator *sep);
-void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep);
-void command_getvariable(Client *c, const Seperator *sep);
-void command_ginfo(Client *c, const Seperator *sep);
void command_giveitem(Client *c, const Seperator *sep);
void command_givemoney(Client *c, const Seperator *sep);
-void command_globalview(Client *c, const Seperator *sep);
void command_gm(Client *c, const Seperator *sep);
void command_gmspeed(Client *c, const Seperator *sep);
void command_gmzone(Client *c, const Seperator *sep);
@@ -111,7 +100,6 @@ void command_goto(Client *c, const Seperator *sep);
void command_grid(Client *c, const Seperator *sep);
void command_guild(Client *c, const Seperator *sep);
void command_haste(Client *c, const Seperator *sep);
-void command_hatelist(Client *c, const Seperator *sep);
void command_heal(Client *c, const Seperator *sep);
void command_help(Client *c, const Seperator *sep);
void command_heromodel(Client *c, const Seperator *sep);
@@ -125,14 +113,12 @@ void command_interrupt(Client *c, const Seperator *sep);
void command_invsnapshot(Client *c, const Seperator *sep);
void command_invul(Client *c, const Seperator *sep);
void command_ipban(Client *c, const Seperator *sep);
-void command_iplookup(Client *c, const Seperator *sep);
void command_kick(Client *c, const Seperator *sep);
void command_killallnpcs(Client *c, const Seperator *sep);
void command_kill(Client *c, const Seperator *sep);
void command_lastname(Client *c, const Seperator *sep);
void command_level(Client *c, const Seperator *sep);
void command_list(Client *c, const Seperator *sep);
-void command_listpetition(Client *c, const Seperator *sep);
void command_lootsim(Client *c, const Seperator *sep);
void command_load_shared_memory(Client *c, const Seperator *sep);
void command_loc(Client *c, const Seperator *sep);
@@ -150,8 +136,6 @@ void command_myskills(Client *c, const Seperator *sep);
void command_mysql(Client *c, const Seperator *sep);
void command_mystats(Client *c, const Seperator *sep);
void command_name(Client *c, const Seperator *sep);
-void command_netstats(Client *c, const Seperator *sep);
-void command_network(Client *c, const Seperator *sep);
void command_npccast(Client *c, const Seperator *sep);
void command_npcedit(Client *c, const Seperator *sep);
void command_npceditmass(Client *c, const Seperator *sep);
@@ -160,7 +144,6 @@ void command_npcloot(Client *c, const Seperator *sep);
void command_npcsay(Client *c, const Seperator *sep);
void command_npcshout(Client *c, const Seperator *sep);
void command_npcspawn(Client *c, const Seperator *sep);
-void command_npcstats(Client *c, const Seperator *sep);
void command_npctypespawn(Client *c, const Seperator *sep);
void command_nudge(Client *c, const Seperator *sep);
void command_nukebuffs(Client *c, const Seperator *sep);
@@ -168,21 +151,16 @@ void command_nukeitem(Client *c, const Seperator *sep);
void command_object(Client *c, const Seperator *sep);
void command_oocmute(Client *c, const Seperator *sep);
void command_path(Client *c, const Seperator *sep);
-void command_peekinv(Client *c, const Seperator *sep);
void command_peqzone(Client *c, const Seperator *sep);
-void command_peqzone_flags(Client *c, const Seperator *sep);
void command_permaclass(Client *c, const Seperator *sep);
void command_permagender(Client *c, const Seperator *sep);
void command_permarace(Client *c, const Seperator *sep);
void command_petitems(Client *c, const Seperator *sep);
-void command_petitioninfo(Client *c, const Seperator *sep);
void command_picklock(Client *c, const Seperator *sep);
void command_profanity(Client *c, const Seperator *sep);
-void command_proximity(Client *c, const Seperator *sep);
void command_push(Client *c, const Seperator *sep);
void command_pvp(Client *c, const Seperator *sep);
void command_qglobal(Client *c, const Seperator *sep);
-void command_questerrors(Client *c, const Seperator *sep);
void command_race(Client *c, const Seperator *sep);
void command_raidloot(Client* c, const Seperator* sep);
void command_randomfeatures(Client *c, const Seperator *sep);
@@ -203,7 +181,6 @@ void command_scribespell(Client *c, const Seperator *sep);
void command_scribespells(Client *c, const Seperator *sep);
void command_sendzonespawns(Client *c, const Seperator *sep);
void command_sensetrap(Client *c, const Seperator *sep);
-void command_serverinfo(Client *c, const Seperator *sep);
void command_serverrules(Client *c, const Seperator *sep);
void command_set_adventure_points(Client *c, const Seperator *sep);
void command_setaapts(Client *c, const Seperator *sep);
@@ -225,19 +202,11 @@ void command_setskillall(Client *c, const Seperator *sep);
void command_setstartzone(Client *c, const Seperator *sep);
void command_setstat(Client *c, const Seperator *sep);
void command_setxp(Client *c, const Seperator *sep);
-void command_showbuffs(Client *c, const Seperator *sep);
-void command_shownpcgloballoot(Client *c, const Seperator *sep);
-void command_showskills(Client *c, const Seperator *sep);
-void command_showspells(Client *c, const Seperator *sep);
-void command_showspellslist(Client *c, const Seperator *sep);
-void command_showstats(Client *c, const Seperator *sep);
-void command_showzonegloballoot(Client *c, const Seperator *sep);
-void command_showzonepoints(Client *c, const Seperator *sep);
+void command_show(Client *c, const Seperator *sep);
void command_shutdown(Client *c, const Seperator *sep);
void command_spawn(Client *c, const Seperator *sep);
void command_spawneditmass(Client *c, const Seperator *sep);
void command_spawnfix(Client *c, const Seperator *sep);
-void command_spawnstatus(Client *c, const Seperator *sep);
void command_stun(Client *c, const Seperator *sep);
void command_summon(Client *c, const Seperator *sep);
void command_summonburiedplayercorpse(Client *c, const Seperator *sep);
@@ -249,12 +218,10 @@ void command_tempname(Client *c, const Seperator *sep);
void command_petname(Client *c, const Seperator *sep);
void command_texture(Client *c, const Seperator *sep);
void command_time(Client *c, const Seperator *sep);
-void command_timers(Client *c, const Seperator *sep);
void command_timezone(Client *c, const Seperator *sep);
void command_title(Client *c, const Seperator *sep);
void command_titlesuffix(Client *c, const Seperator *sep);
void command_traindisc(Client *c, const Seperator *sep);
-void command_trapinfo(Client *c, const Seperator *sep);
void command_tune(Client *c, const Seperator *sep);
void command_undye(Client *c, const Seperator *sep);
void command_unfreeze(Client *c, const Seperator *sep);
@@ -265,22 +232,12 @@ void command_unscribespells(Client *c, const Seperator *sep);
void command_untraindisc(Client *c, const Seperator *sep);
void command_untraindiscs(Client *c, const Seperator *sep);
void command_updatechecksum(Client* c, const Seperator* sep);
-void command_uptime(Client *c, const Seperator *sep);
-void command_version(Client *c, const Seperator *sep);
-void command_viewcurrencies(Client *c, const Seperator *sep);
-void command_viewnpctype(Client *c, const Seperator *sep);
-void command_viewpetition(Client *c, const Seperator *sep);
-void command_viewrecipe(Client *c, const Seperator *sep);
-void command_viewzoneloot(Client *c, const Seperator *sep);
void command_wc(Client *c, const Seperator *sep);
void command_weather(Client *c, const Seperator *sep);
-void command_who(Client *c, const Seperator *sep);
void command_worldshutdown(Client *c, const Seperator *sep);
void command_wp(Client *c, const Seperator *sep);
void command_wpadd(Client *c, const Seperator *sep);
-void command_wpinfo(Client *c, const Seperator *sep);
void command_worldwide(Client *c, const Seperator *sep);
-void command_xtargets(Client *c, const Seperator *sep);
void command_zclip(Client *c, const Seperator *sep);
void command_zcolor(Client *c, const Seperator *sep);
void command_zheader(Client *c, const Seperator *sep);
@@ -289,12 +246,10 @@ void command_zone_instance(Client *c, const Seperator *sep);
void command_zonebootup(Client *c, const Seperator *sep);
void command_zonelock(Client *c, const Seperator *sep);
void command_zoneshutdown(Client *c, const Seperator *sep);
-void command_zonestatus(Client *c, const Seperator *sep);
void command_zopp(Client *c, const Seperator *sep);
void command_zsafecoords(Client *c, const Seperator *sep);
void command_zsave(Client *c, const Seperator *sep);
void command_zsky(Client *c, const Seperator *sep);
-void command_zstats(Client *c, const Seperator *sep);
void command_zunderworld(Client *c, const Seperator *sep);
#include "bot.h"
diff --git a/zone/entity.h b/zone/entity.h
index 3f0800d24f..3bf128fc78 100644
--- a/zone/entity.h
+++ b/zone/entity.h
@@ -553,7 +553,7 @@ class EntityList
bool add_self_to_other_lists = false
);
- void GetTrapInfo(Client* client);
+ void GetTrapInfo(Client* c);
bool IsTrapGroupSpawned(uint32 trap_id, uint8 group);
void UpdateAllTraps(bool respawn, bool repopnow = false);
void ClearTrapPointers();
diff --git a/zone/gm_commands/aggro.cpp b/zone/gm_commands/aggro.cpp
deleted file mode 100755
index 926904131c..0000000000
--- a/zone/gm_commands/aggro.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "../client.h"
-
-void command_aggro(Client *c, const Seperator *sep)
-{
- int arguments = sep->argnum;
- if (!arguments || !sep->IsNumber(1)) {
- c->Message(Chat::White, "Usage: #aggro [Distance] [-v] (-v is verbose Faction Information)");
- return;
- }
-
- if (
- !c->GetTarget() ||
- (
- c->GetTarget() &&
- !c->GetTarget()->IsNPC()
- )
- ) {
- c->Message(Chat::White, "You must target an NPC to use this command.");
- return;
- }
-
- NPC* target = c->GetTarget()->CastToNPC();
-
- float distance = Strings::ToFloat(sep->arg[1]);
- bool verbose = !strcasecmp("-v", sep->arg[2]);
- entity_list.DescribeAggro(c, target, distance, verbose);
-}
-
diff --git a/zone/gm_commands/checklos.cpp b/zone/gm_commands/checklos.cpp
deleted file mode 100755
index 150e746490..0000000000
--- a/zone/gm_commands/checklos.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "../client.h"
-
-void command_checklos(Client *c, const Seperator *sep)
-{
- if (!c->GetTarget()) {
- c->Message(Chat::White, "You must have a target to use this command.");
- return;
- }
-
- auto target = c->GetTarget();
-
- bool has_los = c->CheckLosFN(target);
-
- c->Message(
- Chat::White,
- fmt::format(
- "You {}have line of sight to {}.",
- has_los ? "" : "do not ",
- c->GetTargetDescription(target)
- ).c_str()
- );
-}
-
diff --git a/zone/gm_commands/cvs.cpp b/zone/gm_commands/cvs.cpp
deleted file mode 100755
index a9f99c3696..0000000000
--- a/zone/gm_commands/cvs.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "../client.h"
-#include "../worldserver.h"
-
-extern WorldServer worldserver;
-
-void command_cvs(Client *c, const Seperator *sep)
-{
- auto pack = new ServerPacket(ServerOP_ClientVersionSummary, sizeof(ServerRequestClientVersionSummary_Struct));
- auto srcvss = (ServerRequestClientVersionSummary_Struct *) pack->pBuffer;
- strn0cpy(srcvss->Name, c->GetName(), sizeof(srcvss->Name));
- worldserver.SendPacket(pack);
- safe_delete(pack);
-}
-
diff --git a/zone/gm_commands/distance.cpp b/zone/gm_commands/distance.cpp
deleted file mode 100755
index f694461296..0000000000
--- a/zone/gm_commands/distance.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "../client.h"
-
-void command_distance(Client *c, const Seperator *sep)
-{
- if (c->GetTarget()) {
- Mob *target = c->GetTarget();
- if (c != target) {
- c->Message(
- Chat::White,
- fmt::format(
- "{} is {:.2f} units from you.",
- c->GetTargetDescription(target),
- Distance(
- c->GetPosition(),
- target->GetPosition()
- )
- ).c_str()
- );
- }
- }
-}
-
diff --git a/zone/gm_commands/flags.cpp b/zone/gm_commands/flags.cpp
deleted file mode 100755
index 8b28c7d690..0000000000
--- a/zone/gm_commands/flags.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "../client.h"
-
-void command_flags(Client *c, const Seperator *sep)
-{
- Client *target = c;
-
- if (
- c->GetTarget() &&
- c->GetTarget()->IsClient() &&
- c->Admin() >= minStatusToSeeOthersZoneFlags
- ) {
- target = c->GetTarget()->CastToClient();
- }
-
- target->SendZoneFlagInfo(c);
-}
-
diff --git a/zone/gm_commands/fov.cpp b/zone/gm_commands/fov.cpp
deleted file mode 100755
index bfb8397c30..0000000000
--- a/zone/gm_commands/fov.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "../client.h"
-
-void command_fov(Client *c, const Seperator *sep)
-{
- if (!c->GetTarget()) {
- c->Message(Chat::White, "You must have a target to use this command.");
- return;
- }
-
- auto target = c->GetTarget();
-
- std::string behind_message = (
- c->BehindMob(
- target,
- c->GetX(),
- c->GetY()
- ) ?
- "behind" :
- "not behind"
- );
-
- std::string gender_message = (
- target->GetGender() == MALE ?
- "he" :
- (
- target->GetGender() == FEMALE ?
- "she" :
- "it"
- )
- );
-
- c->Message(
- Chat::White,
- fmt::format(
- "You are {} {}, {} has a heading of {}.",
- behind_message,
- c->GetTargetDescription(target),
- gender_message,
- target->GetHeading()
- ).c_str()
- );
-}
-
diff --git a/zone/gm_commands/getplayerburiedcorpsecount.cpp b/zone/gm_commands/getplayerburiedcorpsecount.cpp
deleted file mode 100755
index 8692c7d3ee..0000000000
--- a/zone/gm_commands/getplayerburiedcorpsecount.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "../client.h"
-#include "../corpse.h"
-
-void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep)
-{
- Client *target = c;
- if (c->GetTarget() && c->GetTarget()->IsClient() && c->GetGM()) {
- target = c->GetTarget()->CastToClient();
- }
-
- uint32 corpse_count = database.GetCharacterBuriedCorpseCount(target->CharacterID());
- c->Message(
- Chat::White,
- fmt::format(
- "{} {} {} buried corpse{}.",
- c->GetTargetDescription(target, TargetDescriptionType::UCYou),
- c == target ? "have" : "has",
- (
- corpse_count ?
- std::to_string(corpse_count) :
- "no"
- ),
- corpse_count != 1 ? "s" : ""
- ).c_str()
- );
-}
diff --git a/zone/gm_commands/getvariable.cpp b/zone/gm_commands/getvariable.cpp
deleted file mode 100755
index 7b26ccfb0d..0000000000
--- a/zone/gm_commands/getvariable.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "../client.h"
-
-void command_getvariable(Client *c, const Seperator *sep)
-{
- std::string variable = sep->argplus[1];
- if (variable.empty()) {
- c->Message(Chat::White, "Usage: #getvariable [Variable Name]");
- return;
- }
-
- std::string message;
- std::string value;
- if (database.GetVariable(variable, value)) {
- message = fmt::format(
- "Variable {}: {}",
- variable,
- value
- );
- } else {
- message = fmt::format(
- "Variable '{}' does not exist.",
- variable
- );
- }
-
- c->Message(
- Chat::White,
- message.c_str()
- );
-}
-
diff --git a/zone/gm_commands/ginfo.cpp b/zone/gm_commands/ginfo.cpp
deleted file mode 100755
index 3850c6b919..0000000000
--- a/zone/gm_commands/ginfo.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-#include "../client.h"
-#include "../groups.h"
-
-void command_ginfo(Client *c, const Seperator *sep)
-{
- Client *target = c;
- if (c->GetTarget() && c->GetTarget()->IsClient()) {
- target = c->GetTarget()->CastToClient();
- }
-
- auto target_group = target->GetGroup();
- if (!target_group) {
- c->Message(
- Chat::White,
- fmt::format(
- "{} {} not in a group.",
- c->GetTargetDescription(target, TargetDescriptionType::UCYou),
- c == target ? "are" : "is"
- ).c_str()
- );
- return;
- }
-
- std::string popup_title = fmt::format(
- "Group Info for {}",
- c->GetTargetDescription(target, TargetDescriptionType::UCSelf)
- );
- std::string popup_text = "
";
- popup_text += fmt::format(
- "Group ID | {} | Members | {} | ",
- target_group->GetID(),
- target_group->GroupCount()
- );
- popup_text += "
";
- popup_text += "
";
- popup_text += "Index | ";
- popup_text += "Name | ";
- popup_text += "In Zone | ";
- popup_text += "Assist | ";
- popup_text += "Puller | ";
- popup_text += "Tank | ";
- popup_text += "
";
-
- for (int group_member = 0; group_member < MAX_GROUP_MEMBERS; group_member++) {
- if (target_group->membername[group_member][0] == '\0') {
- continue;
- }
-
- bool is_assist = target_group->MemberRoles[group_member] & RoleAssist;
- bool is_puller = target_group->MemberRoles[group_member] & RolePuller;
- bool is_tank = target_group->MemberRoles[group_member] & RoleTank;
-
- popup_text += fmt::format(
- "{} | {} | {} | {} | {} | {} |
",
- group_member,
- (
- strcmp(target_group->membername[group_member], c->GetCleanName()) ?
- target_group->membername[group_member] :
- fmt::format(
- "{} (You)",
- target_group->membername[group_member]
- )
- ),
- target_group->members[group_member] ? "Y" : "N",
- is_assist ? "Y" : "N",
- is_puller ? "Y" : "N",
- is_tank ? "Y" : "N"
- );
- }
-
- popup_text += "
";
-
- c->SendPopupToClient(
- popup_title.c_str(),
- popup_text.c_str()
- );
-}
-
diff --git a/zone/gm_commands/globalview.cpp b/zone/gm_commands/globalview.cpp
deleted file mode 100755
index 948ecd3532..0000000000
--- a/zone/gm_commands/globalview.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "../client.h"
-
-void command_globalview(Client *c, const Seperator *sep)
-{
- NPC *npcmob = nullptr;
-
- if (c->GetTarget() && c->GetTarget()->IsNPC()) {
- npcmob = c->GetTarget()->CastToNPC();
- QGlobalCache *npc_c = nullptr;
- QGlobalCache *char_c = nullptr;
- QGlobalCache *zone_c = nullptr;
-
- if (npcmob) {
- npc_c = npcmob->GetQGlobals();
- }
-
- char_c = c->GetQGlobals();
- zone_c = zone->GetQGlobals();
-
- std::list globalMap;
- uint32 ntype = 0;
-
- if (npcmob) {
- ntype = npcmob->GetNPCTypeID();
- }
-
- if (npc_c) {
- QGlobalCache::Combine(globalMap, npc_c->GetBucket(), ntype, c->CharacterID(), zone->GetZoneID());
- }
-
- if (char_c) {
- QGlobalCache::Combine(globalMap, char_c->GetBucket(), ntype, c->CharacterID(), zone->GetZoneID());
- }
-
- if (zone_c) {
- QGlobalCache::Combine(globalMap, zone_c->GetBucket(), ntype, c->CharacterID(), zone->GetZoneID());
- }
-
- auto iter = globalMap.begin();
- uint32 gcount = 0;
-
- c->Message(Chat::White, "Name, Value");
- while (iter != globalMap.end()) {
- c->Message(Chat::White, "%s %s", (*iter).name.c_str(), (*iter).value.c_str());
- ++iter;
- ++gcount;
- }
- c->Message(Chat::White, "%u globals loaded.", gcount);
- }
- else {
- QGlobalCache *char_c = nullptr;
- QGlobalCache *zone_c = nullptr;
-
- char_c = c->GetQGlobals();
- zone_c = zone->GetQGlobals();
-
- std::list globalMap;
- uint32 ntype = 0;
-
- if (char_c) {
- QGlobalCache::Combine(globalMap, char_c->GetBucket(), ntype, c->CharacterID(), zone->GetZoneID());
- }
-
- if (zone_c) {
- QGlobalCache::Combine(globalMap, zone_c->GetBucket(), ntype, c->CharacterID(), zone->GetZoneID());
- }
-
- auto iter = globalMap.begin();
- uint32 gcount = 0;
-
- c->Message(Chat::White, "Name, Value");
- while (iter != globalMap.end()) {
- c->Message(Chat::White, "%s %s", (*iter).name.c_str(), (*iter).value.c_str());
- ++iter;
- ++gcount;
- }
- c->Message(Chat::White, "%u globals loaded.", gcount);
- }
-}
-
diff --git a/zone/gm_commands/iplookup.cpp b/zone/gm_commands/iplookup.cpp
deleted file mode 100755
index 1595a5ee66..0000000000
--- a/zone/gm_commands/iplookup.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "../client.h"
-#include "../worldserver.h"
-
-extern WorldServer worldserver;
-
-void command_iplookup(Client *c, const Seperator *sep)
-{
- auto pack =
- new ServerPacket(
- ServerOP_IPLookup,
- sizeof(ServerGenericWorldQuery_Struct) +
- strlen(sep->argplus[1]) + 1
- );
- ServerGenericWorldQuery_Struct *s = (ServerGenericWorldQuery_Struct *) pack->pBuffer;
- strcpy(s->from, c->GetName());
- s->admin = c->Admin();
- if (sep->argplus[1][0] != 0) {
- strcpy(s->query, sep->argplus[1]);
- }
- worldserver.SendPacket(pack);
- safe_delete(pack);
-}
-
diff --git a/zone/gm_commands/listpetition.cpp b/zone/gm_commands/listpetition.cpp
deleted file mode 100755
index 110809deb6..0000000000
--- a/zone/gm_commands/listpetition.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "../client.h"
-
-void command_listpetition(Client *c, const Seperator *sep)
-{
- std::string query = "SELECT petid, charname, accountname FROM petitions ORDER BY petid";
- auto results = database.QueryDatabase(query);
- if (!results.Success()) {
- return;
- }
-
- LogInfo("Petition list requested by [{}]", c->GetName());
-
- if (results.RowCount() == 0) {
- return;
- }
-
- c->Message(Chat::Red, " ID : Character Name , Account Name");
-
- for (auto row = results.begin(); row != results.end(); ++row)
- c->Message(Chat::Yellow, " %s: %s , %s ", row[0], row[1], row[2]);
-}
-
diff --git a/zone/gm_commands/netstats.cpp b/zone/gm_commands/netstats.cpp
deleted file mode 100755
index 87fd11a4c1..0000000000
--- a/zone/gm_commands/netstats.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-#include "../client.h"
-
-void command_netstats(Client *c, const Seperator *sep)
-{
- bool is_full = !strcasecmp(sep->arg[1], "full");
- bool is_reset = !strcasecmp(sep->arg[1], "reset");
-
- if (is_reset) {
- auto connection = c->Connection();
- c->Message(Chat::White, "Resetting client stats (packet loss will not read correctly after reset).");
- connection->ResetStats();
- return;
- }
-
- auto connection = c->Connection();
- auto opts = connection->GetManager()->GetOptions();
- auto eqs_stats = connection->GetStats();
- auto &stats = eqs_stats.DaybreakStats;
- auto now = EQ::Net::Clock::now();
- auto sec_since_stats_reset = std::chrono::duration_cast>(
- now - stats.created
- ).count();
-
- std::string popup_text = "";
-
- popup_text += fmt::format(
- "Sent Bytes | {} ({:.2f} Per Second) |
",
- stats.sent_bytes,
- stats.sent_bytes / sec_since_stats_reset
- );
-
- popup_text += fmt::format(
- "Received Bytes | {} ({:.2f} Per Second) |
",
- stats.recv_bytes,
- stats.recv_bytes / sec_since_stats_reset
- );
-
- popup_text += "
";
-
- popup_text += fmt::format(
- "Bytes Before Encode (Sent) | {} | Compression Rate | {:.2f}%% |
",
- stats.bytes_before_encode,
- static_cast(stats.bytes_before_encode - stats.sent_bytes) /
- static_cast(stats.bytes_before_encode) * 100.0
- );
-
- popup_text += fmt::format(
- "Bytes After Decode (Received) | {} | Compression Rate | {:.2f}%% |
",
- stats.bytes_after_decode,
- static_cast(stats.bytes_after_decode - stats.recv_bytes) /
- static_cast(stats.bytes_after_decode) * 100.0
- );
-
- popup_text += "
";
-
- popup_text += fmt::format("Min Ping | {} |
", stats.min_ping);
- popup_text += fmt::format("Max Ping | {} |
", stats.max_ping);
- popup_text += fmt::format("Last Ping | {} |
", stats.last_ping);
- popup_text += fmt::format("Average Ping | {} |
", stats.avg_ping);
-
- popup_text += "
";
-
- popup_text += fmt::format(
- "(Realtime) Received Packets | {} ({:.2f} Per Second) |
",
- stats.recv_packets,
- stats.recv_packets / sec_since_stats_reset
- );
-
- popup_text += fmt::format(
- "(Realtime) Sent Packets | {} ({:.2f} Per Second) |
",
- stats.sent_packets,
- stats.sent_packets / sec_since_stats_reset
- );
-
- popup_text += "
";
-
- popup_text += fmt::format("(Sync) Received Packets | {} |
", stats.sync_recv_packets);
- popup_text += fmt::format("(Sync) Sent Packets | {} |
", stats.sync_sent_packets);
- popup_text += fmt::format("(Sync) Remote Received Packets | {} |
", stats.sync_remote_recv_packets);
- popup_text += fmt::format("(Sync) Remote Sent Packets | {} |
", stats.sync_remote_sent_packets);
-
- popup_text += "
";
-
- popup_text += fmt::format(
- "Packet Loss In | {:.2f}%% |
",
- (100.0 * (1.0 - static_cast(stats.sync_recv_packets) / static_cast(stats.sync_remote_sent_packets)))
- );
-
- popup_text += fmt::format(
- "Packet Loss Out | {:.2f}%% |
",
- (100.0 * (1.0 - static_cast(stats.sync_remote_recv_packets) / static_cast(stats.sync_sent_packets)))
- );
-
- popup_text += "
";
-
- popup_text += fmt::format(
- "Resent Packets | {} ({:.2f} Per Second) |
",
- stats.resent_packets,
- stats.resent_packets / sec_since_stats_reset
- );
-
- popup_text += fmt::format(
- "Resent Fragments | {} ({:.2f} Per Second) |
",
- stats.resent_fragments,
- stats.resent_fragments / sec_since_stats_reset
- );
-
- popup_text += fmt::format(
- "Resent Non-Fragments | {} ({:.2f} Per Second) |
",
- stats.resent_full,
- stats.resent_full / sec_since_stats_reset
- );
-
- popup_text += "
";
-
- popup_text += fmt::format(
- "Dropped Datarate Packets | {} ({:.2f} Per Second) |
",
- stats.dropped_datarate_packets,
- stats.dropped_datarate_packets / sec_since_stats_reset
- );
-
- if (opts.daybreak_options.outgoing_data_rate > 0.0) {
- popup_text += fmt::format(
- "Outgoing Link Saturation | {:.2f}%% ({:.2f}kb Per Second) |
",
- (100.0 * (1.0 - ((opts.daybreak_options.outgoing_data_rate - stats.datarate_remaining) / opts.daybreak_options.outgoing_data_rate))),
- opts.daybreak_options.outgoing_data_rate
- );
- }
-
- if (is_full) {
- popup_text += "
";
-
- popup_text += "Sent Packet Types |
";
- for (auto i = 0; i < _maxEmuOpcode; ++i) {
- auto cnt = eqs_stats.SentCount[i];
- if (cnt > 0) {
- popup_text += fmt::format(
- "{} | {} ({:.2f} Per Second) |
",
- OpcodeNames[i],
- cnt,
- cnt / sec_since_stats_reset
- );
- }
- }
-
- popup_text += "
";
-
- popup_text += "Received Packet Types |
";
- for (auto i = 0; i < _maxEmuOpcode; ++i) {
- auto cnt = eqs_stats.RecvCount[i];
- if (cnt > 0) {
- popup_text += fmt::format(
- "{} | {} ({:.2f} Per Second) |
",
- OpcodeNames[i],
- cnt,
- cnt / sec_since_stats_reset
- );
- }
- }
- }
-
- popup_text += "
";
-
- c->SendPopupToClient(
- "Network Statistics",
- popup_text.c_str()
- );
-}
-
diff --git a/zone/gm_commands/network.cpp b/zone/gm_commands/network.cpp
deleted file mode 100755
index 7f18e86ac8..0000000000
--- a/zone/gm_commands/network.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-#include "../client.h"
-
-void command_network(Client *c, const Seperator *sep)
-{
- if (!strcasecmp(sep->arg[1], "getopt")) {
- auto eqsi = c->Connection();
- auto manager = eqsi->GetManager();
- auto opts = manager->GetOptions();
-
- if (!strcasecmp(sep->arg[2], "all")) {
- c->Message(Chat::White, "max_packet_size: %llu", (uint64_t) opts.daybreak_options.max_packet_size);
- c->Message(
- Chat::White,
- "max_connection_count: %llu",
- (uint64_t) opts.daybreak_options.max_connection_count
- );
- c->Message(Chat::White, "keepalive_delay_ms: %llu", (uint64_t) opts.daybreak_options.keepalive_delay_ms);
- c->Message(Chat::White, "resend_delay_factor: %.2f", opts.daybreak_options.resend_delay_factor);
- c->Message(Chat::White, "resend_delay_ms: %llu", (uint64_t) opts.daybreak_options.resend_delay_ms);
- c->Message(Chat::White, "resend_delay_min: %llu", (uint64_t) opts.daybreak_options.resend_delay_min);
- c->Message(Chat::White, "resend_delay_max: %llu", (uint64_t) opts.daybreak_options.resend_delay_max);
- c->Message(Chat::White, "connect_delay_ms: %llu", (uint64_t) opts.daybreak_options.connect_delay_ms);
- c->Message(Chat::White, "connect_stale_ms: %llu", (uint64_t) opts.daybreak_options.connect_stale_ms);
- c->Message(Chat::White, "stale_connection_ms: %llu", (uint64_t) opts.daybreak_options.stale_connection_ms);
- c->Message(Chat::White, "crc_length: %llu", (uint64_t) opts.daybreak_options.crc_length);
- c->Message(Chat::White, "hold_size: %llu", (uint64_t) opts.daybreak_options.hold_size);
- c->Message(Chat::White, "hold_length_ms: %llu", (uint64_t) opts.daybreak_options.hold_length_ms);
- c->Message(
- Chat::White,
- "simulated_in_packet_loss: %llu",
- (uint64_t) opts.daybreak_options.simulated_in_packet_loss
- );
- c->Message(
- Chat::White,
- "simulated_out_packet_loss: %llu",
- (uint64_t) opts.daybreak_options.simulated_out_packet_loss
- );
- c->Message(Chat::White, "tic_rate_hertz: %.2f", opts.daybreak_options.tic_rate_hertz);
- c->Message(Chat::White, "resend_timeout: %llu", (uint64_t) opts.daybreak_options.resend_timeout);
- c->Message(
- Chat::White,
- "connection_close_time: %llu",
- (uint64_t) opts.daybreak_options.connection_close_time
- );
- c->Message(Chat::White, "encode_passes[0]: %llu", (uint64_t) opts.daybreak_options.encode_passes[0]);
- c->Message(Chat::White, "encode_passes[1]: %llu", (uint64_t) opts.daybreak_options.encode_passes[1]);
- c->Message(Chat::White, "port: %llu", (uint64_t) opts.daybreak_options.port);
- }
- else {
- c->Message(Chat::White, "Unknown get option: %s", sep->arg[2]);
- c->Message(Chat::White, "Available options:");
- //Todo the rest of these when im less lazy.
- //c->Message(Chat::White, "max_packet_size");
- //c->Message(Chat::White, "max_connection_count");
- //c->Message(Chat::White, "keepalive_delay_ms");
- //c->Message(Chat::White, "resend_delay_factor");
- //c->Message(Chat::White, "resend_delay_ms");
- //c->Message(Chat::White, "resend_delay_min");
- //c->Message(Chat::White, "resend_delay_max");
- //c->Message(Chat::White, "connect_delay_ms");
- //c->Message(Chat::White, "connect_stale_ms");
- //c->Message(Chat::White, "stale_connection_ms");
- //c->Message(Chat::White, "crc_length");
- //c->Message(Chat::White, "hold_size");
- //c->Message(Chat::White, "hold_length_ms");
- //c->Message(Chat::White, "simulated_in_packet_loss");
- //c->Message(Chat::White, "simulated_out_packet_loss");
- //c->Message(Chat::White, "tic_rate_hertz");
- //c->Message(Chat::White, "resend_timeout");
- //c->Message(Chat::White, "connection_close_time");
- //c->Message(Chat::White, "encode_passes[0]");
- //c->Message(Chat::White, "encode_passes[1]");
- //c->Message(Chat::White, "port");
- c->Message(Chat::White, "all");
- }
- }
- else if (!strcasecmp(sep->arg[1], "setopt")) {
- auto eqsi = c->Connection();
- auto manager = eqsi->GetManager();
- auto opts = manager->GetOptions();
-
- if (!strcasecmp(sep->arg[3], "")) {
- c->Message(Chat::White, "Missing value for set");
- return;
- }
-
- std::string value = sep->arg[3];
- if (!strcasecmp(sep->arg[2], "max_connection_count")) {
- opts.daybreak_options.max_connection_count = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "keepalive_delay_ms")) {
- opts.daybreak_options.keepalive_delay_ms = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "resend_delay_factor")) {
- opts.daybreak_options.resend_delay_factor = std::stod(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "resend_delay_ms")) {
- opts.daybreak_options.resend_delay_ms = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "resend_delay_min")) {
- opts.daybreak_options.resend_delay_min = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "resend_delay_max")) {
- opts.daybreak_options.resend_delay_max = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "connect_delay_ms")) {
- opts.daybreak_options.connect_delay_ms = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "connect_stale_ms")) {
- opts.daybreak_options.connect_stale_ms = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "stale_connection_ms")) {
- opts.daybreak_options.stale_connection_ms = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "hold_size")) {
- opts.daybreak_options.hold_size = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "hold_length_ms")) {
- opts.daybreak_options.hold_length_ms = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "simulated_in_packet_loss")) {
- opts.daybreak_options.simulated_in_packet_loss = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "simulated_out_packet_loss")) {
- opts.daybreak_options.simulated_out_packet_loss = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "resend_timeout")) {
- opts.daybreak_options.resend_timeout = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else if (!strcasecmp(sep->arg[2], "connection_close_time")) {
- opts.daybreak_options.connection_close_time = Strings::ToUnsignedBigInt(value);
- manager->SetOptions(opts);
- }
- else {
- c->Message(Chat::White, "Unknown set option: %s", sep->arg[2]);
- c->Message(Chat::White, "Available options:");
- c->Message(Chat::White, "max_connection_count");
- c->Message(Chat::White, "keepalive_delay_ms");
- c->Message(Chat::White, "resend_delay_factor");
- c->Message(Chat::White, "resend_delay_ms");
- c->Message(Chat::White, "resend_delay_min");
- c->Message(Chat::White, "resend_delay_max");
- c->Message(Chat::White, "connect_delay_ms");
- c->Message(Chat::White, "connect_stale_ms");
- c->Message(Chat::White, "stale_connection_ms");
- c->Message(Chat::White, "hold_size");
- c->Message(Chat::White, "hold_length_ms");
- c->Message(Chat::White, "simulated_in_packet_loss");
- c->Message(Chat::White, "simulated_out_packet_loss");
- c->Message(Chat::White, "resend_timeout");
- c->Message(Chat::White, "connection_close_time");
- }
- }
- else {
- c->Message(Chat::White, "Unknown command: %s", sep->arg[1]);
- c->Message(Chat::White, "Network commands avail:");
- c->Message(Chat::White, "getopt optname - Retrieve the current option value set.");
- c->Message(Chat::White, "setopt optname - Set the current option allowed.");
- }
-}
-
diff --git a/zone/gm_commands/npcstats.cpp b/zone/gm_commands/npcstats.cpp
deleted file mode 100755
index 9f903d1f74..0000000000
--- a/zone/gm_commands/npcstats.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "../client.h"
-
-void command_npcstats(Client *c, const Seperator *sep)
-{
- if (c->GetTarget() && c->GetTarget()->IsNPC()) {
- NPC *target = c->GetTarget()->CastToNPC();
-
- // Stats
- target->ShowStats(c);
-
- // Loot Data
- target->QueryLoot(c);
- }
- else {
- c->Message(Chat::White, "You must target an NPC to use this command.");
- }
-}
-
diff --git a/zone/gm_commands/peqzone_flags.cpp b/zone/gm_commands/peqzone_flags.cpp
deleted file mode 100644
index cde3eb4cdc..0000000000
--- a/zone/gm_commands/peqzone_flags.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "../client.h"
-
-void command_peqzone_flags(Client *c, const Seperator *sep)
-{
- Client *target = c;
-
- if (
- c->GetTarget() &&
- c->GetTarget()->IsClient() &&
- c->Admin() >= minStatusToSeeOthersZoneFlags
- ) {
- target = c->GetTarget()->CastToClient();
- }
-
- target->SendPEQZoneFlagInfo(c);
-}
-
diff --git a/zone/gm_commands/petitioninfo.cpp b/zone/gm_commands/petitioninfo.cpp
deleted file mode 100755
index c9c1e49f51..0000000000
--- a/zone/gm_commands/petitioninfo.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "../client.h"
-
-void command_petitioninfo(Client *c, const Seperator *sep)
-{
- if (sep->arg[1][0] == 0) {
- c->Message(Chat::White, "Usage: #petitioninfo (petition number) Type #listpetition for a list");
- return;
- }
-
- std::string query = "SELECT petid, charname, accountname, zone, charclass, charrace, charlevel FROM petitions ORDER BY petid";
- auto results = database.QueryDatabase(query);
- if (!results.Success()) {
- return;
- }
-
- LogInfo("Petition information request from [{}], petition number:", c->GetName(), Strings::ToInt(sep->argplus[1]));
-
- if (results.RowCount() == 0) {
- c->Message(Chat::Red, "There was an error in your request: ID not found! Please check the Id and try again.");
- return;
- }
-
- for (auto row = results.begin(); row != results.end(); ++row)
- if (strcasecmp(row[0], sep->argplus[1]) == 0) {
- c->Message(
- Chat::Red,
- " ID : %s Character Name: %s Account Name: %s Zone: %s Character Class: %s Character Race: %s Character Level: %s",
- row[0],
- row[1],
- row[2],
- row[3],
- row[4],
- row[5],
- row[6]
- );
- }
-
-}
-
diff --git a/zone/gm_commands/proximity.cpp b/zone/gm_commands/proximity.cpp
deleted file mode 100755
index 3db0a714e6..0000000000
--- a/zone/gm_commands/proximity.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-#include "../client.h"
-
-void command_proximity(Client *c, const Seperator *sep)
-{
- if (!c->GetTarget() || (c->GetTarget() && !c->GetTarget()->IsNPC())) {
- c->Message(Chat::White, "You must target an NPC");
- return;
- }
-
- for (auto &iter : entity_list.GetNPCList()) {
- auto npc = iter.second;
- std::string name = npc->GetName();
-
- if (name.find("Proximity") != std::string::npos) {
- npc->Depop();
- }
- }
-
- NPC *npc = c->GetTarget()->CastToNPC();
-
- std::vector points;
-
- FindPerson_Point p{};
-
- if (npc->IsProximitySet()) {
- glm::vec4 position;
- position.w = npc->GetHeading();
- position.x = npc->GetProximityMinX();
- position.y = npc->GetProximityMinY();
- position.z = npc->GetZ();
-
- position.x = npc->GetProximityMinX();
- position.y = npc->GetProximityMinY();
- NPC::SpawnNodeNPC("Proximity", "", position);
-
- position.x = npc->GetProximityMinX();
- position.y = npc->GetProximityMaxY();
- NPC::SpawnNodeNPC("Proximity", "", position);
-
- position.x = npc->GetProximityMaxX();
- position.y = npc->GetProximityMinY();
- NPC::SpawnNodeNPC("Proximity", "", position);
-
- position.x = npc->GetProximityMaxX();
- position.y = npc->GetProximityMaxY();
- NPC::SpawnNodeNPC("Proximity", "", position);
-
- p.x = npc->GetProximityMinX();
- p.y = npc->GetProximityMinY();
- p.z = npc->GetZ();
- points.push_back(p);
-
- p.x = npc->GetProximityMinX();
- p.y = npc->GetProximityMaxY();
- points.push_back(p);
-
- p.x = npc->GetProximityMaxX();
- p.y = npc->GetProximityMaxY();
- points.push_back(p);
-
- p.x = npc->GetProximityMaxX();
- p.y = npc->GetProximityMinY();
- points.push_back(p);
-
- p.x = npc->GetProximityMinX();
- p.y = npc->GetProximityMinY();
- points.push_back(p);
- }
-
- if (c->ClientVersion() >= EQ::versions::ClientVersion::RoF) {
- c->SendPathPacket(points);
- }
-}
-
diff --git a/zone/gm_commands/questerrors.cpp b/zone/gm_commands/questerrors.cpp
deleted file mode 100755
index 4be3b19a37..0000000000
--- a/zone/gm_commands/questerrors.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "../client.h"
-#include "../quest_parser_collection.h"
-
-void command_questerrors(Client *c, const Seperator *sep)
-{
- std::list quest_errors;
- parse->GetErrors(quest_errors);
-
- if (quest_errors.size()) {
- c->Message(Chat::White, "Quest errors currently are as follows:");
-
- int error_index = 0;
- for (auto quest_error : quest_errors) {
- if (error_index >= RuleI(World, MaximumQuestErrors)) {
- c->Message(
- Chat::White,
- fmt::format(
- "Maximum of {} error{} shown.",
- RuleI(World, MaximumQuestErrors),
- RuleI(World, MaximumQuestErrors) != 1 ? "s" : ""
- ).c_str()
- );
- break;
- }
-
- c->Message(Chat::White, quest_error.c_str());
- error_index++;
- }
- } else {
- c->Message(Chat::White, "There are no Quest errors currently.");
- }
-}
-
diff --git a/zone/gm_commands/serverinfo.cpp b/zone/gm_commands/serverinfo.cpp
deleted file mode 100755
index 3832aa7d3c..0000000000
--- a/zone/gm_commands/serverinfo.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-#include "../client.h"
-#include "../dialogue_window.h"
-#include "../../common/serverinfo.h"
-
-void command_serverinfo(Client *c, const Seperator *sep)
-{
- auto os = EQ::GetOS();
- auto cpus = EQ::GetCPUs();
- auto process_id = EQ::GetPID();
- auto rss = EQ::GetRSS() / 1048576.0;
- auto uptime = static_cast(EQ::GetUptime());
-
- std::string popup_table;
- auto popup_text = DialogueWindow::CenterMessage(
- DialogueWindow::ColorMessage("green", "Operating System Information")
- );
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("Machine") +
- DialogueWindow::TableCell(os.machine)
- ).c_str()
- );
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("System") +
- DialogueWindow::TableCell(os.sysname)
- ).c_str()
- );
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("Release") +
- DialogueWindow::TableCell(os.release)
- ).c_str()
- );
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("Uptime") +
- DialogueWindow::TableCell(Strings::SecondsToTime(uptime))
- ).c_str()
- );
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("Version") +
- DialogueWindow::TableCell(os.version)
- ).c_str()
- );
-
- popup_text.append(DialogueWindow::Table(popup_table));
-
- popup_table = std::string();
-
- popup_text.append(DialogueWindow::Break());
-
- popup_text.append(
- DialogueWindow::CenterMessage(
- DialogueWindow::ColorMessage("green", "CPU Information")
- )
- );
-
- for (size_t cpu = 0; cpu < cpus.size(); ++cpu) {
- auto ¤t_cpu = cpus[cpu];
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell(
- fmt::format(
- "CPU {}",
- cpu
- )
- ) +
- DialogueWindow::TableCell(
- fmt::format(
- "{} ({:.2f}GHz)",
- current_cpu.model,
- current_cpu.speed
- )
- )
- )
- );
- }
-
- popup_text.append(DialogueWindow::Table(popup_table));
-
- popup_table = std::string();
-
- popup_text.append(DialogueWindow::Break());
-
- popup_text.append(
- DialogueWindow::CenterMessage(
- DialogueWindow::ColorMessage("green", "CPU Information")
- )
- );
-
- popup_text.append("");
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("Process ID") +
- DialogueWindow::TableCell(std::to_string(process_id))
- )
- );
-
- popup_table.append(
- DialogueWindow::TableRow(
- DialogueWindow::TableCell("RSS") +
- DialogueWindow::TableCell(
- fmt::format(
- "{:.2f} MB",
- rss
- )
- )
- )
- );
-
- popup_text.append(DialogueWindow::Table(popup_table));
-
- c->SendPopupToClient(
- "Server Information",
- popup_text.c_str()
- );
-}
-
diff --git a/zone/gm_commands/show.cpp b/zone/gm_commands/show.cpp
new file mode 100755
index 0000000000..d884109846
--- /dev/null
+++ b/zone/gm_commands/show.cpp
@@ -0,0 +1,142 @@
+#include "../client.h"
+#include "show/aggro.cpp"
+#include "show/buffs.cpp"
+#include "show/buried_corpse_count.cpp"
+#include "show/client_version_summary.cpp"
+#include "show/currencies.cpp"
+#include "show/distance.cpp"
+#include "show/emotes.cpp"
+#include "show/field_of_view.cpp"
+#include "show/flags.cpp"
+#include "show/group_info.cpp"
+#include "show/hatelist.cpp"
+#include "show/inventory.cpp"
+#include "show/ip_lookup.cpp"
+#include "show/line_of_sight.cpp"
+#include "show/network.cpp"
+#include "show/network_stats.cpp"
+#include "show/npc_global_loot.cpp"
+#include "show/npc_stats.cpp"
+#include "show/npc_type.cpp"
+#include "show/peqzone_flags.cpp"
+#include "show/petition.cpp"
+#include "show/petition_info.cpp"
+#include "show/proximity.cpp"
+#include "show/quest_errors.cpp"
+#include "show/quest_globals.cpp"
+#include "show/recipe.cpp"
+#include "show/server_info.cpp"
+#include "show/skills.cpp"
+#include "show/spawn_status.cpp"
+#include "show/spells.cpp"
+#include "show/spells_list.cpp"
+#include "show/stats.cpp"
+#include "show/timers.cpp"
+#include "show/traps.cpp"
+#include "show/uptime.cpp"
+#include "show/variable.cpp"
+#include "show/version.cpp"
+#include "show/waypoints.cpp"
+#include "show/who.cpp"
+#include "show/xtargets.cpp"
+#include "show/zone_data.cpp"
+#include "show/zone_global_loot.cpp"
+#include "show/zone_loot.cpp"
+#include "show/zone_points.cpp"
+#include "show/zone_status.cpp"
+
+void command_show(Client *c, const Seperator *sep)
+{
+ struct Cmd {
+ std::string cmd{}; // command
+ std::string u{}; // usage
+ void (*fn)(Client *c, const Seperator *sep) = nullptr; // function
+ std::vector a{}; // aliases
+ };
+
+ std::vector commands = {
+ Cmd{.cmd = "aggro", .u = "aggro [Distance] [-v] (-v is verbose Faction Information)", .fn = ShowAggro, .a = {"#aggro"}},
+ Cmd{.cmd = "buffs", .u = "buffs", .fn = ShowBuffs, .a = {"#showbuffs"}},
+ Cmd{.cmd = "buried_corpse_count", .u = "buried_corpse_count", .fn = ShowBuriedCorpseCount, .a = {"#getplayerburiedcorpsecount"}},
+ Cmd{.cmd = "client_version_summary", .u = "client_version_summary", .fn = ShowClientVersionSummary, .a = {"#cvs"}},
+ Cmd{.cmd = "currencies", .u = "currencies", .fn = ShowCurrencies, .a = {"#viewcurrencies"}},
+ Cmd{.cmd = "distance", .u = "distance", .fn = ShowDistance, .a = {"#distance"}},
+ Cmd{.cmd = "emotes", .u = "emotes", .fn = ShowEmotes, .a = {"#emoteview"}},
+ Cmd{.cmd = "field_of_view", .u = "field_of_view", .fn = ShowFieldOfView, .a = {"#fov"}},
+ Cmd{.cmd = "flags", .u = "flags", .fn = ShowFlags, .a = {"#flags"}},
+ Cmd{.cmd = "group_info", .u = "group_info", .fn = ShowGroupInfo, .a = {"#ginfo"}},
+ Cmd{.cmd = "hatelist", .u = "hatelist", .fn = ShowHateList, .a = {"#hatelist"}},
+ Cmd{.cmd = "inventory", .u = "inventory", .fn = ShowInventory, .a = {"#peekinv"}},
+ Cmd{.cmd = "ip_lookup", .u = "ip_lookup", .fn = ShowIPLookup, .a = {"#iplookup"}},
+ Cmd{.cmd = "line_of_sight", .u = "line_of_sight", .fn = ShowLineOfSight, .a = {"#checklos"}},
+ Cmd{.cmd = "network", .u = "network", .fn = ShowNetwork, .a = {"#network"}},
+ Cmd{.cmd = "network_stats", .u = "network_stats", .fn = ShowNetworkStats, .a = {"#netstats"}},
+ Cmd{.cmd = "npc_global_loot", .u = "npc_global_loot", .fn = ShowNPCGlobalLoot, .a = {"#shownpcgloballoot"}},
+ Cmd{.cmd = "npc_stats", .u = "npc_stats", .fn = ShowNPCStats, .a = {"#npcstats"}},
+ Cmd{.cmd = "npc_type", .u = "npc_type [NPC ID]", .fn = ShowNPCType, .a = {"#viewnpctype"}},
+ Cmd{.cmd = "peqzone_flags", .u = "peqzone_flags", .fn = ShowPEQZoneFlags, .a = {"#peqzone_flags"}},
+ Cmd{.cmd = "petition", .u = "petition", .fn = ShowPetition, .a = {"#listpetition", "#viewpetition"}},
+ Cmd{.cmd = "petition_info", .u = "petition_info", .fn = ShowPetitionInfo, .a = {"#petitioninfo"}},
+ Cmd{.cmd = "proximity", .u = "proximity", .fn = ShowProximity, .a = {"#proximity"}},
+ Cmd{.cmd = "quest_errors", .u = "quest_errors", .fn = ShowQuestErrors, .a = {"#questerrors"}},
+ Cmd{.cmd = "quest_globals", .u = "quest_globals", .fn = ShowQuestGlobals, .a = {"#globalview"}},
+ Cmd{.cmd = "recipe", .u = "recipe [Recipe ID]", .fn = ShowRecipe, .a = {"#viewrecipe"}},
+ Cmd{.cmd = "server_info", .u = "server_info", .fn = ShowServerInfo, .a = {"#serverinfo"}},
+ Cmd{.cmd = "skills", .u = "skills", .fn = ShowSkills, .a = {"#showskills"}},
+ Cmd{.cmd = "spawn_status", .u = "spawn_status [all|disabled|enabled|Spawn ID]", .fn = ShowSpawnStatus, .a = {"#spawnstatus"}},
+ Cmd{.cmd = "spells", .u = "spells [disciplines|spells]", .fn = ShowSpells, .a = {"#showspells"}},
+ Cmd{.cmd = "spells_list", .u = "spells_list", .fn = ShowSpellsList, .a = {"#showspellslist"}},
+ Cmd{.cmd = "stats", .u = "stats", .fn = ShowStats, .a = {"#showstats"}},
+ Cmd{.cmd = "timers", .u = "timers", .fn = ShowTimers, .a = {"#timers"}},
+ Cmd{.cmd = "traps", .u = "traps", .fn = ShowTraps, .a = {"#trapinfo"}},
+ Cmd{.cmd = "uptime", .u = "uptime [Zone Server ID] (Zone Server ID is optional)", .fn = ShowUptime, .a = {"#uptime"}},
+ Cmd{.cmd = "variable", .u = "variable [Variable Name]", .fn = ShowVariable, .a = {"#getvariable"}},
+ Cmd{.cmd = "version", .u = "version", .fn = ShowVersion, .a = {"#version"}},
+ Cmd{.cmd = "waypoints", .u = "waypoints", .fn = ShowWaypoints, .a = {"#wpinfo"}},
+ Cmd{.cmd = "who", .u = "who [Search Criteria] (Search criteria is optional)", .fn = ShowWho, .a = {"#who"}},
+ Cmd{.cmd = "xtargets", .u = "xtargets [Amount] (Amount is optional)", .fn = ShowXTargets, .a = {"#xtargets"}},
+ Cmd{.cmd = "zone_data", .u = "zone_data", .fn = ShowZoneData, .a = {"#zstats"}},
+ Cmd{.cmd = "zone_global_loot", .u = "zone_global_loot", .fn = ShowZoneGlobalLoot, .a = {"#showzonegloballoot"}},
+ Cmd{.cmd = "zone_loot", .u = "zone_loot", .fn = ShowZoneLoot, .a = {"#viewzoneloot"}},
+ Cmd{.cmd = "zone_points", .u = "zone_points", .fn = ShowZonePoints, .a = {"#showzonepoints"}},
+ Cmd{.cmd = "zone_status", .u = "zone_status", .fn = ShowZoneStatus, .a = {"#zonestatus"}},
+ };
+
+ // Check for arguments
+ const auto arguments = sep->argnum;
+
+ // look for alias or command
+ for (const auto &cmd: commands) {
+ // Check for alias first
+ for (const auto &alias: cmd.a) {
+ if (!alias.empty() && Strings::EqualFold(alias, sep->arg[0])) {
+ // build string from sep args
+ std::vector args = {};
+
+ // skip the first arg
+ for (auto i = 1; i <= arguments; i++) {
+ args.emplace_back(sep->arg[i]);
+ }
+
+ // build the rewrite string
+ const std::string& rewrite = fmt::format("#show {} {}", cmd.cmd, Strings::Join(args, " "));
+
+ // rewrite to #show
+ c->SendGMCommand(rewrite);
+ return;
+ }
+ }
+
+ // Check for command
+ if (cmd.cmd == Strings::ToLower(sep->arg[1])) {
+ cmd.fn(c, sep);
+ return;
+ }
+ }
+
+ // Command not found
+ c->Message(Chat::White, "Command not found. Usage: #show [command]");
+ for (const auto &cmd: commands) {
+ c->Message(Chat::White, fmt::format("Usage: #show {}", cmd.u).c_str());
+ }
+}
diff --git a/zone/gm_commands/show/aggro.cpp b/zone/gm_commands/show/aggro.cpp
new file mode 100755
index 0000000000..c579dc4c37
--- /dev/null
+++ b/zone/gm_commands/show/aggro.cpp
@@ -0,0 +1,22 @@
+#include "../../client.h"
+
+void ShowAggro(Client *c, const Seperator *sep)
+{
+ const auto arguments = sep->argnum;
+ if (arguments < 2 || !sep->IsNumber(2)) {
+ c->Message(Chat::White, "Usage: #show aggro [Distance] [-v] (-v is verbose Faction Information)");
+ return;
+ }
+
+ if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
+ c->Message(Chat::White, "You must target an NPC to use this command.");
+ return;
+ }
+
+ const auto t = c->GetTarget()->CastToNPC();
+
+ const float distance = Strings::ToFloat(sep->arg[2]);
+ const bool is_verbose = Strings::EqualFold(sep->arg[3], "-v");
+
+ entity_list.DescribeAggro(c, t, distance, is_verbose);
+}
diff --git a/zone/gm_commands/showbuffs.cpp b/zone/gm_commands/show/buffs.cpp
old mode 100755
new mode 100644
similarity index 51%
rename from zone/gm_commands/showbuffs.cpp
rename to zone/gm_commands/show/buffs.cpp
index 16626df191..eec2451d6f
--- a/zone/gm_commands/showbuffs.cpp
+++ b/zone/gm_commands/show/buffs.cpp
@@ -1,6 +1,6 @@
-#include "../client.h"
+#include "../../client.h"
-void command_showbuffs(Client *c, const Seperator *sep)
+void ShowBuffs(Client *c, const Seperator *sep)
{
Mob* t = c;
if (c->GetTarget()) {
@@ -9,4 +9,3 @@ void command_showbuffs(Client *c, const Seperator *sep)
t->ShowBuffs(c);
}
-
diff --git a/zone/gm_commands/show/buried_corpse_count.cpp b/zone/gm_commands/show/buried_corpse_count.cpp
new file mode 100644
index 0000000000..863abc18a9
--- /dev/null
+++ b/zone/gm_commands/show/buried_corpse_count.cpp
@@ -0,0 +1,23 @@
+#include "../../client.h"
+#include "../../corpse.h"
+
+void ShowBuriedCorpseCount(Client *c, const Seperator *sep)
+{
+ auto t = c;
+ if (c->GetTarget() && c->GetTarget()->IsClient() && c->GetGM()) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ const uint32 corpse_count = database.GetCharacterBuriedCorpseCount(t->CharacterID());
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} {} {} buried corpse{}.",
+ c->GetTargetDescription(t, TargetDescriptionType::UCYou),
+ c == t ? "have" : "has",
+ corpse_count,
+ corpse_count != 1 ? "s" : ""
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/client_version_summary.cpp b/zone/gm_commands/show/client_version_summary.cpp
new file mode 100644
index 0000000000..98b5d4f52c
--- /dev/null
+++ b/zone/gm_commands/show/client_version_summary.cpp
@@ -0,0 +1,16 @@
+#include "../../client.h"
+#include "../../worldserver.h"
+
+extern WorldServer worldserver;
+
+void ShowClientVersionSummary(Client *c, const Seperator *sep)
+{
+ auto pack = new ServerPacket(ServerOP_ClientVersionSummary, sizeof(ServerRequestClientVersionSummary_Struct));
+
+ auto s = (ServerRequestClientVersionSummary_Struct *) pack->pBuffer;
+ strn0cpy(s->Name, c->GetName(), sizeof(s->Name));
+
+ worldserver.SendPacket(pack);
+ safe_delete(pack);
+}
+
diff --git a/zone/gm_commands/show/currencies.cpp b/zone/gm_commands/show/currencies.cpp
new file mode 100644
index 0000000000..affda79bc1
--- /dev/null
+++ b/zone/gm_commands/show/currencies.cpp
@@ -0,0 +1,136 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+
+void ShowCurrencies(Client *c, const Seperator *sep)
+{
+ auto t = c;
+ if (c->GetTarget() && c->GetTarget()->IsClient()) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ const uint32 platinum = (
+ t->GetMoney(3, 0) +
+ t->GetMoney(3, 1) +
+ t->GetMoney(3, 2) +
+ t->GetMoney(3, 3)
+ );
+
+ const uint32 gold = (
+ t->GetMoney(2, 0) +
+ t->GetMoney(2, 1) +
+ t->GetMoney(2, 2)
+ );
+
+ const uint32 silver = (
+ t->GetMoney(1, 0) +
+ t->GetMoney(1, 1) +
+ t->GetMoney(1, 2)
+ );
+
+ const uint32 copper = (
+ t->GetMoney(0, 0) +
+ t->GetMoney(0, 1) +
+ t->GetMoney(0, 2)
+ );
+
+ std::string currency_table;
+
+ bool has_currency = false;
+
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Currency") +
+ DialogueWindow::TableCell("Amount")
+ );
+
+ if (
+ platinum ||
+ gold ||
+ silver ||
+ copper
+ ) {
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Money") +
+ DialogueWindow::TableCell(Strings::Money(platinum, gold, silver, copper))
+ );
+
+ has_currency = true;
+ }
+
+ const uint32 ebon_crystals = t->GetEbonCrystals();
+ if (ebon_crystals) {
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Ebon Crystals") +
+ DialogueWindow::TableCell(Strings::Commify(ebon_crystals))
+ );
+
+ has_currency = true;
+ }
+
+ const uint32 radiant_crystals = t->GetRadiantCrystals();
+ if (radiant_crystals) {
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Radiant Crystals") +
+ DialogueWindow::TableCell(Strings::Commify(radiant_crystals))
+ );
+
+ has_currency = true;
+ }
+
+ for (const auto& a : zone->AlternateCurrencies) {
+ const uint32 currency_value = t->GetAlternateCurrencyValue(a.id);
+ if (currency_value) {
+ const auto* d = database.GetItem(a.item_id);
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(d->Name) +
+ DialogueWindow::TableCell(Strings::Commify(currency_value))
+ );
+
+ has_currency = true;
+ }
+ }
+
+ for (const auto& l : EQ::constants::GetLDoNThemeMap()) {
+ const uint32 ldon_currency_value = t->GetLDoNPointsTheme(l.first);
+ if (ldon_currency_value) {
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(l.second) +
+ DialogueWindow::TableCell(Strings::Commify(ldon_currency_value))
+ );
+
+ has_currency = true;
+ }
+ }
+
+ const uint32 pvp_points = t->GetPVPPoints();
+ if (pvp_points) {
+ currency_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("PVP Points") +
+ DialogueWindow::TableCell(Strings::Commify(pvp_points))
+ );
+
+ has_currency = true;
+ }
+
+ currency_table = DialogueWindow::Table(currency_table);
+
+ if (!has_currency) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} {} not have any currencies.",
+ c->GetTargetDescription(t, TargetDescriptionType::UCYou),
+ c == t ? "do" : "does"
+ ).c_str()
+ );
+
+ return;
+ }
+
+ c->SendPopupToClient(
+ fmt::format(
+ "Currency for {}",
+ c->GetTargetDescription(t, TargetDescriptionType::UCSelf)
+ ).c_str(),
+ currency_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/show/distance.cpp b/zone/gm_commands/show/distance.cpp
new file mode 100644
index 0000000000..aece8494ea
--- /dev/null
+++ b/zone/gm_commands/show/distance.cpp
@@ -0,0 +1,23 @@
+#include "../../client.h"
+
+void ShowDistance(Client *c, const Seperator *sep)
+{
+ if (!c->GetTarget() || c->GetTarget() == c) {
+ c->Message(Chat::White, "You must have a target to use this command.");
+ return;
+ }
+
+ const auto t = c->GetTarget();
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} is {:.2f} units from you.",
+ c->GetTargetDescription(t),
+ Distance(
+ c->GetPosition(),
+ t->GetPosition()
+ )
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/emoteview.cpp b/zone/gm_commands/show/emotes.cpp
old mode 100755
new mode 100644
similarity index 62%
rename from zone/gm_commands/emoteview.cpp
rename to zone/gm_commands/show/emotes.cpp
index c1116f026f..9e7e58e74b
--- a/zone/gm_commands/emoteview.cpp
+++ b/zone/gm_commands/show/emotes.cpp
@@ -1,29 +1,27 @@
-#include "../client.h"
+#include "../../client.h"
-void command_emoteview(Client *c, const Seperator *sep)
+void ShowEmotes(Client *c, const Seperator *sep)
{
if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
c->Message(Chat::White, "You must target an NPC to view their emotes.");
return;
}
- auto target = c->GetTarget()->CastToNPC();
+ const auto t = c->GetTarget()->CastToNPC();
- auto emote_count = 0;
- auto emote_id = target->GetEmoteID();
-
- auto emote_number = 1;
+ uint32 emote_count = 0;
+ const uint32 emote_id = t->GetEmoteID();
LinkedListIterator iterator(zone->NPCEmoteList);
iterator.Reset();
while (iterator.MoreElements()) {
- auto &e = iterator.GetData();
+ const auto& e = iterator.GetData();
if (emote_id == e->emoteid) {
c->Message(
Chat::White,
fmt::format(
"Emote {} | Event: {} ({}) Type: {} ({})",
- emote_number,
+ e->emoteid,
EQ::constants::GetEmoteEventTypeName(e->event_),
e->event_,
EQ::constants::GetEmoteTypeName(e->type),
@@ -35,35 +33,22 @@ void command_emoteview(Client *c, const Seperator *sep)
Chat::White,
fmt::format(
"Emote {} | Text: {}",
- emote_number,
+ e->emoteid,
e->text
).c_str()
);
emote_count++;
- emote_number++;
}
iterator.Advance();
}
- if (!emote_count) {
- c->Message(
- Chat::White,
- fmt::format(
- "{} has no emotes on Emote ID {}.",
- c->GetTargetDescription(target),
- emote_id
- ).c_str()
- );
- return;
- }
-
c->Message(
Chat::White,
fmt::format(
"{} has {} emote{} on Emote ID {}.",
- c->GetTargetDescription(target),
+ c->GetTargetDescription(t),
emote_count,
emote_count != 1 ? "s" : "",
emote_id
diff --git a/zone/gm_commands/show/field_of_view.cpp b/zone/gm_commands/show/field_of_view.cpp
new file mode 100644
index 0000000000..dfa617a35b
--- /dev/null
+++ b/zone/gm_commands/show/field_of_view.cpp
@@ -0,0 +1,23 @@
+#include "../../client.h"
+
+void ShowFieldOfView(Client *c, const Seperator *sep)
+{
+ if (!c->GetTarget() || c->GetTarget() == c) {
+ c->Message(Chat::White, "You must have a target to use this command.");
+ return;
+ }
+
+ const auto t = c->GetTarget();
+
+ const bool is_behind = c->BehindMob(t, c->GetX(), c->GetY());
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "You are {}behind {}, they have a heading of {}.",
+ is_behind ? "" : "not ",
+ c->GetTargetDescription(t),
+ t->GetHeading()
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/flags.cpp b/zone/gm_commands/show/flags.cpp
new file mode 100644
index 0000000000..27a4345efd
--- /dev/null
+++ b/zone/gm_commands/show/flags.cpp
@@ -0,0 +1,16 @@
+#include "../../client.h"
+
+void ShowFlags(Client *c, const Seperator *sep)
+{
+ auto t = c;
+
+ if (
+ c->GetTarget() &&
+ c->GetTarget()->IsClient() &&
+ c->Admin() >= minStatusToSeeOthersZoneFlags
+ ) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ t->SendZoneFlagInfo(c);
+}
diff --git a/zone/gm_commands/show/group_info.cpp b/zone/gm_commands/show/group_info.cpp
new file mode 100644
index 0000000000..7aab3464cd
--- /dev/null
+++ b/zone/gm_commands/show/group_info.cpp
@@ -0,0 +1,89 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+#include "../../groups.h"
+
+void ShowGroupInfo(Client *c, const Seperator *sep)
+{
+ auto t = c;
+ if (c->GetTarget() && c->GetTarget()->IsClient()) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ auto g = t->GetGroup();
+ if (!g) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} {} not in a group.",
+ c->GetTargetDescription(t, TargetDescriptionType::UCYou),
+ c == t ? "are" : "is"
+ ).c_str()
+ );
+ return;
+ }
+
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Group ID") +
+ DialogueWindow::TableCell(Strings::Commify(g->GetID()))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Members") +
+ DialogueWindow::TableCell(std::to_string(g->GroupCount()))
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Index") +
+ DialogueWindow::TableCell("Name") +
+ DialogueWindow::TableCell("In Zone") +
+ DialogueWindow::TableCell("Assist") +
+ DialogueWindow::TableCell("Puller") +
+ DialogueWindow::TableCell("Tank")
+ );
+
+ const std::string yes = DialogueWindow::ColorMessage("forest_green", "Y");
+ const std::string no = DialogueWindow::ColorMessage("red1", "N");
+
+ for (int group_member = 0; group_member < MAX_GROUP_MEMBERS; group_member++) {
+ if (g->membername[group_member][0] == '\0') {
+ continue;
+ }
+
+ const bool is_assist = g->MemberRoles[group_member] & RoleAssist;
+ const bool is_puller = g->MemberRoles[group_member] & RolePuller;
+ const bool is_tank = g->MemberRoles[group_member] & RoleTank;
+
+ popup_table += DialogueWindow::TableRow(
+ fmt::format(
+ "{}{}{}{}{}{}",
+ group_member,
+ (
+ strcmp(g->membername[group_member], c->GetCleanName()) ?
+ g->membername[group_member] :
+ fmt::format(
+ "{} (You)",
+ g->membername[group_member]
+ )
+ ),
+ g->members[group_member] ? yes : no,
+ is_assist ? yes : no,
+ is_puller ? yes : no,
+ is_tank ? yes : no
+ )
+ );
+ }
+
+ popup_table = DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ fmt::format(
+ "Group Info for {}",
+ c->GetTargetDescription(t, TargetDescriptionType::UCSelf)
+ ).c_str(),
+ popup_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/hatelist.cpp b/zone/gm_commands/show/hatelist.cpp
old mode 100755
new mode 100644
similarity index 50%
rename from zone/gm_commands/hatelist.cpp
rename to zone/gm_commands/show/hatelist.cpp
index 83fe75e20e..225ad16f42
--- a/zone/gm_commands/hatelist.cpp
+++ b/zone/gm_commands/show/hatelist.cpp
@@ -1,13 +1,13 @@
-#include "../client.h"
+#include "../../client.h"
-void command_hatelist(Client *c, const Seperator *sep)
+void ShowHateList(Client *c, const Seperator *sep)
{
if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
c->Message(Chat::White, "You must target an NPC to use this command.");
return;
}
- auto target = c->GetTarget();
+ const auto t = c->GetTarget();
- target->PrintHateListToClient(c);
+ t->PrintHateListToClient(c);
}
diff --git a/zone/gm_commands/peekinv.cpp b/zone/gm_commands/show/inventory.cpp
old mode 100755
new mode 100644
similarity index 81%
rename from zone/gm_commands/peekinv.cpp
rename to zone/gm_commands/show/inventory.cpp
index 596ad27bcc..cbb5a03fc5
--- a/zone/gm_commands/peekinv.cpp
+++ b/zone/gm_commands/show/inventory.cpp
@@ -1,11 +1,11 @@
-#include "../client.h"
-#include "../object.h"
+#include "../../client.h"
+#include "../../object.h"
-void command_peekinv(Client *c, const Seperator *sep)
+void ShowInventory(Client *c, const Seperator *sep)
{
- auto arguments = sep->argnum;
- if (!arguments) {
- SendPeekInvSubCommands(c);
+ const auto arguments = sep->argnum;
+ if (arguments < 2) {
+ SendShowInventorySubCommands(c);
return;
}
@@ -50,19 +50,19 @@ void command_peekinv(Client *c, const Seperator *sep)
int scope_mask = peekNone;
- const bool is_all = !strcasecmp(sep->arg[1], "all");
- const bool is_all_bank = !strcasecmp(sep->arg[1], "allbank");
- const bool is_bank = !strcasecmp(sep->arg[1], "bank");
- const bool is_cursor = !strcasecmp(sep->arg[1], "cursor");
- const bool is_cursor_limbo = !strcasecmp(sep->arg[1], "curlimbo");
- const bool is_equipment = !strcasecmp(sep->arg[1], "equip");
- const bool is_general = !strcasecmp(sep->arg[1], "gen");
- const bool is_limbo = !strcasecmp(sep->arg[1], "limbo");
- const bool is_possessions = !strcasecmp(sep->arg[1], "poss");
- const bool is_shared_bank = !strcasecmp(sep->arg[1], "shbank");
- const bool is_trade = !strcasecmp(sep->arg[1], "trade");
- const bool is_tribute = !strcasecmp(sep->arg[1], "trib");
- const bool is_world = !strcasecmp(sep->arg[1], "world");
+ const bool is_all = !strcasecmp(sep->arg[2], "all");
+ const bool is_all_bank = !strcasecmp(sep->arg[2], "allbank");
+ const bool is_bank = !strcasecmp(sep->arg[2], "bank");
+ const bool is_cursor = !strcasecmp(sep->arg[2], "cursor");
+ const bool is_cursor_limbo = !strcasecmp(sep->arg[2], "curlimbo");
+ const bool is_equipment = !strcasecmp(sep->arg[2], "equip");
+ const bool is_general = !strcasecmp(sep->arg[2], "gen");
+ const bool is_limbo = !strcasecmp(sep->arg[2], "limbo");
+ const bool is_possessions = !strcasecmp(sep->arg[2], "poss");
+ const bool is_shared_bank = !strcasecmp(sep->arg[2], "shbank");
+ const bool is_trade = !strcasecmp(sep->arg[2], "trade");
+ const bool is_tribute = !strcasecmp(sep->arg[2], "trib");
+ const bool is_world = !strcasecmp(sep->arg[2], "world");
if (is_all) {
scope_mask = (peekOutOfScope - 1);
@@ -91,7 +91,7 @@ void command_peekinv(Client *c, const Seperator *sep)
} else if (is_world) {
scope_mask |= peekWorld;
} else {
- SendPeekInvSubCommands(c);
+ SendShowInventorySubCommands(c);
return;
}
@@ -433,18 +433,18 @@ void command_peekinv(Client *c, const Seperator *sep)
}
}
-void SendPeekInvSubCommands(Client* c) {
- c->Message(Chat::White, "Usage: #peekinv equip - Shows items in Equipment slots");
- c->Message(Chat::White, "Usage: #peekinv gen - Shows items in General slots");
- c->Message(Chat::White, "Usage: #peekinv cursor - Shows items in Cursor slots");
- c->Message(Chat::White, "Usage: #peekinv poss - Shows items in Equipment, General, and Cursor slots");
- c->Message(Chat::White, "Usage: #peekinv limbo - Shows items in Limbo slots");
- c->Message(Chat::White, "Usage: #peekinv curlim - Shows items in Cursor and Limbo slots");
- c->Message(Chat::White, "Usage: #peekinv trib - Shows items in Tribute slots");
- c->Message(Chat::White, "Usage: #peekinv bank - Shows items in Bank slots");
- c->Message(Chat::White, "Usage: #peekinv shbank - Shows items in Shared Bank slots");
- c->Message(Chat::White, "Usage: #peekinv allbank - Shows items in Bank and Shared Bank slots");
- c->Message(Chat::White, "Usage: #peekinv trade - Shows items in Trade slots");
- c->Message(Chat::White, "Usage: #peekinv world - Shows items in World slots");
- c->Message(Chat::White, "Usage: #peekinv all - Shows items in all slots");
+void SendShowInventorySubCommands(Client* c) {
+ c->Message(Chat::White, "Usage: #show inventory equip - Shows items in Equipment slots");
+ c->Message(Chat::White, "Usage: #show inventory gen - Shows items in General slots");
+ c->Message(Chat::White, "Usage: #show inventory cursor - Shows items in Cursor slots");
+ c->Message(Chat::White, "Usage: #show inventory poss - Shows items in Equipment, General, and Cursor slots");
+ c->Message(Chat::White, "Usage: #show inventory limbo - Shows items in Limbo slots");
+ c->Message(Chat::White, "Usage: #show inventory curlim - Shows items in Cursor and Limbo slots");
+ c->Message(Chat::White, "Usage: #show inventory trib - Shows items in Tribute slots");
+ c->Message(Chat::White, "Usage: #show inventory bank - Shows items in Bank slots");
+ c->Message(Chat::White, "Usage: #show inventory shbank - Shows items in Shared Bank slots");
+ c->Message(Chat::White, "Usage: #show inventory allbank - Shows items in Bank and Shared Bank slots");
+ c->Message(Chat::White, "Usage: #show inventory trade - Shows items in Trade slots");
+ c->Message(Chat::White, "Usage: #show inventory world - Shows items in World slots");
+ c->Message(Chat::White, "Usage: #show inventory all - Shows items in all slots");
}
diff --git a/zone/gm_commands/show/ip_lookup.cpp b/zone/gm_commands/show/ip_lookup.cpp
new file mode 100644
index 0000000000..b020541b47
--- /dev/null
+++ b/zone/gm_commands/show/ip_lookup.cpp
@@ -0,0 +1,25 @@
+#include "../../client.h"
+#include "../../worldserver.h"
+
+extern WorldServer worldserver;
+
+void ShowIPLookup(Client *c, const Seperator *sep)
+{
+ const uint32 ip_length = strlen(sep->argplus[2]);
+
+ auto pack = new ServerPacket(
+ ServerOP_IPLookup,
+ sizeof(ServerGenericWorldQuery_Struct) + ip_length + 1
+ );
+
+ auto s = (ServerGenericWorldQuery_Struct *) pack->pBuffer;
+ strn0cpy(s->from, c->GetName(), sizeof(s->from));
+ s->admin = c->Admin();
+
+ if (ip_length) {
+ strcpy(s->query, sep->argplus[2]);
+ }
+
+ worldserver.SendPacket(pack);
+ safe_delete(pack);
+}
diff --git a/zone/gm_commands/show/line_of_sight.cpp b/zone/gm_commands/show/line_of_sight.cpp
new file mode 100644
index 0000000000..bf56c88663
--- /dev/null
+++ b/zone/gm_commands/show/line_of_sight.cpp
@@ -0,0 +1,22 @@
+#include "../../client.h"
+
+void ShowLineOfSight(Client *c, const Seperator *sep)
+{
+ if (!c->GetTarget() || c->GetTarget() == c) {
+ c->Message(Chat::White, "You must have a target to use this command.");
+ return;
+ }
+
+ const auto t = c->GetTarget();
+
+ const bool has_los = c->CheckLosFN(t);
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "You {}have line of sight to {}.",
+ has_los ? "" : "do not ",
+ c->GetTargetDescription(t)
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/network.cpp b/zone/gm_commands/show/network.cpp
new file mode 100644
index 0000000000..d9eff2c165
--- /dev/null
+++ b/zone/gm_commands/show/network.cpp
@@ -0,0 +1,138 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+
+void ShowNetwork(Client *c, const Seperator *sep)
+{
+ auto eqsi = c->Connection();
+ auto manager = eqsi->GetManager();
+ auto opts = manager->GetOptions();
+
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Option") +
+ DialogueWindow::TableCell("Value")
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Max Packet Size") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.max_packet_size))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Max Connection Count") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.max_connection_count))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Keep Alive Delay") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.keepalive_delay_ms))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resend Delay Factor") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}",
+ opts.daybreak_options.resend_delay_factor
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resend Delay") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.resend_delay_ms))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resend Delay Minimum") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.resend_delay_min))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resend Delay Maximum") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.resend_delay_max))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Connect Delay") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.connect_delay_ms))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Connect Stale") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.connect_stale_ms))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Stale Connection") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.stale_connection_ms))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("CRC Length") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.crc_length))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Hold Size") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.hold_size))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Hold Length") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.hold_length_ms))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Simulated In Packet Loss") +
+ DialogueWindow::TableCell(std::to_string(opts.daybreak_options.simulated_in_packet_loss))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Simulated Out Packet Loss") +
+ DialogueWindow::TableCell(std::to_string(opts.daybreak_options.simulated_out_packet_loss))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Tic Rate (Hz)") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}",
+ opts.daybreak_options.tic_rate_hertz
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resend Timeout") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.resend_timeout))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Connection Close Time") +
+ DialogueWindow::TableCell(Strings::MillisecondsToTime(opts.daybreak_options.connection_close_time))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Encode Passes (1)") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.encode_passes[0]))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Encode Passes (2)") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.encode_passes[1]))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Port") +
+ DialogueWindow::TableCell(Strings::Commify(opts.daybreak_options.port))
+ );
+
+ popup_table = DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ "Network Information",
+ popup_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/show/network_stats.cpp b/zone/gm_commands/show/network_stats.cpp
new file mode 100644
index 0000000000..8d51e8f692
--- /dev/null
+++ b/zone/gm_commands/show/network_stats.cpp
@@ -0,0 +1,297 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+
+void ShowNetworkStats(Client *c, const Seperator *sep)
+{
+ const auto connection = c->Connection();
+ const auto opts = connection->GetManager()->GetOptions();
+ const auto eqs_stats = connection->GetStats();
+
+ const auto& stats = eqs_stats.DaybreakStats;
+
+ const auto sec_since_stats_reset = std::chrono::duration_cast>(
+ EQ::Net::Clock::now() - stats.created
+ ).count();
+
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sent Bytes") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.sent_bytes),
+ stats.sent_bytes / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Received Bytes") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.recv_bytes),
+ stats.recv_bytes / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sent Bytes Before Encode") +
+ DialogueWindow::TableCell(Strings::Commify(stats.bytes_before_encode)) +
+ DialogueWindow::TableCell("Compression Rate") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}%%",
+ static_cast(stats.bytes_before_encode - stats.sent_bytes) /
+ static_cast(stats.bytes_before_encode) * 100.0
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sent Bytes After Encode") +
+ DialogueWindow::TableCell(Strings::Commify(stats.bytes_after_decode)) +
+ DialogueWindow::TableCell("Compression Rate") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}%%",
+ static_cast(stats.bytes_after_decode - stats.recv_bytes) /
+ static_cast(stats.bytes_after_decode) * 100.0
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Minimum Ping") +
+ DialogueWindow::TableCell(Strings::Commify(stats.min_ping))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Maximum Ping") +
+ DialogueWindow::TableCell(Strings::Commify(stats.max_ping))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Last Ping") +
+ DialogueWindow::TableCell(Strings::Commify(stats.last_ping))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Average Ping") +
+ DialogueWindow::TableCell(Strings::Commify(stats.avg_ping))
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Real Time Received Packets") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.recv_packets),
+ stats.recv_packets / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Real Time Sent Packets") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.sent_packets),
+ stats.sent_packets / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sync Received Packets") +
+ DialogueWindow::TableCell(Strings::Commify(stats.sync_recv_packets))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sync Sent Packets") +
+ DialogueWindow::TableCell(Strings::Commify(stats.sync_sent_packets))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sync Remote Received Packets") +
+ DialogueWindow::TableCell(Strings::Commify(stats.sync_remote_recv_packets))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sync Remote Sent Packets") +
+ DialogueWindow::TableCell(Strings::Commify(stats.sync_remote_sent_packets))
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Packet Loss In") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}%%",
+ (
+ 100.0 *
+ (
+ 1.0 -
+ static_cast(stats.sync_recv_packets) /
+ static_cast(stats.sync_remote_sent_packets)
+ )
+ )
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Packet Loss Out") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}%%",
+ (
+ 100.0 *
+ (
+ 1.0 -
+ static_cast(stats.sync_remote_recv_packets) /
+ static_cast(stats.sync_sent_packets)
+ )
+ )
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resent Packets") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.resent_packets),
+ stats.resent_packets / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resent Fragments") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.resent_fragments),
+ stats.resent_fragments / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Resent Non-Fragments") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.resent_full),
+ stats.resent_full / sec_since_stats_reset
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::Break(2);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Dropped Datarate Packets") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(stats.dropped_datarate_packets),
+ stats.dropped_datarate_packets / sec_since_stats_reset
+ )
+ )
+ );
+
+ if (opts.daybreak_options.outgoing_data_rate > 0.0) {
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Outgoing Link Saturation") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}%% ({:.2f}kb Per Second)",
+ (
+ 100.0 *
+ (
+ 1.0 -
+ (
+ (
+ opts.daybreak_options.outgoing_data_rate -
+ stats.datarate_remaining
+ ) /
+ opts.daybreak_options.outgoing_data_rate
+ )
+ )
+ ),
+ opts.daybreak_options.outgoing_data_rate
+ )
+ )
+ );
+ }
+
+ popup_table += DialogueWindow::Break(2);
+
+ std::string sent_rows;
+
+ for (int i = 0; i < _maxEmuOpcode; ++i) {
+ const int count = eqs_stats.SentCount[i];
+ if (count) {
+ sent_rows += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(OpcodeNames[i]) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(count),
+ count / sec_since_stats_reset
+ )
+ )
+ );
+ }
+ }
+
+ std::string recv_rows;
+
+ for (int i = 0; i < _maxEmuOpcode; ++i) {
+ const int count = eqs_stats.RecvCount[i];
+ if (count) {
+ recv_rows += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(OpcodeNames[i]) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f} Per Second)",
+ Strings::Commify(count),
+ count / sec_since_stats_reset
+ )
+ )
+ );
+ }
+ }
+
+ popup_table += DialogueWindow::TableRow(DialogueWindow::TableCell("Sent Packet Types"));
+
+ popup_table += sent_rows;
+
+ popup_table += DialogueWindow::TableRow(DialogueWindow::TableCell("Received Packet Types"));
+
+ popup_table += recv_rows;
+
+ popup_table = DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ "Network Statistics",
+ popup_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/shownpcgloballoot.cpp b/zone/gm_commands/show/npc_global_loot.cpp
old mode 100755
new mode 100644
similarity index 71%
rename from zone/gm_commands/shownpcgloballoot.cpp
rename to zone/gm_commands/show/npc_global_loot.cpp
index e8c1026cd3..6167550c23
--- a/zone/gm_commands/shownpcgloballoot.cpp
+++ b/zone/gm_commands/show/npc_global_loot.cpp
@@ -1,6 +1,6 @@
-#include "../client.h"
+#include "../../client.h"
-void command_shownpcgloballoot(Client *c, const Seperator *sep)
+void ShowNPCGlobalLoot(Client *c, const Seperator *sep)
{
if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
c->Message(Chat::White, "You must target an NPC to use this command.");
@@ -11,4 +11,3 @@ void command_shownpcgloballoot(Client *c, const Seperator *sep)
zone->ShowNPCGlobalLoot(c, t);
}
-
diff --git a/zone/gm_commands/show/npc_stats.cpp b/zone/gm_commands/show/npc_stats.cpp
new file mode 100644
index 0000000000..65254e3bb8
--- /dev/null
+++ b/zone/gm_commands/show/npc_stats.cpp
@@ -0,0 +1,17 @@
+#include "../../client.h"
+
+void ShowNPCStats(Client *c, const Seperator *sep)
+{
+ if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
+ c->Message(Chat::White, "You must target an NPC to use this command.");
+ return;
+ }
+
+ const auto t = c->GetTarget()->CastToNPC();
+
+ // Stats
+ t->ShowStats(c);
+
+ // Loot Data
+ t->QueryLoot(c);
+}
diff --git a/zone/gm_commands/show/npc_type.cpp b/zone/gm_commands/show/npc_type.cpp
new file mode 100644
index 0000000000..f70b19e885
--- /dev/null
+++ b/zone/gm_commands/show/npc_type.cpp
@@ -0,0 +1,35 @@
+#include "../../client.h"
+
+void ShowNPCType(Client *c, const Seperator *sep)
+{
+ if (!sep->IsNumber(2)) {
+ c->Message(Chat::White, "Usage: #show npc_type [NPC ID]");
+ return;
+ }
+
+ const uint32 npc_id = Strings::ToUnsignedInt(sep->arg[2]);
+ const auto d = content_db.LoadNPCTypesData(npc_id);
+
+ if (!d) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "NPC ID {} was not found.",
+ npc_id
+ ).c_str()
+ );
+
+ return;
+ }
+
+ auto npc = new NPC(
+ d,
+ nullptr,
+ c->GetPosition(),
+ GravityBehavior::Water
+ );
+
+ npc->ShowStats(c);
+
+ safe_delete(npc);
+}
diff --git a/zone/gm_commands/show/peqzone_flags.cpp b/zone/gm_commands/show/peqzone_flags.cpp
new file mode 100644
index 0000000000..9efa6e09f3
--- /dev/null
+++ b/zone/gm_commands/show/peqzone_flags.cpp
@@ -0,0 +1,15 @@
+#include "../../client.h"
+
+void ShowPEQZoneFlags(Client *c, const Seperator *sep)
+{
+ auto t = c;
+ if (
+ c->GetTarget() &&
+ c->GetTarget()->IsClient() &&
+ c->Admin() >= minStatusToSeeOthersZoneFlags
+ ) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ t->SendPEQZoneFlagInfo(c);
+}
diff --git a/zone/gm_commands/show/petition.cpp b/zone/gm_commands/show/petition.cpp
new file mode 100644
index 0000000000..5010005201
--- /dev/null
+++ b/zone/gm_commands/show/petition.cpp
@@ -0,0 +1,69 @@
+#include "../../client.h"
+#include "../../common/repositories/petitions_repository.h"
+
+void ShowPetition(Client *c, const Seperator *sep)
+{
+ if (!sep->IsNumber(2)) {
+ const auto& l = PetitionsRepository::All(database);
+
+ uint32 found_count = 0;
+
+ for (const auto& e : l) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Petition {} | Name: {} Text: {}",
+ e.petid,
+ e.charname,
+ e.petitiontext
+ ).c_str()
+ );
+
+ found_count++;
+
+ if (found_count == 50) {
+ break;
+ }
+ }
+
+ if (found_count == 50) {
+ c->Message(Chat::White, "50 Petitions found, max reached.");
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} Petition{} found.",
+ found_count,
+ found_count != 1 ? "s" : ""
+ ).c_str()
+ );
+
+ return;
+ }
+
+ const uint32 petition_id = Strings::ToUnsignedInt(sep->arg[2]);
+
+ const auto& l = PetitionsRepository::GetWhere(database, fmt::format("petition_id = {}", petition_id));
+ if (l.empty()) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Petition ID {} was not found.",
+ petition_id
+ ).c_str()
+ );
+
+ return;
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Petition {} | Name: {} Text: {}",
+ l[0].petid,
+ l[0].charname,
+ l[0].petitiontext
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/petition_info.cpp b/zone/gm_commands/show/petition_info.cpp
new file mode 100644
index 0000000000..68cd11cf27
--- /dev/null
+++ b/zone/gm_commands/show/petition_info.cpp
@@ -0,0 +1,79 @@
+#include "../../client.h"
+#include "../../common/repositories/petitions_repository.h"
+
+void ShowPetitionInfo(Client *c, const Seperator *sep)
+{
+ if (!sep->IsNumber(2)) {
+ const auto& l = PetitionsRepository::All(database);
+
+ uint32 found_count = 0;
+
+ for (const auto& e : l) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Petition {} | Name: {} Text: {} Account: {} Zone: {} Class: {} Race: {} Level: {}",
+ e.petid,
+ e.charname,
+ e.petitiontext,
+ e.accountname,
+ e.zone,
+ GetClassIDName(static_cast(e.charclass)),
+ GetRaceIDName(static_cast(e.charrace)),
+ e.charlevel
+ ).c_str()
+ );
+
+ found_count++;
+
+ if (found_count == 50) {
+ break;
+ }
+ }
+
+ if (found_count == 50) {
+ c->Message(Chat::White, "50 Petitions found, max reached.");
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} Petition{} found.",
+ found_count,
+ found_count != 1 ? "s" : ""
+ ).c_str()
+ );
+
+ return;
+ }
+
+ const uint32 petition_id = Strings::ToUnsignedInt(sep->arg[2]);
+
+ const auto& l = PetitionsRepository::GetWhere(database, fmt::format("petition_id = {}", petition_id));
+ if (l.empty()) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Petition ID {} was not found.",
+ petition_id
+ ).c_str()
+ );
+
+ return;
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Petition {} | Name: {} Text: {} Account: {} Zone: {} Class: {} Race: {} Level: {}",
+ l[0].petid,
+ l[0].charname,
+ l[0].petitiontext,
+ l[0].accountname,
+ l[0].zone,
+ GetClassIDName(static_cast(l[0].charclass)),
+ GetRaceIDName(static_cast(l[0].charrace)),
+ l[0].charlevel
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/proximity.cpp b/zone/gm_commands/show/proximity.cpp
new file mode 100644
index 0000000000..3b8076d291
--- /dev/null
+++ b/zone/gm_commands/show/proximity.cpp
@@ -0,0 +1,73 @@
+#include "../../client.h"
+
+void ShowProximity(Client *c, const Seperator *sep)
+{
+ if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
+ c->Message(Chat::White, "You must target an NPC to use this command.");
+ return;
+ }
+
+ for (const auto& n : entity_list.GetNPCList()) {
+ if (
+ n.second &&
+ Strings::Contains(n.second->GetName(), "Proximity")
+ ) {
+ n.second->Depop();
+ }
+ }
+
+ const auto t = c->GetTarget()->CastToNPC();
+
+ std::vector v;
+
+ FindPerson_Point p {};
+
+ if (t->IsProximitySet()) {
+ glm::vec4 position;
+ position.w = t->GetHeading();
+ position.x = t->GetProximityMinX();
+ position.y = t->GetProximityMinY();
+ position.z = t->GetZ();
+
+ position.x = t->GetProximityMinX();
+ position.y = t->GetProximityMinY();
+ NPC::SpawnNodeNPC("Proximity", "", position);
+
+ position.x = t->GetProximityMinX();
+ position.y = t->GetProximityMaxY();
+ NPC::SpawnNodeNPC("Proximity", "", position);
+
+ position.x = t->GetProximityMaxX();
+ position.y = t->GetProximityMinY();
+ NPC::SpawnNodeNPC("Proximity", "", position);
+
+ position.x = t->GetProximityMaxX();
+ position.y = t->GetProximityMaxY();
+ NPC::SpawnNodeNPC("Proximity", "", position);
+
+ p.x = t->GetProximityMinX();
+ p.y = t->GetProximityMinY();
+ p.z = t->GetZ();
+ v.push_back(p);
+
+ p.x = t->GetProximityMinX();
+ p.y = t->GetProximityMaxY();
+ v.push_back(p);
+
+ p.x = t->GetProximityMaxX();
+ p.y = t->GetProximityMaxY();
+ v.push_back(p);
+
+ p.x = t->GetProximityMaxX();
+ p.y = t->GetProximityMinY();
+ v.push_back(p);
+
+ p.x = t->GetProximityMinX();
+ p.y = t->GetProximityMinY();
+ v.push_back(p);
+ }
+
+ if (c->ClientVersion() >= EQ::versions::ClientVersion::RoF) {
+ c->SendPathPacket(v);
+ }
+}
diff --git a/zone/gm_commands/show/quest_errors.cpp b/zone/gm_commands/show/quest_errors.cpp
new file mode 100644
index 0000000000..7a1bf4d9b8
--- /dev/null
+++ b/zone/gm_commands/show/quest_errors.cpp
@@ -0,0 +1,35 @@
+#include "../../client.h"
+#include "../../quest_parser_collection.h"
+
+void ShowQuestErrors(Client *c, const Seperator *sep)
+{
+ std::list l;
+ parse->GetErrors(l);
+
+ if (!l.size()) {
+ c->Message(Chat::White, "There are no Quest errors currently.");
+ return;
+ }
+
+ c->Message(Chat::White, "Quest errors currently are as follows:");
+
+ uint32 error_count = 0;
+
+ for (const auto& e : l) {
+ if (error_count >= RuleI(World, MaximumQuestErrors)) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Maximum of {} error{} shown.",
+ RuleI(World, MaximumQuestErrors),
+ RuleI(World, MaximumQuestErrors) != 1 ? "s" : ""
+ ).c_str()
+ );
+ break;
+ }
+
+ c->Message(Chat::White, e.c_str());
+
+ error_count++;
+ }
+}
diff --git a/zone/gm_commands/show/quest_globals.cpp b/zone/gm_commands/show/quest_globals.cpp
new file mode 100644
index 0000000000..63396352b9
--- /dev/null
+++ b/zone/gm_commands/show/quest_globals.cpp
@@ -0,0 +1,76 @@
+#include "../../client.h"
+
+void ShowQuestGlobals(Client *c, const Seperator *sep)
+{
+ Mob* t = c;
+ if (c->GetTarget()) {
+ t = c->GetTarget();
+ }
+
+ QGlobalCache* char_cache = c->GetQGlobals();
+ QGlobalCache* npc_cache = t->IsNPC() ? t->CastToNPC()->GetQGlobals() : nullptr;
+ QGlobalCache* zone_cache = zone->GetQGlobals();
+
+ std::list global_map;
+
+ uint32 character_id = c->CharacterID();
+ uint32 npc_id = t->IsNPC() ? t->CastToNPC()->GetNPCTypeID() : 0;
+ uint32 zone_id = zone->GetZoneID();
+
+ if (npc_cache) {
+ QGlobalCache::Combine(
+ global_map,
+ npc_cache->GetBucket(),
+ npc_id,
+ character_id,
+ zone_id
+ );
+ }
+
+ if (char_cache) {
+ QGlobalCache::Combine(
+ global_map,
+ char_cache->GetBucket(),
+ npc_id,
+ character_id,
+ zone_id
+ );
+ }
+
+ if (zone_cache) {
+ QGlobalCache::Combine(
+ global_map,
+ zone_cache->GetBucket(),
+ npc_id,
+ character_id,
+ zone_id
+ );
+ }
+
+ uint32 global_count = 0;
+ uint32 global_number = 1;
+
+ for (const auto& g : global_map) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Quest Global {} | Name: {} Value: {}",
+ global_number,
+ g.name,
+ g.value
+ ).c_str()
+ );
+
+ global_count++;
+ global_number++;
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} Quest Global{} found.",
+ global_count,
+ global_count != 1 ? "s" : ""
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/viewrecipe.cpp b/zone/gm_commands/show/recipe.cpp
old mode 100755
new mode 100644
similarity index 62%
rename from zone/gm_commands/viewrecipe.cpp
rename to zone/gm_commands/show/recipe.cpp
index 74035de2a2..0bc9803161
--- a/zone/gm_commands/viewrecipe.cpp
+++ b/zone/gm_commands/show/recipe.cpp
@@ -1,32 +1,33 @@
-#include "../client.h"
-#include "../command.h"
+#include "../../client.h"
+#include "../../command.h"
#include "../../common/repositories/tradeskill_recipe_repository.h"
#include "../../common/repositories/tradeskill_recipe_entries_repository.h"
-void command_viewrecipe(Client *c, const Seperator *sep)
+void ShowRecipe(Client *c, const Seperator *sep)
{
- int arguments = sep->argnum;
- if (!arguments || !sep->IsNumber(1)) {
- c->Message(Chat::White, "Command Syntax: #viewrecipe [Recipe ID]");
+ if (!sep->IsNumber(2)) {
+ c->Message(Chat::White, "Command Syntax: #show recipe [Recipe ID]");
return;
}
- auto recipe_id = static_cast(Strings::ToUnsignedInt(sep->arg[1]));
- auto re = TradeskillRecipeEntriesRepository::GetWhere(
+ const uint16 recipe_id = static_cast(Strings::ToUnsignedInt(sep->arg[2]));
+
+ const auto& re = TradeskillRecipeEntriesRepository::GetWhere(
database,
fmt::format("recipe_id = {} ORDER BY id ASC", recipe_id)
);
- auto r = TradeskillRecipeRepository::GetWhere(
+
+ const auto& r = TradeskillRecipeRepository::GetWhere(
database,
fmt::format("id = {}", recipe_id)
);
- if (re.empty() || r.empty() || !re[0].id || !r[0].id) {
+ if (re.empty() || r.empty()) {
c->Message(
Chat::White,
fmt::format(
"Recipe ID {} has no entries or could not be found.",
- Strings::Commify(std::to_string(recipe_id))
+ Strings::Commify(recipe_id)
).c_str()
);
return;
@@ -36,13 +37,13 @@ void command_viewrecipe(Client *c, const Seperator *sep)
Chat::White,
fmt::format(
"Recipe {} | {}",
- Strings::Commify(std::to_string(recipe_id)),
+ Strings::Commify(recipe_id),
r[0].name
).c_str()
);
- auto entry_number = 1;
- bool can_summon_items = c->Admin() >= GetCommandStatus(c, "summonitem");
+ uint32 entry_number = 1;
+ const bool can_summon_items = c->Admin() >= GetCommandStatus(c, "summonitem");
for (const auto& e : re) {
c->Message(
@@ -51,8 +52,22 @@ void command_viewrecipe(Client *c, const Seperator *sep)
"Entry {}{} | {}{}",
entry_number,
e.iscontainer > 0 ? " (Container)" : "",
- e.item_id > 1000 ? database.CreateItemLink(e.item_id) : EQ::constants::GetObjectTypeName(e.item_id),
- can_summon_items && e.item_id > 1000 ? fmt::format(" | {}", Saylink::Silent(fmt::format("#si {}", e.item_id), "Summon")) : ""
+ (
+ e.item_id > 1000 ?
+ database.CreateItemLink(e.item_id) :
+ EQ::constants::GetObjectTypeName(e.item_id)
+ ),
+ (
+ can_summon_items && e.item_id > 1000 ?
+ fmt::format(
+ " | {}",
+ Saylink::Silent(
+ fmt::format("#si {}", e.item_id),
+ "Summon"
+ )
+ ) :
+ ""
+ )
).c_str()
);
@@ -117,4 +132,3 @@ void command_viewrecipe(Client *c, const Seperator *sep)
entry_number++;
}
}
-
diff --git a/zone/gm_commands/show/server_info.cpp b/zone/gm_commands/show/server_info.cpp
new file mode 100644
index 0000000000..ff3070aa79
--- /dev/null
+++ b/zone/gm_commands/show/server_info.cpp
@@ -0,0 +1,106 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+#include "../../common/serverinfo.h"
+
+void ShowServerInfo(Client *c, const Seperator *sep)
+{
+ auto os = EQ::GetOS();
+ auto cpus = EQ::GetCPUs();
+ const uint32 process_id = EQ::GetPID();
+ const double rss = EQ::GetRSS() / 1048576.0;
+ const uint32 uptime = static_cast(EQ::GetUptime());
+
+ std::string popup_table;
+
+ std::string popup_text;
+
+ popup_text += DialogueWindow::CenterMessage(
+ DialogueWindow::ColorMessage("green", "Operating System Information")
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Machine") +
+ DialogueWindow::TableCell(os.machine)
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("System") +
+ DialogueWindow::TableCell(os.sysname)
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Release") +
+ DialogueWindow::TableCell(os.release)
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Uptime") +
+ DialogueWindow::TableCell(Strings::SecondsToTime(uptime))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Version") +
+ DialogueWindow::TableCell(os.version)
+ );
+
+ popup_text += DialogueWindow::Table(popup_table);
+
+ popup_table = std::string();
+
+ popup_text += DialogueWindow::Break();
+
+ popup_text += DialogueWindow::CenterMessage(
+ DialogueWindow::ColorMessage("green", "CPU Information")
+ );
+
+ for (size_t cpu = 0; cpu < cpus.size(); ++cpu) {
+ auto ¤t_cpu = cpus[cpu];
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(
+ fmt::format(
+ "CPU {}",
+ cpu
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({:.2f}GHz)",
+ current_cpu.model,
+ current_cpu.speed
+ )
+ )
+ );
+ }
+
+ popup_text += DialogueWindow::Table(popup_table);
+
+ popup_table = std::string();
+
+ popup_text += DialogueWindow::Break();
+
+ popup_text += DialogueWindow::CenterMessage(
+ DialogueWindow::ColorMessage("green", "CPU Information")
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Process ID") +
+ DialogueWindow::TableCell(Strings::Commify(process_id))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("RSS") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f} MB",
+ rss
+ )
+ )
+ );
+
+ popup_text += DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ "Server Information",
+ popup_text.c_str()
+ );
+}
diff --git a/zone/gm_commands/show/skills.cpp b/zone/gm_commands/show/skills.cpp
new file mode 100644
index 0000000000..20705ac162
--- /dev/null
+++ b/zone/gm_commands/show/skills.cpp
@@ -0,0 +1,42 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+
+void ShowSkills(Client *c, const Seperator *sep)
+{
+ auto t = c;
+ if (c->GetTarget() && c->GetTarget()->IsClient()) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("ID") +
+ DialogueWindow::TableCell("Name") +
+ DialogueWindow::TableCell("Current") +
+ DialogueWindow::TableCell("Max") +
+ DialogueWindow::TableCell("Raw")
+ );
+
+ for (const auto& s : EQ::skills::GetSkillTypeMap()) {
+ if (t->CanHaveSkill(s.first) && t->MaxSkill(s.first)) {
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(std::to_string(s.first)) +
+ DialogueWindow::TableCell(s.second) +
+ DialogueWindow::TableCell(std::to_string(t->GetSkill(s.first))) +
+ DialogueWindow::TableCell(std::to_string(t->MaxSkill(s.first))) +
+ DialogueWindow::TableCell(std::to_string(t->GetRawSkill(s.first)))
+ );
+ }
+ }
+
+ popup_table = DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ fmt::format(
+ "Skills for {}",
+ c->GetTargetDescription(t, TargetDescriptionType::UCSelf)
+ ).c_str(),
+ popup_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/show/spawn_status.cpp b/zone/gm_commands/show/spawn_status.cpp
new file mode 100644
index 0000000000..1fd59a20f9
--- /dev/null
+++ b/zone/gm_commands/show/spawn_status.cpp
@@ -0,0 +1,147 @@
+#include "../../client.h"
+
+void ShowSpawnStatus(Client *c, const Seperator *sep)
+{
+ const auto arguments = sep->argnum;
+ if (arguments < 2) {
+ c->Message(Chat::White, "Usage: #show spawn_status all - Show all spawn statuses for your current zone");
+ c->Message(Chat::White, "Usage: #show spawn_status disabled - Show all disabled spawn statuses for your current zone");
+ c->Message(Chat::White, "Usage: #show spawn_status enabled - Show all enabled spawn statuses for your current zone");
+ c->Message(Chat::White, "Usage: #show spawn_status [Spawn ID] - Show spawn status by ID for your current zone");
+ return;
+ }
+
+ const bool is_all = !strcasecmp(sep->arg[2], "all");
+ const bool is_disabled = !strcasecmp(sep->arg[2], "disabled");
+ const bool is_enabled = !strcasecmp(sep->arg[2], "enabled");
+ const bool is_search = sep->IsNumber(2);
+
+ if (
+ !is_all &&
+ !is_disabled &&
+ !is_enabled &&
+ !is_search
+ ) {
+ c->Message(Chat::White, "Usage: #show spawn_status all - Show all spawn statuses for your current zone");
+ c->Message(Chat::White, "Usage: #show spawn_status disabled - Show all disabled spawn statuses for your current zone");
+ c->Message(Chat::White, "Usage: #show spawn_status enabled - Show all enabled spawn statuses for your current zone");
+ c->Message(Chat::White, "Usage: #show spawn_status [Spawn ID] - Show spawn status by ID for your current zone");
+ return;
+ }
+
+ std::string filter_type;
+ if (is_disabled) {
+ filter_type = "Disabled";
+ } else if (is_enabled) {
+ filter_type = "Enabled";
+ }
+
+ const uint32 spawn_id = (
+ is_search ?
+ Strings::ToUnsignedInt(sep->arg[2]) :
+ 0
+ );
+
+ LinkedListIterator iterator(zone->spawn2_list);
+ iterator.Reset();
+
+ uint32 filtered_count = 0;
+ uint32 spawn_count = 0;
+ uint32 spawn_number = 1;
+
+ while (iterator.MoreElements()) {
+ const auto& e = iterator.GetData();
+
+ const uint32 time_remaining = e->GetTimer().GetRemainingTime();
+
+ if (
+ is_all ||
+ (
+ is_disabled &&
+ time_remaining == UINT32_MAX
+ ) ||
+ (
+ is_enabled &&
+ time_remaining != UINT32_MAX
+ ) ||
+ (
+ is_search &&
+ e->GetID() == spawn_id
+ )
+ ) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Spawn {} | ID: {} Coordinates: {:.2f}, {:.2f}, {:.2f}, {:.2f}",
+ spawn_number,
+ e->GetID(),
+ e->GetX(),
+ e->GetY(),
+ e->GetZ(),
+ e->GetHeading()
+ ).c_str()
+ );
+
+ if (time_remaining != UINT32_MAX) {
+ const uint32 seconds_remaining = (time_remaining / 1000);
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Spawn {} | Respawn: {}",
+ spawn_number,
+ Strings::SecondsToTime(seconds_remaining)
+ ).c_str()
+ );
+ }
+
+ filtered_count++;
+ spawn_number++;
+ }
+
+ spawn_count++;
+ iterator.Advance();
+ }
+
+ if (!spawn_count) {
+ c->Message(Chat::White, "No spawns were found.");
+ return;
+ }
+
+ if (
+ (is_disabled || is_enabled) &&
+ !filtered_count
+ ) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "No {} spawns were found.",
+ filter_type
+ ).c_str()
+ );
+ return;
+ }
+
+ if (is_all) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} Spawn{} found.",
+ spawn_count,
+ spawn_count != 1 ? "s" : ""
+ ).c_str()
+ );
+
+ return;
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} of {} spawn{} found.",
+ filtered_count,
+ spawn_count,
+ spawn_count != 1 ? "s" : ""
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/spells.cpp b/zone/gm_commands/show/spells.cpp
new file mode 100644
index 0000000000..7d522be95e
--- /dev/null
+++ b/zone/gm_commands/show/spells.cpp
@@ -0,0 +1,30 @@
+#include "../../client.h"
+
+void ShowSpells(Client *c, const Seperator *sep)
+{
+ auto t = c;
+ if (c->GetTarget() && c->GetTarget()->IsClient()) {
+ t = c->GetTarget()->CastToClient();
+ }
+
+ const auto is_disciplines = !strcasecmp(sep->arg[2], "disciplines");
+ const auto is_spells = !strcasecmp(sep->arg[2], "spells");
+ if (
+ !is_disciplines &&
+ !is_spells
+ ) {
+ c->Message(Chat::White, "Usages: #show spells disciplines - Show your or your target's learned disciplines");
+ c->Message(Chat::White, "Usages: #show spells spells - Show your or your target's memorized spells");
+ return;
+ }
+
+ ShowSpellType show_spell_type;
+
+ if (is_disciplines) {
+ show_spell_type = ShowSpellType::Disciplines;
+ } else if (is_spells) {
+ show_spell_type = ShowSpellType::Spells;
+ }
+
+ t->ShowSpells(c, show_spell_type);
+}
diff --git a/zone/gm_commands/show/spells_list.cpp b/zone/gm_commands/show/spells_list.cpp
new file mode 100644
index 0000000000..fb94306c11
--- /dev/null
+++ b/zone/gm_commands/show/spells_list.cpp
@@ -0,0 +1,13 @@
+#include "../../client.h"
+
+void ShowSpellsList(Client *c, const Seperator *sep)
+{
+ if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
+ c->Message(Chat::White, "You must target an NPC to use this command.");
+ return;
+ }
+
+ const auto t = c->GetTarget()->CastToNPC();
+
+ t->AISpellsList(c);
+}
diff --git a/zone/gm_commands/showstats.cpp b/zone/gm_commands/show/stats.cpp
old mode 100755
new mode 100644
similarity index 51%
rename from zone/gm_commands/showstats.cpp
rename to zone/gm_commands/show/stats.cpp
index 9e43b6f5a8..be1f4d40d7
--- a/zone/gm_commands/showstats.cpp
+++ b/zone/gm_commands/show/stats.cpp
@@ -1,6 +1,6 @@
-#include "../client.h"
+#include "../../client.h"
-void command_showstats(Client *c, const Seperator *sep)
+void ShowStats(Client *c, const Seperator *sep)
{
Mob* t = c;
if (c->GetTarget()) {
@@ -9,4 +9,3 @@ void command_showstats(Client *c, const Seperator *sep)
t->ShowStats(c);
}
-
diff --git a/zone/gm_commands/timers.cpp b/zone/gm_commands/show/timers.cpp
old mode 100755
new mode 100644
similarity index 57%
rename from zone/gm_commands/timers.cpp
rename to zone/gm_commands/show/timers.cpp
index efee6da55d..b31d8eac40
--- a/zone/gm_commands/timers.cpp
+++ b/zone/gm_commands/show/timers.cpp
@@ -1,7 +1,7 @@
-#include "../client.h"
-#include "../dialogue_window.h"
+#include "../../client.h"
+#include "../../dialogue_window.h"
-void command_timers(Client *c, const Seperator *sep)
+void ShowTimers(Client *c, const Seperator *sep)
{
auto t = c;
if (c->GetTarget() && c->GetTarget()->IsClient()) {
@@ -23,26 +23,30 @@ void command_timers(Client *c, const Seperator *sep)
return;
}
- auto m = DialogueWindow::TableRow(
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
DialogueWindow::TableCell("Timer ID") +
DialogueWindow::TableCell("Remaining Time")
);
for (const auto& e : l) {
- auto r = e.second->GetRemainingTime();
- if (r) {
- m += DialogueWindow::TableRow(
- DialogueWindow::TableCell(std::to_string(e.first)) +
- DialogueWindow::TableCell(Strings::SecondsToTime(r))
+ const uint32 remaining_time = e.second->GetRemainingTime();
+ if (remaining_time) {
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(Strings::Commify(e.first)) +
+ DialogueWindow::TableCell(Strings::SecondsToTime(remaining_time))
);
}
}
+ popup_table = DialogueWindow::Table(popup_table);
+
c->SendPopupToClient(
fmt::format(
"Recast Timers for {}",
c->GetTargetDescription(t, TargetDescriptionType::UCSelf)
).c_str(),
- DialogueWindow::Table(m).c_str()
+ popup_table.c_str()
);
}
diff --git a/zone/gm_commands/show/traps.cpp b/zone/gm_commands/show/traps.cpp
new file mode 100644
index 0000000000..28a6215d7f
--- /dev/null
+++ b/zone/gm_commands/show/traps.cpp
@@ -0,0 +1,6 @@
+#include "../../client.h"
+
+void ShowTraps(Client *c, const Seperator *sep)
+{
+ entity_list.GetTrapInfo(c);
+}
diff --git a/zone/gm_commands/show/uptime.cpp b/zone/gm_commands/show/uptime.cpp
new file mode 100644
index 0000000000..c95bcff2aa
--- /dev/null
+++ b/zone/gm_commands/show/uptime.cpp
@@ -0,0 +1,19 @@
+#include "../../client.h"
+#include "../../worldserver.h"
+
+extern WorldServer worldserver;
+
+void ShowUptime(Client *c, const Seperator *sep)
+{
+ auto pack = new ServerPacket(ServerOP_Uptime, sizeof(ServerUptime_Struct));
+
+ auto s = (ServerUptime_Struct *) pack->pBuffer;
+ strn0cpy(s->adminname, c->GetName(), sizeof(s->adminname));
+
+ if (sep->IsNumber(2) && Strings::ToUnsignedInt(sep->arg[2]) > 0) {
+ s->zoneserverid = Strings::ToUnsignedInt(sep->arg[2]);
+ }
+
+ worldserver.SendPacket(pack);
+ safe_delete(pack);
+}
diff --git a/zone/gm_commands/show/variable.cpp b/zone/gm_commands/show/variable.cpp
new file mode 100644
index 0000000000..98418c14b3
--- /dev/null
+++ b/zone/gm_commands/show/variable.cpp
@@ -0,0 +1,33 @@
+#include "../../client.h"
+
+void ShowVariable(Client *c, const Seperator *sep)
+{
+ const auto arguments = sep->argnum;
+ if (arguments < 2) {
+ c->Message(Chat::White, "Usage: #show variable [Variable Name]");
+ return;
+ }
+
+ const std::string& variable = sep->argplus[2];
+
+ std::string value;
+ if (!database.GetVariable(variable, value)) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Variable '{}' was not found.",
+ variable
+ ).c_str()
+ );
+ return;
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "Variable {} | {}",
+ variable,
+ value
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/show/version.cpp b/zone/gm_commands/show/version.cpp
new file mode 100644
index 0000000000..e9b55d5496
--- /dev/null
+++ b/zone/gm_commands/show/version.cpp
@@ -0,0 +1,35 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+
+void ShowVersion(Client *c, const Seperator *sep)
+{
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Version") +
+ DialogueWindow::TableCell(CURRENT_VERSION)
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Compiled") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} {}",
+ COMPILE_DATE,
+ COMPILE_TIME
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Last Modified") +
+ DialogueWindow::TableCell(LAST_MODIFIED)
+ );
+
+ popup_table = DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ "Server Version",
+ popup_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/wpinfo.cpp b/zone/gm_commands/show/waypoints.cpp
old mode 100755
new mode 100644
similarity index 54%
rename from zone/gm_commands/wpinfo.cpp
rename to zone/gm_commands/show/waypoints.cpp
index 4c1774c083..262489fca3
--- a/zone/gm_commands/wpinfo.cpp
+++ b/zone/gm_commands/show/waypoints.cpp
@@ -1,25 +1,25 @@
-#include "../client.h"
+#include "../../client.h"
-void command_wpinfo(Client *c, const Seperator *sep)
+void ShowWaypoints(Client *c, const Seperator *sep)
{
if (!c->GetTarget() || !c->GetTarget()->IsNPC()) {
c->Message(Chat::White, "You must target an NPC to use this command.");
return;
}
- auto target = c->GetTarget()->CastToNPC();
+ auto t = c->GetTarget()->CastToNPC();
- if (!target->GetGrid()) {
+ if (!t->GetGrid()) {
c->Message(
Chat::White,
fmt::format(
"{} is not a part of any grid.",
- c->GetTargetDescription(target)
+ c->GetTargetDescription(t)
).c_str()
);
+
return;
}
- target->DisplayWaypointInfo(c);
+ t->DisplayWaypointInfo(c);
}
-
diff --git a/zone/gm_commands/show/who.cpp b/zone/gm_commands/show/who.cpp
new file mode 100755
index 0000000000..003a2af706
--- /dev/null
+++ b/zone/gm_commands/show/who.cpp
@@ -0,0 +1,235 @@
+#include "../../client.h"
+
+void ShowWho(Client *c, const Seperator *sep)
+{
+ const std::string& query = SQL(
+ SELECT
+ character_data.name,
+ character_data.zone_id,
+ character_data.zone_instance,
+ COALESCE(
+ (
+ SELECT guilds.name FROM guilds WHERE id = (
+ (
+ SELECT guild_id FROM guild_members WHERE char_id = character_data.id
+ )
+ )
+ ),
+ ""
+ ) AS guild_name,
+ character_data.level,
+ character_data.race,
+ character_data.class,
+ COALESCE(
+ (
+ SELECT account.status FROM account WHERE account.id = character_data.account_id LIMIT 1
+ ),
+ 0
+ ) AS account_status,
+ COALESCE(
+ (
+ SELECT account.name FROM account WHERE account.id = character_data.account_id LIMIT 1
+ ),
+ 0
+ ) AS account_name,
+ COALESCE(
+ (
+ SELECT account_ip.ip FROM account_ip WHERE account_ip.accid = character_data.account_id ORDER BY account_ip.lastused DESC LIMIT 1
+ ),
+ ""
+ ) AS account_ip
+ FROM
+ character_data
+ WHERE
+ last_login > (UNIX_TIMESTAMP() - 600)
+ ORDER BY
+ character_data.name;
+ );
+
+ auto results = database.QueryDatabase(query);
+ if (!results.Success() || !results.RowCount()) {
+ return;
+ }
+
+ bool is_filtered = false;
+
+ std::string search_criteria;
+
+ if (sep->arg[2]) {
+ search_criteria = Strings::ToLower(sep->arg[2]);
+ }
+
+ uint32 found_count = 0;
+
+ c->Message(Chat::Who, "Players in EverQuest:");
+ c->Message(Chat::Who, "------------------------------");
+
+ for (auto row : results) {
+ const std::string& player_name = row[0];
+ const uint32 zone_id = Strings::ToUnsignedInt(row[1]);
+ const std::string& zone_short_name = ZoneName(zone_id);
+ const std::string& zone_long_name = ZoneLongName(zone_id);
+ const uint8 zone_instance = Strings::ToUnsignedInt(row[2]);
+ const std::string& guild_name = row[3];
+ const uint8 player_level = Strings::ToUnsignedInt(row[4]);
+ const uint16 player_race = Strings::ToUnsignedInt(row[5]);
+ const uint8 player_class = Strings::ToUnsignedInt(row[6]);
+ const uint8 account_status = Strings::ToUnsignedInt(row[7]);
+ const std::string& account_name = row[8];
+ const std::string& account_ip = row[9];
+ const std::string& base_class_name = GetClassIDName(player_class);
+ const std::string& displayed_race_name = GetRaceIDName(player_race);
+
+ if (!search_criteria.empty()) {
+ is_filtered = true;
+
+ const bool found = (
+ Strings::Contains(Strings::ToLower(player_name), search_criteria) ||
+ Strings::Contains(Strings::ToLower(zone_short_name), search_criteria) ||
+ Strings::Contains(Strings::ToLower(displayed_race_name), search_criteria) ||
+ Strings::Contains(Strings::ToLower(base_class_name), search_criteria) ||
+ Strings::Contains(Strings::ToLower(guild_name), search_criteria) ||
+ Strings::Contains(Strings::ToLower(account_name), search_criteria) ||
+ Strings::Contains(Strings::ToLower(account_ip), search_criteria)
+ );
+
+ if (!found) {
+ continue;
+ }
+ }
+
+ std::string displayed_guild_name;
+ if (!guild_name.empty()) {
+ displayed_guild_name = Saylink::Silent(
+ fmt::format(
+ "#who \"{}\"",
+ guild_name
+ ),
+ fmt::format(
+ "<{}>",
+ guild_name
+ )
+ );
+ }
+
+ const std::string& goto_saylink = Saylink::Silent(
+ fmt::format(
+ "#goto {}",
+ player_name
+ ),
+ "Goto"
+ );
+
+ const std::string& summon_saylink = Saylink::Silent(
+ fmt::format(
+ "#summon {}",
+ player_name
+ ),
+ "Summon"
+ );
+
+ const std::string& display_class_name = GetClassIDName(player_class, player_level);
+
+ const std::string& class_saylink = Saylink::Silent(
+ fmt::format(
+ "#who {}",
+ base_class_name
+ ),
+ display_class_name
+ );
+
+ const std::string& race_saylink = Saylink::Silent(
+ fmt::format(
+ "#who {}",
+ displayed_race_name
+ ),
+ displayed_race_name
+ );
+
+ const std::string& zone_saylink = Saylink::Silent(
+ fmt::format(
+ "#who {}",
+ zone_short_name
+ ),
+ zone_long_name
+ );
+
+ const std::string& account_saylink = Saylink::Silent(
+ fmt::format(
+ "#who {}",
+ account_name
+ ),
+ account_name
+ );
+
+ const std::string& account_ip_saylink = Saylink::Silent(
+ fmt::format(
+ "#who {}",
+ account_ip
+ ),
+ account_ip
+ );
+
+ const std::string& status_level = (
+ account_status ?
+ fmt::format(
+ "* {} * ",
+ EQ::constants::GetAccountStatusName(account_status)
+ ) :
+ ""
+ );
+
+ const std::string& version_string = (
+ zone_instance ?
+ fmt::format(
+ " ({})",
+ zone_instance
+ ) :
+ ""
+ );
+
+ c->Message(
+ Chat::Who,
+ fmt::format(
+ "{}[{} {} ({})] {} ({}) ({}) ({}) {} ZONE: {}{} ({} | {})",
+ status_level,
+ player_level,
+ class_saylink,
+ base_class_name,
+ player_name,
+ race_saylink,
+ account_saylink,
+ account_ip_saylink,
+ displayed_guild_name,
+ zone_saylink,
+ version_string,
+ goto_saylink,
+ summon_saylink
+ ).c_str()
+ );
+
+ found_count++;
+ }
+
+ const std::string& filter_string = is_filtered ? " that match those filters" : "";
+
+ const std::string& message = (
+ found_count ?
+ fmt::format(
+ "There {} {} player{} in EverQuest{}.",
+ found_count != 1 ? "are" : "is",
+ found_count,
+ found_count != 1 ? "s" : "",
+ filter_string
+ ) :
+ fmt::format(
+ "There are no players in EverQuest{}.",
+ filter_string
+ )
+ );
+
+ c->Message(
+ Chat::Who,
+ message.c_str()
+ );
+}
diff --git a/zone/gm_commands/xtargets.cpp b/zone/gm_commands/show/xtargets.cpp
old mode 100755
new mode 100644
similarity index 78%
rename from zone/gm_commands/xtargets.cpp
rename to zone/gm_commands/show/xtargets.cpp
index 3ae8a6236b..b3416b561d
--- a/zone/gm_commands/xtargets.cpp
+++ b/zone/gm_commands/show/xtargets.cpp
@@ -1,20 +1,20 @@
-#include "../client.h"
+#include "../../client.h"
#include "../../common/data_verification.h"
-void command_xtargets(Client *c, const Seperator *sep)
+void ShowXTargets(Client *c, const Seperator *sep)
{
auto t = c;
if (c->GetTarget() && c->GetTarget()->IsClient()) {
t = c->GetTarget()->CastToClient();
}
- auto arguments = sep->argnum;
- if (!arguments || !sep->IsNumber(1)) {
+ const auto arguments = sep->argnum;
+ if (arguments < 2 || !sep->IsNumber(2)) {
t->ShowXTargets(c);
return;
}
- const auto new_max = static_cast(Strings::ToUnsignedInt(sep->arg[1]));
+ const auto new_max = static_cast(Strings::ToUnsignedInt(sep->arg[2]));
if (!EQ::ValueWithin(new_max, 5, XTARGET_HARDCAP)) {
c->Message(
diff --git a/zone/gm_commands/show/zone_data.cpp b/zone/gm_commands/show/zone_data.cpp
new file mode 100644
index 0000000000..1e8e2c7ff3
--- /dev/null
+++ b/zone/gm_commands/show/zone_data.cpp
@@ -0,0 +1,276 @@
+#include "../../client.h"
+#include "../../dialogue_window.h"
+
+void ShowZoneData(Client *c, const Seperator *sep)
+{
+ std::string popup_table;
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Type") +
+ DialogueWindow::TableCell(std::to_string(zone->newzone_data.ztype))
+ );
+
+ for (uint8 fog_index = 0; fog_index < 4; fog_index++) {
+ const uint8 fog_number = (fog_index + 1);
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Fog {} Colors",
+ fog_number
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} {} {}",
+ DialogueWindow::ColorMessage(
+ "red1",
+ std::to_string(zone->newzone_data.fog_red[fog_index])
+ ),
+ DialogueWindow::ColorMessage(
+ "forest_green",
+ std::to_string(zone->newzone_data.fog_green[fog_index])
+ ),
+ DialogueWindow::ColorMessage(
+ "royal_blue",
+ std::to_string(zone->newzone_data.fog_blue[fog_index])
+ )
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Fog {} Clipping",
+ fog_number
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} to {}",
+ zone->newzone_data.fog_minclip[fog_index],
+ zone->newzone_data.fog_maxclip[fog_index]
+ )
+ )
+ );
+ }
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Fog Density") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}",
+ zone->newzone_data.fog_density
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Gravity") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}",
+ zone->newzone_data.gravity
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Time Type") +
+ DialogueWindow::TableCell(std::to_string(zone->newzone_data.time_type))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Time Type") +
+ DialogueWindow::TableCell(std::to_string(zone->newzone_data.time_type))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Experience Multiplier") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}%%",
+ (zone->newzone_data.zone_exp_multiplier * 100)
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Safe Coordinates") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}, {:.2f}, {:.2f}",
+ zone->newzone_data.safe_x,
+ zone->newzone_data.safe_y,
+ zone->newzone_data.safe_z
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Max Z") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}",
+ zone->newzone_data.max_z
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Underworld Z") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{:.2f}",
+ zone->newzone_data.underworld
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Clipping Distance") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} to {}",
+ zone->newzone_data.minclip,
+ zone->newzone_data.maxclip
+ )
+ )
+ );
+
+ // Weather Data
+ for (uint8 weather_index = 0; weather_index < 4; weather_index++) {
+ const uint8 weather_number = (weather_index + 1);
+
+ if (
+ zone->newzone_data.rain_chance[weather_index] ||
+ zone->newzone_data.rain_duration[weather_index]
+ ) {
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Rain {}",
+ weather_number
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Chance: {}",
+ zone->newzone_data.rain_chance[weather_index]
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Duration: {}",
+ zone->newzone_data.rain_duration[weather_index]
+ )
+ )
+ );
+ }
+
+ if (
+ zone->newzone_data.snow_chance[weather_index] ||
+ zone->newzone_data.snow_duration[weather_index]
+ ) {
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Snow {}",
+ weather_number
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Chance: {}",
+ zone->newzone_data.snow_chance[weather_index]
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "Duration: {}",
+ zone->newzone_data.snow_duration[weather_index]
+ )
+ )
+ );
+ }
+ }
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Sky") +
+ DialogueWindow::TableCell(std::to_string(zone->newzone_data.sky))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Suspend Buffs") +
+ DialogueWindow::TableCell(
+ zone->newzone_data.suspend_buffs ?
+ DialogueWindow::ColorMessage("forest_green", "Y") :
+ DialogueWindow::ColorMessage("red1", "N")
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Health Regen") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({})",
+ Strings::Commify(zone->newzone_data.fast_regen_hp),
+ Strings::SecondsToTime(zone->newzone_data.fast_regen_hp)
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Mana Regen") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({})",
+ Strings::Commify(zone->newzone_data.fast_regen_mana),
+ Strings::SecondsToTime(zone->newzone_data.fast_regen_mana)
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Endurance Regen") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({})",
+ Strings::Commify(zone->newzone_data.fast_regen_endurance),
+ Strings::SecondsToTime(zone->newzone_data.fast_regen_endurance)
+ )
+ )
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Maximum Aggro Distance") +
+ DialogueWindow::TableCell(Strings::Commify(zone->newzone_data.npc_aggro_max_dist))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Underworld Teleport Index") +
+ DialogueWindow::TableCell(Strings::Commify(zone->newzone_data.underworld_teleport_index))
+ );
+
+ popup_table += DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Lava Damage") +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} to {}",
+ Strings::Commify(zone->newzone_data.min_lava_damage),
+ Strings::Commify(zone->newzone_data.lava_damage)
+ )
+ )
+ );
+
+ popup_table = DialogueWindow::Table(popup_table);
+
+ c->SendPopupToClient(
+ fmt::format(
+ "Zone Data for {}",
+ zone->GetZoneDescription()
+ ).c_str(),
+ popup_table.c_str()
+ );
+}
diff --git a/zone/gm_commands/show/zone_global_loot.cpp b/zone/gm_commands/show/zone_global_loot.cpp
new file mode 100644
index 0000000000..6a05fdc198
--- /dev/null
+++ b/zone/gm_commands/show/zone_global_loot.cpp
@@ -0,0 +1,6 @@
+#include "../../client.h"
+
+void ShowZoneGlobalLoot(Client *c, const Seperator *sep)
+{
+ zone->ShowZoneGlobalLoot(c);
+}
diff --git a/zone/gm_commands/show/zone_loot.cpp b/zone/gm_commands/show/zone_loot.cpp
new file mode 100644
index 0000000000..53222cf455
--- /dev/null
+++ b/zone/gm_commands/show/zone_loot.cpp
@@ -0,0 +1,102 @@
+#include "../../client.h"
+
+void ShowZoneLoot(Client *c, const Seperator *sep)
+{
+ if (!sep->IsNumber(2)) {
+ c->Message(
+ Chat::White,
+ "Usage: #show zone_loot [Item ID]"
+ );
+ return;
+ }
+
+ const uint32 search_item_id = Strings::ToUnsignedInt(sep->arg[2]);
+
+ std::vector> v;
+
+ uint32 loot_count = 0;
+ uint32 loot_number = 1;
+
+ for (auto npc_entity: entity_list.GetNPCList()) {
+ auto il = npc_entity.second->GetItemList();
+ v.emplace_back(std::make_pair(npc_entity.second, il));
+ }
+
+ for (const auto &e: v) {
+ NPC *n = e.first;
+ const auto &l = e.second;
+
+ std::string npc_link;
+ if (n) {
+ const uint32 instance_id = zone->GetInstanceID();
+ const uint32 zone_id = zone->GetZoneID();
+
+ const std::string &command_link = Saylink::Silent(
+ fmt::format(
+ "#{} {} {} {} {}",
+ (instance_id != 0 ? "zoneinstance" : "zone"),
+ (instance_id != 0 ? instance_id : zone_id),
+ n->GetX(),
+ n->GetY(),
+ n->GetZ()
+ ),
+ "Goto"
+ );
+
+ npc_link = fmt::format(
+ "NPC: {} (ID {}) [{}]",
+ n->GetCleanName(),
+ n->GetID(),
+ command_link
+ );
+ }
+
+ for (const auto &i: l) {
+ if (!search_item_id || i->item_id == search_item_id) {
+ EQ::SayLinkEngine linker;
+ linker.SetLinkType(EQ::saylink::SayLinkLootItem);
+ linker.SetLootData(i);
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{}. {} ({}) {}",
+ loot_number,
+ linker.GenerateLink(),
+ Strings::Commify(i->item_id),
+ npc_link
+ ).c_str()
+ );
+
+ loot_number++;
+ loot_count++;
+ }
+ }
+ }
+
+
+ if (search_item_id) {
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} ({}) is dropping in {} place{}.",
+ database.CreateItemLink(search_item_id),
+ Strings::Commify(search_item_id),
+ loot_count,
+ loot_count != 1 ? "s" : ""
+ ).c_str()
+ );
+
+ return;
+ }
+
+ c->Message(
+ Chat::White,
+ fmt::format(
+ "{} Item {} {} dropping.",
+ loot_count,
+ loot_count != 1 ? "s" : "",
+ loot_count != 1 ? "are" : "is"
+ ).c_str()
+ );
+}
diff --git a/zone/gm_commands/showzonepoints.cpp b/zone/gm_commands/show/zone_points.cpp
old mode 100755
new mode 100644
similarity index 57%
rename from zone/gm_commands/showzonepoints.cpp
rename to zone/gm_commands/show/zone_points.cpp
index 4b98217a0a..447370231b
--- a/zone/gm_commands/showzonepoints.cpp
+++ b/zone/gm_commands/show/zone_points.cpp
@@ -1,24 +1,24 @@
-#include "../client.h"
+#include "../../client.h"
-void command_showzonepoints(Client *c, const Seperator *sep)
+void ShowZonePoints(Client *c, const Seperator *sep)
{
- auto &mob_list = entity_list.GetMobList();
- for (auto itr : mob_list) {
- Mob *mob = itr.second;
+ for (const auto& m : entity_list.GetMobList()) {
+ Mob* mob = m.second;
if (mob->IsNPC() && mob->GetRace() == RACE_NODE_2254) {
mob->Depop();
}
}
- int found_zone_points = 0;
+ uint32 found_count = 0;
c->Message(Chat::White, "Listing zone points...");
+
c->SendChatLineBreak();
for (auto &p : zone->virtual_zone_point_list) {
- std::string zone_long_name = ZoneLongName(p.target_zone_id);
+ const std::string& zone_long_name = ZoneLongName(p.target_zone_id);
- std::string saylink = fmt::format(
+ const std::string& saylink = fmt::format(
"#goto {:.0f} {:.0f} {:.0f}",
p.x,
p.y,
@@ -45,83 +45,92 @@ void command_showzonepoints(Client *c, const Seperator *sep)
).c_str()
);
- std::string node_name = fmt::format("ZonePoint To [{}]", zone_long_name);
+ const std::string& node_name = fmt::format("ZonePoint To [{}]", zone_long_name);
float half_width = ((float) p.width / 2);
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x + half_width,
- (float) p.y + half_width,
+ p.x + half_width,
+ p.y + half_width,
p.z,
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x + half_width,
- (float) p.y - half_width,
+ p.x + half_width,
+ p.y - half_width,
p.z,
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x - half_width,
- (float) p.y - half_width,
+ p.x - half_width,
+ p.y - half_width,
p.z,
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x - half_width,
- (float) p.y + half_width,
+ p.x - half_width,
+ p.y + half_width,
p.z,
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x + half_width,
- (float) p.y + half_width,
- (float) p.z + (float) p.height,
+ p.x + half_width,
+ p.y + half_width,
+ p.z + static_cast(p.height),
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x + half_width,
- (float) p.y - half_width,
- (float) p.z + (float) p.height,
+ p.x + half_width,
+ p.y - half_width,
+ p.z + static_cast(p.height),
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x - half_width,
- (float) p.y - half_width,
- (float) p.z + (float) p.height,
+ p.x - half_width,
+ p.y - half_width,
+ p.z + static_cast(p.height),
p.heading
- ));
+ )
+ );
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
- (float) p.x - half_width,
- (float) p.y + half_width,
- (float) p.z + (float) p.height,
+ p.x - half_width,
+ p.y + half_width,
+ p.z + static_cast(p.height),
p.heading
- ));
+ )
+ );
- found_zone_points++;
+ found_count++;
}
LinkedListIterator iterator(zone->zone_point_list);
iterator.Reset();
while (iterator.MoreElements()) {
- ZonePoint *p = iterator.GetData();
- std::string zone_long_name = ZoneLongName(p->target_zone_id);
- std::string node_name = fmt::format("ZonePoint To [{}]", zone_long_name);
+ const auto &p = iterator.GetData();
+
+ const std::string& zone_long_name = ZoneLongName(p->target_zone_id);
+ const std::string& node_name = fmt::format("ZonePoint To [{}]", zone_long_name);
NPC::SpawnZonePointNodeNPC(
node_name, glm::vec4(
@@ -132,9 +141,7 @@ void command_showzonepoints(Client *c, const Seperator *sep)
)
);
- // {:.0f}
-
- std::string saylink = fmt::format(
+ const std::string& saylink = fmt::format(
"#goto {:.0f} {:.0f} {:.0f}",
p->x,
p->y,
@@ -145,13 +152,13 @@ void command_showzonepoints(Client *c, const Seperator *sep)
Chat::White,
fmt::format(
"Client Side Zone Point [{}] x [{}] y [{}] z [{}] h [{}] number [{}] | To [{}] ({}) x [{}] y [{}] z [{}] h [{}]",
- Saylink::Silent(saylink, "Goto").c_str(),
+ Saylink::Silent(saylink, "Goto"),
p->x,
p->y,
p->z,
p->heading,
p->number,
- zone_long_name.c_str(),
+ zone_long_name,
p->target_zone_id,
p->target_x,
p->target_y,
@@ -162,14 +169,12 @@ void command_showzonepoints(Client *c, const Seperator *sep)
iterator.Advance();
- found_zone_points++;
+ found_count++;
}
- if (found_zone_points == 0) {
- c->Message(Chat::White, "There were no zone points found...");
+ if (!found_count) {
+ c->Message(Chat::White, "There were no zone points found.");
}
c->SendChatLineBreak();
-
}
-
diff --git a/zone/gm_commands/show/zone_status.cpp b/zone/gm_commands/show/zone_status.cpp
new file mode 100644
index 0000000000..4ad2ea0efa
--- /dev/null
+++ b/zone/gm_commands/show/zone_status.cpp
@@ -0,0 +1,16 @@
+#include "../../client.h"
+#include "../../worldserver.h"
+
+extern WorldServer worldserver;
+
+void ShowZoneStatus(Client *c, const Seperator *sep)
+{
+ auto pack = new ServerPacket(ServerOP_ZoneStatus, sizeof(ServerZoneStatus_Struct));
+
+ auto z = (ServerZoneStatus_Struct *) pack->pBuffer;
+ z->admin = c->Admin();
+ strn0cpy(z->name, c->GetName(), sizeof(z->name));
+
+ worldserver.SendPacket(pack);
+ delete pack;
+}
diff --git a/zone/gm_commands/showskills.cpp b/zone/gm_commands/showskills.cpp
deleted file mode 100755
index d70df99741..0000000000
--- a/zone/gm_commands/showskills.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-#include "../client.h"
-
-void command_showskills(Client *c, const Seperator *sep)
-{
- auto target = c;
- if (c->GetTarget() && c->GetTarget()->IsClient()) {
- target = c->GetTarget()->CastToClient();
- }
-
- uint32 start_skill_id = 0;
- if (sep->IsNumber(1)) {
- start_skill_id = Strings::ToUnsignedInt(sep->arg[1]);
- }
-
- bool show_all = !strcasecmp(sep->arg[2], "all");
-
- uint32 max_skill_id = (start_skill_id + 49);
-
- std::string popup_text = "";
-
- popup_text += "ID | Name | Current | Max | Raw |
";
-
- for (
- EQ::skills::SkillType skill_id = (EQ::skills::SkillType) start_skill_id;
- skill_id <= (EQ::skills::SkillType) max_skill_id;
- skill_id = (EQ::skills::SkillType) (skill_id + 1)
- ) {
- if ((EQ::skills::SkillType) skill_id >= EQ::skills::SkillCount) {
- max_skill_id = (EQ::skills::SkillCount - 1);
- break;
- }
-
- if (show_all || (target->CanHaveSkill(skill_id) && target->MaxSkill(skill_id))) {
- popup_text += fmt::format(
- "{} | {} | {} | {} | {} |
",
- skill_id,
- EQ::skills::GetSkillName(skill_id),
- target->GetSkill(skill_id),
- target->MaxSkill(skill_id),
- target->GetRawSkill(skill_id)
- );
- }
- }
-
- popup_text += "
";
-
- std::string popup_title = fmt::format(
- "Skills for {} [{} to {}]",
- c->GetTargetDescription(target, TargetDescriptionType::UCSelf),
- start_skill_id,
- max_skill_id
- );
-
- c->SendPopupToClient(
- popup_title.c_str(),
- popup_text.c_str()
- );
-
-
- c->Message(
- Chat::White,
- fmt::format(
- "Viewing skill levels from {} ({}) to {} ({}) for {}.",
- EQ::skills::GetSkillName((EQ::skills::SkillType) start_skill_id),
- start_skill_id,
- EQ::skills::GetSkillName((EQ::skills::SkillType) max_skill_id),
- max_skill_id,
- c->GetTargetDescription(target)
- ).c_str()
- );
-
- int next_skill_id = (max_skill_id + 1);
- if ((EQ::skills::SkillType) next_skill_id < EQ::skills::SkillCount) {
- auto next_list_string = fmt::format(
- "#showskills {}",
- next_skill_id
- );
-
- auto next_list_link = Saylink::Silent(next_list_string, next_list_string);
-
- auto next_list_all_string = fmt::format(
- "#showskills {} all",
- next_skill_id
- );
-
- auto next_list_all_link = Saylink::Silent(next_list_all_string, next_list_all_string);
-
- c->Message(
- Chat::White,
- fmt::format(
- "To view the next 50 skill levels, you can use {} or {} to show skills the player cannot normally have.",
- next_list_link,
- next_list_all_link
- ).c_str()
- );
- }
-}
-
diff --git a/zone/gm_commands/showspells.cpp b/zone/gm_commands/showspells.cpp
deleted file mode 100755
index 3cfbe8cd7b..0000000000
--- a/zone/gm_commands/showspells.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "../client.h"
-
-void command_showspells(Client *c, const Seperator *sep)
-{
- const auto arguments = sep->argnum;
- if (!arguments) {
- c->Message(Chat::White, "Usages: #showspells disciplines - Show your or your target's learned disciplines");
- c->Message(Chat::White, "Usages: #showspells spells - Show your or your target's memorized spells");
- return;
- }
-
- auto t = c;
- if (c->GetTarget() && c->GetTarget()->IsClient()) {
- t = c->GetTarget()->CastToClient();
- }
-
- const auto is_disciplines = !strcasecmp(sep->arg[1], "disciplines");
- const auto is_spells = !strcasecmp(sep->arg[1], "spells");
- if (
- !is_disciplines &&
- !is_spells
- ) {
- c->Message(Chat::White, "Usages: #showspells disciplines - Show your or your target's learned disciplines");
- c->Message(Chat::White, "Usages: #showspells spells - Show your or your target's memorized spells");
- }
-
- ShowSpellType show_spell_type;
-
- if (is_disciplines) {
- show_spell_type = ShowSpellType::Disciplines;
- } else if (is_spells) {
- show_spell_type = ShowSpellType::Spells;
- }
-
- t->ShowSpells(c, show_spell_type);
-}
-
diff --git a/zone/gm_commands/showspellslist.cpp b/zone/gm_commands/showspellslist.cpp
deleted file mode 100755
index 2b50864e6a..0000000000
--- a/zone/gm_commands/showspellslist.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "../client.h"
-
-void command_showspellslist(Client *c, const Seperator *sep)
-{
- Mob *target = c->GetTarget();
- if (!target || !target->IsNPC()) {
- c->Message(Chat::White, "You must target an NPC to use this command.");
- return;
- }
- target->CastToNPC()->AISpellsList(c);
- return;
-}
-
diff --git a/zone/gm_commands/showzonegloballoot.cpp b/zone/gm_commands/showzonegloballoot.cpp
deleted file mode 100755
index 95e364d24b..0000000000
--- a/zone/gm_commands/showzonegloballoot.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "../client.h"
-
-void command_showzonegloballoot(Client *c, const Seperator *sep)
-{
- zone->ShowZoneGlobalLoot(c);
-}
-
diff --git a/zone/gm_commands/spawnstatus.cpp b/zone/gm_commands/spawnstatus.cpp
deleted file mode 100755
index 5b88e6c50c..0000000000
--- a/zone/gm_commands/spawnstatus.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-#include "../client.h"
-
-void command_spawnstatus(Client *c, const Seperator *sep)
-{
- int arguments = sep->argnum;
- if (!arguments) {
- c->Message(Chat::White, "Usage: #spawnstatus all - Show all spawn statuses for your current zone");
- c->Message(Chat::White, "Usage: #spawnstatus disabled - Show all disabled spawn statuses for your current zone");
- c->Message(Chat::White, "Usage: #spawnstatus enabled - Show all enabled spawn statuses for your current zone");
- c->Message(Chat::White, "Usage: #spawnstatus [Spawn ID] - Show spawn status by ID for your current zone");
- return;
- }
-
- bool is_all = !strcasecmp(sep->arg[1], "all");
- bool is_disabled = !strcasecmp(sep->arg[1], "disabled");
- bool is_enabled = !strcasecmp(sep->arg[1], "enabled");
- bool is_search = sep->IsNumber(1);
-
- if (
- !is_all &&
- !is_disabled &&
- !is_enabled &&
- !is_search
- ) {
- c->Message(Chat::White, "Usage: #spawnstatus all - Show all spawn statuses for your current zone");
- c->Message(Chat::White, "Usage: #spawnstatus disabled - Show all disabled spawn statuses for your current zone");
- c->Message(Chat::White, "Usage: #spawnstatus enabled - Show all enabled spawn statuses for your current zone");
- c->Message(Chat::White, "Usage: #spawnstatus [Spawn ID] - Show spawn status by ID for your current zone");
- return;
- }
-
- std::string filter_type;
- if (is_disabled) {
- filter_type = "Disabled";
- } else if (is_enabled) {
- filter_type = "Enabled";
- }
-
- uint32 spawn_id = 0;
- if (is_search) {
- spawn_id = Strings::ToUnsignedInt(sep->arg[1]);
- }
-
- LinkedListIterator iterator(zone->spawn2_list);
- iterator.Reset();
-
- uint32 filtered_count = 0;
- uint32 spawn_count = 0;
- uint32 spawn_number = 1;
- while (iterator.MoreElements()) {
- auto e = iterator.GetData();
- auto time_remaining = e->GetTimer().GetRemainingTime();
- if (
- is_all ||
- (
- is_disabled &&
- time_remaining == 0xFFFFFFFF
- ) ||
- (
- is_enabled &&
- time_remaining != 0xFFFFFFFF
- ) ||
- (
- is_search &&
- e->GetID() == spawn_id
- )
- ) {
- c->Message(
- Chat::White,
- fmt::format(
- "Spawn {} | ID: {} Coordinates: {:.2f}, {:.2f}, {:.2f}, {:.2f}",
- spawn_number,
- e->GetID(),
- e->GetX(),
- e->GetY(),
- e->GetZ(),
- e->GetHeading()
- ).c_str()
- );
- if (time_remaining != 0xFFFFFFFF) {
- auto seconds_remaining = (time_remaining / 1000);
- c->Message(
- Chat::White,
- fmt::format(
- "Spawn {} | Respawn: {} ({} Second{})",
- spawn_number,
- Strings::SecondsToTime(seconds_remaining),
- seconds_remaining,
- seconds_remaining != 1 ? "s" : ""
- ).c_str()
- );
- }
- filtered_count++;
- spawn_number++;
- }
- spawn_count++;
- iterator.Advance();
- }
-
- if (!spawn_count) {
- c->Message(Chat::White, "No spawns were found in this zone.");
- return;
- }
-
- if (!is_all && !is_search && !filtered_count) {
- c->Message(
- Chat::White,
- fmt::format(
- "No {} spawns were found in this zone.",
- filter_type
- ).c_str()
- );
- return;
- }
-
- if (is_all) {
- c->Message(
- Chat::White,
- fmt::format(
- "{} spawn{} listed.",
- spawn_count,
- spawn_count != 1 ? "s" : ""
- ).c_str()
- );
- } else {
- c->Message(
- Chat::White,
- fmt::format(
- "{} of {} spawn{} listed.",
- filtered_count,
- spawn_count,
- spawn_count != 1 ? "s" : ""
- ).c_str()
- );
- }
-}
-
diff --git a/zone/gm_commands/trapinfo.cpp b/zone/gm_commands/trapinfo.cpp
deleted file mode 100755
index 6d2d8fcf1c..0000000000
--- a/zone/gm_commands/trapinfo.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "../client.h"
-
-void command_trapinfo(Client *c, const Seperator *sep)
-{
- entity_list.GetTrapInfo(c);
-}
-
diff --git a/zone/gm_commands/uptime.cpp b/zone/gm_commands/uptime.cpp
deleted file mode 100755
index 00b247d9f6..0000000000
--- a/zone/gm_commands/uptime.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "../client.h"
-#include "../worldserver.h"
-
-extern WorldServer worldserver;
-
-void command_uptime(Client *c, const Seperator *sep)
-{
- if (!worldserver.Connected()) {
- c->Message(Chat::White, "Error: World server disconnected");
- }
- else {
- auto pack = new ServerPacket(ServerOP_Uptime, sizeof(ServerUptime_Struct));
- ServerUptime_Struct *sus = (ServerUptime_Struct *) pack->pBuffer;
- strcpy(sus->adminname, c->GetName());
- if (sep->IsNumber(1) && Strings::ToInt(sep->arg[1]) > 0) {
- sus->zoneserverid = Strings::ToInt(sep->arg[1]);
- }
- worldserver.SendPacket(pack);
- safe_delete(pack);
- }
-}
-
diff --git a/zone/gm_commands/version.cpp b/zone/gm_commands/version.cpp
deleted file mode 100755
index cc5d0a5312..0000000000
--- a/zone/gm_commands/version.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "../client.h"
-
-void command_version(Client *c, const Seperator *sep)
-{
- std::string popup_text = "";
-
- popup_text += fmt::format("Version | {} |
", CURRENT_VERSION);
- popup_text += fmt::format("Compiled | {} {} |
", COMPILE_DATE, COMPILE_TIME);
- popup_text += fmt::format("Last Modified | {} |
", LAST_MODIFIED);
-
- popup_text += "
";
-
- c->SendPopupToClient(
- "Server Version Information",
- popup_text.c_str()
- );
-}
-
diff --git a/zone/gm_commands/viewcurrencies.cpp b/zone/gm_commands/viewcurrencies.cpp
deleted file mode 100644
index e06376927f..0000000000
--- a/zone/gm_commands/viewcurrencies.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "../client.h"
-
-void command_viewcurrencies(Client *c, const Seperator *sep)
-{
- auto t = c;
- if (c->GetTarget() && c->GetTarget()->IsClient()) {
- t = c->GetTarget()->CastToClient();
- }
-
- const auto platinum = (
- t->GetMoney(3, 0) +
- t->GetMoney(3, 1) +
- t->GetMoney(3, 2) +
- t->GetMoney(3, 3)
- );
-
- const auto gold = (
- t->GetMoney(2, 0) +
- t->GetMoney(2, 1) +
- t->GetMoney(2, 2)
- );
-
- const auto silver = (
- t->GetMoney(1, 0) +
- t->GetMoney(1, 1) +
- t->GetMoney(1, 2)
- );
-
- const auto copper = (
- t->GetMoney(0, 0) +
- t->GetMoney(0, 1) +
- t->GetMoney(0, 2)
- );
-
- std::string currency_table;
-
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell("Currency"),
- DialogueWindow::TableCell("Amount")
- )
- );
-
- if (
- platinum ||
- gold ||
- silver ||
- copper
- ) {
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell("Money"),
- DialogueWindow::TableCell(Strings::Money(platinum, gold, silver, copper))
- )
- );
- }
-
- const auto ebon_crystals = t->GetEbonCrystals();
- if (ebon_crystals) {
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell("Ebon Crystals"),
- DialogueWindow::TableCell(Strings::Commify(ebon_crystals))
- )
- );
- }
-
- const auto radiant_crystals = t->GetRadiantCrystals();
- if (radiant_crystals) {
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell("Radiant Crystals"),
- DialogueWindow::TableCell(Strings::Commify(radiant_crystals))
- )
- );
- }
-
- for (const auto& a : zone->AlternateCurrencies) {
- const auto currency_value = t->GetAlternateCurrencyValue(a.id);
- if (currency_value) {
- const auto* d = database.GetItem(a.item_id);
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell(d->Name),
- DialogueWindow::TableCell(Strings::Commify(currency_value))
- )
- );
- }
- }
-
- for (const auto& l : EQ::constants::GetLDoNThemeMap()) {
- const auto ldon_currency_value = t->GetLDoNPointsTheme(l.first);
- if (ldon_currency_value) {
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell(l.second),
- DialogueWindow::TableCell(Strings::Commify(ldon_currency_value))
- )
- );
- }
- }
-
- auto pvp_points = t->GetPVPPoints();
- if (pvp_points) {
- currency_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell("PVP Points"),
- DialogueWindow::TableCell(Strings::Commify(pvp_points))
- )
- );
- }
-
- currency_table = DialogueWindow::Table(currency_table);
-
- c->SendPopupToClient(
- fmt::format(
- "Currency for {}",
- c->GetTargetDescription(t, TargetDescriptionType::UCSelf)
- ).c_str(),
- currency_table.c_str()
- );
-}
diff --git a/zone/gm_commands/viewnpctype.cpp b/zone/gm_commands/viewnpctype.cpp
deleted file mode 100755
index 80c73bfefd..0000000000
--- a/zone/gm_commands/viewnpctype.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "../client.h"
-
-void command_viewnpctype(Client *c, const Seperator *sep)
-{
- if (sep->IsNumber(1)) {
- uint32 npc_id = Strings::ToUnsignedInt(sep->arg[1]);
- const NPCType *npc_type_data = content_db.LoadNPCTypesData(npc_id);
- if (npc_type_data) {
- auto npc = new NPC(
- npc_type_data,
- nullptr,
- c->GetPosition(),
- GravityBehavior::Water
- );
- npc->ShowStats(c);
- safe_delete(npc);
- }
- else {
- c->Message(
- Chat::White,
- fmt::format(
- "NPC ID {} was not found.",
- npc_id
- ).c_str()
- );
- }
- }
- else {
- c->Message(Chat::White, "Usage: #viewnpctype [NPC ID]");
- }
-}
-
diff --git a/zone/gm_commands/viewpetition.cpp b/zone/gm_commands/viewpetition.cpp
deleted file mode 100755
index eaff518a97..0000000000
--- a/zone/gm_commands/viewpetition.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "../client.h"
-
-void command_viewpetition(Client *c, const Seperator *sep)
-{
- if (sep->arg[1][0] == 0) {
- c->Message(Chat::White, "Usage: #viewpetition (petition number) Type #listpetition for a list");
- return;
- }
-
- c->Message(Chat::Red, " ID : Character Name , Petition Text");
-
- std::string query = "SELECT petid, charname, petitiontext FROM petitions ORDER BY petid";
- auto results = database.QueryDatabase(query);
- if (!results.Success()) {
- return;
- }
-
- LogInfo("View petition request from [{}], petition number: [{}]", c->GetName(), Strings::ToInt(sep->argplus[1]));
-
- if (results.RowCount() == 0) {
- c->Message(Chat::Red, "There was an error in your request: ID not found! Please check the Id and try again.");
- return;
- }
-
- for (auto row = results.begin(); row != results.end(); ++row)
- if (strcasecmp(row[0], sep->argplus[1]) == 0) {
- c->Message(Chat::Yellow, " %s: %s , %s ", row[0], row[1], row[2]);
- }
-
-}
-
diff --git a/zone/gm_commands/viewzoneloot.cpp b/zone/gm_commands/viewzoneloot.cpp
deleted file mode 100755
index 3f48a38475..0000000000
--- a/zone/gm_commands/viewzoneloot.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-#include "../client.h"
-
-void command_viewzoneloot(Client *c, const Seperator *sep)
-{
- std::map zone_loot_list;
- auto npc_list = entity_list.GetNPCList();
- uint32 loot_amount = 0, loot_id = 1, search_item_id = 0;
- if (sep->argnum == 1 && sep->IsNumber(1)) {
- search_item_id = Strings::ToInt(sep->arg[1]);
- }
- else if (sep->argnum == 1 && !sep->IsNumber(1)) {
- c->Message(
- Chat::Yellow,
- "Usage: #viewzoneloot [item id]"
- );
- return;
- }
-
- for (auto npc_entity : npc_list) {
- auto current_npc_item_list = npc_entity.second->GetItemList();
- zone_loot_list.insert({npc_entity.second->GetID(), current_npc_item_list});
- }
-
- for (auto loot_item : zone_loot_list) {
- uint32 current_entity_id = loot_item.first;
- auto current_item_list = loot_item.second;
- auto current_npc = entity_list.GetNPCByID(current_entity_id);
- std::string npc_link;
- if (current_npc) {
- std::string npc_name = current_npc->GetCleanName();
- uint32 instance_id = zone->GetInstanceID();
- uint32 zone_id = zone->GetZoneID();
- std::string command_link = Saylink::Silent(
- fmt::format(
- "#{} {} {} {} {}",
- (instance_id != 0 ? "zoneinstance" : "zone"),
- (instance_id != 0 ? instance_id : zone_id),
- current_npc->GetX(),
- current_npc->GetY(),
- current_npc->GetZ()
- ),
- "Goto"
- );
- npc_link = fmt::format(
- " NPC: {} (ID {}) [{}]",
- npc_name,
- current_entity_id,
- command_link
- );
- }
-
- for (auto current_item : current_item_list) {
- if (search_item_id == 0 || current_item->item_id == search_item_id) {
- EQ::SayLinkEngine linker;
- linker.SetLinkType(EQ::saylink::SayLinkLootItem);
- linker.SetLootData(current_item);
- c->Message(
- Chat::White,
- fmt::format(
- "{}. {} ({}){}",
- loot_id,
- linker.GenerateLink(),
- current_item->item_id,
- npc_link
- ).c_str()
- );
- loot_id++;
- loot_amount++;
- }
- }
- }
-
-
- if (search_item_id != 0) {
- std::string drop_string = (
- loot_amount > 0 ?
- fmt::format(
- "dropping in {} {}",
- loot_amount,
- (loot_amount > 1 ? "places" : "place")
- ) :
- "not dropping"
- );
-
- c->Message(
- Chat::White,
- fmt::format(
- "{} ({}) is {}.",
- database.CreateItemLink(search_item_id),
- search_item_id,
- drop_string
- ).c_str()
- );
- }
- else {
- std::string drop_string = (
- loot_amount > 0 ?
- fmt::format(
- "{} {} dropping",
- (loot_amount > 1 ? "items" : "item"),
- (loot_amount > 1 ? "are" : "is")
- ) :
- "items are dropping"
- );
-
- c->Message(
- Chat::White,
- fmt::format(
- "{} {}.",
- loot_amount,
- drop_string
- ).c_str()
- );
- }
-}
-
diff --git a/zone/gm_commands/who.cpp b/zone/gm_commands/who.cpp
deleted file mode 100755
index a67cc27994..0000000000
--- a/zone/gm_commands/who.cpp
+++ /dev/null
@@ -1,233 +0,0 @@
-#include "../client.h"
-
-void command_who(Client *c, const Seperator *sep)
-{
- std::string query = SQL(
- SELECT
- character_data.account_id,
- character_data.name,
- character_data.zone_id,
- character_data.zone_instance,
- COALESCE(
- (
- SELECT guilds.name FROM guilds WHERE id = (
- (
- SELECT guild_id FROM guild_members WHERE char_id = character_data.id
- )
- )
- ),
- ""
- ) AS guild_name,
- character_data.level,
- character_data.race,
- character_data.class,
- COALESCE(
- (
- SELECT account.status FROM account WHERE account.id = character_data.account_id LIMIT 1
- ),
- 0
- ) AS account_status,
- COALESCE(
- (
- SELECT account.name FROM account WHERE account.id = character_data.account_id LIMIT 1
- ),
- 0
- ) AS account_name,
- COALESCE(
- (
- SELECT account_ip.ip FROM account_ip WHERE account_ip.accid = character_data.account_id ORDER BY account_ip.lastused DESC LIMIT 1
- ),
- ""
- ) AS account_ip
- FROM
- character_data
- WHERE
- last_login > (UNIX_TIMESTAMP() - 600)
- ORDER BY
- character_data.name;
- );
-
- auto results = database.QueryDatabase(query);
- if (!results.Success() || !results.RowCount()) {
- return;
- }
-
- std::string search_string;
-
- if (sep->arg[1]) {
- search_string = Strings::ToLower(sep->arg[1]);
- }
-
- int found_count = 0;
-
- c->Message(Chat::Who, "Players in EverQuest:");
- c->Message(Chat::Who, "------------------------------");
-
- for (auto row : results) {
- auto account_id = Strings::ToUnsignedInt(row[0]);
- std::string player_name = row[1];
- auto zone_id = Strings::ToUnsignedInt(row[2]);
- std::string zone_short_name = ZoneName(zone_id);
- std::string zone_long_name = ZoneLongName(zone_id);
- auto zone_instance = Strings::ToUnsignedInt(row[3]);
- std::string guild_name = row[4];
- auto player_level = Strings::ToUnsignedInt(row[5]);
- auto player_race = Strings::ToUnsignedInt(row[6]);
- auto player_class = Strings::ToUnsignedInt(row[7]);
- auto account_status = Strings::ToUnsignedInt(row[8]);
- std::string account_name = row[9];
- std::string account_ip = row[10];
- std::string base_class_name = GetClassIDName(static_cast(player_class));
- std::string displayed_race_name = GetRaceIDName(static_cast(player_race));
-
- if (search_string.length()) {
- bool found_search_term = (
- Strings::ToLower(player_name).find(search_string) != std::string::npos ||
- Strings::ToLower(zone_short_name).find(search_string) != std::string::npos ||
- Strings::ToLower(displayed_race_name).find(search_string) != std::string::npos ||
- Strings::ToLower(base_class_name).find(search_string) != std::string::npos ||
- Strings::ToLower(guild_name).find(search_string) != std::string::npos ||
- Strings::ToLower(account_name).find(search_string) != std::string::npos ||
- Strings::ToLower(account_ip).find(search_string) != std::string::npos
- );
-
- if (!found_search_term) {
- continue;
- }
- }
-
- std::string displayed_guild_name;
- if (guild_name.length()) {
- displayed_guild_name = Saylink::Silent(
- fmt::format(
- "#who \"{}\"",
- guild_name
- ),
- fmt::format(
- "<{}>",
- guild_name
- )
- );
- }
-
- auto goto_saylink = Saylink::Silent(
- fmt::format(
- "#goto {}",
- player_name
- ),
- "Goto"
- );
-
- auto summon_saylink = Saylink::Silent(
- fmt::format(
- "#summon {}",
- player_name
- ),
- "Summon"
- );
-
- std::string display_class_name = GetClassIDName(
- static_cast(player_class),
- static_cast(player_level)
- );
-
- auto class_saylink = Saylink::Silent(
- fmt::format(
- "#who {}",
- base_class_name
- ),
- display_class_name
- );
-
- auto race_saylink = Saylink::Silent(
- fmt::format(
- "#who %s",
- displayed_race_name
- ),
- displayed_race_name
- );
-
- auto zone_saylink = Saylink::Silent(
- fmt::format(
- "#who {}",
- zone_short_name
- ),
- zone_long_name
- );
-
- auto account_saylink = Saylink::Silent(
- fmt::format(
- "#who {}",
- account_name
- ),
- account_name
- );
-
- auto account_ip_saylink = Saylink::Silent(
- fmt::format(
- "#who {}",
- account_ip
- ),
- account_ip
- );
-
- auto status_level = (
- account_status ?
- fmt::format(
- "* {} * ",
- EQ::constants::GetAccountStatusName(account_status)
- ) :
- ""
- );
-
- auto version_string = (
- zone_instance ?
- fmt::format(
- " ({})",
- zone_instance
- ) :
- ""
- );
-
- c->Message(
- Chat::Who,
- fmt::format(
- "{}[{} {} ({})] {} ({}) ({}) ({}) {} ZONE: {}{} ({} | {})",
- status_level,
- player_level,
- class_saylink,
- base_class_name,
- player_name,
- race_saylink,
- account_saylink,
- account_ip_saylink,
- displayed_guild_name,
- zone_saylink,
- version_string,
- goto_saylink,
- summon_saylink
- ).c_str()
- );
-
- found_count++;
- }
-
- std::string count_string = found_count == 1 ? "is" : "are";
-
- std::string message = (
- found_count ?
- fmt::format(
- "There {} {} player{} in EverQuest.",
- count_string,
- found_count,
- found_count > 1 ? "s" : ""
- ) :
- "There are no players in EverQuest that match those filters."
- );
-
- c->Message(
- Chat::Who,
- message.c_str()
- );
-}
-
diff --git a/zone/gm_commands/zonestatus.cpp b/zone/gm_commands/zonestatus.cpp
deleted file mode 100755
index 51c5f763eb..0000000000
--- a/zone/gm_commands/zonestatus.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "../client.h"
-#include "../worldserver.h"
-
-extern WorldServer worldserver;
-
-void command_zonestatus(Client *c, const Seperator *sep)
-{
- if (!worldserver.Connected()) {
- c->Message(Chat::White, "Error: World server disconnected");
- }
- else {
- auto pack = new ServerPacket(ServerOP_ZoneStatus, strlen(c->GetName()) + 2);
- memset(pack->pBuffer, (uint8) c->Admin(), 1);
- strcpy((char *) &pack->pBuffer[1], c->GetName());
- worldserver.SendPacket(pack);
- delete pack;
- }
-}
-
diff --git a/zone/gm_commands/zstats.cpp b/zone/gm_commands/zstats.cpp
deleted file mode 100755
index ab9c65ec95..0000000000
--- a/zone/gm_commands/zstats.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-#include "../client.h"
-
-void command_zstats(Client *c, const Seperator *sep)
-{
- // Zone
- c->Message(
- Chat::White,
- fmt::format(
- "Zone | {}",
- zone->GetZoneDescription()
- ).c_str()
- );
-
- // Type
- c->Message(
- Chat::White,
- fmt::format(
- "Type: {}",
- zone->newzone_data.ztype
- ).c_str()
- );
-
- // Fog Data
- for (int fog_index = 0; fog_index < 4; fog_index++) {
- int fog_number = (fog_index + 1);
- c->Message(
- Chat::White,
- fmt::format(
- "Fog {} Colors | Red: {} Blue: {} Green: {} ",
- fog_number,
- zone->newzone_data.fog_red[fog_index],
- zone->newzone_data.fog_green[fog_index],
- zone->newzone_data.fog_blue[fog_index]
- ).c_str()
- );
-
- c->Message(
- Chat::White,
- fmt::format(
- "Fog {} Clipping Distance | Min: {} Max: {}",
- fog_number,
- zone->newzone_data.fog_minclip[fog_index],
- zone->newzone_data.fog_maxclip[fog_index]
- ).c_str()
- );
- }
-
- // Fog Density
- c->Message(
- Chat::White,
- fmt::format(
- "Fog Density: {}",
- zone->newzone_data.fog_density
- ).c_str()
- );
-
-
- // Gravity
- c->Message(
- Chat::White,
- fmt::format(
- "Gravity: {}",
- zone->newzone_data.gravity
- ).c_str()
- );
-
- // Time Type
- c->Message(
- Chat::White,
- fmt::format(
- "Time Type: {}",
- zone->newzone_data.time_type
- ).c_str()
- );
-
- // Experience Multiplier
- c->Message(
- Chat::White,
- fmt::format(
- "Experience Multiplier: {}",
- zone->newzone_data.zone_exp_multiplier
- ).c_str()
- );
-
- // Safe Coordinates
- c->Message(
- Chat::White,
- fmt::format(
- "Safe Coordinates: {}, {}, {}",
- zone->newzone_data.safe_x,
- zone->newzone_data.safe_y,
- zone->newzone_data.safe_z
- ).c_str()
- );
-
- // Max Z
- c->Message(
- Chat::White,
- fmt::format(
- "Max Z: {}",
- zone->newzone_data.max_z
- ).c_str()
- );
-
- // Underworld Z
- c->Message(
- Chat::White,
- fmt::format(
- "Underworld Z: {}",
- zone->newzone_data.underworld
- ).c_str()
- );
-
- // Clipping Distance
- c->Message(
- Chat::White,
- fmt::format(
- "Clipping Distance | Min: {} Max: {}",
- zone->newzone_data.minclip,
- zone->newzone_data.maxclip
- ).c_str()
- );
-
- // Weather Data
- for (int weather_index = 0; weather_index < 4; weather_index++) {
- int weather_number = (weather_index + 1);
- c->Message(
- Chat::White,
- fmt::format(
- "Rain {} | Chance: {} Duration: {} ",
- weather_number,
- zone->newzone_data.rain_chance[weather_index],
- zone->newzone_data.rain_duration[weather_index]
- ).c_str()
- );
-
- c->Message(
- Chat::White,
- fmt::format(
- "Snow {} | Chance: {} Duration: {}",
- weather_number,
- zone->newzone_data.snow_chance[weather_index],
- zone->newzone_data.snow_duration[weather_index]
- ).c_str()
- );
- }
-
- // Sky Type
- c->Message(
- Chat::White,
- fmt::format(
- "Sky Type: {}",
- zone->newzone_data.sky
- ).c_str()
- );
-
- // Suspend Buffs
- c->Message(
- Chat::White,
- fmt::format(
- "Suspend Buffs: {}",
- zone->newzone_data.suspend_buffs
- ).c_str()
- );
-
- // Regeneration Data
- c->Message(
- Chat::White,
- fmt::format(
- "Regen | Health: {} Mana: {} Endurance: {}",
- zone->newzone_data.fast_regen_hp,
- zone->newzone_data.fast_regen_mana,
- zone->newzone_data.fast_regen_endurance
- ).c_str()
- );
-
- // NPC Max Aggro Distance
- c->Message(
- Chat::White,
- fmt::format(
- "NPC Max Aggro Distance: {}",
- zone->newzone_data.npc_aggro_max_dist
- ).c_str()
- );
-
- // Underworld Teleport Index
- c->Message(
- Chat::White,
- fmt::format(
- "Underworld Teleport Index: {}",
- zone->newzone_data.underworld_teleport_index
- ).c_str()
- );
-
- // Lava Damage
- c->Message(
- Chat::White,
- fmt::format(
- "Lava Damage | Min: {} Max: {}",
- zone->newzone_data.min_lava_damage,
- zone->newzone_data.lava_damage
- ).c_str()
- );
-}
-
diff --git a/zone/mob.cpp b/zone/mob.cpp
index 5621c2703c..8aa0a71a77 100644
--- a/zone/mob.cpp
+++ b/zone/mob.cpp
@@ -1793,15 +1793,12 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
}
regen_string += DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}{}{}{}",
- DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, regen_row_header)),
- DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, base_regen_field)),
- DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, fmt::format("{} ({})", item_regen_field, cap_regen_field))),
- DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, spell_regen_field)),
- DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, aa_regen_field)),
- DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, total_regen_field))
- )
+ DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, regen_row_header)) +
+ DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, base_regen_field)) +
+ DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, fmt::format("{} ({})", item_regen_field, cap_regen_field))) +
+ DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, spell_regen_field)) +
+ DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, aa_regen_field)) +
+ DialogueWindow::TableCell(DialogueWindow::ColorMessage(regen_row_color, total_regen_field))
);
}
@@ -1907,23 +1904,20 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
}
stat_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}{}",
- DialogueWindow::TableCell(a_stat_name),
- DialogueWindow::TableCell(
- fmt::format(
- "{} {}",
- a_stat,
- DialogueWindow::ColorMessage(heroic_color, fmt::format("+{}", h_stat))
- )
- ),
- DialogueWindow::TableCell(a_resist_name),
- DialogueWindow::TableCell(
- fmt::format(
- "{} {}",
- a_resist,
- DialogueWindow::ColorMessage(heroic_color, fmt::format("+{}", h_resist_field))
- )
+ DialogueWindow::TableCell(a_stat_name) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} {}",
+ a_stat,
+ DialogueWindow::ColorMessage(heroic_color, fmt::format("+{}", h_stat))
+ )
+ ) +
+ DialogueWindow::TableCell(a_resist_name) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} {}",
+ a_resist,
+ DialogueWindow::ColorMessage(heroic_color, fmt::format("+{}", h_resist_field))
)
)
);
@@ -2026,23 +2020,20 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
}
mod2_table += DialogueWindow::TableRow(
- fmt::format(
- "{}{}",
- DialogueWindow::TableCell(
- fmt::format(
- "{}: {} / {}",
- mod2a_name,
- Strings::Commify(mod2a),
- Strings::Commify(mod2a_cap)
- )
- ),
- DialogueWindow::TableCell(
- fmt::format(
- "{}: {} / {}",
- mod2b_name,
- Strings::Commify(mod2b),
- Strings::Commify(mod2b_cap)
- )
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{}: {} / {}",
+ mod2a_name,
+ Strings::Commify(mod2a),
+ Strings::Commify(mod2a_cap)
+ )
+ ) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{}: {} / {}",
+ mod2b_name,
+ Strings::Commify(mod2b),
+ Strings::Commify(mod2b_cap)
)
)
);
@@ -2208,12 +2199,9 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
// Class, Level, and Race
final_string += DialogueWindow::Table(
DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}",
- DialogueWindow::TableCell(fmt::format("Race: {}", GetPlayerRaceAbbreviation(GetBaseRace()))),
- DialogueWindow::TableCell(fmt::format("Class: {}", GetPlayerClassAbbreviation(GetClass()))),
- DialogueWindow::TableCell(fmt::format("Level: {}", std::to_string(GetLevel())))
- )
+ DialogueWindow::TableCell(fmt::format("Race: {}", GetPlayerRaceAbbreviation(GetBaseRace()))) +
+ DialogueWindow::TableCell(fmt::format("Class: {}", GetPlayerClassAbbreviation(GetClass()))) +
+ DialogueWindow::TableCell(fmt::format("Level: {}", std::to_string(GetLevel())))
)
);
@@ -2221,15 +2209,12 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
if (rune_number || magic_rune_number) {
final_string += DialogueWindow::Table(
DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}",
- DialogueWindow::TableCell(
- fmt::format("Rune: {}", rune_number)
- ),
- DialogueWindow::TableCell(""),
- DialogueWindow::TableCell(
- fmt::format("Spell Rune: {}", magic_rune_number)
- )
+ DialogueWindow::TableCell(
+ fmt::format("Rune: {}", rune_number)
+ ) +
+ DialogueWindow::TableCell("") +
+ DialogueWindow::TableCell(
+ fmt::format("Spell Rune: {}", magic_rune_number)
)
)
);
@@ -2313,21 +2298,21 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
fmt::format(
"{}{}",
DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}{}",
- DialogueWindow::TableCell("Item"),
- DialogueWindow::TableCell("Spell"),
- DialogueWindow::TableCell("Over"),
- DialogueWindow::TableCell("Total (Cap)")
- )
+ DialogueWindow::TableCell("Item") +
+ DialogueWindow::TableCell("Spell") +
+ DialogueWindow::TableCell("Over") +
+ DialogueWindow::TableCell("Total (Cap)")
),
DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}{}",
- DialogueWindow::TableCell(Strings::Commify(itembonuses.haste)),
- DialogueWindow::TableCell(Strings::Commify(spellbonuses.haste + spellbonuses.hastetype2)),
- DialogueWindow::TableCell(Strings::Commify(spellbonuses.hastetype3 + ExtraHaste)),
- DialogueWindow::TableCell(fmt::format("{} ({})", Strings::Commify(GetHaste()), Strings::Commify(RuleI(Character, HasteCap))))
+ DialogueWindow::TableCell(Strings::Commify(itembonuses.haste)) +
+ DialogueWindow::TableCell(Strings::Commify(spellbonuses.haste + spellbonuses.hastetype2)) +
+ DialogueWindow::TableCell(Strings::Commify(spellbonuses.hastetype3 + ExtraHaste)) +
+ DialogueWindow::TableCell(
+ fmt::format(
+ "{} ({})",
+ Strings::Commify(GetHaste()),
+ Strings::Commify(RuleI(Character, HasteCap))
+ )
)
)
)
@@ -2339,21 +2324,15 @@ void Mob::SendStatsWindow(Client* c, bool use_window)
final_string += DialogueWindow::CenterMessage("Regen");
const auto& regen_table = DialogueWindow::Table(
- fmt::format(
- "{}{}",
- DialogueWindow::TableRow(
- fmt::format(
- "{}{}{}{}{}{}",
- DialogueWindow::TableCell("Type"),
- DialogueWindow::TableCell("Base"),
- DialogueWindow::TableCell("Items (Cap)"),
- DialogueWindow::TableCell("Spell"),
- DialogueWindow::TableCell("AAs"),
- DialogueWindow::TableCell("Total")
- )
- ),
- regen_string
- )
+ DialogueWindow::TableRow(
+ DialogueWindow::TableCell("Type") +
+ DialogueWindow::TableCell("Base") +
+ DialogueWindow::TableCell("Items (Cap)") +
+ DialogueWindow::TableCell("Spell") +
+ DialogueWindow::TableCell("AAs") +
+ DialogueWindow::TableCell("Total")
+ ) +
+ regen_string
);
// Regen
diff --git a/zone/trap.cpp b/zone/trap.cpp
index 0c447a2d20..cb2fe23637 100644
--- a/zone/trap.cpp
+++ b/zone/trap.cpp
@@ -360,17 +360,17 @@ void EntityList::UpdateAllTraps(bool respawn, bool repopnow)
Log(Logs::General, Logs::Traps, "All traps updated.");
}
-void EntityList::GetTrapInfo(Client* client)
+void EntityList::GetTrapInfo(Client* c)
{
- uint32 trap_count = 0;
+ uint32 trap_count = 0;
uint32 trap_number = 1;
for (const auto& trap : trap_list) {
auto t = trap.second;
if (t->IsTrap()) {
- bool is_set = (t->chkarea_timer.Enabled() && !t->reset_timer.Enabled());
+ const bool is_set = (t->chkarea_timer.Enabled() && !t->reset_timer.Enabled());
- client->Message(
+ c->Message(
Chat::White,
fmt::format(
"Trap {} | ID: {} Active: {} Coordinates: {:.2f}, {:.2f}, {:.2f}",
@@ -383,7 +383,7 @@ void EntityList::GetTrapInfo(Client* client)
).c_str()
);
- client->Message(
+ c->Message(
Chat::White,
fmt::format(
"Trap {} | Times Triggered: {} Group: {}",
@@ -394,7 +394,7 @@ void EntityList::GetTrapInfo(Client* client)
);
if (!t->message.empty()) {
- client->Message(
+ c->Message(
Chat::White,
fmt::format(
"Trap {} | Message: {}",
@@ -410,14 +410,14 @@ void EntityList::GetTrapInfo(Client* client)
}
if (!trap_count) {
- client->Message(Chat::White, "No traps were found in this zone.");
+ c->Message(Chat::White, "No traps were found.");
return;
}
- client->Message(
+ c->Message(
Chat::White,
fmt::format(
- "{} trap{} found.",
+ "{} Trap{} found.",
trap_count,
trap_count != 1 ? "s" : ""
).c_str()
diff --git a/zone/zoning.cpp b/zone/zoning.cpp
index 1f9375ef10..6c59d14ff6 100644
--- a/zone/zoning.cpp
+++ b/zone/zoning.cpp
@@ -1023,8 +1023,8 @@ void Client::SendZoneFlagInfo(Client *to) const {
to->Message(
Chat::White,
fmt::format(
- "{} {} no Zone Flags.",
- to == this ? "You" : GetName(),
+ "{} {} no zone flags.",
+ to->GetTargetDescription(const_cast(CastToMob()), TargetDescriptionType::UCYou),
to == this ? "have" : "has"
).c_str()
);
@@ -1034,32 +1034,29 @@ void Client::SendZoneFlagInfo(Client *to) const {
to->Message(
Chat::White,
fmt::format(
- "{} {} the following Zone Flags:",
- to == this ? "You" : GetName(),
+ "{} {} the following zone flags:",
+ to->GetTargetDescription(const_cast(CastToMob()), TargetDescriptionType::UCYou),
to == this ? "have" : "has"
).c_str()
);
- int flag_count = 0;
+ uint32 flag_count = 0;
+
for (const auto& zone_id : zone_flags) {
- int flag_number = (flag_count + 1);
- const char* zone_short_name = ZoneName(zone_id, true);
- if (strncmp(zone_short_name, "UNKNOWN", strlen(zone_short_name)) != 0) {
- std::string zone_long_name = ZoneLongName(zone_id);
- std::string flag_name = "ERROR";
+ const uint32 flag_number = (flag_count + 1);
- auto z = GetZone(zone_id);
- if (z) {
- flag_name = z->flag_needed;
- }
+ const auto& z = GetZone(zone_id);
+
+ if (z) {
+ const std::string& flag_name = z->flag_needed;
to->Message(
Chat::White,
fmt::format(
- "Flag {} | Zone: {} ({}) ID: {}",
+ "Flag {} | Zone: {} ({}) ID: {}{}",
flag_number,
- zone_long_name,
- zone_short_name,
+ z->long_name,
+ z->short_name,
zone_id,
(
!flag_name.empty() ?
@@ -1078,10 +1075,10 @@ void Client::SendZoneFlagInfo(Client *to) const {
to->Message(
Chat::White,
fmt::format(
- "{} {} {} Zone Flags.",
- to == this ? "You" : GetName(),
- to == this ? "have" : "has",
- flag_count
+ "{} Zone flag{} found for {}.",
+ flag_count,
+ flag_count != 1 ? "s" : "",
+ to->GetTargetDescription(const_cast(CastToMob()))
).c_str()
);
}