{
  "revision": "9efddf962ffee075d0db2059d3914c36b0acbdf3",
  "working_tree": true,
  "sources": {
    "WorldServer/Commands/Commands.cpp": {
      "sha256": "da672ca7b293abb337ffcd81a52633e2f2d84cd3d51d2a7604af02d52c82189f",
      "bytes": 573536
    },
    "WorldServer/Commands/Commands.h": {
      "sha256": "4cbcbca5653c2d85b02eec50e2d4fa1070eb000f890f1937ffbc4d68469f7c83",
      "bytes": 40189
    },
    "WorldServer/Commands/CommandsDB.cpp": {
      "sha256": "5586201c9c4ca22326c6d56b68bb77e597a15896f06a744c532b80bdb15622ab",
      "bytes": 15407
    },
    "WorldServer/Bots/BotCommands.cpp": {
      "sha256": "ba86621f23fa4f765e838407cceacf8ab6d8d43a0c8c34eb78a06a56817e47e7",
      "bytes": 36812
    },
    "WorldServer/WorldDatabase.cpp": {
      "sha256": "21adaef268cf29822c307259df78a2acab301056228d090f8f61de730dd961b3",
      "bytes": 480747
    },
    "common/seperator.h": {
      "sha256": "1498836676aca717a6aeeaea2537bd6dd75b22b6938bfcb831694f2fbcd962f9",
      "bytes": 6229
    },
    "WorldServer/Bots/BotAccessPolicy.cpp": {
      "sha256": "eda8f51d5eaa04627e9d8281031393ba998d0eaa5cfe37679e50d768c5e2580e",
      "bytes": 8445
    },
    "WorldServer/Bots/BotLifecycle.cpp": {
      "sha256": "41638069240780bcfbf742728dbe661bb1515b2854172550b07f7ca18e7c2cd0",
      "bytes": 11285
    },
    "WorldServer/Player/classes.h": {
      "sha256": "ae7982baad653ff5be5a41427408db843d9c664a65d62a7d2ddd7f841f4da54f",
      "bytes": 3143
    },
    "WorldServer/RaceTypes/races.h": {
      "sha256": "755fb88cbc9626f2ac46bb418480edfe8b5187c03169cc32fe37c06491b5318e",
      "bytes": 1816
    },
    "WorldServer/Items/Items.cpp": {
      "sha256": "482b98ecf8f7d9c603db335876c08944beb75ae31521d1f89933ce1a44b4ebb9",
      "bytes": 191858
    },
    "WorldServer/Client/client.cpp": {
      "sha256": "f6cf7a04453c6ac681bc57da27efbf035861fa10e8eb0ca18e46d093991a1bc0",
      "bytes": 633639
    },
    "WorldServer/Player/Player.cpp": {
      "sha256": "566886b5691bfd9c2dcc3837897dc0e2beeff10da5dd280fd8b0bec7abcb3737",
      "bytes": 308154
    },
    "WorldServer/Commands/GMMetricsReport.h": {
      "sha256": "b24fb2f4da27f254dc149d65b16e5d0b072d9fa104f34550dc7e05194248382e",
      "bytes": 4904
    },
    "common/CapacityMetrics.h": {
      "sha256": "d6c92991f871c207dd06381c514f7afa40910d3966e2e730afb079a90f3ec111",
      "bytes": 13945
    },
    "common/ProcessMetrics.h": {
      "sha256": "b0bcfad37c699113cfcdaf365e2a5701007ed0ade305415837c6dfe98a7b94a8",
      "bytes": 6111
    }
  },
  "handlers": {
    "65": {
      "symbol": "COMMAND_RELOAD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2281,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reload commands:\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload structs\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload items\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload recipes [items]\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload luasystem\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload spawnscripts\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload spells\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload spells npc\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload quests\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload spawns\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, GetReloadSpawnSyntax());\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload groundspawns\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload zonescripts\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload entity_commands\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload factions\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload mail\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload guilds\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload locations\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload rules\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload transporters\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload startabilities\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/reload voiceovers\");\n\t\tbreak;\n\t}",
      "delegates": [
        {
          "function": "GetReloadSpawnSyntax",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 139,
          "body": "{\n\treturn \"Syntax: /reload spawns [npc|object|widget|sign|groundspawn|all] [clear_timers] [spawn_id|location_id|placement_id|entry_id|group_id <id>] [radius <distance>] [grid [grid_id]]\";\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reload structs",
        "/reload items",
        "/reload recipes [items]",
        "/reload luasystem",
        "/reload spawnscripts",
        "/reload spells",
        "/reload spells npc",
        "/reload quests",
        "/reload spawns",
        "/reload groundspawns",
        "/reload zonescripts",
        "/reload entity_commands",
        "/reload factions",
        "/reload mail",
        "/reload guilds",
        "/reload locations",
        "/reload rules",
        "/reload transporters",
        "/reload startabilities",
        "/reload voiceovers",
        "Syntax: /reload spawns [npc|object|widget|sign|groundspawn|all] [clear_timers] [spawn_id|location_id|placement_id|entry_id|group_id <id>] [radius <distance>] [grid [grid_id]]"
      ]
    },
    "64": {
      "symbol": "COMMAND_RELOADSTRUCTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2306,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Structs...\");\n\t\tworld.SetReloadingSubsystem(\"Structs\");\n\t\tconfigReader.ReloadStructs();\n\t\tworld.RemoveReloadingSubSystem(\"Structs\");\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "79": {
      "symbol": "COMMAND_RELOAD_QUESTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2315,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Quests...\");\n\t\tworld.SetReloadingSubsystem(\"Quests\");\n\t\tmaster_quest_list.Reload();\n\t\tclient_list.ReloadQuests();\n\t\tzone_list.ReloadClientQuests();\n\t\tworld.RemoveReloadingSubSystem(\"Quests\");\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "99": {
      "symbol": "COMMAND_RELOAD_SPAWNS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2326,
      "body": "{\n\t\tif (sep && sep->arg[0] && sep->arg[0][0]) {\n\t\t\tSpawnReloadOptions options;\n\t\t\tstring error;\n\t\t\tif (!BuildReloadSpawnOptions(sep, client, &options, &error)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, error.length() > 0 ? error.c_str() : GetReloadSpawnSyntax());\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (options.reload_types == RELOAD_SPAWN_TYPE_ALL && !options.IsScoped()) {\n\t\t\t\tif (options.clear_respawn_timers)\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Clearing respawn timers and reloading spawns...\");\n\t\t\t\tclient->GetCurrentZone()->ReloadSpawns(&options);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Reloading selected spawn data: %s\", sep->arg[0]);\n\t\t\tif (client->GetCurrentZone()->ReloadSpawns(&options))\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Unable to reload selected spawns right now.\");\n\t\t}\n\t\telse\n\t\t\tclient->GetCurrentZone()->ReloadSpawns();\n\t\tbreak;\n\t}",
      "delegates": [
        {
          "function": "BuildReloadSpawnOptions",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 357,
          "body": "{\n\tif (!options)\n\t\treturn false;\n\n\toptions->reload_types = RELOAD_SPAWN_TYPE_ALL;\n\n\tint32 arg_index = 0;\n\tif (sep && sep->arg[0] && sep->arg[0][0]) {\n\t\tint32 reload_type = GetReloadSpawnType(sep->arg[0]);\n\t\tif (reload_type > 0) {\n\t\t\toptions->reload_types = reload_type;\n\t\t\targ_index = 1;\n\t\t}\n\t\telse if (!IsReloadSpawnScopeArg(sep->arg[0])) {\n\t\t\tif (error)\n\t\t\t\t*error = GetReloadSpawnSyntax();\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tfor (int32 i = arg_index; sep && i < 10 && sep->arg[i] && sep->arg[i][0];) {\n\t\tif (IsReloadSpawnClearTimersArg(sep->arg[i])) {\n\t\t\toptions->clear_respawn_timers = true;\n\t\t\ti++;\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"radius\") == 0 || stricmp(sep->arg[i], \"range\") == 0 || stricmp(sep->arg[i], \"distance\") == 0) {\n\t\t\tbool has_next = i + 1 < 10 && sep->arg[i + 1] && sep->arg[i + 1][0];\n\t\t\tif (!has_next || !sep->IsNumber(i + 1)) {\n\t\t\t\tif (error)\n\t\t\t\t\t*error = \"Radius reloads require a numeric distance.\";\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\toptions->radius = (float)atof(sep->arg[i + 1]);\n\t\t\tif (options->radius <= 0) {\n\t\t\t\tif (error)\n\t\t\t\t\t*error = \"Radius reload distance must be greater than zero.\";\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tPlayer* player = client ? client->GetPlayer() : 0;\n\t\t\tif (!player) {\n\t\t\t\tif (error)\n\t\t\t\t\t*error = \"Radius reloads require an active player location.\";\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\toptions->use_radius = true;\n\t\t\toptions->x = player->GetX();\n\t\t\toptions->y = player->GetY();\n\t\t\toptions->z = player->GetZ();\n\t\t\ti += 2;\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"grid\") == 0 || stricmp(sep->arg[i], \"gridid\") == 0) {\n\t\t\toptions->use_grid = true;\n\t\t\tbool has_next = i + 1 < 10 && sep->arg[i + 1] && sep->arg[i + 1][0];\n\t\t\tif (has_next && sep->IsNumber(i + 1)) {\n\t\t\t\toptions->grid_id = (int32)atoul(sep->arg[i + 1]);\n\t\t\t\ti += 2;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPlayer* player = client ? client->GetPlayer() : 0;\n\t\t\t\toptions->grid_id = player ? player->GetLocation() : 0;\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"spawn\") == 0 || stricmp(sep->arg[i], \"spawn_id\") == 0 || stricmp(sep->arg[i], \"dbid\") == 0 || stricmp(sep->arg[i], \"database_id\") == 0 || stricmp(sep->arg[i], \"id\") == 0) {\n\t\t\tif (!AddReloadSpawnIdFilter(sep, i, &options->spawn_ids, \"Spawn id\", error))\n\t\t\t\treturn false;\n\t\t\ti += 2;\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"location\") == 0 || stricmp(sep->arg[i], \"location_id\") == 0) {\n\t\t\tif (!AddReloadSpawnIdFilter(sep, i, &options->location_ids, \"Location id\", error))\n\t\t\t\treturn false;\n\t\t\ti += 2;\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"placement\") == 0 || stricmp(sep->arg[i], \"placement_id\") == 0) {\n\t\t\tif (!AddReloadSpawnIdFilter(sep, i, &options->placement_ids, \"Placement id\", error))\n\t\t\t\treturn false;\n\t\t\ti += 2;\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"entry\") == 0 || stricmp(sep->arg[i], \"entry_id\") == 0) {\n\t\t\tif (!AddReloadSpawnIdFilter(sep, i, &options->entry_ids, \"Entry id\", error))\n\t\t\t\treturn false;\n\t\t\ti += 2;\n\t\t}\n\t\telse if (stricmp(sep->arg[i], \"group\") == 0 || stricmp(sep->arg[i], \"group_id\") == 0 || stricmp(sep->arg[i], \"spawngroup\") == 0 || stricmp(sep->arg[i], \"spawn_group\") == 0) {\n\t\t\tif (!AddReloadSpawnIdFilter(sep, i, &options->group_ids, \"Group id\", error))\n\t\t\t\treturn false;\n\t\t\ti += 2;\n\t\t}\n\t\telse if (sep->IsNumber(i)) {\n\t\t\toptions->spawn_ids.insert((int32)atoul(sep->arg[i]));\n\t\t\ti++;\n\t\t}\n\t\telse {\n\t\t\tif (error)\n\t\t\t\t*error = GetReloadSpawnSyntax();\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}"
        },
        {
          "function": "GetReloadSpawnType",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 93,
          "body": "{\n\tif (!type || !type[0])\n\t\treturn 0;\n\n\tif (stricmp(type, \"all\") == 0)\n\t\treturn RELOAD_SPAWN_TYPE_ALL;\n\tif (stricmp(type, \"npc\") == 0 || stricmp(type, \"npcs\") == 0)\n\t\treturn RELOAD_SPAWN_TYPE_NPC;\n\tif (stricmp(type, \"object\") == 0 || stricmp(type, \"objects\") == 0)\n\t\treturn RELOAD_SPAWN_TYPE_OBJECT;\n\tif (stricmp(type, \"widget\") == 0 || stricmp(type, \"widgets\") == 0)\n\t\treturn RELOAD_SPAWN_TYPE_WIDGET;\n\tif (stricmp(type, \"sign\") == 0 || stricmp(type, \"signs\") == 0)\n\t\treturn RELOAD_SPAWN_TYPE_SIGN;\n\tif (stricmp(type, \"ground\") == 0 || stricmp(type, \"groundspawn\") == 0 || stricmp(type, \"groundspawns\") == 0 || stricmp(type, \"gspawn\") == 0 || stricmp(type, \"gspawns\") == 0)\n\t\treturn RELOAD_SPAWN_TYPE_GROUNDSPAWN;\n\n\treturn 0;\n}"
        },
        {
          "function": "IsReloadSpawnScopeArg",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 123,
          "body": "{\n\tif (!arg || !arg[0])\n\t\treturn false;\n\n\treturn IsReloadSpawnClearTimersArg(arg) ||\n\t\tstricmp(arg, \"radius\") == 0 || stricmp(arg, \"range\") == 0 || stricmp(arg, \"distance\") == 0 ||\n\t\tstricmp(arg, \"grid\") == 0 || stricmp(arg, \"gridid\") == 0 ||\n\t\tstricmp(arg, \"spawn\") == 0 || stricmp(arg, \"spawn_id\") == 0 || stricmp(arg, \"dbid\") == 0 ||\n\t\tstricmp(arg, \"database_id\") == 0 || stricmp(arg, \"id\") == 0 ||\n\t\tstricmp(arg, \"location\") == 0 || stricmp(arg, \"location_id\") == 0 ||\n\t\tstricmp(arg, \"placement\") == 0 || stricmp(arg, \"placement_id\") == 0 ||\n\t\tstricmp(arg, \"entry\") == 0 || stricmp(arg, \"entry_id\") == 0 ||\n\t\tstricmp(arg, \"group\") == 0 || stricmp(arg, \"group_id\") == 0 ||\n\t\tstricmp(arg, \"spawngroup\") == 0 || stricmp(arg, \"spawn_group\") == 0;\n}"
        },
        {
          "function": "IsReloadSpawnClearTimersArg",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 113,
          "body": "{\n\tif (!arg || !arg[0])\n\t\treturn false;\n\n\treturn stricmp(arg, \"clear_timers\") == 0 || stricmp(arg, \"clear_timer\") == 0 ||\n\t\tstricmp(arg, \"cleartimers\") == 0 ||\n\t\tstricmp(arg, \"clear_respawn_timers\") == 0 || stricmp(arg, \"clear_respawn_timer\") == 0 ||\n\t\tstricmp(arg, \"respawn_timers\") == 0 || stricmp(arg, \"respawn_timer\") == 0;\n}"
        },
        {
          "function": "GetReloadSpawnSyntax",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 139,
          "body": "{\n\treturn \"Syntax: /reload spawns [npc|object|widget|sign|groundspawn|all] [clear_timers] [spawn_id|location_id|placement_id|entry_id|group_id <id>] [radius <distance>] [grid [grid_id]]\";\n}"
        },
        {
          "function": "AddReloadSpawnIdFilter",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 343,
          "body": "{\n\tbool has_next = arg_index + 1 < 10 && sep && sep->arg[arg_index + 1] && sep->arg[arg_index + 1][0];\n\tif (!ids || !has_next || !sep->IsNumber(arg_index + 1)) {\n\t\tif (error) {\n\t\t\t*error = label;\n\t\t\t*error += \" reload filters require a numeric id.\";\n\t\t}\n\t\treturn false;\n\t}\n\n\tids->insert((int32)atoul(sep->arg[arg_index + 1]));\n\treturn true;\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "Radius reload distance must be greater than zero.",
        "Syntax: /reload spawns [npc|object|widget|sign|groundspawn|all] [clear_timers] [spawn_id|location_id|placement_id|entry_id|group_id <id>] [radius <distance>] [grid [grid_id]]"
      ]
    },
    "59": {
      "symbol": "COMMAND_RELOAD_SPELLS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2352,
      "body": "{\n\t\tif (sep && sep->arg[0] && strcmp(sep->arg[0], \"npc\") == 0) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading NPC Spells Lists (Note: Must Reload Spawns/Repop to reset npc spells)...\");\n\t\t\tworld.PurgeNPCSpells();\n\t\t\tdatabase.LoadNPCSpells();\n\t\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler, 1);\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\t}\n\t\telse {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Spells & NPC Spell Lists (reload items afterward if spell activation changed; reload spawns/repop to reset NPC spells)...\");\n\t\t\tworld.SetReloadingSubsystem(\"Spells\");\n\t\t\tzone_list.DeleteSpellProcess();\n\t\t\tif (lua_interface)\n\t\t\t\tlua_interface->DeletePendingSpells(true);\n\t\t\tmaster_spell_list.Reload();\n\t\t\tzone_list.LoadSpellProcess();\n\t\t\tworld.RemoveReloadingSubSystem(\"Spells\");\n\t\t\tworld.PurgeNPCSpells();\n\t\t\tdatabase.LoadNPCSpells();\n\t\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done! Run /reload items if spell activation changed so spell scroll availability is revalidated.\");\n\t\t}\t\t\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Reloading NPC Spells Lists (Note: Must Reload Spawns/Repop to reset npc spells)...",
        "/reloadcommand",
        "Reloading Spells & NPC Spell Lists (reload items afterward if spell activation changed; reload spawns/repop to reset NPC spells)...",
        "Done! Run /reload items if spell activation changed so spell scroll availability is revalidated."
      ]
    },
    "98": {
      "symbol": "COMMAND_RELOAD_GROUNDSPAWNS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2376,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Groundspawn Entries...\");\n\t\tworld.SetReloadingSubsystem(\"GroundSpawns\");\n\t\tclient->GetCurrentZone()->DeleteGroundSpawnItems();\n\t\tclient->GetCurrentZone()->LoadGroundSpawnEntries();\n\t\tworld.RemoveReloadingSubSystem(\"GroundSpawns\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "104": {
      "symbol": "COMMAND_RELOAD_ZONESCRIPTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2386,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Zone Scripts...\");\n\t\tworld.SetReloadingSubsystem(\"ZoneScripts\");\n\t\tworld.ResetZoneScripts();\n\t\tdatabase.LoadZoneScriptData();\n\t\tif (lua_interface)\n\t\t\tlua_interface->DestroyZoneScripts();\n\t\tworld.RemoveReloadingSubSystem(\"ZoneScripts\");\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "801": {
      "symbol": "COMMAND_RELOAD_PLAYERSCRIPTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2398,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Player Scripts...\");\n\t\tworld.SetReloadingSubsystem(\"PlayerScripts\");\n\t\tworld.ResetPlayerScripts();\n\t\tworld.LoadPlayerScripts();\n\t\tif (lua_interface)\n\t\t\tlua_interface->DestroyPlayerScripts();\n\t\tworld.RemoveReloadingSubSystem(\"PlayerScripts\");\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "240": {
      "symbol": "COMMAND_RELOAD_ENTITYCOMMANDS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2410,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Entity Commands...\");\n\t\tworld.SetReloadingSubsystem(\"EntityCommands\");\n\t\tclient->GetCurrentZone()->ClearEntityCommands();\n\t\tdatabase.LoadEntityCommands(client->GetCurrentZone().get(), true);\n\t\tworld.RemoveReloadingSubSystem(\"EntityCommands\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "243": {
      "symbol": "COMMAND_RELOAD_FACTIONS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2419,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Factions...\");\n\t\tworld.SetReloadingSubsystem(\"Factions\");\n\t\tmaster_faction_list.Clear();\n\t\tdatabase.LoadFactionList();\n\t\tworld.RemoveReloadingSubSystem(\"Factions\");\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "248": {
      "symbol": "COMMAND_RELOAD_MAIL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2429,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Mail...\");\n\t\tzone_list.ReloadMail();\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "255": {
      "symbol": "COMMAND_RELOAD_GUILDS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2436,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Guilds...\");\n\t\tworld.ReloadGuilds();\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "267": {
      "symbol": "COMMAND_RELOAD_LOCATIONS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2443,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Locations...\");\n\t\tclient->GetPlayer()->GetZone()->RemoveLocationGrids();\n\t\tdatabase.LoadLocationGrids(client->GetPlayer()->GetZone().get());\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "519": {
      "symbol": "COMMAND_RELOAD_RULES",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2450,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Rules...\");\n\t\tif (database.LoadRuleSets(true)) {\n\t\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Rule reload failed; previous rules retained. Check server logs.\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "520": {
      "symbol": "COMMAND_RELOAD_TRANSPORTERS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2460,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Transporters in your current zone...\");\n\t\tdatabase.LoadTransporters(client->GetCurrentZone().get());\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "522": {
      "symbol": "COMMAND_RELOAD_STARTABILITIES",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2466,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Starting Skills/Spells...\");\n\t\tworld.PurgeStartingLists();\n\t\tworld.LoadStartingLists();\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Reloading Starting Skills/Spells...",
        "/reloadcommand"
      ]
    },
    "532": {
      "symbol": "COMMAND_RELOAD_VOICEOVERS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2474,
      "body": "{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Voiceovers...\");\n\t\tworld.PurgeVoiceOvers();\n\t\tworld.LoadVoiceOvers();\n\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler);\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Done!\");\n\t\tbreak;\n\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/reloadcommand"
      ]
    },
    "463": {
      "symbol": "COMMAND_READ",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2482,
      "body": "{\n\t\t\tif (sep) {\t\n\t\t\t\tint32 item_index = 0;\n\t\t\t\tbool test_index = false;\n\t\t\t\tif(sep->arg[1][0] && strcmp(sep->arg[0], \"read\") == 0 && sep->IsNumber(1)) {\n\t\t\t\t\titem_index = atol(sep->arg[1]);\n\t\t\t\t\ttest_index = true;\n\t\t\t\t}\t\n\t\t\t\telse if(client->GetVersion() <= 561 && sep->IsNumber(0)) {\n\t\t\t\t\t                                                              \n\t\t\t\t\titem_index = atol(sep->arg[0]);\n\t\t\t\t\ttest_index = true;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (test_index) {\n\t\t\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(item_index);\n\t\t\t\t\tif (item) {\n\t\t\t\t\t\tSpawn* spawn = cmdTarget;\n\t\t\t\t\t\tclient->SendShowBook(client->GetPlayer(), item->name, item->book_language, item->book_pages);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "34": {
      "symbol": "COMMAND_USEABILITY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2507,
      "body": "{\n\t\t\tuint32 spell_id_val = 0;\n\t\t\tif (sep && sep->GetUInt(0, spell_id_val)) {\n\t\t\t\tif (!client->GetPlayer()->Alive()) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot do that right now.\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tint32 spell_id = (int32)spell_id_val;\n\t\t\t\t\tint8 spell_tier = 0;\n\t\t\t\t\tuint32 spell_tier_val = 0;\n\t\t\t\t\tif (sep->GetUInt(1, spell_tier_val))\n\t\t\t\t\t\tspell_tier = (int8)spell_tier_val;\n\t\t\t\t\telse\n\t\t\t\t\t\tspell_tier = client->GetPlayer()->GetSpellTier(spell_id);\n\t\t\t\t\tif (!spell_tier)\n\t\t\t\t\t\tspell_tier = 1;\n\t\t\t\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier);\n\t\t\t\t\tif (spell) {\n\t\t\t\t\t\tif (strncmp(spell->GetName(), \"Gathering\", 9) == 0 || strncmp(spell->GetName(), \"Mining\", 6) == 0 || strncmp(spell->GetName(), \"Trapping\", 8) == 0 || strncmp(spell->GetName(), \"Foresting\", 9) == 0 || strncmp(spell->GetName(), \"Fishing\", 7) == 0 || strncmp(spell->GetName(), \"Collecting\", 10) == 0)\n\t\t\t\t\t\t\tclient->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), cmdTarget, true, true);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (cmdTarget)\n\t\t\t\t\t\t\t\tclient->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), cmdTarget);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (cmdTarget && cmdTarget->IsWidget())\n\t\t\t{\n\t\t\t\tWidget* widget = (Widget*)cmdTarget;\n\t\t\t\twidget->HandleUse(client, \"use\", WIDGET_TYPE_DOOR);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /useability {spell_id} [spell_tier]\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /useability {spell_id} [spell_tier]"
      ]
    },
    "33": {
      "symbol": "COMMAND_INFO",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2548,
      "body": "{\n\t\t\tbool check_self_trade = true;\n\t\t\tif(sep && sep->arg[1][0] && sep->IsNumber(1)){\n\t\t\t\tif(strcmp(sep->arg[0], \"inventory\") == 0){\n\t\t\t\t\tint32 item_index = atol(sep->arg[1]);\n\t\t\t\t\t\n\t\t\t\t\tLogWrite(COMMAND__DEBUG, 5, \"Command\", \"/info inventory item original index %u\", item_index);\n\t\t\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(item_index);\n\t\t\t\t\tif(item){\n\t\t\t\t\t\tif (item->IsCollectable() && client->SendCollectionsForItem(item))\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\n\t\t\t\t\t\tEQ2Packet* app = 0;\n\t\t\t\t\t\tif(client->GetVersion() <= 561) {\n\t\t\t\t\t\t\tapp = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tapp = item->serialize(client->GetVersion(), (!item->GetItemScript() || !lua_interface), client->GetPlayer());\n\t\t\t\t\t\t}\n\t\t\t\t\t\t                  \n\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\tif(item->GetItemScript() && lua_interface)\n\t\t\t\t\t\t\tlua_interface->RunItemScript(item->GetItemScript(), \"examined\", item, client->GetPlayer());\n\t\t\t\t\t\telse if(item->generic_info.offers_quest_id > 0){                                                                            \n\t\t\t\t\t\t\tQuest* quest = master_quest_list.GetQuest(item->generic_info.offers_quest_id, false);\n\t\t\t\t\t\t\tif(quest && client->GetPlayer()->HasQuestBeenCompleted(item->generic_info.offers_quest_id) == 0 && client->GetPlayer()->HasActiveQuest(item->generic_info.offers_quest_id) == 0)\n\t\t\t\t\t\t\t\tclient->AddPendingQuest(new Quest(quest));                                                                           \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info inventory: Unknown Index: %u\", item_index);\n\t\t\t\t}\n\t\t\t\telse if(strcmp(sep->arg[0], \"equipment\") == 0){\n\t\t\t\t\tint32 item_index = client->GetPlayer()->ConvertSlotFromClient(atol(sep->arg[1]), client->GetVersion());\n\t\t\t\t\tItem* item = client->GetPlayer()->GetEquipmentList()->GetItem(item_index);\n\t\t\t\t\tif(item){\n\t\t\t\t\t\tEQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\tif(item->GetItemScript() && lua_interface)\n\t\t\t\t\t\t\tlua_interface->RunItemScript(item->GetItemScript(), \"examined\", item, client->GetPlayer());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info equipment: Unknown Index: %u\", item_index);\n\t\t\t\t}\n\t\t\t\telse if(strcmp(sep->arg[0], \"appearance\") == 0){\n\t\t\t\t\tint32 item_index = client->GetPlayer()->ConvertSlotFromClient(atol(sep->arg[1]), client->GetVersion());\n\t\t\t\t\tItem* item = client->GetPlayer()->GetAppearanceEquipmentList()->GetItem(item_index);\n\t\t\t\t\tif(item){\n\t\t\t\t\t\tEQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\tif(item->GetItemScript() && lua_interface)\n\t\t\t\t\t\t\tlua_interface->RunItemScript(item->GetItemScript(), \"examined\", item, client->GetPlayer());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info appearance: Unknown Index: %u\", item_index);\n\t\t\t\t}\n\t\t\t\telse if(strcmp(sep->arg[0], \"item\") == 0 || strcmp(sep->arg[0], \"merchant\") == 0 || strcmp(sep->arg[0], \"store\") == 0 || strcmp(sep->arg[0], \"buyback\") == 0 || strcmp(sep->arg[0], \"consignment\") == 0){\n\t\t\t\t\tint64 item_id = strtoull(sep->arg[1], NULL, 0);\n\t\t\t\t\tItem* item = nullptr;\n\t\t\t\t\t\n\t\t\t\t\tif (strcmp(sep->arg[0], \"store\") == 0)\n\t\t\t\t\t\titem = client->GetPlayer()->item_list.GetVaultItemFromUniqueID(item_id, true);\n\t\t\t\t\telse\n\t\t\t\t\t\titem = master_item_list.GetItem(item_id);\n\t\t\t\t\t\n\t\t\t\t\tif(!item && client->GetMerchantTransactionID() && strcmp(sep->arg[0], \"merchant\") == 0) {\n\t\t\t\t\t\tSpawn* merchant = client->GetPlayer()->GetZone()->GetSpawnByID(client->GetMerchantTransactionID());\n\t\t\t\t\t\tif(merchant && merchant->GetHouseCharacterID() && merchant->GetPickupUniqueItemID()) {\n\t\t\t\t\t\t\tif(auto itemInfo = broker.GetActiveItem(merchant->GetHouseCharacterID(), item_id)) {\n\t\t\t\t\t\t\t\titem = master_item_list.GetItem(itemInfo->item_id);\n\t\t\t\t\t\t\t\tif(item) {\n\t\t\t\t\t\t\t\t\tEQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(!item && strcmp(sep->arg[0], \"consignment\") == 0) {\n\t\t\t\t\t\tclient->SendSellerItemByItemUniqueId(item_id);\n\t\t\t\t\t}\n\t\t\t\t\telse if(item){\n\t\t\t\t\t\tEQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info item|merchant|store|buyback|consignment: Unknown Item ID: %u (full arguments %s)\", item_id, sep->argplus[0]);\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"spell\") == 0) {\n\t\t\t\t\tsint32 spell_id = atol(sep->arg[1]);\n\t\t\t\t\tint8 tier = atoi(sep->arg[3]);\n\t\t\t\t\tEQ2Packet* outapp = master_spell_list.GetSpellPacket(spell_id, tier, client, true, 0x2A);\n\t\t\t\t\tif (outapp)\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info spell: Unknown Spell ID and/or Tier, ID: %u, Tier: %i\", spell_id, tier);\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"achievement\") == 0) {\n\t\t\t\t\tsint32 spell_id = atol(sep->arg[2]);\n\t\t\t\t\t\n\t\t\t\t\tint8 group = atoi(sep->arg[1]);\n\t\t\t\t\tAltAdvanceData* data = 0;\n\t\t\t\t\tSpellBookEntry* spellentry = 0;\n\t\t\t\t\tint8 tier = client->GetPlayer()->GetSpellTier(spell_id);\n\t\t\t\t\n\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info achievement: AA Spell ID and/or Tier, ID: %u, Group: %i\", spell_id, group);\n\t\t\t\t\tEQ2Packet* outapp = master_spell_list.GetAASpellPacket(spell_id, tier, client, true, 0x45);\n\t\t\t\t\tif (outapp)\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info achievement: Unknown Spell ID and/or Tier, ID: %u, Tier: %i\", spell_id, group);\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"spellbook\") == 0) {\n\t\t\t\t\tsint32 spell_id = atol(sep->arg[1]);\n\t\t\t\t\tint32 tier = atoi(sep->arg[2]);\n\t\t\t\t\tif (tier > 255) {\n\t\t\t\t\t\tSpellBookEntry* ent = client->GetPlayer()->GetSpellBookSpell(spell_id);\n\t\t\t\t\t\tif (ent)\n\t\t\t\t\t\t\ttier = ent->tier;\n\t\t\t\t\t}\n\t\t\t\t\tEQ2Packet* outapp = master_spell_list.GetSpellPacket(spell_id, (int8)tier, client, true, 0x2A);\n\t\t\t\t\tif (outapp)\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info spellbook: Unknown Spell ID and/or Tier, ID: %u, Tier: %i\", spell_id, tier);\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"recipe\") == 0) {\n\t\t\t\t\tsint32 recipe_id = atol(sep->arg[1]);\n\t\t\t\t\tEQ2Packet* outapp = master_recipe_list.GetRecipePacket(recipe_id, client, true, 0x2C);\n\t\t\t\t\tif(outapp)\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info recipe: Unknown Recipe ID: %u\", recipe_id);\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"recipe_product\") == 0) {\n\t\t\t\t\tsint32 recipe_id = atol(sep->arg[1]);\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\tPlayerRecipeList* prl = client->GetPlayer()->GetRecipeList();\n\t\t\t\t\tRecipe* recipe = nullptr;\n\t\t\t\t\tif ((recipe = prl->GetRecipe(recipe_id)) && recipe->GetProductID()) {\n\t\t\t\t\t\tif (recipe->GetProductID() > 0) {\n\t\t\t\t\t\t\tItem* item = master_item_list.GetItem(recipe->GetProductID());\n\t\t\t\t\t\t\tif(item){\n\t\t\t\t\t\t\t\tEQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info recipe_product: Unknown Item ID: %u\", recipe->GetProductID());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info recipe_product: recipe->GetProductID() has value 0 for recipe id %u.\", recipe_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info recipe_product: with recipe id %u not found (recipe missing or no product in stage 1 assigned).\", recipe_id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"maintained\") ==0) {\n\t\t\t\t\tint32 slot = atol(sep->arg[1]);\n\t\t\t\t\tint32 spell_id = atol(sep->arg[2]);\n\t\t\t\t\tLogWrite(COMMAND__DEBUG, 5, \"Command\", \"/info maintained: Spell ID - Slot: %u unknown: %u\", slot, spell_id);\n\t\t\t\t\t                                                          \n\t\t\t\t\tMaintainedEffects* info = client->GetPlayer()->GetMaintainedSpellBySlot(slot);\n\t\t\t\t\tEQ2Packet* outapp = master_spell_list.GetSpellPacket(info->spell_id, info->tier, client, true, 0x00);\n\t\t\t\t\tif(outapp)\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info maintained: Unknown Spell ID: %u\", spell_id);\n\t\t\t\t}\n\t\t\t\telse if (strcmp(sep->arg[0], \"effect\") == 0) {\n\t\t\t\t\tint32 spell_id = atol(sep->arg[1]);\n\t\t\t\t\tLogWrite(COMMAND__DEBUG, 5, \"Command\", \"/info effect: Spell ID: %u\", spell_id);\n\t\t\t\t\tint8 tier = client->GetPlayer()->GetSpellTier(spell_id);\n\t\t\t\t\tint8 type = 0;\n\t\t\t\t\tif (client->GetVersion() <= 561)\n\t\t\t\t\t\ttype = 1;\n\t\t\t\t\tEQ2Packet* outapp = master_spell_list.GetSpecialSpellPacket(spell_id, tier, client, true, type);\n\t\t\t\t\tif (outapp){\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"/info effect: Unknown Spell ID: %u\", spell_id);\n\t\t\t\t}\n\t\t\t\telse if(sep->IsNumber(1) && ((strncasecmp(\"your_trade\", sep->arg[0], 10) == 0) ||\n\t\t\t\t\t\t(strncasecmp(\"their_trade\", sep->arg[0], 11) == 0)))\n\t\t\t\t{\n\t\t\t\t\tif(strncasecmp(\"t\", sep->arg[0], 1) == 0) {                              \n\t\t\t\t\t\tcheck_self_trade = false;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tint8 slot_id = atoul(sep->arg[1]);\n\t\t\t\t\tif(client->GetPlayer()->trade) {\n\t\t\t\t\t\tEntity* traderToCheck = client->GetPlayer();\n\t\t\t\t\t\tif(!check_self_trade) {\n\t\t\t\t\t\t\ttraderToCheck = client->GetPlayer()->trade->GetTradee(client->GetPlayer());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tItem* tradeItem = client->GetPlayer()->trade->GetTraderSlot(traderToCheck, slot_id);\n\t\t\t\t\t\tif(tradeItem != nullptr) {\n\t\t\t\t\t\t\tEQ2Packet* app = tradeItem->serialize(client->GetVersion(), true, client->GetPlayer(), true, 0, 0, client->GetVersion() > 561 ? true : false);\n\t\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (sep && strcmp(sep->arg[0], \"overflow\") == 0) {\n\t\t\t\tItem* item = player->item_list.GetOverflowItem();\n\t\t\t\tif(item) {\n\t\t\t\t\tEQ2Packet* app = item->serialize(client->GetVersion(), true, client->GetPlayer());\n\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tLogWrite(COMMAND__ERROR, 0,\"Command\", \"/info overflow: Unable to retrieve an overflow item.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /info {inventory|equipment|spell} {id}\");\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/info inventory item original index %u",
        "/info inventory: Unknown Index: %u",
        "/info equipment: Unknown Index: %u",
        "/info appearance: Unknown Index: %u",
        "/info item|merchant|store|buyback|consignment: Unknown Item ID: %u (full arguments %s)",
        "/info spell: Unknown Spell ID and/or Tier, ID: %u, Tier: %i",
        "/info achievement: AA Spell ID and/or Tier, ID: %u, Group: %i",
        "/info achievement: Unknown Spell ID and/or Tier, ID: %u, Tier: %i",
        "/info spellbook: Unknown Spell ID and/or Tier, ID: %u, Tier: %i",
        "/info recipe: Unknown Recipe ID: %u",
        "/info recipe_product: Unknown Item ID: %u",
        "/info recipe_product: recipe->GetProductID() has value 0 for recipe id %u.",
        "/info recipe_product: with recipe id %u not found (recipe missing or no product in stage 1 assigned).",
        "/info maintained: Spell ID - Slot: %u unknown: %u",
        "/info maintained: Unknown Spell ID: %u",
        "/info effect: Spell ID: %u",
        "/info effect: Unknown Spell ID: %u",
        "/info overflow: Unable to retrieve an overflow item.",
        "Usage:  /info {inventory|equipment|spell} {id}"
      ]
    },
    "275": {
      "symbol": "COMMAND_USE_EQUIPPED_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2764,
      "body": "{\n\t\t\tuint32 slot_id_val = 0;\n\t\t\tif (sep && sep->GetUInt(0, slot_id_val)){\n\t\t\t\tint16 slot_id = 0;\n\t\t\t\tif(client->GetVersion() > 561) {\n\t\t\t\t\tslot_id = (int16)slot_id_val;\n\t\t\t\t}\n\t\t\t\telse if(sep->argplus[0][0] != '\\0') {                                                                                                                                                           \n\t\t\t\t\tconst char* bufPtr = sep->argplus[0];\n\t\t\t\t\tslot_id = client->GetPlayer()->ConvertSlotFromClient(atoul(bufPtr), client->GetVersion());\n\t\t\t\t}\n\t\t\t\tItem* item = player->GetEquipmentList()->GetItem(slot_id);\n\t\t\t\tif (item && item->generic_info.usable && item->GetItemScript()) {\n\t\t\t\t\tclient->UseItem(item, player->GetTarget(), true, slot_id);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "117": {
      "symbol": "COMMAND_USE_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2782,
      "body": "{\n\t\t\tuint32 item_index_val = 0;\n\t\t\tif (sep && sep->GetUInt(0, item_index_val)) {\n\t\t\t\tint32 item_index = (int32)item_index_val;\n\t\t\t\tItem* item = player->item_list.GetItemFromIndex(item_index);\n\t\t\t\tclient->UseItem(item, client->GetPlayer()->GetTarget() ? client->GetPlayer()->GetTarget() : client->GetPlayer());\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "266": {
      "symbol": "COMMAND_SCRIBE_SCROLL_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2791,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0)) {\n\t\t\t\tItem* item = player->item_list.GetItemFromUniqueID(strtoull(sep->arg[0], nullptr, 10));\n\t\t\t\tif (item) {\n\t\t\t\t\tif(player->item_list.HasPendingItemUse(item)) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot scribe an item currently in use.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tLogWrite(ITEM__DEBUG, 0, \"Items\", \"ITEM ID: %u\", item->details.item_id);\n\n\t\t\t\t\tif(item->generic_info.item_type == 6) {\n\t\t\t\t\t\tif (!item->skill_info) {\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"This ability scroll has invalid spell data and cannot be scribed.\");\n\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Skill Info is not set for scroll item %s (%u).\", item->name.c_str(), item->details.item_id);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tSpell* spell = master_spell_list.GetSpell(item->skill_info->spell_id, item->skill_info->spell_tier);\n\t\t\t\t\t\tsint32 old_slot = 0;\n\t\t\t\t\t\tif (spell) {\n\t\t\t\t\t\t\tif(!spell->ScribeAllowed(client->GetPlayer(), item)) {\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You do not meet one of the class, level, or skill requirements to scribe this ability.\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tint16 tier_up = player->GetTierUp(spell->GetSpellTier());\n\t\t\t\t\t\t\tif (rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, RequirePreviousTierScribe)->GetInt8() && !player->HasSpell(spell->GetSpellID(), tier_up, false, true))\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You have not scribed the required previous version of this ability.\");\n\t\t\t\t\t\t\telse if (!player->HasSpell(spell->GetSpellID(), spell->GetSpellTier(), true)) {\n\t\t\t\t\t\t\t\told_slot = player->GetSpellSlot(spell->GetSpellID());\n\t\t\t\t\t\t\t\tif (old_slot < 0)\n\t\t\t\t\t\t\t\t\told_slot = player->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type);\n\t\t\t\t\t\t\t\tif (old_slot < 0) {\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"No free slot is available in that knowledge book.\");\n\t\t\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\",\n\t\t\t\t\t\t\t\t\t\t\"Unable to scribe spell %u for %s: no free knowledge-book slot is available.\",\n\t\t\t\t\t\t\t\t\t\tspell->GetSpellID(), player->GetName());\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tplayer->RemoveSpellBookEntry(spell->GetSpellID());\n\t\t\t\t\t\t\t\tplayer->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\t\t\t\t\t\tplayer->UnlockSpell(spell);\n\t\t\t\t\t\t\t\tclient->SendSpellUpdate(spell);\n\t\t\t\t\t\t\t\tdatabase.DeleteItem(client->GetCharacterID(), item, 0);\n\t\t\t\t\t\t\t\tplayer->item_list.RemoveItem(item, true);\n\t\t\t\t\t\t\t\tclient->QueuePacket(player->GetSpellBookUpdatePacket(client->GetVersion()));\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillSlotMappings(client);\n\t\t\t\t\t\t\t\tclient->QueuePacket(player->SendInventoryUpdate(client->GetVersion()));\n\n\t\t\t\t\t\t\t\t                                                                    \n\t\t\t\t\t\t\t\tEQ2Packet* app = spell->SerializeSpell(client, false, false);\n\t\t\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unknown spell ID: %u and tier: %u\", item->skill_info->spell_id, item->skill_info->spell_tier);\n\t\t\t\t\t}\n\t\t\t\t\telse if(item->generic_info.item_type == 7){\n\t\t\t\t\t\t\tif(item->recipebook_info) {\n\t\t\t\t\t\t\tLogWrite(TRADESKILL__DEBUG, 0, \"Recipe\", \"Scribing recipe book %s (%u) for player %s.\", item->name.c_str(), item->recipebook_info->recipe_id, player->GetName());\n\t\t\t\t\t\t\tclient->AddRecipeBookToPlayer(item->recipebook_info->recipe_id, item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"Recipe book is unavailable! Report to admin recipe id %u could not be retrieved.\", item->recipebook_info ? item->recipebook_info->recipe_id : 0);\n\t\t\t\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Recipe Book %u could not be retrieved for item %s.\", item->recipebook_info ? item->recipebook_info->recipe_id : 0, item->name.c_str());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Recipe Book Info is not set for item %s.\", item->name.c_str());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unknown unique item ID: %s\", sep->arg[0]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You have not scribed the required previous version of this ability."
      ]
    },
    "25": {
      "symbol": "COMMAND_SUMMONITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2865,
      "body": "{\n\t\t\tif (sep && sep->IsNumber(0)) {\n\t\t\t\tint32 item_id = atol(sep->arg[0]);\n\t\t\t\tint32 quantity = 1;\n\t\t\t\t\n\t\t\t\tif (sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\tquantity = atoi(sep->arg[1]);\n\t\t\t\t\n\t\t\t\tif (sep->arg[2] && strncasecmp(sep->arg[2], \"bank\", 4) == 0) {\n\t\t\t\t\tclient->AddItemToBank(item_id,quantity);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->AddItem(item_id, quantity);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /summonitem {item_id} [quantity] or\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /summonitem {item_id} {quantity} [location] where location = bank\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /summonitem {item_id} [quantity] or",
        "Usage: /summonitem {item_id} {quantity} [location] where location = bank"
      ]
    },
    "30": {
      "symbol": "COMMAND_COLLECTION_ADDITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2886,
      "body": "{\n\t\t\t                                      \n\t\t\tif (sep && sep->arg[0] && sep->arg[1] && sep->IsNumber(0) && sep->IsNumber(1)) {\n\t\t\t\tItem *item = client->GetPlayer()->GetPlayerItemList()->GetItemFromIndex(atoul(sep->arg[1]));\n\t\t\t\tif (item)\n\t\t\t\t\tclient->HandleCollectionAddItem(atoul(sep->arg[0]), item);\n\t\t\t\telse\n\t\t\t\t\tLogWrite(COLLECTION__ERROR, 0, \"Collect\", \"Error in 'COMMAND_COLLECTION_ADDITEM'. Unable to get item from player '%s' at index %u\", client->GetPlayer()->GetName(), atoul(sep->arg[0]));\n\t\t\t}\n\t\t\telse\n\t\t\t\tLogWrite(COLLECTION__ERROR, 0, \"Collect\", \"Received command 'COMMAND_COLLECTION_ADDITEM' with unhandeled argument types\");\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "31": {
      "symbol": "COMMAND_COLLECTION_FILTER_MATCHITEM",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2899,
      "body": "{\n\t\t\t                      \n\t\t\tprintf(\"COMMAND_COLLECTION_FILTER_MATCHITEM:\\n\");\n\t\t\tint i = 0;\n\t\t\twhile (sep->arg[i] && sep->arg[i][0] != '\\0') {\n\t\t\t\tprintf(\"\\t%u: %s\\n\", i, sep->arg[i]);\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": []
    },
    "523": {
      "symbol": "COMMAND_WAYPOINT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2909,
      "body": "{\n\t\t\tbool success = false;\n\t\t\tclient->ClearWaypoint();\n\t\t\t    float x, y, z;\n\t\t\tif (sep && sep->IsNumber(0) && sep->IsNumber(1) && sep->IsNumber(2)) {\n\t\t\t\tif (!client->ShowPathToTarget(atof(sep->arg[0]), atof(sep->arg[1]), atof(sep->arg[2]), 0))\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid coordinates given\");\n\t\t\t}\n\t\t\telse if ( client->GetAdminStatus() > 100 && cmdTarget ) {\n\t\t\t\tif (!client->ShowPathToTarget(cmdTarget->GetX(), cmdTarget->GetY(), cmdTarget->GetZ(), 0))\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid coordinates given\");\n\t\t\t}\n\t\t\telse if(sep && sep->arg[0]) {\n\t\t\t\t                               \n\t\t\t\tstd::stringstream ss(sep->argplus[0]);\n\t\t\t\tfloat x,y,z;\n\t\t\t\t                   \n\t\t\t\tchar comma;                      \n\t\t\t\tif ((ss >> x >> comma >> y >> comma >> z) && ss.eof()) {\n\t\t\t\t\tif (!client->ShowPathToTarget(x, y, z, 0))\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid coordinates given\");\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Usage: /waypoint x, y, z\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Usage: /waypoint x y z\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /waypoint x, y, z",
        "Usage: /waypoint x y z"
      ]
    },
    "41": {
      "symbol": "COMMAND_WHO",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2940,
      "body": "{\n\t\t\tconst char* who = 0;\n\t\t\tif(sep && sep->arg[0]){\n\t\t\t\t                          \n\t\t\t\twho = sep->argplus[0];\n\t\t\t\t                      \n\t\t\t}\n\t\t\tzone_list.ProcessWhoQuery(who, client);\n\t\t\tbreak;\n\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "53": {
      "symbol": "COMMAND_SELECT_JUNCTION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2950,
      "body": "{\n\t\t\t                                                                                                  \n\t\t\t                                        \n\t\t\tint32 choice = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tchoice = atoul(sep->arg[0]);\n\t\t\tif(!client->GetPlayer()->Alive()){                                    \n\t\t\t\tclient->HandlePlayerRevive(choice);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "40": {
      "symbol": "COMMAND_SPAWN_MOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 2961,
      "body": "{\n\t\t\tif (cmdTarget && cmdTarget->IsPlayer() == false) {\n\t\t\t\tPacketStruct* packet = configReader.getStruct(\"WS_MoveObjectMode\", client->GetVersion());\n\t\t\t\tif (packet) {\n\t\t\t\t\tfloat unknown2_3 = 0;\n\t\t\t\t\tint8 placement_mode = 0;\n\t\t\t\t\tclient->SetSpawnPlacementMode(Client::ServerSpawnPlacementMode::DEFAULT);\n\t\t\t\t\tif (sep && sep->arg[0][0]) {\n\t\t\t\t\t\tif (strcmp(sep->arg[0], \"wall\") == 0) {\n\t\t\t\t\t\t\tplacement_mode = 2;\n\t\t\t\t\t\t\tunknown2_3 = 150;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (strcmp(sep->arg[0], \"ceiling\") == 0)\n\t\t\t\t\t\t\tplacement_mode = 1;\n\t\t\t\t\t\telse if (strcmp(sep->arg[0], \"openheading\") == 0 && cmdTarget->IsWidget())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"[PlacementMode] WIDGET OPEN HEADING MODE\");\n\t\t\t\t\t\t\tclient->SetSpawnPlacementMode(Client::ServerSpawnPlacementMode::OPEN_HEADING);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (strcmp(sep->arg[0], \"closeheading\") == 0 && cmdTarget->IsWidget())\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"[PlacementMode] WIDGET CLOSE HEADING MODE\");\n\t\t\t\t\t\t\tclient->SetSpawnPlacementMode(Client::ServerSpawnPlacementMode::CLOSE_HEADING);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (strcmp(sep->arg[0], \"myloc\") == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (cmdTarget->GetSpawnLocationPlacementID() < 1) {\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"[PlacementMode] Spawn %s cannot be moved it is not assigned a spawn location placement id.\", cmdTarget->GetName());\n\t\t\t\t\t\t\t\tsafe_delete(packet);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcmdTarget->SetX(client->GetPlayer()->GetX(), true);\n\t\t\t\t\t\t\tcmdTarget->SetY(client->GetPlayer()->GetY(), true);\n\t\t\t\t\t\t\tcmdTarget->SetZ(client->GetPlayer()->GetZ(), true);\n\t\t\t\t\t\t\tcmdTarget->SetHeading(client->GetPlayer()->GetHeading(), true);\n\n\t\t\t\t\t\t\tif (database.UpdateSpawnLocationSpawns(cmdTarget))\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"[PlacementMode] Spawn %s placed at your location.  Updated spawn_location_placement for spawn.\", cmdTarget->GetName());\n\t\t\t\t\t\t\tsafe_delete(packet);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpacket->setDataByName(\"placement_mode\", placement_mode);\n\t\t\t\t\tpacket->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(cmdTarget));\n\t\t\t\t\tpacket->setDataByName(\"model_type\", cmdTarget->GetModelType());\n\t\t\t\t\tpacket->setDataByName(\"unknown\", 1);       \n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 1);         \n\t\t\t\t\tpacket->setDataByName(\"unknown2\", .5, 1);         \n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 3, 2);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", unknown2_3, 3);\n\t\t\t\t\tpacket->setDataByName(\"max_distance\", 500);\n\t\t\t\t\tpacket->setDataByName(\"CoEunknown\", 0xFFFFFFFF);\n\t\t\t\t\tclient->QueuePacket(packet->serialize());\n\t\t\t\t\tsafe_delete(packet);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /spawn move (wall OR ceiling)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Moves a spawn anywhere you like.  Optionally wall/ceiling can be provided to place wall/ceiling items.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /spawn move (wall OR ceiling)",
        "Moves a spawn anywhere you like.  Optionally wall/ceiling can be provided to place wall/ceiling items."
      ]
    },
    "19": {
      "symbol": "COMMAND_HAIL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3024,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && spawn->GetTargetable())\n\t\t\t{\n\t\t\t\tchar tmp[75] = {0};\n\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"Hail, %s\", spawn->GetName());\n\n\t\t\t\tbool show_bubble = true;\n\n\t\t\t\tif (spawn->IsNPC())\n\t\t\t\t\tshow_bubble = false;\n\t\t\t\tclient->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SAY, tmp, HEAR_SPAWN_DISTANCE, 0, show_bubble, client->GetPlayer()->GetCurrentLanguage());\n\t\t\t\tif(spawn->IsPlayer() == false && spawn->Alive() && spawn->GetDistance(client->GetPlayer()) < rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spawn, HailDistance)->GetInt32()){\n\t\t\t\t\tif(spawn->IsNPC() && ((NPC*)spawn)->EngagedInCombat())\n\t\t\t\t\t\tspawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_HAILED_BUSY, client->GetPlayer());\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tbool pauseRunback = false;\n\t\t\t\t\t\t                                                                                \n\t\t\t\t\t\tif(spawn->IsNPC() && (spawn->HasMovementLoop() || spawn->HasMovementLocations()))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t((NPC*)spawn)->StartRunback();\n\t\t\t\t\t\t\tpauseRunback = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(spawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_HAILED, client->GetPlayer()) && pauseRunback)\n\t\t\t\t\t\t\tspawn->PauseMovement(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spawn, HailMovementPause)->GetInt32());\n\t\t\t\t\t\telse if(spawn->IsNPC() && pauseRunback)\n\t\t\t\t\t\t\t((NPC*)spawn)->ClearRunback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstring tmp = \"Hail\";\n\t\t\t\tclient->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SAY, tmp.c_str(), HEAR_SPAWN_DISTANCE, 0, true, client->GetPlayer()->GetCurrentLanguage());\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "7": {
      "symbol": "COMMAND_SAY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3063,
      "body": "{\n\t\t\tif (sep && sep->arg[0][0]) {\n\t\t\t\tclient->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SAY, sep->argplus[0], HEAR_SPAWN_DISTANCE, 0, true, client->GetPlayer()->GetCurrentLanguage());\n\t\t\t\tif (cmdTarget && !(cmdTarget->IsPlayer()))\n\t\t\t\t\tclient->GetCurrentZone()->CallSpawnScript(cmdTarget, SPAWN_SCRIPT_HEAR_SAY, client->GetPlayer(), sep->argplus[0]);\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /say {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /say {message}"
      ]
    },
    "8": {
      "symbol": "COMMAND_TELL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3073,
      "body": "{\n\t\t\tif(sep && sep->arg[0] && sep->argplus[1]){\n\t\t\t\tif(!zone_list.HandleGlobalChatMessage(client, sep->arg[0], CHANNEL_PRIVATE_TELL, sep->argplus[1], 0, client->GetPlayer()->GetCurrentLanguage()))\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED,\"Unable to find client %s\",sep->arg[0]);\n\t\t\t}else\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /tell {character_name} {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /tell {character_name} {message}"
      ]
    },
    "10": {
      "symbol": "COMMAND_SHOUT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3081,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\tclient->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_SHOUT, sep->argplus[0], 0, 0, true, client->GetPlayer()->GetCurrentLanguage());\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /shout {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /shout {message}"
      ]
    },
    "11": {
      "symbol": "COMMAND_AUCTION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3088,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\tclient->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_AUCTION, sep->argplus[0], 0, 0, true, client->GetPlayer()->GetCurrentLanguage());\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /auction {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /auction {message}"
      ]
    },
    "12": {
      "symbol": "COMMAND_OOC",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3095,
      "body": "{\n\t\t\t                                                                                                                           \n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\tzone_list.HandleGlobalChatMessage(client, 0, CHANNEL_OUT_OF_CHARACTER, sep->argplus[0], 0, client->GetPlayer()->GetCurrentLanguage());\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /ooc {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /ooc {message}"
      ]
    },
    "13": {
      "symbol": "COMMAND_EMOTE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3103,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\tclient->GetCurrentZone()->HandleChatMessage(client->GetPlayer(), 0, CHANNEL_EMOTE, sep->argplus[0]);\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /emote {action}\");\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /emote {action}"
      ]
    },
    "2": {
      "symbol": "COMMAND_RACE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3110,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0] && sep->IsNumber(0)){\n\t\t\t\tint requested_model_type = atoi(sep->arg[0]);\n\t\t\t\tint16 model_type = requested_model_type;\n\t\t\t\tif (requested_model_type == 0) {\n\t\t\t\t\tmodel_type = database.GetCharacterModelType(client->GetCharacterID());\n\t\t\t\t\tif (model_type == 0) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Unable to restore the character's default model type.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(sep->arg[1][0] && sep->IsNumber(1)){\n\t\t\t\t\tclient->GetPlayer()->GetInfoStruct()->set_race(atoi(sep->arg[1]));\n\t\t\t\t\tclient->GetPlayer()->SetRace(atoi(sep->arg[1]));\n\t\t\t\t\tclient->UpdateTimeStampFlag ( RACE_UPDATE_FLAG );\n\t\t\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\t\t}\n\t\t\t\tclient->GetPlayer()->SetModelType(model_type);\n\t\t\t\t                                                                                                                                              \n\t\t\t\t                              \n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /race {model type id|0} {race id}\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"{race id} is optional; 0 restores your saved model type.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /race {model type id|0} {race id}"
      ]
    },
    "71": {
      "symbol": "COMMAND_BANK_DEPOSIT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3137,
      "body": "{\n\t\t\tSpawn* banker = client->GetCurrentZone()->GetSpawnByID(client->GetBanker());\n\t\t\tif(banker && sep && sep->arg[0]){\n\t\t\t\tint64 amount = 0;\n\t\t\t\tstring deposit = string(sep->arg[0]);\n\t\t\t\tamount = atoi64(deposit.c_str());\n\t\t\t\tclient->BankDeposit(amount);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "72": {
      "symbol": "COMMAND_BANK_WITHDRAWAL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3147,
      "body": "{\n\t\t\tSpawn* banker = client->GetCurrentZone()->GetSpawnByID(client->GetBanker());\n\t\t\tif(banker && sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tint64 amount = 0;\n\t\t\t\tstring deposit = string(sep->arg[0]);\n\t\t\t\tamount = atoi64(deposit.c_str());\n\t\t\t\tclient->BankWithdrawal(amount);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "73": {
      "symbol": "COMMAND_BANK_CANCEL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3157,
      "body": "{\n\t\t\tSpawn* banker = cmdTarget;\n\t\t\tclient->Bank(banker, true);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "70": {
      "symbol": "COMMAND_BANK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3162,
      "body": "{\n\t\t\tLogWrite(PLAYER__DEBUG, 0, \"Players\", \"Open Player Personal Bank...\");\n\t\t\tSpawn* banker = cmdTarget;\n\t\t\tclient->Bank(banker);\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "282": {
      "symbol": "COMMAND_GUILD_BANK",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3168,
      "body": "{\n\t\t\tLogWrite(GUILD__DEBUG, 0, \"Guilds\", \"Open Guild Bank...\");\n\t\t\t                                                   \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This will eventually open the guild bank!\");\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "119": {
      "symbol": "COMMAND_START_MAIL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3174,
      "body": "{\n\t\t\tclient->SetMailTransaction(cmdTarget);\n\t\t\tclient->SendMailList();\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "123": {
      "symbol": "COMMAND_CANCEL_MAIL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3179,
      "body": "{\n\t\t\tclient->SetMailTransaction(0);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "120": {
      "symbol": "COMMAND_GET_MAIL_MESSAGE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3183,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->DisplayMailMessage(atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "124": {
      "symbol": "COMMAND_ADD_MAIL_PLAT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3188,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->AddMailCoin(0, 0, 0, atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "125": {
      "symbol": "COMMAND_ADD_MAIL_GOLD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3193,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->AddMailCoin(0, 0, atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "126": {
      "symbol": "COMMAND_ADD_MAIL_SILVER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3198,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->AddMailCoin(0, atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "127": {
      "symbol": "COMMAND_ADD_MAIL_COPPER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3203,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->AddMailCoin(atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "128": {
      "symbol": "COMMAND_SET_MAIL_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3208,
      "body": "{\n\t\t\tif(sep && sep->IsNumber(0) && sep->IsNumber(1))\n\t\t\t{\n\t\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(atoul(sep->arg[0]));\n\t\t\t\tif(item)\n\t\t\t\t{\n\t\t\t\t\tint16 quantity = atoul(sep->arg[1]);\n\t\t\t\t\tif(player->item_list.HasPendingItemUse(item)) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot mail an item currently in use.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(item->CheckFlag(NO_TRADE) || item->CheckFlag(ATTUNED) || item->CheckFlag(ARTIFACT) || item->CheckFlag2(HEIRLOOM))\n\t\t\t\t\t{\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(item->IsBag())\n\t\t\t\t\t{\n\t\t\t\t\t\tvector<Item*>* bag_items = player->GetPlayerItemList()->GetItemsInBag(item);\n\t\t\t\t\t\tif(bag_items && bag_items->size() > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED,\"You cannot mail a bag with items inside it.\");\n\t\t\t\t\t\t\tsafe_delete(bag_items);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsafe_delete(bag_items);\n\t\t\t\t\t}\n\t\t\t\t\tItem* itemtoadd = item;\n\t\t\t\t\tif(quantity > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(quantity > item->details.count)\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\tItem* tmpItem = new Item(item);\n\t\t\t\t\t\ttmpItem->details.count = quantity;\n\t\t\t\t\t\titemtoadd = tmpItem;\n\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\tif(client->AddMailItem(itemtoadd))\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->RemoveItem(item, quantity, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "130": {
      "symbol": "COMMAND_REMOVE_MAIL_PLAT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3253,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->RemoveMailCoin(0, 0, 0, atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "131": {
      "symbol": "COMMAND_REMOVE_MAIL_GOLD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3258,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->RemoveMailCoin(0, 0, atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "132": {
      "symbol": "COMMAND_REMOVE_MAIL_SILVER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3263,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->RemoveMailCoin(0, atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "133": {
      "symbol": "COMMAND_REMOVE_MAIL_COPPER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3268,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->RemoveMailCoin(atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "121": {
      "symbol": "COMMAND_TAKE_MAIL_ATTACHMENTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3273,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->TakeMailAttachments(atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "129": {
      "symbol": "COMMAND_CANCEL_SEND_MAIL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3278,
      "body": "{\n\t\t\tclient->ResetSendMail();\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "134": {
      "symbol": "COMMAND_DELETE_MAIL_MESSAGE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3282,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->DeleteMail(atoul(sep->arg[0]), true);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "122": {
      "symbol": "COMMAND_REPORT_SPAM",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3287,
      "body": "{\n\t\t\tLogWrite(MISC__TODO, 1, \"TODO\", \" received reportspam\\n\\t(%s, function: %s, line #: %i)\", __FILE__, __FUNCTION__, __LINE__);\n\t\t\tif (sep && sep->arg[0]) LogWrite(COMMAND__DEBUG, 0, \"Command\", \"%s\\n\", sep->argplus[0]);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "54": {
      "symbol": "COMMAND_KILL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3292,
      "body": "{\n\t\t\tSpawn* dead = 0;\n\t\t\tif (sep && sep->arg[0] && strncasecmp(sep->arg[0],\"self\",4)==0){\n\t\t\t\tdead=client->GetPlayer();\n\t\t\t\tclient->GetPlayer()->SetHP(0);\n\t\t\t\tclient->GetPlayer()->KillSpawn(dead);\n\t\t\t}else{\n\t\t\t\tdead= cmdTarget;\n\t\t\t\tif (dead && dead != client->GetPlayer() && dead->IsPlayer()) {\n\t\t\t\t\tClient* target_client = static_cast<Player*>(dead)->GetClient();\n\t\t\t\t\tif (target_client && target_client->GetAdminStatus() >= client->GetAdminStatus()) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You cannot use /kill on another player with equal or higher status.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(dead && dead->IsPlayer() == false){\n\t\t\t\t\tif(dead->IsNPC() && ((NPC*)dead)->Brain()) {\n\t\t\t\t\t\tclient->GetPlayer()->CheckEncounterState((Entity*)dead);\n\t\t\t\t\t\t((NPC*)dead)->Brain()->AddToEncounter(client->GetPlayer());\n\t\t\t\t\t\t((NPC*)dead)->AddTargetToEncounter(client->GetPlayer());\n\t\t\t\t\t\t((NPC*)dead)->Brain()->AddHate(client->GetPlayer(), 1);\n\t\t\t\t\t}\n\t\t\t\t\tdead->SetHP(0);\n\t\t\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0) && atoi(sep->arg[0]) == 1)\n\t\t\t\t\t\tclient->GetCurrentZone()->RemoveSpawn(dead, true, true, true, true, true);\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->GetPlayer()->KillSpawn(dead);\n\t\t\t\t}else{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /kill (self)\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Kills currently selected non-player target.\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Optionally, self may be used to kill yourself\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You cannot use /kill on another player with equal or higher status.",
        "Usage:  /kill (self)"
      ]
    },
    "3": {
      "symbol": "COMMAND_LEVEL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3327,
      "body": "{\n\t\t\tif(sep && sep->arg[ndx][0] && sep->IsNumber(0)){\n\t\t\t\tint16 new_level = atoi(sep->arg[ndx]);\n\t\t\t\tif (!client->GetPlayer()->CheckLevelStatus(new_level))\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You do not have the required status to level up anymore!\");\n\t\t\t\telse {\n\t\t\t\t\tif (new_level < 1)\n\t\t\t\t\t\tnew_level = 1;\n\t\t\t\t\t\n\t\t\t\t\tif (new_level > 255)\n\t\t\t\t\t\tnew_level = 255;\n\n\t\t\t\t\tclient->ChangeLevel(client->GetPlayer()->GetLevel(), new_level);\n\t\t\t\t}\n\t\t\t}else\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /level {new_level}\");\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "You do not have the required status to level up anymore!",
        "Usage: /level {new_level}"
      ]
    },
    "48": {
      "symbol": "COMMAND_SIT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3345,
      "body": "{\n\t\t\tif(client->GetPlayer()->GetHP() > 0){\n\t\t\t\tclient->QueuePacket(new EQ2Packet(OP_SitMsg, 0, 0));\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"You sit down.\");\n\t\t\t\tclient->GetPlayer()->set_character_flag(CF_IS_SITTING);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "49": {
      "symbol": "COMMAND_STAND",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3353,
      "body": "{\n\t\t\tif(client->GetPlayer()->GetHP() > 0){\n\t\t\t\tclient->QueuePacket(new EQ2Packet(OP_StandMsg, 0, 0));\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"You stand up.\");\n\t\t\t\tclient->GetPlayer()->reset_character_flag(CF_IS_SITTING);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "4": {
      "symbol": "COMMAND_CLASS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3361,
      "body": "{\n\t\t\tif(sep && sep->arg[ndx][0]){\n\t\t\t\tclient->GetPlayer()->SetPlayerAdventureClass(atoi(sep->arg[ndx]), true);\n\t\t\t}else\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage:  /class {class_id}\");\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /class {class_id}"
      ]
    },
    "57": {
      "symbol": "COMMAND_FLYMODE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3368,
      "body": "{\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tPrintSep(sep, \"COMMAND_FLYMODE\");\n\t\t\t\tint8 val = atoul(sep->arg[0]);\n\t\t\t\tClientPacketFunctions::SendFlyMode(client, val);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage ON: /flymode [1|2] 1 = fly, 2 = no clip\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage OFF: /flymode 0\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage ON: /flymode [1|2] 1 = fly, 2 = no clip",
        "Usage OFF: /flymode 0"
      ]
    },
    "66": {
      "symbol": "COMMAND_LOOT_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3380,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && spawn->IsEntity()){\n\t\t\t\tif (sep && sep->arg[0]) {\n\t\t\t\t\tif (!spawn->GetDatabaseID())\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"NOTE: Spawn has no database id to assign to loottables.\");\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (!spawn->IsNPC())\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"these /loot list [add/remove/clearall] sub-commands are only designed for an NPC.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tbool reloadLoot = false;\n\t\t\t\t\tif (!stricmp(sep->arg[0], \"remove\") && sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t{\n\t\t\t\t\t\tint32 loottable_id = atoul(sep->arg[1]);\n\t\t\t\t\t\tif (loottable_id > 0 && database.RemoveSpawnLootTable(spawn, loottable_id))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn %u loot table %u removed.\", spawn->GetDatabaseID(), loottable_id);\n\t\t\t\t\t\t\treloadLoot = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"/loot list remove [loottableid] - could not match any spawn_id entries against loottable_id %u.\", loottable_id);\n\t\t\t\t\t}\n\t\t\t\t\telse if (!stricmp(sep->arg[0], \"add\") && sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t{\n\n\t\t\t\t\t\tint32 loottable_id = atoul(sep->arg[1]);\n\t\t\t\t\t\tif (loottable_id > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdatabase.AddLootTableToSpawn(spawn, loottable_id);\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn %u loot table %u added.\", spawn->GetDatabaseID(), loottable_id);\n\t\t\t\t\t\t\treloadLoot = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/loot list add [loottableid] - cannot add a loottable id of 0.\");\n\t\t\t\t\t}\n\t\t\t\t\telse if (!stricmp(sep->arg[0], \"clearall\"))\n\t\t\t\t\t{\n\t\t\t\t\t\tif (database.RemoveSpawnLootTable(spawn, 0))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Spawn loot tables removed.\");\n\t\t\t\t\t\t\treloadLoot = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/loot list clearall - could not match any spawn_id entries in loottable_id.\");\n\t\t\t\t\t}\n\t\t\t\t\telse if (!stricmp(sep->arg[0], \"details\"))\n\t\t\t\t\t{\n\t\t\t\t\t\tspawn->LockLoot();\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Loot Window List:\");\n\t\t\t\t\t\tif (spawn->GetLootWindowList()->size() > 0) {\n\t\t\t\t\t\t\tstd::map<int32, bool>::iterator itr;\n\t\t\t\t\t\t\tfor (itr = spawn->GetLootWindowList()->begin(); itr != spawn->GetLootWindowList()->end(); itr++) {\n\t\t\t\t\t\t\t\tSpawn* looter = client->GetPlayer()->GetZone()->GetSpawnByID(itr->first);\n\t\t\t\t\t\t\t\tif (looter) {\n\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Looter: %s IsLootWindowOpen: %s, HasCompletedLootWindow: %s.\", looter->GetName(), itr->second ? \"NO\" : \"YES\", spawn->HasSpawnLootWindowCompleted(itr->first) ? \"YES\" : \"NO\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspawn->UnlockLoot();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/loot list argument not supported.\");\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/loot list add [loottableid] - add new loottable to spawn\");\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/loot list remove [loottableid] - remove existing loottable from spawn\");\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/loot list clearall - remove all loottables from spawn\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (reloadLoot)\n\t\t\t\t\t{\n\t\t\t\t\t\t\tdatabase.LoadSpawnLoot(spawn->GetZone().get(), spawn);\n\t\t\t\t\t\t\tif (spawn->IsNPC())\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tEntity* ent = (Entity*)spawn;\n\t\t\t\t\t\t\t\tent->SetLootCoins(0);\n\t\t\t\t\t\t\t\tent->ClearLoot();\n\t\t\t\t\t\t\t\tspawn->GetZone()->AddLoot((NPC*)spawn);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn %u active loot purged and reloaded.\", spawn->GetDatabaseID());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;                                                         \n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tvector<int32> loot_list = client->GetCurrentZone()->GetSpawnLootList(spawn->GetDatabaseID(), spawn->GetZone()->GetZoneID(), spawn->GetLevel(), race_types_list.GetRaceType(spawn->GetModelType()), spawn);\n\t\t\t\t\tif (loot_list.size() > 0) {\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s belongs to the following loot lists: \", spawn->GetName());\n\t\t\t\t\t\tvector<int32>::iterator list_itr;\n\t\t\t\t\t\tconst LootTable* table = 0;\n\t\t\t\t\t\tfor (list_itr = loot_list.begin(); list_itr != loot_list.end(); list_itr++) {\n\t\t\t\t\t\t\ttable = client->GetCurrentZone()->GetLootTable(*list_itr);\n\t\t\t\t\t\t\tif (table)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u - %s\", *list_itr, table->name.c_str());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Coins being carried: %u\", spawn->GetLootCoins());\n\t\t\t\t\tvector<Item*>* items = spawn->GetLootItems();\n\t\t\t\t\tif (items) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Spawn is carrying the following items: \");\n\t\t\t\t\t\tvector<Item*>::iterator itr;\n\t\t\t\t\t\tItem* item = 0;\n\t\t\t\t\t\tfor (itr = items->begin(); itr != items->end(); itr++) {\n\t\t\t\t\t\t\titem = *itr;\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u - %s\", item->details.item_id, item->name.c_str());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Spawn is not carrying any items.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "these /loot list [add/remove/clearall] sub-commands are only designed for an NPC.",
        "/loot list remove [loottableid] - could not match any spawn_id entries against loottable_id %u.",
        "/loot list add [loottableid] - cannot add a loottable id of 0.",
        "/loot list clearall - could not match any spawn_id entries in loottable_id.",
        "/loot list argument not supported.",
        "/loot list add [loottableid] - add new loottable to spawn",
        "/loot list remove [loottableid] - remove existing loottable from spawn",
        "/loot list clearall - remove all loottables from spawn"
      ]
    },
    "67": {
      "symbol": "COMMAND_LOOT_SETCOIN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3498,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && spawn->IsEntity() && sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tspawn->SetLootCoins(atoul(sep->arg[0]));\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Successfully set coins.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /loot setcoin {amount}\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /loot setcoin {amount}"
      ]
    },
    "68": {
      "symbol": "COMMAND_LOOT_ADDITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3508,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && spawn->IsEntity() && sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tint16 charges = 1;\n\t\t\t\tif(sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\tcharges = atoi(sep->arg[1]);\n\t\t\t\tspawn->AddLootItem(atoul(sep->arg[0]), charges);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Successfully added item.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /loot additem {item_id}\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /loot additem {item_id}"
      ]
    },
    "69": {
      "symbol": "COMMAND_LOOT_REMOVEITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3521,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && spawn->IsEntity() && sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tItem* item = spawn->LootItem(atoul(sep->arg[0]));\n\t\t\t\tlua_interface->SetLuaUserDataStale(item);\n\t\t\t\tsafe_delete(item);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Successfully removed item.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /loot removeitem {item_id}\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /loot removeitem {item_id}"
      ]
    },
    "277": {
      "symbol": "COMMAND_LOOT_CORPSE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3533,
      "body": "{\n\t\t\tif (cmdTarget && ((Entity*)cmdTarget)->IsNPC() && cmdTarget->Alive())\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Your target is not dead.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(cmdTarget && cmdTarget->IsEntity()){\n\t\t\t\tif (cmdTarget->GetDistance(client->GetPlayer()) <= rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, LootRadius)->GetFloat()){\n\t\t\t\t\tif (!rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, AutoDisarmChest)->GetBool() && command->handler == COMMAND_DISARM )\n\t\t\t\t\t\tclient->OpenChest(cmdTarget, true);\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->LootSpawnRequest(cmdTarget, rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, AutoDisarmChest)->GetBool());\n\t\t\t\t\tif (!(cmdTarget)->HasLoot()){\n\t\t\t\t\t\tif (((Entity*)cmdTarget)->IsNPC())\n\t\t\t\t\t\t\tclient->GetCurrentZone()->RemoveDeadSpawn(cmdTarget);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You are too far away to interact with that\");\n\t\t\t}\n\t\t\telse if(!cmdTarget || cmdTarget->GetHP() > 0)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid target.\");\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "510": {
      "symbol": "COMMAND_DISARM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3534,
      "body": "{\n\t\t\tif (cmdTarget && ((Entity*)cmdTarget)->IsNPC() && cmdTarget->Alive())\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Your target is not dead.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(cmdTarget && cmdTarget->IsEntity()){\n\t\t\t\tif (cmdTarget->GetDistance(client->GetPlayer()) <= rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, LootRadius)->GetFloat()){\n\t\t\t\t\tif (!rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, AutoDisarmChest)->GetBool() && command->handler == COMMAND_DISARM )\n\t\t\t\t\t\tclient->OpenChest(cmdTarget, true);\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->LootSpawnRequest(cmdTarget, rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, AutoDisarmChest)->GetBool());\n\t\t\t\t\tif (!(cmdTarget)->HasLoot()){\n\t\t\t\t\t\tif (((Entity*)cmdTarget)->IsNPC())\n\t\t\t\t\t\t\tclient->GetCurrentZone()->RemoveDeadSpawn(cmdTarget);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You are too far away to interact with that\");\n\t\t\t}\n\t\t\telse if(!cmdTarget || cmdTarget->GetHP() > 0)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid target.\");\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "60": {
      "symbol": "COMMAND_LOOT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3535,
      "body": "{\n\t\t\tif (cmdTarget && ((Entity*)cmdTarget)->IsNPC() && cmdTarget->Alive())\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Your target is not dead.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(cmdTarget && cmdTarget->IsEntity()){\n\t\t\t\tif (cmdTarget->GetDistance(client->GetPlayer()) <= rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, LootRadius)->GetFloat()){\n\t\t\t\t\tif (!rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, AutoDisarmChest)->GetBool() && command->handler == COMMAND_DISARM )\n\t\t\t\t\t\tclient->OpenChest(cmdTarget, true);\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->LootSpawnRequest(cmdTarget, rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Loot, AutoDisarmChest)->GetBool());\n\t\t\t\t\tif (!(cmdTarget)->HasLoot()){\n\t\t\t\t\t\tif (((Entity*)cmdTarget)->IsNPC())\n\t\t\t\t\t\t\tclient->GetCurrentZone()->RemoveDeadSpawn(cmdTarget);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You are too far away to interact with that\");\n\t\t\t}\n\t\t\telse if(!cmdTarget || cmdTarget->GetHP() > 0)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid target.\");\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "62": {
      "symbol": "COMMAND_RELOADSPAWNSCRIPTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3560,
      "body": "{\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Spawn Scripts....\");\n\t\t\tif (lua_interface)\n\t\t\t\tlua_interface->SetLuaSystemReloading(true);\n\t\t\tworld.ResetSpawnScripts();\n\t\t\tdatabase.LoadSpawnScriptData();\n\t\t\tif(lua_interface) {\n\t\t\t\tlua_interface->DestroySpawnScripts();\n\t\t\t\tlua_interface->SetLuaSystemReloading(false);\n\t\t\t}\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Success!\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "524": {
      "symbol": "COMMAND_RELOADREGIONSCRIPTS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3573,
      "body": "{\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Reloading Region Scripts....\");\n\t\t\tif(lua_interface) {\n\t\t\t\tlua_interface->DestroyRegionScripts();\n\t\t\t}\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Success!\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "63": {
      "symbol": "COMMAND_RELOADLUASYSTEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3581,
      "body": "{\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Attempting to reload entire LUA system....\");\n\n\t\t\tworld.SetReloadingSubsystem(\"LuaSystem\");\n\t\t\t\n\t\t\tif(lua_interface) {\n\t\t\t\tlua_interface->SetLuaSystemReloading(true);\n\t\t\t}\n\t\t\t\n\t\t\tzone_list.DeleteSpellProcess();\n\t\t\tif (lua_interface)\n\t\t\t\tlua_interface->DestroySpells();\n\t\t\tmaster_spell_list.Reload();\n\t\t\tzone_list.LoadSpellProcess();\n\t\t\tif(lua_interface){\n\t\t\t\tmap<Client*, int32> debug_clients = lua_interface->GetDebugClients();\n\t\t\t\tmap<Client*, int32>::iterator itr;\n\t\t\t\tfor(itr = debug_clients.begin(); itr != debug_clients.end(); itr++){\n\t\t\t\t\tif(lua_interface)\n\t\t\t\t\t\tlua_interface->UpdateDebugClients(itr->first);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tworld.ResetSpawnScripts();\n\t\t\tdatabase.LoadSpawnScriptData();\n\n\t\t\tworld.ResetZoneScripts();\n\t\t\tdatabase.LoadZoneScriptData();\n\t\t\t\n\t\t\tworld.ResetPlayerScripts();\n\t\t\tworld.LoadPlayerScripts();\n\n\t\t\tif(lua_interface) {\n\t\t\t\tlua_interface->DestroySpawnScripts();\n\t\t\t\tlua_interface->DestroyRegionScripts();\n\t\t\t\tlua_interface->DestroyQuests();\n\t\t\t\tlua_interface->DestroyItemScripts();\n\t\t\t\tlua_interface->DestroyZoneScripts();\n\t\t\t\tlua_interface->DestroyPlayerScripts();\n\t\t\t}\n\n\t\t\tint32 quest_count = database.LoadQuests();\n\n\t\t\tint32 spell_count = 0;\n\n\t\t\tif(lua_interface) {\n\t\t\t\tspell_count = database.LoadSpellScriptData();\n\t\t\t\tlua_interface->SetLuaSystemReloading(false);\n\t\t\t}\n\n\t\t\tworld.RemoveReloadingSubSystem(\"LuaSystem\");\n\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully loaded %u spell(s), %u quest(s).\", spell_count, quest_count);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "77": {
      "symbol": "COMMAND_DECLINE_QUEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3636,
      "body": "{\n\t\t\tint32 quest_id = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tquest_id = atoul(sep->arg[0]);\n\t\t\tif(quest_id > 0){\n\t\t\t\tclient->RemovePendingQuest(quest_id);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "78": {
      "symbol": "COMMAND_DELETE_QUEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3645,
      "body": "{\n\t\t\tint32 quest_id = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tquest_id = atoul(sep->arg[0]);\n\t\t\tclient->DeleteQuest(quest_id);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "76": {
      "symbol": "COMMAND_ACCEPT_QUEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3652,
      "body": "{\n\t\t\tint32 quest_id = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tquest_id = atoul(sep->arg[0]);\n\t\t\tif(quest_id > 0){\n\t\t\t\tclient->AcceptQuest(quest_id);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "6": {
      "symbol": "COMMAND_NAME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3661,
      "body": "{\n\t\t\tif(sep && sep->arg[0]){\n\t\t\t\tstd::string new_name = sep->argplus[0];\n\n\t\t\t\tswitch (database.CheckNameFilter(new_name.c_str())) {\n\t\t\t\tcase CREATESUCCESS_REPLY:{\n\t\t\t\t\tstd::string old_name = client->GetPlayer()->GetName();\n\n\t\t\t\t\tzone_list.RemoveClientFromMap(old_name, client);\n\t\t\t\t\tclient->GetPlayer()->GetInfoStruct()->set_name(new_name);\n\t\t\t\t\tzone_list.AddClientToMap(new_name, client);\n\t\t\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\t\t\tclient->GetPlayer()->info_changed = true;\n\t\t\t\t\tclient->GetPlayer()->GetZone()->AddChangedSpawn(client->GetPlayer());\n\t\t\t\t\tclient->UpdateTimeStampFlag ( NAME_UPDATE_FLAG );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase BADNAMELENGTH_REPLY:\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Name length is invalid, must be greater then 3 characters and less then 16.\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase NAMEINVALID_REPLY:\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Name is invalid, can only contain letters.\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase NAMETAKEN_REPLY:\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Name is already taken, please choose another.\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase NAMEFILTER_REPLY:\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Name failed the filter check.\");\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Unknown error while checking the name.\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Usage: /name {new_name}\");\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Name length is invalid, must be greater then 3 characters and less then 16.",
        "Usage: /name {new_name}"
      ]
    },
    "17": {
      "symbol": "COMMAND_GROUP",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3699,
      "body": "{\n\t\t\tif(sep && sep->arg[0])\n\t\t\t\tprintf(\"Group: %s\\n\",sep->argplus[0]);\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "14": {
      "symbol": "COMMAND_GROUPSAY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3704,
      "body": "{\n\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif(sep && sep->arg[0] && gmi) {\n\t\t\t\tworld.GetGroupManager()->GroupChatMessage(gmi->group_id, client->GetPlayer(), client->GetPlayer()->GetCurrentLanguage(), sep->argplus[0]);\n\t\t\t\tpeer_manager.SendPeersChannelMessage(gmi->group_id, std::string(client->GetPlayer()->GetName()), std::string(sep->argplus[0]), CHANNEL_GROUP_SAY, client->GetPlayer()->GetCurrentLanguage());\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "15": {
      "symbol": "COMMAND_GROUPINVITE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3712,
      "body": "{\n\t\t\tEntity* target = 0;\n\t\t\tClient* target_client = 0;\n\n\t\t\tif (client->GetPlayer()->GetGroupMemberInfo() && !client->GetPlayer()->GetGroupMemberInfo()->leader) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"You must be the group leader to invite.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t                                                                              \n\t\t\tif (sep && sep->arg[0] && sep->arg[0][0] != '\\0'){\n\t\t\t\ttarget_client = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\t\t\tif (target_client) {\n\t\t\t\t\tif (!target_client->IsConnected() || !target_client->IsReadyForSpawns())\n\t\t\t\t\t\ttarget = 0;\n\t\t\t\t\telse\n\t\t\t\t\t\ttarget = target_client->GetPlayer();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t                                                                                \n\t\t\tif (!target && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\t\ttarget = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\t\tif (target->IsPlayer()) {\n\t\t\t\t\ttarget_client = ((Player*)target)->GetClient();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tint8 result = world.GetGroupManager()->Invite(client->GetPlayer(), target);\n\t\t\t\n\t\t\tif (target && result == 0) {\n\t\t\t\tclient->Message(CHANNEL_COMMANDS, \"You invite %s to group with you.\", target->GetName());\n\t\t\t\tif (target_client) {\n\t\t\t\t\tclient->SendReceiveOffer(target_client, 1, std::string(client->GetPlayer()->GetName()), 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (result == 1)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"That player is already in a group.\");\n\t\t\telse if (result == 2)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"That player has been invited to another group.\");\n\t\t\telse if (result == 3)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Your group is already full.\");\n\t\t\telse if (result == 4)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"You have a pending invitation, cancel it first.\");\n\t\t\telse if (result == 5)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"You cannot invite yourself!\");\n\t\t\telse if (result == 6)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Could not locate the player.\");\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Group invite failed, unknown error!\");\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must be the group leader to invite."
      ]
    },
    "16": {
      "symbol": "COMMAND_GROUPDISBAND",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3765,
      "body": "{\n\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\n\t\t\tif (gmi && gmi->leader) {                                \n\t\t\t\t                                                                                                \n\t\t\t\tworld.GetGroupManager()->RemoveGroup(gmi->group_id);\n\t\t\t\tpeer_manager.sendPeersDisbandGroup(gmi->group_id);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "105": {
      "symbol": "COMMAND_GROUP_LEAVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3776,
      "body": "{\n\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\n\t\t\tif (gmi) {\n\t\t\t\tint32 group_id = gmi->group_id;\n\t\t\t\tworld.GetGroupManager()->RemoveGroupMember(group_id, client->GetPlayer());\n\t\t\t\tif (!world.GetGroupManager()->IsGroupIDValid(group_id)) {\n\t\t\t\t\t                                                                                                  \n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tworld.GetGroupManager()->GroupMessage(group_id, \"%s has left the group.\", client->GetPlayer()->GetName());\n\t\t\t\t}\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_GROUP_CHAT, \"You have left the group\");\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "108": {
      "symbol": "COMMAND_FRIEND_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3794,
      "body": "{\n\t\t\tstring name = \"\";\n\t\t\tif(sep && sep->arg[0] && sep->arg[0][0] != '\\0' && sep->arg[0][1] != '\\0')\n\t\t\t\tname = database.GetPlayerName(sep->arg[0]);\n\t\t\telse if(cmdTarget && cmdTarget->IsPlayer())\n\t\t\t\tname = string(cmdTarget->GetName());\n\t\t\tif(name.length() > 0){\n\t\t\t\tif(strcmp(name.c_str(), client->GetPlayer()->GetName()) != 0){\n\t\t\t\t\tif(client->GetPlayer()->IsIgnored(name.c_str())){\n\t\t\t\t\t\tclient->GetPlayer()->RemoveIgnore(name.c_str());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Removed ignore: %s\", name.c_str());\n\t\t\t\t\t\tclient->SendChatRelationship(3, name.c_str());\n\t\t\t\t\t}\n\t\t\t\t\tclient->GetPlayer()->AddFriend(name.c_str(), true);\n\t\t\t\t\tclient->SendChatRelationship(0, name.c_str());\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Added friend: %s\", name.c_str());\n\t\t\t\t\tif(client_lookups.Retain(zone_list.GetClientByCharName(name)))\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Friend: %s has logged in.\", name.c_str());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot be more friendly towards yourself!\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"That character does not exist.\");\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "109": {
      "symbol": "COMMAND_FRIEND_REMOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3820,
      "body": "{\n\t\t\tstring name = \"\";\n\t\t\tif(sep && sep->arg[0] && sep->arg[0][0] != '\\0' && sep->arg[0][1] != '\\0')\n\t\t\t\tname = database.GetPlayerName(sep->arg[0]);\n\t\t\telse if(cmdTarget && cmdTarget->IsPlayer())\n\t\t\t\tname = string(cmdTarget->GetName());\n\t\t\tif(name.length() > 0){\n\t\t\t\tclient->GetPlayer()->RemoveFriend(name.c_str());\n\t\t\t\tclient->SendChatRelationship(1, name.c_str());\n\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Removed friend: %s\", name.c_str());\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"That character does not exist.\");\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "110": {
      "symbol": "COMMAND_FRIENDS",
      "status": "no_op",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3835,
      "body": "{\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "111": {
      "symbol": "COMMAND_IGNORE_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3839,
      "body": "{\n\t\t\tstring name = \"\";\n\t\t\tif(sep && sep->arg[0] && sep->arg[0][0] != '\\0' && sep->arg[0][1] != '\\0')\n\t\t\t\tname = database.GetPlayerName(sep->arg[0]);\n\t\t\telse if(cmdTarget && cmdTarget->IsPlayer())\n\t\t\t\tname = string(cmdTarget->GetName());\n\t\t\tif(name.length() > 0){\n\t\t\t\tif(strcmp(name.c_str(), client->GetPlayer()->GetName()) != 0){\n\t\t\t\t\tif(client->GetPlayer()->IsFriend(name.c_str())){\n\t\t\t\t\t\tclient->GetPlayer()->RemoveFriend(name.c_str());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Removed friend: %s\", name.c_str());\n\t\t\t\t\t\tclient->SendChatRelationship(1, name.c_str());\n\t\t\t\t\t}\n\t\t\t\t\tclient->GetPlayer()->AddIgnore(name.c_str(), true);\n\t\t\t\t\tclient->SendChatRelationship(2, name.c_str());\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Added ignore: %s\", name.c_str());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot ignore yourself!\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"That character does not exist.\");\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "112": {
      "symbol": "COMMAND_IGNORE_REMOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3863,
      "body": "{\n\t\t\tstring name = \"\";\n\t\t\tif(sep && sep->arg[0] && sep->arg[0][0] != '\\0' && sep->arg[0][1] != '\\0')\n\t\t\t\tname = database.GetPlayerName(sep->arg[0]);\n\t\t\telse if(cmdTarget && cmdTarget->IsPlayer())\n\t\t\t\tname = string(cmdTarget->GetName());\n\t\t\tif(name.length() > 0){\n\t\t\t\tclient->GetPlayer()->RemoveIgnore(name.c_str());\n\t\t\t\tclient->SendChatRelationship(3, name.c_str());\n\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"Removed ignore: %s\", name.c_str());\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "113": {
      "symbol": "COMMAND_IGNORES",
      "status": "no_op",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3876,
      "body": "{\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "107": {
      "symbol": "COMMAND_GROUP_KICK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3880,
      "body": "{\n\t\t\tEntity* kicked = 0;\n\t\t\tClient* kicked_client = 0;\n\t\t\tint32 group_id = 0;\n\n\t\t\tif (!client->GetPlayer()->GetGroupMemberInfo() || !client->GetPlayer()->GetGroupMemberInfo()->leader)\n\t\t\t\treturn;\n\n\t\t\tif (sep && sep->arg[0]) {\n\t\t\t\tkicked_client = client_lookups.Retain(zone_list.GetClientByCharName(string(sep->arg[0])));\n\t\t\t\tif (kicked_client)\n\t\t\t\t\tkicked = kicked_client->GetPlayer();\n\t\t\t}\n\t\t\telse if (cmdTarget && cmdTarget->IsEntity()) {\n\t\t\t\tkicked = (Entity*)cmdTarget;\n\t\t\t}\n\n\t\t\tgroup_id = client->GetPlayer()->GetGroupMemberInfo()->group_id;\n\n\t\t\tbool send_kicked_message = world.GetGroupManager()->GetGroupSize(group_id) > 2;\n\t\t\tif (kicked)\n\t\t\t\tworld.GetGroupManager()->RemoveGroupMember(group_id, kicked);\n\n\t\t\tif(send_kicked_message)\n\t\t\t\tworld.GetGroupManager()->GroupMessage(group_id, \"%s was kicked from the group.\", kicked->GetName());\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_GROUP_CHAT, \"You kicked %s from the group\", kicked->GetName());\n\n\t\t\tif (kicked_client)\n\t\t\t\tkicked_client->SimpleMessage(CHANNEL_GROUP_CHAT, \"You were kicked from the group\");\n\t\t\t\t\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "106": {
      "symbol": "COMMAND_GROUP_MAKE_LEADER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3913,
      "body": "{\n\t\t\t\n\t\t\tif (!client->GetPlayer()->GetGroupMemberInfo() || !client->GetPlayer()->GetGroupMemberInfo()->leader) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"You are not a group leader.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (sep && sep->arg[0] && sep->arg[0][0] != '\\0' && sep->arg[0][1] != '\\0') {\n\t\t\t\tClient* new_leader = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\t\t\tif (new_leader && new_leader->GetPlayer()->GetGroupMemberInfo() && new_leader->GetPlayer()->GetGroupMemberInfo()->group_id == client->GetPlayer()->GetGroupMemberInfo()->group_id) {\n\t\t\t\t\tif (client->GetPlayer()->IsGroupMember(new_leader->GetPlayer())) {\n\t\t\t\t\t\tif(world.GetGroupManager()->MakeLeader(client->GetPlayer()->GetGroupMemberInfo()->group_id, new_leader->GetPlayer())) {\n\t\t\t\t\t\t\tworld.GetGroupManager()->GroupMessage(client->GetPlayer()->GetGroupMemberInfo()->group_id, \"%s is now leader of the group.\", new_leader->GetPlayer()->GetName());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Unable to find the given player.\");\n\t\t\t}\n\t\t\telse if (cmdTarget && cmdTarget->IsPlayer() && ((Player*)cmdTarget)->GetGroupMemberInfo() && ((Player*)cmdTarget)->GetGroupMemberInfo()->group_id == client->GetPlayer()->GetGroupMemberInfo()->group_id) {\n\t\t\t\tif(client->GetPlayer()->IsGroupMember((Player*)cmdTarget) && world.GetGroupManager()->MakeLeader(client->GetPlayer()->GetGroupMemberInfo()->group_id, (Entity*)cmdTarget)) {\n\t\t\t\t\tworld.GetGroupManager()->GroupMessage(client->GetPlayer()->GetGroupMemberInfo()->group_id, \"%s is now leader of the group.\", cmdTarget->GetName());\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Unable to change group leader.\");\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "96": {
      "symbol": "COMMAND_GROUP_ACCEPT_INVITE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 3942,
      "body": "{\n\t\t\t\tint8 result = 3;\n\t\t\t\tstd::string leader = world.GetGroupManager()->HasPendingInvite(client->GetPlayer());\n\t\t\t\tstd::string playerName(client->GetPlayer()->GetName());\n\t\t\t\tClient* leader_client = client->GetCurrentZone()->GetClientByName((char*)leader.c_str());\n\t\t\t\tbool group_existed = false;\n\t\t\t\tif(leader_client && leader_client->GetPlayer()->GetGroupMemberInfo()) {\n\t\t\t\t\tgroup_existed = true;\n\t\t\t\t}\n\t\t\t\tif(client->GetPlayer()->GetGroupMemberInfo() && client->GetPlayer()->GetGroupMemberInfo()->leader) {\n\t\t\t\t\tint8 raid_result = world.GetGroupManager()->AcceptRaidInvite(std::string(client->GetPlayer()->GetName()), client->GetPlayer()->GetGroupMemberInfo()->group_id);\n\t\t\t\t\tif(raid_result == 1) {\n\t\t\t\t\t\tGroupOptions options;\n\t\t\t\t\t\tif(world.GetGroupManager()->GetDefaultGroupOptions(client->GetPlayer()->GetGroupMemberInfo()->group_id, &options)) {\n\t\t\t\t\t\t\tstd::vector<int32> raidGroups;\n\t\t\t\t\t\t\tworld.GetGroupManager()->GetRaidGroups(client->GetPlayer()->GetGroupMemberInfo()->group_id, &raidGroups);\n\t\t\t\t\t\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, client->GetPlayer()->GetGroupMemberInfo()->group_id, \"\", \"\", &options, \"\", &raidGroups, true);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tworld.GetGroupManager()->ClearGroupRaidLooterFlag(client->GetPlayer()->GetGroupMemberInfo()->group_id);\n\t\t\t\t\t\tworld.GetGroupManager()->SendGroupUpdate(client->GetPlayer()->GetGroupMemberInfo()->group_id);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(net.is_primary) {\n\t\t\t\t\tint32 group_id = 0;\n\t\t\t\t\tresult = world.GetGroupManager()->AcceptInvite(client->GetPlayer(), &group_id, false);\n\t\t\t\t\tclient->HandleGroupAcceptResponse(result);\n\t\t\t\t\tif(result == 0) {\n\t\t\t\t\t\tGroupOptions options;\n\t\t\t\t\t\tif(leader_client) {\n\t\t\t\t\t\t\tif(!group_existed) {\n\t\t\t\t\t\t\t\tleader_client->SetGroupOptionsReference(&options);\n\t\t\t\t\t\t\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, group_id, leader, playerName, &options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tworld.GetGroupManager()->AddGroupMember(group_id, leader_client->GetPlayer(), true);\n\t\t\t\t\t\t\tworld.GetGroupManager()->GroupMessage(leader_client->GetPlayer()->GetGroupMemberInfo()->group_id, \"%s has joined the group.\", playerName.c_str());\n\t\t\t\t\t\t\tworld.GetGroupManager()->AddGroupMember(leader_client->GetPlayer()->GetGroupMemberInfo()->group_id, client->GetPlayer());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif(leader.size() < 1) {\n\t\t\t\t\t\tclient->HandleGroupAcceptResponse(1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tClient* leader_client = client->GetCurrentZone()->GetClientByName((char*)leader.c_str());\n\t\t\t\t\t\tGroupOptions options;\n\t\t\t\t\t\tif(leader_client) {\n\t\t\t\t\t\t\tleader_client->SetGroupOptionsReference(&options);\n\t\t\t\t\t\t\tworld.GetGroupManager()->AddInvite(leader_client->GetPlayer(), client->GetPlayer());\n\t\t\t\t\t\t\tpeer_manager.sendPrimaryNewGroupRequest(leader, playerName, client->GetPlayer()->GetID(), &options);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclient->HandleGroupAcceptResponse(2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "97": {
      "symbol": "COMMAND_GROUP_DECLINE_INVITE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4003,
      "body": "{\n\t\t\t\tworld.GetGroupManager()->DeclineInvite(client->GetPlayer());                               \n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "55": {
      "symbol": "COMMAND_SUMMON",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4007,
      "body": "{\n\t\t\tchar* search_name = 0;\n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\tsearch_name = sep->arg[0];\n\n\t\t\tif(!search_name && !cmdTarget){\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /summon [name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Summons a targeted spawn or a spawn by name to you.  If more than one spawn matches name, it will summon closest.\");\n\t\t\t}\n\t\t\telse{ \n\t\t\t\tif(!client->Summon(search_name))\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No matches found.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /summon [name]"
      ]
    },
    "56": {
      "symbol": "COMMAND_GOTO",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4022,
      "body": "{\n\t\t\tconst char* search_name = 0;\n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\tsearch_name = sep->argplus[0];\n\t\t\tif(!search_name && !cmdTarget){\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /goto [name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Moves to targeted spawn or to a spawn by name.  If more than one spawn matches name, you will move to closest.\");\n\t\t\t}\n\t\t\telse{\n\t\t\t\tif(!client->GotoSpawn(search_name))\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No matches found.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /goto [name]"
      ]
    },
    "32": {
      "symbol": "COMMAND_MOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4036,
      "body": "{\n\t\t\tbool success = false;\n\t\t\ttry{\n\t\t\t\tif(sep && sep->arg[2][0] && sep->IsNumber(0) && sep->IsNumber(1) && sep->IsNumber(2)){\n\t\t\t\t\tEQ2Packet* app = client->GetPlayer()->Move(atof(sep->arg[0]), atof(sep->arg[1]), atof(sep->arg[2]), client->GetVersion());\n\t\t\t\t\tif(app){\n\t\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\t\tsuccess = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch(...){}\n\t\t\tif(!success){\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /move x y z\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Moves the client to the given coordinates.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /move x y z"
      ]
    },
    "58": {
      "symbol": "COMMAND_SETTIME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4054,
      "body": "{\n\t\t\tif(sep && sep->arg[0]){\n\t\t\t\t\n\t\t\t\tworld.MWorldTime.writelock(__FUNCTION__, __LINE__);\n\t\t\t\tsscanf (sep->arg[0], \"%d:%d\", &world.GetWorldTimeStruct()->hour, &world.GetWorldTimeStruct()->minute);\n\t\t\t\tif(sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\tworld.GetWorldTimeStruct()->month = atoi(sep->arg[1]) - 1;                     \n\t\t\t\tif(sep->arg[2] && sep->IsNumber(2))\n\t\t\t\t\tworld.GetWorldTimeStruct()->day = atoi(sep->arg[2]) - 1;                     \n\t\t\t\tif(sep->arg[3] && sep->IsNumber(3))\n\t\t\t\t\tworld.GetWorldTimeStruct()->year = atoi(sep->arg[3]);\n\t\t\t\tworld.MWorldTime.releasewritelock(__FUNCTION__, __LINE__);\n\t\t\t\tclient->GetCurrentZone()->SendTimeUpdateToAllClients();\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /settime [hour:minute] (month) (day) (year)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Example: /settime 8:30\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /settime [hour:minute] (month) (day) (year)",
        "Example: /settime 8:30"
      ]
    },
    "42": {
      "symbol": "COMMAND_VERSION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4074,
      "body": "{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"%s %s\", EQ2EMU_MODULE, CURRENT_VERSION);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Last Compiled on %s %s\", COMPILE_DATE, COMPILE_TIME);\n\t\t\tauto [days, hours, minutes, seconds] = convertTimestampDuration((getCurrentTimestamp() - world.world_uptime));\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Uptime %u day(s), %u hour(s), %u minute(s), %u second(s).\", days, hours, minutes, seconds);\n\t\t\tbreak;\n\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "20": {
      "symbol": "COMMAND_ZONE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4081,
      "body": "{\n\t\t\tint32 instanceID = 0;\n\t\t\tstring zone;\n\t\t\tint32 zone_id = 0;\n\t\t\tbool listSearch = false;\n\t\t\tbool isInstance = false;\n\t\t\tbool notZoningCommand = false;\n\t\t\tZoneServer* zsZone = 0;\n\t\t\tZoneChangeDetails zone_details;\n\t\t\tif(sep && sep->arg[0][0])\n\t\t\t{\n\t\t\t\tif(strncasecmp(sep->arg[0], \"list\", 4) == 0)\n\t\t\t\t\tlistSearch = true;\n\n\t\t\t\telse if(strncasecmp(sep->arg[0], \"active\", 6) == 0)\n\t\t\t\t{\n\t\t\t\t\tzone_list.SendZoneList(client);\n\t\t\t\t\tnotZoningCommand = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telse if(strncasecmp(sep->arg[0], \"instance\", 6) == 0)\n\t\t\t\t{\n\t\t\t\t\tif(sep->IsNumber(1))\n\t\t\t\t\t\tinstanceID = atol(sep->arg[1]);\n\t\t\t\t}\n\n\t\t\t\telse if(strncasecmp(sep->arg[0], \"lock\", 4) == 0)\n\t\t\t\t{\n\t\t\t\t\tPrintSep(sep, \"ZONE LOCK\");\n\n\t\t\t\t\tif(sep->IsNumber(1)) {\n\t\t\t\t\t\tif(sep->IsNumber(2) && zone_list.GetDuplicateZoneDetails(&zone_details, \"\", atoul(sep->arg[1]), atoul(sep->arg[2]))) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(zone_list.GetZone(&zone_details, atoul(sep->arg[1]), \"\", false, false, false, false)) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif(sep->IsNumber(2) && zone_list.GetDuplicateZoneDetails(&zone_details, std::string(sep->arg[1]), 0, atoul(sep->arg[2]))) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(zone_list.GetZone(&zone_details, 0, std::string(sep->arg[1]), false, false, false, false)) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif( zsZone )\n\t\t\t\t\t{\n\t\t\t\t\t\tzsZone->SetZoneLockState(true);\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Zone %s (%u) is now locked.\", zsZone->GetZoneName(), zsZone->GetZoneID());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Zone %s is not running and cannot be locked.\", sep->arg[1]);\n\t\t\t\t\tnotZoningCommand = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if(strncasecmp(sep->arg[0], \"unlock\", 6) == 0)\n\t\t\t\t{\n\t\t\t\t\tPrintSep(sep, \"ZONE UNLOCK\");\n\n\t\t\t\t\tif(sep->IsNumber(1)) {\n\t\t\t\t\t\tif(sep->IsNumber(2) && zone_list.GetDuplicateZoneDetails(&zone_details, \"\", atoul(sep->arg[1]), atoul(sep->arg[2]))) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(zone_list.GetZone(&zone_details, atoul(sep->arg[1]), \"\", false, false, false, false)) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif(sep->IsNumber(2) && zone_list.GetDuplicateZoneDetails(&zone_details, std::string(sep->arg[1]), 0, atoul(sep->arg[2]))) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(zone_list.GetZone(&zone_details, 0, std::string(sep->arg[1]), false, false, false, false)) {\n\t\t\t\t\t\t\tzsZone = zone_details.zonePtr.get();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif( zsZone )\n\t\t\t\t\t{\n\t\t\t\t\t\tzsZone->SetZoneLockState(false);\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Zone %s (%u) is now unlocked.\", zsZone->GetZoneName(), zsZone->GetZoneID());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Zone %s is not running and cannot be unlocked.\", sep->arg[1]);\n\t\t\t\t\tnotZoningCommand = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif(sep->IsNumber(0))\n\t\t\t\t\t{\n\t\t\t\t\t\tzone_id = atoul(sep->arg[0]);\n\t\t\t\t\t\tstring zonename = database.GetZoneName(zone_id);\n\n\t\t\t\t\t\tif(zonename.length() > 0)\n\t\t\t\t\t\t\tzone = zonename;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tzone = sep->arg[0];\n\t\t\t\t}\n\t\t\t\tif(instanceID > 0)\n\t\t\t\t{\n\t\t\t\t\tif(zone_list.GetZoneByInstance(&zone_details, instanceID, 0, true)) {\n\t\t\t\t\t\tinstanceID = zone_details.instanceId;\n\t\t\t\t\t\tzone = zone_details.zoneName;\n\t\t\t\t\t\tzone_id = zone_details.zoneId;\n\t\t\t\t\t}\n\t\t\t\t\tisInstance = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!listSearch)\n\t\t\t{\n\t\t\t\tif(zone.length() == 0)\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Error: Invalid Zone\");\n\t\t\t\telse if(instanceID != client->GetCurrentZone()->GetInstanceID() || \n\t\t\t\t\tzone_id != client->GetCurrentZone()->GetZoneID())\n\t\t\t\t{\n\t\t\t\t\tconst char* zonestr = zone.c_str();\n\t\t\t\t\tif(database.VerifyZone(zonestr))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(client->CheckZoneAccess(zonestr))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Zoning to %s...\", zonestr);\n\t\t\t\t\t\t\tif(isInstance)\n\t\t\t\t\t\t\t\tclient->Zone(&zone_details, zone_details.zonePtr, true, false);\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tif(sep->IsNumber(2) && zone_list.GetDuplicateZoneDetails(&zone_details, zone, 0, atoul(sep->arg[2]))) {\n\t\t\t\t\t\t\t\t\tclient->Zone(&zone_details, zone_details.zonePtr, true, false);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse \n\t\t\t\t\t\t\t\t\tclient->Zone(zonestr);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Error: Zone '%s' not found.  To get a list type /zone list\", zonestr);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Error: You are already in that zone!\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst char* name = 0;\n\t\t\t\tif(sep && sep->arg[1][0])\n\t\t\t\t{\n\t\t\t\t\tmap<int32, string>* zone_names;\n\t\t\t\t\tname = sep->argplus[1];\n\t\t\t\t\tsint16 status = client->GetAdminStatus();\n\t\t\t\t\tif( status > 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"ADMIN MODE\");\n\t\t\t\t\t\tzone_names = database.GetZoneList(name, true);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tzone_names = database.GetZoneList(name);\n\n\t\t\t\t\tif(!zone_names)\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No zones found.\");\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tmap<int32, string>::iterator itr;\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\" ID   Name: \");\n\t\t\t\t\t\tfor(itr = zone_names->begin(); itr != zone_names->end(); itr++)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"%03lu %s\", itr->first, itr->second.c_str());\n\t\t\t\t\t\tsafe_delete(zone_names);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /zone [zone name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /zone list [partial zone name]\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Error: Zone '%s' not found.  To get a list type /zone list",
        "Syntax: /zone [zone name]",
        "Syntax: /zone list [partial zone name]"
      ]
    },
    "61": {
      "symbol": "COMMAND_USE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4259,
      "body": "{\n\t\t\tSpawn* target = cmdTarget;\n\t\t\tif (target && target->IsWidget())\n\t\t\t\t((Widget*)target)->HandleUse(client, \"use\");\n\t\t\telse\n\t\t\t\tLogWrite(target && target->IsSign() ? SIGN__WARNING : WIDGET__WARNING, 0, \"EntityUse\", \"/use ignored: command handler requires a widget target; character_id=%u spawn_id=%u db_id=%u is_sign=%u (sign HandleUse is dispatched by entity verbs)\", client->GetCharacterID(), target ? target->GetID() : 0, target ? target->GetDatabaseID() : 0, target && target->IsSign());\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/use ignored: command handler requires a widget target; character_id=%u spawn_id=%u db_id=%u is_sign=%u (sign HandleUse is dispatched by entity verbs)"
      ]
    },
    "508": {
      "symbol": "COMMAND_OPEN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4267,
      "body": "{\n\t\t\tSpawn* target = cmdTarget;\n\t\t\tif (target && target->IsWidget())\n\t\t\t\t((Widget*)target)->HandleUse(client, \"Open\", WIDGET_TYPE_DOOR);\n\t\t\telse\n\t\t\t\tLogWrite(target && target->IsSign() ? SIGN__WARNING : WIDGET__WARNING, 0, \"EntityUse\", \"/open ignored: command handler requires a widget target; character_id=%u spawn_id=%u db_id=%u is_sign=%u (sign HandleUse is dispatched by entity verbs)\", client->GetCharacterID(), target ? target->GetID() : 0, target ? target->GetDatabaseID() : 0, target && target->IsSign());\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/open ignored: command handler requires a widget target; character_id=%u spawn_id=%u db_id=%u is_sign=%u (sign HandleUse is dispatched by entity verbs)"
      ]
    },
    "509": {
      "symbol": "COMMAND_CASTSPELL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4275,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t{\n\t\t\t\tint8 tier = 1;\n\t\t\t\tif (sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\ttier = atoul(sep->arg[1]);\n\n\t\t\t\tint8 self = 1;\n\t\t\t\tif (sep->arg[1] && sep->IsNumber(2))\n\t\t\t\t{\n\t\t\t\t\tself = atoul(sep->arg[2]);\n\t\t\t\t\tif(self != 1 && !cmdTarget->IsEntity())\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Target is not an entity required to cast non-self spell.\");\n\t\t\t\t\t\tself = 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tint32 spellid = atoul(sep->arg[0]);\n\t\t\t\tSpell* spell = master_spell_list.GetSpell(spellid, tier);\n\n\t\t\t\tif (spell)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Casting spell %u.\", spellid);\n\t\t\t\t\tSpellProcess* spellProcess = 0;\n\t\t\t\t\t                                      \n\t\t\t\t\tspellProcess = client->GetCurrentZone()->GetSpellProcess();\n\n\t\t\t\t\tspellProcess->CastInstant(spell, (!cmdTarget || self == 1) ? (Entity*)client->GetPlayer() : (Entity*)cmdTarget, (cmdTarget && cmdTarget->IsEntity()) ? (Entity*)cmdTarget : (Entity*)client->GetPlayer());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Could not find spell %u.\",spellid);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (sep && sep->arg[0])\n\t\t\t{\n\t\t\t\tdatabase.FindSpell(client, (char*)sep->argplus[0]);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Syntax: /castspell [spellid] (tier=1) - Cast Spell with specified spell id, tier is optional, default of 1.\");\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Syntax: /castspell [spellname] - Find spells wildcard match with a partial spell name\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Target is not an entity required to cast non-self spell.",
        "Syntax: /castspell [spellid] (tier=1) - Cast Spell with specified spell id, tier is optional, default of 1.",
        "Syntax: /castspell [spellname] - Find spells wildcard match with a partial spell name"
      ]
    },
    "511": {
      "symbol": "COMMAND_KNOWLEDGEWINDOWSORT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4321,
      "body": "{\n\n\t\t\tif (sep && (client->GetVersion() <= 561 && sep->GetArgNumber() == 3) || sep->GetArgNumber() == 4)\n\t\t\t{\n\t\t\t\tint32 book = atoul(sep->arg[0]);                                                         \n\t\t\t\t\n\t\t\t\t                                                               \n\t\t\t\tif (client->GetVersion() <= 561 && book == SPELL_BOOK_TYPE_ABILITY)\n\t\t\t\t\tbreak;\n\t\t\t\n\t\t\t\tint32 sort_by = atoul(sep->arg[1]);                                      \n\t\t\t\tint32 order = atoul(sep->arg[2]);                                 \n\t\t\t\tint32 pattern = atoul(sep->arg[3]);                                    \n\t\t\t\tint32 maxlvlonly = 0;\n\t\t\t\t\n\t\t\t\tif(client->GetVersion() > 561 && sep->arg[4][0]) {\n\t\t\t\t\tmaxlvlonly = atoul(sep->arg[4]);                              \n\t\t\t\t}\n\t\t\t\tclient->GetPlayer()->ResortSpellBook(sort_by, order, pattern, maxlvlonly, book);\n\t\t\t\tClientPacketFunctions::SendSkillSlotMappings(client);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Syntax: /knowledgewindow_sort [book] [sort_by] [order] [pattern]\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /knowledgewindow_sort [book] [sort_by] [order] [pattern]"
      ]
    },
    "516": {
      "symbol": "COMMAND_MOVE_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4348,
      "body": "{\n\t\t\tint32 id = 0;\n\n\t\t\tif (sep && sep->IsNumber(0))\n\t\t\t\tid = atoul(sep->arg[0]);\n\n\t\t\tSpawn* spawn = 0;\n\t\t\tif (id == 0)\n\t\t\t{\n\t\t\t\tspawn = cmdTarget;\n\t\t\t}\n\t\t\telse\n\t\t\t\tspawn = client->GetCurrentZone()->GetSpawnFromUniqueItemID(id);\n\n\t\t\tif (!spawn || !client->HasOwnerOrEditAccess() || !spawn->GetPickupItemID())\n\t\t\t\tbreak;\n\n\t\t\tItem* item = master_item_list.GetItem(spawn->GetPickupItemID());\n\t\t\t\n\t\t\tclient->SendMoveObjectMode(spawn, (item && item->houseitem_info) ? item->houseitem_info->house_location : 0);\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "517": {
      "symbol": "COMMAND_PICKUP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4371,
      "body": "{\n\t\t\tint32 id = 0;\n\t\t\tif (sep && sep->IsNumber(0))\n\t\t\t\tid = atoul(sep->arg[0]);\n\n\t\t\tSpawn* spawn = 0;\n\t\t\tif (id == 0)\n\t\t\t{\n\t\t\t\tspawn = cmdTarget;\n\t\t\t}\n\t\t\telse\n\t\t\t\tspawn = client->GetCurrentZone()->GetSpawnFromUniqueItemID(id);\n\n\t\t\tif (!spawn || !client->HasOwnerOrEditAccess() || !spawn->GetPickupItemID())\n\t\t\t\tbreak;\n\t\t\tItem* tmpItem = client->GetPlayer()->item_list.GetVaultItemFromUniqueID(spawn->GetPickupUniqueItemID());\n\t\t\tif((tmpItem && tmpItem->generic_info.item_type == ITEM_TYPE_HOUSE_CONTAINER) || client->AddItem(spawn->GetPickupItemID(), 1)) {\n\t\t\t\tif ( tmpItem && tmpItem->generic_info.item_type == ITEM_TYPE_HOUSE_CONTAINER ) {\n\t\t\t\t\ttmpItem->TryUnlockItem(LockReason::LockReason_House);\n\t\t\t\t\tclient->QueuePacket(client->GetPlayer()->SendInventoryUpdate(client->GetVersion()));\n\t\t\t\t}\n\t\t\t\tQuery query;\n\t\t\t\tquery.RunQuery2(Q_INSERT, \"delete from spawn_instance_data where spawn_id = %u and spawn_location_id = %u and pickup_item_id = %u\", spawn->GetDatabaseID(), spawn->GetSpawnLocationID(), spawn->GetPickupItemID());\n\n\t\t\t\tif (database.RemoveSpawnFromSpawnLocation(spawn)) {\n\t\t\t\t\tclient->GetCurrentZone()->RemoveSpawn(spawn, true, true, true, true, true);\n\t\t\t\t}\n\n\t\t\t\t                                                       \n\t\t\t\tif ( id > 0 )\n\t\t\t\t\tclient->GetCurrentZone()->SendHouseItems(client);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "518": {
      "symbol": "COMMAND_HOUSE_DEPOSIT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4407,
      "body": "{\n\t\t\tPrintSep(sep, \"COMMAND_HOUSE_DEPOSIT\");\n\t\t\t                                                                    \n\t\t\t                          \n\t\t\t                                       \n\t\t\tPlayerHouse* ph = nullptr;\n\t\t\tint32 spawn_id = 0;\n\t\t\tif(sep && sep->arg[0]) {\n\t\t\t\tspawn_id = atoul(sep->arg[0]);\n\t\t\t\tph = world.GetPlayerHouse(client, spawn_id, client->GetVersion() > 561 ? spawn_id : 0, nullptr);\n\t\t\t}\n\t\t\t\n\t\t\tif(!ph) {\n\t\t\t\tph = world.GetPlayerHouseByInstanceID(client->GetCurrentZone()->GetInstanceID());\n\t\t\t}\n\t\t\tif (ph && sep && sep->IsNumber(1))\n\t\t\t{\n\t\t\t\tint64 outValCoin = strtoull(sep->arg[1], NULL, 0);\n\t\t\t\tint32 outValStatus = 0;\n\t\t\t\t\n\t\t\t\tif(sep->IsNumber(2))\n\t\t\t\t{\n\t\t\t\t\toutValStatus = strtoull(sep->arg[2], NULL, 0);\n\t\t\t\t\tif(outValStatus > client->GetPlayer()->GetInfoStruct()->get_status_points())\n\t\t\t\t\t\toutValStatus = 0;               \n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ((!outValCoin && outValStatus) || client->GetPlayer()->RemoveCoins(outValCoin))\n\t\t\t\t{\n\t\t\t\t\tif(outValStatus)\n\t\t\t\t\t\tclient->GetPlayer()->GetInfoStruct()->subtract_status_points(outValStatus);\n\t\t\t\t\tchar query[256];\n\t\t\t\t\tmap<string,Deposit>::iterator itr = ph->depositsMap.find(string(client->GetPlayer()->GetName()));\n\t\t\t\t\tif (itr != ph->depositsMap.end())\n\t\t\t\t\t{\n\t\t\t\t\t\tsnprintf(query, 256, \"update character_house_deposits set timestamp = %u, amount = amount + %llu, last_amount = %llu, status = status + %u, last_status = %u where house_id = %u and instance_id = %u and name='%s'\", Timer::GetUnixTimeStamp(), outValCoin, outValCoin, outValStatus, outValStatus, ph->house_id, ph->instance_id, client->GetPlayer()->GetName());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tsnprintf(query, 256, \"insert into character_house_deposits set timestamp = %u, house_id = %u, instance_id = %u, name='%s', amount = %llu, status = %u\", Timer::GetUnixTimeStamp(), ph->house_id, ph->instance_id, client->GetPlayer()->GetName(), outValCoin, outValStatus);\n\n\t\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t\t{\n\t\t\t\t\t\tph->escrow_coins += outValCoin;\n\t\t\t\t\t\tph->escrow_status += outValStatus;\n\t\t\t\t\t\tdatabase.UpdateHouseEscrow(ph->house_id, ph->instance_id, ph->escrow_coins, ph->escrow_status);\n\t\t\t\t\t\tpeer_manager.sendPeersUpdateHouseDeposit(ph->instance_id, ph->escrow_coins, ph->escrow_status);\n\n\t\t\t\t\t\tdatabase.LoadDeposits(ph);\n\n\t\t\t\t\t\tclient->PlaySound(\"coin_cha_ching\");\n\t\t\t\t\t\tHouseZone* hz = world.GetHouseZone(ph->house_id);\n\t\t\t\t\t\tClientPacketFunctions::SendBaseHouseWindow(client, hz, ph, client->GetVersion() <= 561 ? spawn_id : client->GetPlayer()->GetID());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tif(outValCoin)\n\t\t\t\t\t\t\tclient->GetPlayer()->AddCoins(outValCoin);\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tif(outValStatus)\n\t\t\t\t\t\t\tclient->GetPlayer()->GetInfoStruct()->add_status_points(outValStatus);\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Deposit failed!\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "515": {
      "symbol": "COMMAND_HOUSE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4474,
      "body": "{\n\t\t\tint32 spawn_id = 0;\n\t\t\tif (sep && sep->IsNumber(0))\n\t\t\t{\n\t\t\t\tPlayerHouse* ph = nullptr;\n\t\t\t\tif(!ph && sep && sep->arg[0]) {\n\t\t\t\t\tspawn_id = atoul(sep->arg[0]);\n\t\t\t\t\tph = world.GetPlayerHouse(client, spawn_id, spawn_id, nullptr);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tHouseZone* hz = 0;\n\t\t\t\t\t\n\t\t\t\tif (ph)\n\t\t\t\t\thz = world.GetHouseZone(ph->house_id);\n\t\t\t\t                                                                                           \n\t\t\t\tClientPacketFunctions::SendBaseHouseWindow(client, hz, ph, client->GetVersion() <= 561 ? spawn_id : client->GetPlayer()->GetID());\n\t\t\t}\n\t\t\telse if (client->GetCurrentZone()->GetInstanceType() != 0)\n\t\t\t{\n\t\t\t\t                                                      \n\t\t\t\tPlayerHouse* ph = world.GetPlayerHouseByInstanceID(client->GetCurrentZone()->GetInstanceID());\n\n\t\t\t\tHouseZone* hz = 0;\n\t\t\t\tif ( ph )\n\t\t\t\t\thz = world.GetHouseZone(ph->house_id);\n\n\t\t\t\tClientPacketFunctions::SendBaseHouseWindow(client, hz, ph, client->GetVersion() <= 561 ? spawn_id : client->GetPlayer()->GetID());\n\t\t\t\tclient->GetCurrentZone()->SendHouseItems(client);\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "514": {
      "symbol": "COMMAND_HOUSE_UI",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4506,
      "body": "{\n\t\t\tif (sep && sep->IsNumber(0) && client->GetCurrentZone()->GetInstanceType() == Instance_Type::NONE)\n\t\t\t{\n\t\t\t\tint32 unique_id = atoi(sep->arg[0]);\n\t\t\t\tPlayerHouse* ph = world.GetPlayerHouseByUniqueID(unique_id);\n\t\t\t\tHouseZone* hz = 0;\n\t\t\t\tif ( ph )\n\t\t\t\t\thz = world.GetHouseZone(ph->house_id);\n\t\t\t\t                                                                                           \n\t\t\t\tClientPacketFunctions::SendBaseHouseWindow(client, hz, ph, client->GetPlayer()->GetID());\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "512": {
      "symbol": "COMMAND_PLACE_HOUSE_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4520,
      "body": "{\n\t\t\tif (sep && sep->IsNumber(0))\n\t\t\t{\n\t\t\t\tint64 uniqueid = strtoull(sep->arg[0], NULL, 0);\n\n\t\t\t\tItem* item = client->GetPlayer()->item_list.GetVaultItemFromUniqueID(uniqueid);\n\t\n\t\t\t\tif (item && (item->IsHouseItem() || item->IsHouseContainer()))\n\t\t\t\t{\n\t\t\t\t\tif(item->IsHouseContainer() && item->details.inv_slot_id != InventorySlotType::HOUSE_VAULT) {                                                               \n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Must be in vault to place this item.\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (!client->HasOwnerOrEditAccess())\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"This is not your home!\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!item->generic_info.appearance_id)\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"This item has not been configured in the database, %s (%u) needs an entry where ?? has the model type id, eg. insert into item_appearances set item_id=%u,equip_type=??;\", item->name.c_str(), item->details.item_id, item->details.item_id);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if(item->CheckFlag2(HOUSE_LORE) && client->GetCurrentZone()->HouseItemSpawnExists(item->details.item_id)) {\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Item %s is house lore and you cannot place another.\", item->name.c_str());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (client->GetTempPlacementSpawn())\n\t\t\t\t\t{\n\t\t\t\t\t\tSpawn* tmp = client->GetTempPlacementSpawn();\n\t\t\t\t\t\tclient->GetCurrentZone()->RemoveSpawn(tmp, true, true, true, true, true);\n\t\t\t\t\t\tclient->SetTempPlacementSpawn(nullptr);\n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t\tObject* obj = new Object();\n\t\t\t\t\tSpawn* spawn = (Spawn*)obj;\n\t\t\t\t\tmemset(&spawn->appearance, 0, sizeof(spawn->appearance));\n\t\t\t\t\tsnprintf(spawn->appearance.name, sizeof(spawn->appearance.name), \"%s\", item->name.c_str());\n\t\t\t\t\tspawn->SetX(client->GetPlayer()->GetX());\n\t\t\t\t\tspawn->SetY(client->GetPlayer()->GetY());\n\t\t\t\t\tspawn->SetZ(client->GetPlayer()->GetZ());\n\t\t\t\t\tspawn->appearance.pos.collision_radius = 32;\n\t\t\t\t\tspawn->SetHeading(client->GetPlayer()->GetHeading());\n\t\t\t\t\tspawn->SetSpawnOrigX(spawn->GetX());\n\t\t\t\t\tspawn->SetSpawnOrigY(spawn->GetY());\n\t\t\t\t\tspawn->SetSpawnOrigZ(spawn->GetZ());\n\t\t\t\t\tspawn->SetSpawnOrigHeading(spawn->GetHeading());\n\t\t\t\t\tspawn->appearance.targetable = 1;\n\t\t\t\t\tspawn->appearance.activity_status = ACTIVITY_STATUS_SOLID;\n\t\t\t\t\tspawn->appearance.race = item && item->generic_info.appearance_id ? item->generic_info.appearance_id : 1472;\n\t\t\t\t\tspawn->SetModelType(item && item->generic_info.appearance_id ? item->generic_info.appearance_id : 1472);\n\t\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\t\tspawn->SetZone(client->GetCurrentZone());\n\t\t\t\t\tclient->SetTempPlacementSpawn(spawn);\n\t\t\t\t\tclient->SetPlacementUniqueItemID(uniqueid);\n\t\t\t\t\tclient->GetCurrentZone()->AddSpawn(spawn);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "513": {
      "symbol": "COMMAND_GM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4582,
      "body": "{ Command_GM(client, sep, cmdTarget); break; }",
      "delegates": [
        {
          "function": "Command_GM",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10399,
          "body": "{\n\tif (!client)\n\t\treturn;\n\tif (sep && sep->IsSet(0) && !stricmp(sep->arg[0], \"metrics\")) {\n\t\tif (sep->IsSet(1)) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /gm metrics\");\n\t\t\treturn;\n\t\t}\n\t\tCommand_GMMetrics(client);\n\t\treturn;\n\t}\n\tif (sep && sep->arg[0] && sep->arg[1])\n\t{\n\t\tbool onOff = (strcmp(sep->arg[1], \"on\") == 0);\n\t\tif (strcmp(sep->arg[0], \"vision\") == 0)\n\t\t{\n\t\t\tclient->GetPlayer()->SetGMVision(onOff);\n\t\t\t#if defined(__GNUC__)\n\t\t\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_GMVISION, (onOff) ? (char*)\"1\" : (char*)\"0\");\n        \n                                                                                          \n         \n\t\t\tclient->GetCurrentZone()->SendAllSpawnsForVisChange(client, false);\n\t\t\tclient->SendCurrentZoneFogInit();\n\n\t\t\tif (onOff)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"GM Vision Enabled!\");\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"GM Vision Disabled!\");\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"tag\") == 0)\n\t\t{\n\t\t\tint32 value = 0;\n\t\t\tint16 tag_icon = 0;\n\t\t\t                                                                               \n\t\t\tif(sep->arg[2] && sep->arg[3] && ((tag_icon = atoul(sep->arg[3])) > 0) || (strncasecmp(sep->arg[1], \"groundspawn\", 11) == 0)) {\n\t\t\t\tvalue = atoul(sep->arg[2]);\n\t\t\t\tif(strncasecmp(sep->arg[1], \"faction\", 7) == 0){\n\t\t\t\t\tif(!value) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Need to supply a valid faction id.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!tag_icon) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Need to supply a valid tag icon id.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclient->GetPlayer()->AddGMVisualFilter(GMTagFilterType::GMFILTERTYPE_FACTION, value, \"\", tag_icon);\n\t\t\t\t\tclient->GetCurrentZone()->SendAllSpawnsForVisChange(client, false);\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Adding faction id %u with tag icon %u.\", value, tag_icon);\n\t\t\t\t}\n\t\t\t\telse if(strncasecmp(sep->arg[1], \"spawngroup\", 10) == 0){\n\t\t\t\t\tif(value>0) {\n\t\t\t\t\t\tvalue = 1;\n\t\t\t\t\t}\n\t\t\t\t\tif(!tag_icon) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Need to supply a valid tag icon id.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclient->GetPlayer()->AddGMVisualFilter(GMTagFilterType::GMFILTERTYPE_SPAWNGROUP, value, \"\", tag_icon);\n\t\t\t\t\tclient->GetCurrentZone()->SendAllSpawnsForVisChange(client, false);\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Adding spawn group tag \\\"%s\\\" with tag icon %u.\", (value == 1) ? \"on\" : \"off\", tag_icon);\n\t\t\t\t}\n\t\t\t\telse if(strncasecmp(sep->arg[1], \"race\", 4 == 0)){\n\t\t\t\t\tif(!value) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Need to supply a valid race id.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif(!tag_icon) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Need to supply a valid tag icon id.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclient->GetPlayer()->AddGMVisualFilter(GMTagFilterType::GMFILTERTYPE_RACE, value, \"\", tag_icon);\n\t\t\t\t\tclient->GetCurrentZone()->SendAllSpawnsForVisChange(client, false);\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Adding race id %u with tag icon %u.\", value, tag_icon);\n\t\t\t\t}\n\t\t\t\telse if(strncasecmp(sep->arg[1], \"groundspawn\", 11) == 0){\n\t\t\t\t\t                                                          \n\t\t\t\t\tif(!value) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Need to supply a valid tag icon id.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tclient->GetPlayer()->AddGMVisualFilter(GMTagFilterType::GMFILTERTYPE_GROUNDSPAWN, 1, \"\", value);\n\t\t\t\t\tclient->GetCurrentZone()->SendAllSpawnsForVisChange(client, false);\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Adding groundspawns with tag icon %u.\", value);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(strncasecmp(sep->arg[1], \"clear\", 5) == 0){\n\t\t\t\t\tclient->GetPlayer()->ClearGMVisualFilters();\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"GM Tags Cleared!\");\n\t\t\t\t\tclient->GetCurrentZone()->SendAllSpawnsForVisChange(client, false);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"GM Tagging Missing Arguments:\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/gm tag [type] [value] [visual_icon_display]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/gm tag clear - Clears all GM visual tags\");\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Visual Type Options:\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"type: faction, value: faction id of spawn(s)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"type: spawngroup, value: 1 to show grouped, 0 to show not grouped\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"type: race, value: race id (either against base race or race id in spawn details)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"type: groundspawn, value: (not used)\");\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Visual Icon Options:\");\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"1 = skull, 2 = shield half dark blue / half light blue, 3 = purple? star, 4 = yellow sword, 5 = red X, 6 = green flame\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"7 = Number \\\"1\\\", 8 = Number \\\"2\\\", 9 = Number \\\"3\\\", 10 = Number \\\"4\\\", 11 = Number \\\"5\\\", 12 = Number \\\"6\\\"\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"25 = shield, 26 = green plus, 27 = crossed swords, 28 = bow with arrow in it, 29 = light blue lightning bolt\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"30 = bard instrument (hard to see), 31 = writ with shield, 32 = writ with green +, 33 = writ with crossed sword\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"34 = writ with bow, 35 = writ with light blue lightning bolt, 36 = same as 30, 37 = party with crossed sword, shield and lightning bolt\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"38 = shaking hands green background, 39 = shaking hands dark green background, unlocked keylock\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\"40 = red aura icon with black shadow of person and big red aura, 41 = green aura icon with black shadow of person big green aura\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"regiondebug\") == 0)\n\t\t{\n\t\t\tclient->SetRegionDebug(onOff);\n\t\t\t#if defined(__GNUC__)\n\t\t\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_REGIONDEBUG, (onOff) ? (char*)\"1\" : (char*)\"0\");\n        \n                                                                                             \n         \n\n\t\t\tif (onOff)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Region Debug Enabled!\");\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Region Debug Disabled!\");\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"sight\") == 0)\n\t\t{\n\t\t\tif(onOff && cmdTarget) {\n\t\t\t\tclient->SetPlayerPOVGhost(cmdTarget);\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SetPlayerPOVGhost(nullptr);\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"controleffects\") == 0)\n\t\t{\n\t\t\tif(cmdTarget && cmdTarget->IsEntity()) {\n\t\t\t\t((Entity*)cmdTarget)->SendControlEffectDetailsToClient(client);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->GetPlayer()->SendControlEffectDetailsToClient(client);\n\t\t\t}\n\t\t}\n\t\telse if (stricmp(sep->arg[0], \"offerquest\") == 0)\n\t\t{\n\t\t\tuint32 quest_id = 0;\n\t\t\tif (sep->arg[1][0] == '-' || !sep->GetUInt(1, quest_id) ||\n\t\t\t\tquest_id == 0 || quest_id == 0xFFFFFFFFu) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Syntax: /gm offerquest [quest_id]\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tQuest* master_quest = master_quest_list.GetQuest(quest_id, false);\n\t\t\tif (!master_quest) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Quest ID %u was not found in the master quest list.\", quest_id);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tQuest* quest = new Quest(master_quest);\n\t\t\tif (!quest) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Unable to create an offer for quest %u.\", quest_id);\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"GM Command\", \"%s failed to create an offer for quest %u\",\n\t\t\t\t\tclient->GetPlayer()->GetName(), quest_id);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tquest->SetQuestGiver(0);\n\t\t\tclient->AddPendingQuest(quest);\n\t\t\tif (master_quest->GetName() && master_quest->GetName()[0])\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Offered quest %u (%s).\", quest_id, master_quest->GetName());\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Offered quest %u.\", quest_id);\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"visualeffects\") == 0)\n\t\t{\n\t\t\tPlayer* player = client->GetPlayer();\n\t\t\tconst bool add_visual = stricmp(sep->arg[1], \"add\") == 0 ||\n\t\t\t\tstricmp(sep->arg[1], \"AddPersistentSpellVisual\") == 0;\n\t\t\tconst bool remove_visual = stricmp(sep->arg[1], \"remove\") == 0 ||\n\t\t\t\tstricmp(sep->arg[1], \"RemovePersistentSpellVisual\") == 0;\n\t\t\tconst bool clear_visuals = stricmp(sep->arg[1], \"clear\") == 0;\n\t\t\tconst bool list_visuals = stricmp(sep->arg[1], \"list\") == 0;\n\n\t\t\tif (player && add_visual) {\n\t\t\t\tint32 visual_id = 0;\n\t\t\t\tint32 level = std::min<int32>(player->GetLevel(), 255);\n\t\t\t\tif (sep->arg[2][0] == '-' || !sep->GetUInt(2, visual_id) ||\n\t\t\t\t\tvisual_id == 0 || visual_id == 0xFFFFFFFFu) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Visual ID must be between 1 and 4294967294.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (sep->arg[3][0] && (!sep->GetInt(3, level) || level < 0 || level > 255)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Visual level must be between 0 and 255.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst bool visual_changed = player->AddPersistentSpellVisual(\n\t\t\t\t\tvisual_id, static_cast<int8>(level));\n\t\t\t\tif (visual_changed)\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Added persistent spell visual %u at level %u.\", visual_id, level);\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Persistent spell visual %u is already set at level %u.\", visual_id, level);\n\t\t\t}\n\t\t\telse if (player && list_visuals) {\n\t\t\t\tconst std::vector<PersistentSpellVisualSourceEntry> source_entries =\n\t\t\t\t\tplayer->GetPersistentSpellVisualSourceEntries();\n\t\t\t\tif (source_entries.empty()) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No persistent spell visuals are active.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Current persistent spell visuals:\");\n\t\t\t\tint32 gm_count = 0;\n\t\t\t\tint32 automatic_count = 0;\n\t\t\t\tint32 lua_override_count = 0;\n\t\t\t\tfor (const PersistentSpellVisualSourceEntry& source : source_entries) {\n\t\t\t\t\tif (source.is_manual) {\n\t\t\t\t\t\tgm_count++;\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"[GM] Visual %u, level %u\",\n\t\t\t\t\t\t\tsource.visual_id, source.level);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (source.is_automatic)\n\t\t\t\t\t\tautomatic_count++;\n\t\t\t\t\telse\n\t\t\t\t\t\tlua_override_count++;\n\t\t\t\t\tconst char* source_label = source.is_automatic ? \"Auto\" : \"Lua\";\n\t\t\t\t\tLuaSpell* owner = source.spell_ref.Resolve();\n\t\t\t\t\tif (owner && owner->spell) {\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\t\t\t\"[%s] Visual %u, level %u - %s (%u), instance %llu\",\n\t\t\t\t\t\t\tsource_label, source.visual_id, source.level, owner->spell->GetName(),\n\t\t\t\t\t\t\tstatic_cast<uint32>(source.spell_ref.spell_id),\n\t\t\t\t\t\t\tstatic_cast<uint64>(source.spell_ref.spell_instance_id));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\t\t\t\"[%s] Visual %u, level %u - spell %u, instance %llu (owner pending cleanup)\",\n\t\t\t\t\t\t\tsource_label, source.visual_id, source.level,\n\t\t\t\t\t\t\tstatic_cast<uint32>(source.spell_ref.spell_id),\n\t\t\t\t\t\t\tstatic_cast<uint64>(source.spell_ref.spell_instance_id));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst PersistentSpellVisualSnapshot snapshot = player->GetPersistentSpellVisuals();\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\n\t\t\t\t\t\"%u GM, %u automatic, and %u Lua override registration(s); %u registry-unique visual(s), %u pre-view selected, %u pre-view overflow.\",\n\t\t\t\t\tgm_count, automatic_count, lua_override_count,\n\t\t\t\t\tstatic_cast<int32>(snapshot.count + snapshot.overflow_count),\n\t\t\t\t\tstatic_cast<int32>(snapshot.count), static_cast<int32>(snapshot.overflow_count));\n\t\t\t}\n\t\t\telse if (player && (remove_visual || clear_visuals)) {\n\t\t\t\tint32 visual_id = 0;\n\t\t\t\tif (remove_visual && sep->arg[2][0] &&\n\t\t\t\t\t(sep->arg[2][0] == '-' || !sep->GetUInt(2, visual_id) ||\n\t\t\t\t\t\tvisual_id == 0 || visual_id == 0xFFFFFFFFu)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Visual ID must be between 1 and 4294967294.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst bool visual_changed = player->RemovePersistentSpellVisual(visual_id);\n\t\t\t\tif (visual_id == 0)\n\t\t\t\t\tclient->SimpleMessage(visual_changed ? CHANNEL_COLOR_YELLOW : CHANNEL_COLOR_RED,\n\t\t\t\t\t\tvisual_changed ? \"Removed all GM persistent spell visuals.\" : \"No GM persistent spell visuals are active.\");\n\t\t\t\telse\n\t\t\t\t\tclient->Message(visual_changed ? CHANNEL_COLOR_YELLOW : CHANNEL_COLOR_RED,\n\t\t\t\t\t\tvisual_changed ? \"Removed persistent spell visual %u.\" : \"Persistent spell visual %u is not active in the GM channel.\",\n\t\t\t\t\t\tvisual_id);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /gm visualeffects add [visual_id] (level=current adventure level)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /gm visualeffects remove [visual_id]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /gm visualeffects clear\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /gm visualeffects list\");\n\t\t\t}\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"luadebug\") == 0)\n\t\t{\n\t\t\tclient->SetLuaDebugClient(onOff);\n#if defined(__GNUC__)\n\t\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_LUADEBUG, (onOff) ? (char*)\"1\" : (char*)\"0\");\n     \n                                                                                         \n      \n\n\t\t\tif (onOff)\n\t\t\t{\n\t\t\t\tif (lua_interface)\n\t\t\t\t\tlua_interface->UpdateDebugClients(client);\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You will now receive LUA error messages.\");\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (lua_interface)\n\t\t\t\t\tlua_interface->RemoveDebugClients(client);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You will no longer receive LUA error messages.\");\n\t\t\t}\n\t\t}\n\t}\n}"
        },
        {
          "function": "Command_GMMetrics",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10714,
          "body": "{\n\tif (!client)\n\t\treturn;\n\t                                                                         \n\tstatic ProcessMetrics::Sampler sampler;\n\tconst auto sample = sampler.Read();\n\tconst auto zone = client->GetCurrentZone();\n\tif (zone)\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Capacity metrics: %s (zone %u, instance %u), %u connected clients.\",\n\t\t\tzone->GetZoneName(), zone->GetZoneID(), zone->GetInstanceID(), zone->GetClientCount());\n\tfor (const auto& line : GMMetricsReport::Build(sample, zone ? &zone->capacity_metrics : nullptr, CapacityMetrics::Enabled()))\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, line.c_str());\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /gm metrics",
        "/gm tag [type] [value] [visual_icon_display]",
        "/gm tag clear - Clears all GM visual tags",
        "1 = skull, 2 = shield half dark blue / half light blue, 3 = purple? star, 4 = yellow sword, 5 = red X, 6 = green flame",
        "Syntax: /gm offerquest [quest_id]",
        "Visual ID must be between 1 and 4294967294.",
        "Visual level must be between 0 and 255.",
        "Syntax: /gm visualeffects add [visual_id] (level=current adventure level)",
        "Syntax: /gm visualeffects remove [visual_id]",
        "Syntax: /gm visualeffects clear",
        "Syntax: /gm visualeffects list"
      ]
    },
    "74": {
      "symbol": "COMMAND_ATTACK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4583,
      "body": "{\n\t\t\tCommand_AutoAttack(client, sep);\n\t\t\tbreak;\n\t\t}",
      "delegates": [
        {
          "function": "Command_AutoAttack",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13814,
          "body": "{\n\tint8 type = 1;\n\tbool update = false;\n\tPlayer* player = client->GetPlayer();\n\tif(!player)\n\t\treturn;\n\tbool incombat = player->EngagedInCombat();\n\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\ttype = atoi(sep->arg[0]);\n\tif(!client->GetPlayer()->Alive()){\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED,\"You cannot do that right now.\");\n\t\treturn;\n\t}\n\tif(type == 0){\n\t\tif(incombat)\n\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You stop fighting.\");\n\t\t\tplayer->StopCombat(type);\n\t\t\tupdate = true;\n\t}\n\telse {\n\t\tif(type == 2){\n\t\t\tplayer->InCombat(false);\n\t\t\tif(incombat && player->GetRangeAttack()){\n\t\t\t\tplayer->StopCombat(type);\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You stop fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tplayer->SetRangeAttack(true);\n\t\t\t\tplayer->InCombat(true, true);\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You start fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tplayer->InCombat(false, true);\n\t\t\tplayer->SetRangeAttack(false);\n\t\t\tplayer->InCombat(true);\n\t\t\tif(!incombat) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You start fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\t      \n                                                                            \n\t}\n\t\n\tif(update) {\n\t\tplayer->SetCharSheetChanged(true);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "37": {
      "symbol": "COMMAND_AUTO_ATTACK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4584,
      "body": "{\n\t\t\tCommand_AutoAttack(client, sep);\n\t\t\tbreak;\n\t\t}",
      "delegates": [
        {
          "function": "Command_AutoAttack",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13814,
          "body": "{\n\tint8 type = 1;\n\tbool update = false;\n\tPlayer* player = client->GetPlayer();\n\tif(!player)\n\t\treturn;\n\tbool incombat = player->EngagedInCombat();\n\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\ttype = atoi(sep->arg[0]);\n\tif(!client->GetPlayer()->Alive()){\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED,\"You cannot do that right now.\");\n\t\treturn;\n\t}\n\tif(type == 0){\n\t\tif(incombat)\n\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You stop fighting.\");\n\t\t\tplayer->StopCombat(type);\n\t\t\tupdate = true;\n\t}\n\telse {\n\t\tif(type == 2){\n\t\t\tplayer->InCombat(false);\n\t\t\tif(incombat && player->GetRangeAttack()){\n\t\t\t\tplayer->StopCombat(type);\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You stop fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tplayer->SetRangeAttack(true);\n\t\t\t\tplayer->InCombat(true, true);\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You start fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tplayer->InCombat(false, true);\n\t\t\tplayer->SetRangeAttack(false);\n\t\t\tplayer->InCombat(true);\n\t\t\tif(!incombat) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You start fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\t      \n                                                                            \n\t}\n\t\n\tif(update) {\n\t\tplayer->SetCharSheetChanged(true);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "81": {
      "symbol": "COMMAND_DEPOP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4588,
      "body": "{\n\t\t\tbool allow_respawns = false;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tif(atoi(sep->arg[0]) == 1)\n\t\t\t\t\tallow_respawns = true;\n\t\t\t}\n\t\t\tclient->GetCurrentZone()->Depop(allow_respawns);\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "82": {
      "symbol": "COMMAND_REPOP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4597,
      "body": "{\n\t\t\tclient->GetCurrentZone()->Depop(false, true);\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "91": {
      "symbol": "COMMAND_BUYBACK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4601,
      "body": "{\n\t\t\tif(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){\n\t\t\t\t                                                                                                                          \n\t\t\t\tint64 id = atoi64(sep->arg[0]);\n\t\t\t\t                                   \n\t\t\t\t                            \n\t\t\t\t                                      \n\t\t\t\tint32 unique_id = (int32)(id>>32);\n\t\t\t\tint8 quantity = atoi(sep->arg[1]);\n\t\t\t\tif(quantity == 255)\n\t\t\t\t\tquantity = 1;\n\t\t\t\tclient->BuyBack(unique_id, quantity);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "87": {
      "symbol": "COMMAND_MERCHANT_BUY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4616,
      "body": "{\n\t\t\tif(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){\n\t\t\t\tint32 item_id = atoul(sep->arg[0]);\n\t\t\t\tint8 quantity = atoi(sep->arg[1]);\n\t\t\t\tclient->BuyItem(item_id, quantity);\n\t\t\t}\n\t\t\telse\n\t\t\t\tCommand_SendMerchantWindow(client, sep);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [
        {
          "function": "Command_SendMerchantWindow",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12787,
          "body": "{\n\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\tif(spawn)\n\t\tclient->SendMerchantWindow(spawn, sell);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "88": {
      "symbol": "COMMAND_MERCHANT_SELL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4626,
      "body": "{\n\t\t\tif(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){\n\t\t\t\t                                                                                                                          \n\t\t\t\tint64 id = atoi64(sep->arg[0]);\n\t\t\t\t                                   \n\t\t\t\tint32 item_id = (int32)id;\n\t\t\t\t                                      \n\t\t\t\tint32 unique_id = (int32)(id>>32);\n\n\t\t\t\tint8 quantity = atoi(sep->arg[1]);\n\t\t\t\tLogWrite(MERCHANT__DEBUG, 0, \"Merchant\", \"Selling Item: Item Id = %ul, unique id = %ul, Quantity = %i\", item_id, unique_id, quantity);\n\t\t\t\tclient->SellItem(item_id, quantity, unique_id);\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "114": {
      "symbol": "COMMAND_MENDER_REPAIR",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4641,
      "body": "{\n\t\t\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tclient->RepairItem(atoul(sep->arg[0]));\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "115": {
      "symbol": "COMMAND_MENDER_REPAIR_ALL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4646,
      "body": "{\n\t\t\tclient->RepairAllItems();\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "89": {
      "symbol": "COMMAND_CANCEL_MERCHANT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4650,
      "body": "{\n\t\t\tclient->SetMerchantTransaction(0);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "90": {
      "symbol": "COMMAND_START_MERCHANT",
      "status": "no_op",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4654,
      "body": "{\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "93": {
      "symbol": "COMMAND_INVULNERABLE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4657,
      "body": "{\n\t\t\tsint8 val = -1;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tval = atoi(sep->arg[0]);\n\t\t\t\t\n                               \n#if defined(__GNUC__)\n database.insertCharacterProperty(client, CHAR_PROPERTY_INVUL, (val == 1) ? (char*) \"1\" : (char*) \"0\");\n     \n                                                                                       \n      \n                                                                                            \n\n\t\t\t\tclient->GetPlayer()->SetInvulnerable(val==1);\n\t\t\t\tif(client->GetPlayer()->GetInvulnerable())\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are now invulnerable!\");\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are no longer invulnerable!\");\n\t\t\t}\n\t\t\tif(val == -1)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /invulnerable [0/1]\");\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /invulnerable [0/1]"
      ]
    },
    "116": {
      "symbol": "COMMAND_REPAIR",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4680,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif (spawn && spawn->GetMerchantType() & MERCHANT_TYPE_REPAIR) {\n\t\t\t\tclient->SendHailCommand(spawn);\n\t\t\t\tclient->SetMerchantTransaction(spawn);\n\t\t\t\tclient->SendRepairList();\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "264": {
      "symbol": "COMMAND_LOTTO",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4689,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif (spawn && spawn->GetMerchantType() & MERCHANT_TYPE_LOTTO) {\n\t\t\t\tclient->SetMerchantTransaction(spawn);\n\t\t\t\tclient->ShowLottoWindow();\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "85": {
      "symbol": "COMMAND_ACCEPT_REWARD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4697,
      "body": "{\n\t\t\tint32 unknown = 0;\n\t\t\tint32 selectable_item_id = 0;\n\t\t\t                   \n\t\t\t                                                          \n                                                                                  \n                                                                     \n                                                                                                                                          \n                                                                     \n\t\t\tif (sep && sep->arg[0] && sep->arg[1] && sep->IsNumber(0) && sep->IsNumber(1)) {\n\t\t\t\tunknown = atoul(sep->arg[0]);\n\t\t\t\tselectable_item_id = atoul(sep->arg[1]);\n\t\t\t}\n\n\t\t\t                                                                                                                                                                                         \n                                                                                                                                      \n                                                                                                                                                                                \n     \n\t\t\tint32 item_id = 0;\n\t\t\tif(sep && sep->arg[0][0] && sep->IsNumber(0))\n\t\t\t\titem_id = atoul(sep->arg[0]);\n\n\t\t\tbool collectedItems = client->GetPlayer()->AcceptQuestReward(item_id, selectable_item_id);\n\t\t\t\n\t\t\tif (collectedItems) {\n\t\t\t\tEQ2Packet* outapp = client->GetPlayer()->SendInventoryUpdate(client->GetVersion());\n\t\t\t\tif (outapp)\n\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t}\n\t\t\telse\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Error in COMMAND_ACCEPT_REWARD. No pending quest or collection reward was found (unknown=%u).\", unknown);\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "95": {
      "symbol": "COMMAND_BUY_FROM_BROKER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4730,
      "body": "{\n\t\t\tif(sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1)){\n\t\t\t\tint64 item_id = strtoull(sep->arg[0], NULL, 0);\n\t\t\t\tint16 quantity = atoul(sep->arg[1]);\n\t\t\t\tif(client->IsGMStoreSearch()) {\n\t\t\t\t\tItem* item = master_item_list.GetItem(item_id);\n\t\t\t\t\tif(item && item->generic_info.max_charges > 1)\n\t\t\t\t\t\tquantity = item->generic_info.max_charges;\n\t\t\t\t\tclient->AddItem(item_id, quantity, AddItemType::BUY_FROM_BROKER);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->BuySellerItemByItemUniqueId(item_id, quantity);\n\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"BUY_FROM_BROKER. Item ID %u, Quantity %u, full args %s.\", item_id, quantity, sep->argplus[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "94": {
      "symbol": "COMMAND_SEARCH_STORES_PAGE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4747,
      "body": "{\n\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"SearchStores: %s\", sep && sep->arg[0] ? sep->argplus[0] : \"\");\n\t\t\tif(sep && sep->arg[0][0] && sep->IsNumber(0)){\n\t\t\t\tint32 page = atoul(sep->arg[0]);\n\t\t\t\tclient->SearchStore(page);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SetGMStoreSearch(false);\n\t\t\t\tPacketStruct* packet = configReader.getStruct(\"WS_StartBroker\", client->GetVersion());\n\t\t\t\tif (packet) {\n\t\t\t\t\tpacket->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()));\n\t\t\t\t\t                                      \n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 5, 0);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 20, 1);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 58, 3);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 40, 4);\n\t\t\t\t\tclient->QueuePacket(packet->serialize());\n\t\t\t\t\tif(client->GetVersion() > 561) {\n\t\t\t\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_BrokerBags\", client->GetVersion());\n\t\t\t\t\t\tif (packet2) {\n\t\t\t\t\t\t\tpacket2->setDataByName(\"char_id\", client->GetCharacterID());\n\t\t\t\t\t\t\tclient->QueuePacket(packet2->serialize());                                                   \n\t\t\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsafe_delete(packet);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "92": {
      "symbol": "COMMAND_SEARCH_STORES",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4777,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0]){\n\t\t\t\tconst char* values = sep->argplus[0];\n\t\t\t\tif(values){\n\t\t\t\t\tLogWrite(ITEM__WARNING, 0, \"Item\", \"SearchStores: %s\", values);\n\t\t\t\t\tmap<string, string> str_values = TranslateBrokerRequest(values);\n\t\t\t\t\tvector<Item*>* items = master_item_list.GetItems(str_values, client);\n\t\t\t\t\tif(items){\n\t\t\t\t\t\tclient->SetItemSearch(items, str_values);\n\t\t\t\t\t\tclient->SetSearchPage(0);\n\t\t\t\t\t\tclient->SearchStore(0);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "83": {
      "symbol": "COMMAND_LUADEBUG",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4794,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"start\") == 0){\n\t\t\t\tclient->SetLuaDebugClient(true);\n\t\t\t\tif(lua_interface)\n\t\t\t\t\tlua_interface->UpdateDebugClients(client);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You will now receive LUA error messages.\");\n\t\t\t}\n\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"stop\") == 0){\n\t\t\t\tclient->SetLuaDebugClient(false);\n\t\t\t\tif(lua_interface)\n\t\t\t\t\tlua_interface->RemoveDebugClients(client);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You will no longer receive LUA error messages.\");\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /luadebug {start | stop}\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This will allow you to receive lua debug messages normally seen only in the console.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /luadebug {start | stop}"
      ]
    },
    "169": {
      "symbol": "COMMAND_SPAWN_GROUP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 4813,
      "body": "{\n\t\t\tSpawn* target = cmdTarget;\n\n\t\t\tif(target && target->IsPlayer() == false)\n\t\t\t{\n\t\t\t\tif(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"create\") == 0)\n\t\t\t\t{\n\t\t\t\t\tif(target->GetSpawnLocationPlacementID() > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(sep->arg[1] && !sep->IsNumber(1) && strlen(sep->arg[1]) > 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint32 id = database.CreateSpawnGroup(target, sep->arg[1]);\n\n\t\t\t\t\t\t\tif(id > 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->GetCurrentZone()->AddSpawnToGroup(target, id);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully created new spawn group with id: %u\", id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error creating group, check console for details.\");\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group create [name]\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Could not use spawn to create a new group.  Likely cause would be a newly spawned spawn that did not exist when /reload spawns was last used.\");\n\t\t\t\t}\n\t\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"add\") == 0)\n\t\t\t\t{\n\t\t\t\t\tif(sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t{\n\t\t\t\t\t\tint32 group_id = atoul(sep->arg[1]);\n\t\t\t\t\t\tSpawn* leader = client->GetCurrentZone()->GetSpawnGroup(group_id);\n\n\t\t\t\t\t\tif(leader)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->GetCurrentZone()->AddSpawnToGroup(target, group_id);\n\n\t\t\t\t\t\t\tif(database.SpawnGroupAddSpawn(target, group_id))\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully added '%s' to group id: %u\", target->GetName(), group_id);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error adding spawn to group, check console for details.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No spawns found in the current zone for that spawn group, be sure to use '/spawn group create' first!\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group add [group id]\");\n\t\t\t\t}\n\t\t\t\telse if(target->GetSpawnGroupID() == 0)\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"That spawn is not in a group!\");\n\t\t\t\t}\n\t\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"remove\") == 0)\n\t\t\t\t{\n\t\t\t\t\tint32 group_id = target->GetSpawnGroupID();\n\t\t\t\t\tclient->GetCurrentZone()->AddSpawnToGroup(target, 0);\n\n\t\t\t\t\tif(database.SpawnGroupRemoveSpawn(target, group_id))\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully removed '%s' from group id: %u\", target->GetName(), group_id);\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error removing spawn from group, check console for details.\");\n\t\t\t\t}\n\t\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"associate\") == 0)\n\t\t\t\t{\n\t\t\t\t\tint32 group_id = target->GetSpawnGroupID();\n\n\t\t\t\t\tif(sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(database.SpawnGroupAddAssociation(group_id, atoul(sep->arg[1])))\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully associated group id %u with group id %u\", group_id, atoul(sep->arg[1]));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error associating groups, check console for details.\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Allows you to spawn only one associated group at once.  Syntax: /spawn group associate [other group id]\");\n\t\t\t\t}\n\t\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"deassociate\") == 0)\n\t\t\t\t{\n\t\t\t\t\tint32 group_id = target->GetSpawnGroupID();\n\n\t\t\t\t\tif(sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(database.SpawnGroupRemoveAssociation(group_id, atoul(sep->arg[1])))\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully removed association between group id %u and group id %u\", group_id, atoul(sep->arg[1]));\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error removing group associations, check console for details.\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Removes previous group associations.  Syntax: /spawn group deassociate [other group id]\");\n\t\t\t\t}\n\t\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"chance\") == 0)\n\t\t\t\t{\n\t\t\t\t\tif(sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(database.SetGroupSpawnChance(target->GetSpawnGroupID(), atof(sep->arg[1])))\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully set group spawn chance to %f for group id: %u\", atof(sep->arg[1]), target->GetSpawnGroupID());\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error setting group spawn chance, check console for details.\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group chance [group's spawn chance percentage]\");\n\t\t\t\t}\n\t\t\t\telse if(sep && sep->arg[0][0] && strcmp(sep->arg[0], \"level\") == 0)\n\t\t\t\t{\n\t\t\t\t\tint32 group_id = target->GetSpawnGroupID();\n\t\t\t\t\tif(!group_id)\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"That spawn is not in a group!\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tSpawnGroupLevelData level_settings = target->GetZone()->GetSpawnGroupLevelSettings(group_id);\n\n\t\t\t\t\t\tif(sep->arg[1] && strcasecmp(sep->arg[1], \"off\") == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(database.SetSpawnGroupLevelSettings(group_id, false, level_settings.level_min, level_settings.level_max))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttarget->GetZone()->SetSpawnGroupLevelSettings(group_id, false, level_settings.level_min, level_settings.level_max);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Level range mode disabled for group id: %u\", group_id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error setting group level settings, check console for details.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if((sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2)) || (sep->arg[1] && strcasecmp(sep->arg[1], \"on\") == 0 && sep->arg[2] && sep->arg[3] && sep->IsNumber(2) && sep->IsNumber(3)))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint16 min_level = 0;\n\t\t\t\t\t\t\tint16 max_level = 0;\n\n\t\t\t\t\t\t\tif(sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmin_level = atoi(sep->arg[1]);\n\t\t\t\t\t\t\t\tmax_level = atoi(sep->arg[2]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tmin_level = atoi(sep->arg[2]);\n\t\t\t\t\t\t\t\tmax_level = atoi(sep->arg[3]);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(max_level < min_level)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tint16 tmp = min_level;\n\t\t\t\t\t\t\t\tmin_level = max_level;\n\t\t\t\t\t\t\t\tmax_level = tmp;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(database.SetSpawnGroupLevelSettings(group_id, true, min_level, max_level))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttarget->GetZone()->SetSpawnGroupLevelSettings(group_id, true, min_level, max_level);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Group %u will now randomize spawn level between %u and %u.\", group_id, min_level, max_level);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error setting group level settings, check console for details.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(sep->arg[1] && strcasecmp(sep->arg[1], \"on\") == 0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(level_settings.level_min == 0 && level_settings.level_max == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No level range is currently configured for this group. Use '/spawn group level [min] [max]' first.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(database.SetSpawnGroupLevelSettings(group_id, true, level_settings.level_min, level_settings.level_max))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttarget->GetZone()->SetSpawnGroupLevelSettings(group_id, true, level_settings.level_min, level_settings.level_max);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Group %u will now randomize spawn level between %u and %u.\", group_id, level_settings.level_min, level_settings.level_max);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Error setting group level settings, check console for details.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group level off\");\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group level on [min] [max]\");\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group level [min] [max]\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This command allows you to modify spawn groups.\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn group [create/add/remove/chance/associate/deassociate/level]\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must select a valid spawn to use this command.\");\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn group create [name]",
        "Could not use spawn to create a new group.  Likely cause would be a newly spawned spawn that did not exist when /reload spawns was last used.",
        "No spawns found in the current zone for that spawn group, be sure to use '/spawn group create' first!",
        "Syntax: /spawn group add [group id]",
        "Allows you to spawn only one associated group at once.  Syntax: /spawn group associate [other group id]",
        "Removes previous group associations.  Syntax: /spawn group deassociate [other group id]",
        "Syntax: /spawn group chance [group's spawn chance percentage]",
        "No level range is currently configured for this group. Use '/spawn group level [min] [max]' first.",
        "Syntax: /spawn group level off",
        "Syntax: /spawn group level on [min] [max]",
        "Syntax: /spawn group level [min] [max]",
        "Syntax: /spawn group [create/add/remove/chance/associate/deassociate/level]",
        "You must select a valid spawn to use this command."
      ]
    },
    "80": {
      "symbol": "COMMAND_SPAWN_COMBINE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5002,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tfloat radius = 0;\n\t\t\tbool failed = true;\n\t\t\tif(spawn && !spawn->IsPlayer() && sep && sep->arg[0] && sep->arg[0][0]){\n\t\t\t\tfailed = false;\n\t\t\t\tif(spawn->GetSpawnGroupID() > 0){\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Can not combine this spawn as it is in a spawn group.  Remove it from the group and try again.\");\n\t\t\t\t}\n\t\t\t\telse if(sep->IsNumber(0)){\n\t\t\t\t\tradius = atof(sep->arg[0]);\n\t\t\t\t\tclient->CombineSpawns(radius, spawn);\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tif(strncasecmp(sep->arg[0], \"add\", 3) == 0){\n\t\t\t\t\t\tclient->AddCombineSpawn(spawn);\n\t\t\t\t\t}\n\t\t\t\t\telse if(strncasecmp(sep->arg[0], \"remove\", 6) == 0){\n\t\t\t\t\t\tclient->RemoveCombineSpawn(spawn);\n\t\t\t\t\t}\n\t\t\t\t\telse if(strncasecmp(sep->arg[0], \"save\", 4) == 0){\n\t\t\t\t\t\tconst char* name = 0;\n\t\t\t\t\t\tif(sep->arg[1] && sep->arg[1][0])\n\t\t\t\t\t\t\tname = sep->argplus[1];\n\t\t\t\t\t\tclient->SaveCombineSpawns(name);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tfailed = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(failed){\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This command combines several spawns into a single spawn group.\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Syntax: /spawn combine [radius/add/remove/save]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Ex: /spawn combine 1, /spawn combine save (spawn group name)\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn combine [radius/add/remove/save]",
        "Ex: /spawn combine 1, /spawn combine save (spawn group name)"
      ]
    },
    "44": {
      "symbol": "COMMAND_SPAWN_CREATE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5039,
      "body": "{\n\t\t\tSpawn* spawn = 0;\n\t\t\tif(sep && sep->arg[4][0] && strncasecmp(sep->arg[0], \"object\", 6) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)){\n\t\t\t\tspawn = new Object();\n\t\t\t\tmemset(&spawn->appearance, 0, sizeof(spawn->appearance));\n\t\t\t}\n\t\t\telse if (sep && sep->arg[4][0] && strncasecmp(sep->arg[0], \"groundspawn\", 11) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)) {\n\t\t\t\tspawn = new GroundSpawn();\n\t\t\t\tmemset(&spawn->appearance, 0, sizeof(spawn->appearance));\n\t\t\t}\n\t\t\telse if (sep && sep->arg[4][0] && strncasecmp(sep->arg[0], \"sign\", 4) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)) {\n\t\t\t\tspawn = new Sign();\n\t\t\t\tmemset(&spawn->appearance, 0, sizeof(spawn->appearance));\n\t\t\t}\n\t\t\telse if(sep && sep->arg[4][0] && strncasecmp(sep->arg[0], \"npc\", 3) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3)){\n\t\t\t\tspawn = new NPC();\n\t\t\t\tmemset(&spawn->appearance, 0, sizeof(spawn->appearance));\n\t\t\t\tspawn->appearance.pos.collision_radius = 32;\n\t\t\t\tspawn->secondary_command_list_id = 0;\n\t\t\t\tspawn->primary_command_list_id = 0;\n\t\t\t\tspawn->appearance.display_name = 1;\n\t\t\t\tspawn->appearance.show_level = 1;\n\t\t\t\tspawn->appearance.attackable = 1;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn create [spawn type] [race type] [class type] [level] [name] (difficulty) (size)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"All parameters are required except difficulty and size.  Valid types are Object, NPC, Sign, or GroundSpawn\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Ex: /spawn create npc 203 1 50 'Lady Vox' 1 32\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tspawn->SetID(Spawn::NextID());\n\t\t\tspawn->SetX(client->GetPlayer()->GetX());\n\t\t\tspawn->SetY(client->GetPlayer()->GetY());\n\t\t\tspawn->SetZ(client->GetPlayer()->GetZ());\n\t\t\tspawn->SetHeading(client->GetPlayer()->GetHeading());\n\t\t\tspawn->SetSpawnOrigX(spawn->GetX());\n\t\t\tspawn->SetSpawnOrigY(spawn->GetY());\n\t\t\tspawn->SetSpawnOrigZ(spawn->GetZ());\n\t\t\tspawn->SetSpawnOrigHeading(spawn->GetHeading());\n\n\t\t\t\n\t\t\tif(spawn->IsSign())\n\t\t\t{\n\t\t\t\t((Sign*)spawn)->SetSignType(SIGN_TYPE_GENERIC);\n\t\t\t\t((Sign*)spawn)->SetSignDistance(20.0f);\n\t\t\t\t((Sign*)spawn)->SetIncludeLocation(1);\n\t\t\t\t((Sign*)spawn)->SetIncludeHeading(1);\n\t\t\t\t((Sign*)spawn)->SetInitialState(1);\n\t\t\t\t((Sign*)spawn)->SetSignTitle(sep->arg[4]);\n\t\t\t\t((Sign*)spawn)->SetActivityStatus(64);\n\t\t\t\tspawn->appearance.race = 0;\n\t\t\t\tspawn->SetLevel(0);\n\t\t\t\tspawn->SetHP(0);\n\t\t\t\tspawn->SetTotalHP(0);\n\t\t\t\tspawn->SetPower(0);\n\t\t\t\tspawn->SetTotalPower(0);\n\t\t\t\tspawn->SetDifficulty(0);\n\t\t\t\tspawn->SetTargetable(0);\n\t\t\t\tspawn->SetSogaModelType(0);\n\t\t\t\tspawn->SetCollisionRadius(19);\n\t\t\t\t((Sign*)spawn)->SetWidgetX(client->GetPlayer()->GetX());\n\t\t\t\t((Sign*)spawn)->SetWidgetY(client->GetPlayer()->GetY());\n\t\t\t\t((Sign*)spawn)->SetWidgetZ(client->GetPlayer()->GetZ());\n\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\tspawn->appearance.model_type = atoul(sep->arg[1]);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tspawn->appearance.targetable = 1;\n\t\t\t\tspawn->appearance.race = 255;\n\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\tspawn->SetModelType(atoi(sep->arg[1]));\n\t\t\t\tspawn->SetAdventureClass(atoi(sep->arg[2]));\n\t\t\t\tspawn->SetLevel(atoi(sep->arg[3]));\n\t\t\t\tspawn->SetName(sep->arg[4]);\n\t\t\t\tif(sep->arg[5][0] && sep->IsNumber(5))\n\t\t\t\t\tspawn->SetDifficulty(atoi(sep->arg[5]));\n\t\t\t\tif(sep->arg[6][0] && sep->IsNumber(6))\n\t\t\t\t\tspawn->size = atoi(sep->arg[6]);\n\t\t\t\tif(spawn->GetTotalHP() == 0){\n\t\t\t\t\tspawn->SetTotalHP(25*spawn->GetLevel() + 1);\n\t\t\t\t\tspawn->SetHP(25*spawn->GetLevel() + 1);\n\t\t\t\t}\n\t\t\t\tif(spawn->GetTotalPower() == 0){\n\t\t\t\t\tspawn->SetTotalPower(25*spawn->GetLevel() + 1);\n\t\t\t\t\tspawn->SetPower(25*spawn->GetLevel() + 1);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclient->GetCurrentZone()->AddSpawn(spawn);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn create [spawn type] [race type] [class type] [level] [name] (difficulty) (size)",
        "All parameters are required except difficulty and size.  Valid types are Object, NPC, Sign, or GroundSpawn",
        "Ex: /spawn create npc 203 1 50 'Lady Vox' 1 32"
      ]
    },
    "51": {
      "symbol": "COMMAND_SPAWN_EQUIPMENT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5131,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && sep && sep->arg[1][0] && sep->IsNumber(0) && sep->IsNumber(1) && spawn->IsEntity()){\n\t\t\t\tint8 slot = atoi(sep->arg[0]);\n\t\t\t\tint16 type = atoi(sep->arg[1]);\n\t\t\t\tint8 red = 0;\n\t\t\t\tint8 green = 0;\n\t\t\t\tint8 blue = 0;\n\t\t\t\tint8 h_red = 0;\n\t\t\t\tint8 h_green = 0;\n\t\t\t\tint8 h_blue = 0;\n\t\t\t\tif(sep->arg[2])\n\t\t\t\t\tred = atoi(sep->arg[2]);\n\t\t\t\tif(sep->arg[3])\n\t\t\t\t\tgreen = atoi(sep->arg[3]);\n\t\t\t\tif(sep->arg[4])\n\t\t\t\t\tblue = atoi(sep->arg[4]);\n\t\t\t\tif(sep->arg[5])\n\t\t\t\t\th_red = atoi(sep->arg[5]);\n\t\t\t\tif(sep->arg[6])\n\t\t\t\t\th_green = atoi(sep->arg[6]);\n\t\t\t\tif(sep->arg[7])\n\t\t\t\t\th_blue = atoi(sep->arg[7]);\n\t\t\t\t((Entity*)spawn)->SetEquipment(slot, type, red, green, blue, h_red, h_green, h_blue);\n\t\t\t\tdatabase.SaveNPCAppearanceEquipment(spawn->GetDatabaseID() , slot, type, red, green, blue, h_red, h_green, h_blue);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn equipment [slot] [appearance id] (red) (green) (blue) (highlight red) (hgreen) (hblue)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This will set the given spawn's equipment. \");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Slot is 0-24, Appearance ID from appearances table, Colors are 0-255\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn equipment [slot] [appearance id] (red) (green) (blue) (highlight red) (hgreen) (hblue)"
      ]
    },
    "52": {
      "symbol": "COMMAND_SPAWN_DETAILS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5164,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif (sep && sep->arg[0][0]) {\n\t\t\t\tif (cmdTarget)\n\t\t\t\t{\n\t\t\t\t\tif (stricmp(sep->arg[0], \"group\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tDescribeSpawnGroup(client, spawn, true);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"los\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tbool hasLOS = client->GetPlayer()->CheckLoS(cmdTarget);\n\t\t\t\t\t\tif (hasLOS)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You have line of sight with %s\", spawn->GetName());\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"You DO NOT have line of sight with %s\", spawn->GetName());\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"bestz\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tglm::vec3 targPos(cmdTarget->GetX(), cmdTarget->GetZ(), cmdTarget->GetY());\n\n\t\t\t\t\t\tfloat bestZ = client->GetPlayer()->FindDestGroundZ(targPos, cmdTarget->GetYOffset());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Best Z for %s is %f\", spawn->GetName(), bestZ);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"inwater\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (cmdTarget->GetRegionMap() == nullptr)\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"No water map for zone.\");\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbool inWater = cmdTarget->InWater();\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s is %s.\", cmdTarget->GetName(), inWater ? \"in water\" : \"out of water\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"inlava\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (cmdTarget->GetRegionMap() == nullptr)\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"No region map for zone.\");\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbool inLava = cmdTarget->InLava();\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s is %s.\", cmdTarget->GetName(), inLava ? \"in lava\" : \"out of lava\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"regions\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tglm::vec3 targPos(cmdTarget->GetX(), cmdTarget->GetY(), cmdTarget->GetZ());\n\n\t\t\t\t\t\tif (cmdTarget->GetRegionMap() == nullptr)\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"No region map for zone.\");\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcmdTarget->GetRegionMap()->IdentifyRegionsInGrid(client, targPos);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"behind\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tbool isBehind = client->GetPlayer()->BehindTarget(cmdTarget);\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s %s.\", isBehind ? \"YOU are behind\" : \"YOU are NOT behind\", cmdTarget->GetName());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"infront\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tbool isBehind = client->GetPlayer()->InFrontSpawn(cmdTarget, client->GetPlayer()->GetX(), client->GetPlayer()->GetZ());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s %s.\", isBehind ? \"YOU are infront of\" : \"YOU are NOT infront of\", cmdTarget->GetName());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"flank\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tbool isFlanking = client->GetPlayer()->FlankingTarget(cmdTarget);\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s is %s.\", isFlanking ? \"YOU are flanking\" : \"YOU are NOT flanking\", cmdTarget->GetName());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"aggro\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(cmdTarget->IsNPC() && ((NPC*)cmdTarget)->Brain()) {\n\t\t\t\t\t\t\t((NPC*)cmdTarget)->Brain()->SendEncounterList(client);\n\t\t\t\t\t\t\t((NPC*)cmdTarget)->Brain()->SendHateList(client);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"/spawn details aggro is for NPCs only!\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"spells\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (cmdTarget->IsNPC()) {\n\t\t\t\t\t\t\tSendNPCSpellDetails(client, (NPC*)cmdTarget);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"/spawn details spells is for NPCs only!\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"angle\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tfloat spawnAngle = client->GetPlayer()->GetFaceTarget(cmdTarget->GetX(), cmdTarget->GetZ());\n\t\t\t\t\t\t\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Angle %f between player %s and target %s\", spawnAngle, client->GetPlayer()->GetTarget() ? client->GetPlayer()->GetTarget()->GetName() : client->GetPlayer()->GetName(), client->GetPlayer()->GetName());\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (stricmp(sep->arg[0], \"hated\") == 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\t\t\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\t\t\t\t\ttarget->SendHatedByList(client);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"No target or target is not entity to display hated by list.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sep->IsNumber(0))\n\t\t\t\t{\n\t\t\t\t\tfloat radius = atof(sep->arg[0]);\n\t\t\t\t\tif (!client->GetCurrentZone()->SendRadiusSpawnInfo(client, radius))\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No results in the radius were found.\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (spawn) {\n\t\t\t\tconst char* type = \"NPC\";\n\t\t\t\tif (spawn->IsObject())\n\t\t\t\t\ttype = \"Object\";\n\t\t\t\telse if (spawn->IsSign())\n\t\t\t\t\ttype = \"Sign\";\n\t\t\t\telse if (spawn->IsWidget())\n\t\t\t\t\ttype = \"Widget\";\n\t\t\t\telse if (spawn->IsGroundSpawn())\n\t\t\t\t\ttype = \"GroundSpawn\";\n\t\t\t\t\n\t\t\t\tint16 race_type = race_types_list.GetRaceType(spawn->GetModelType());\n\t\t\t\tint16 race_base_type = race_types_list.GetRaceBaseType(spawn->GetModelType());\n\t\t\t\tchar* category = race_types_list.GetRaceTypeCategory(spawn->GetModelType());\n\t\t\t\tchar* subcategory = race_types_list.GetRaceTypeSubCategory(spawn->GetModelType());\n\t\t\t\tchar* modelname = race_types_list.GetRaceTypeModelName(spawn->GetModelType());\n\t\t\t\t\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Name: %s, %s ID: %u\", spawn->GetName(), type, spawn->GetDatabaseID());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Last Name: %s, Sub-Title: %s, Prefix: %s, Suffix: %s\", spawn->GetLastName(), spawn->GetSubTitle(), spawn->GetPrefixTitle(), spawn->GetSuffixTitle());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn Location ID: %u, Spawn Group ID: %u\", spawn->GetSpawnLocationID(), spawn->GetSpawnGroupID());\n\t\t\t\tconst string group_details = DescribeSpawnGroup(client, spawn, true);\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Faction ID: %u, Merchant ID: %u, Transporter ID: %u\", spawn->GetFactionID(), spawn->GetMerchantID(), spawn->GetTransporterID());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Grid ID: %u\", spawn->GetLocation());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Race: %i, Class: %i, Gender: %i\", spawn->GetRace(), spawn->GetAdventureClass(), spawn->GetGender());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Level: %i, HP: %u / %u, Power: %u / %u\", spawn->GetLevel(), spawn->GetHP(), spawn->GetTotalHP(), spawn->GetPower(), spawn->GetTotalPower());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Respawn Time: %u (sec), X: %f, Y: %f, Z: %f Heading: %f\", spawn->GetRespawnTime(), spawn->GetX(), spawn->GetY(), spawn->GetZ(), spawn->GetHeading());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Speed: %f, Base Speed: %f\", spawn->GetSpeed(), spawn->GetBaseSpeed());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Collision Radius: %i, Size: %i, Difficulty: %i, Heroic: %i\", spawn->GetCollisionRadius(), spawn->GetSize(), spawn->GetDifficulty(), spawn->GetHeroic());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Targetable: %i, Show Name: %i, Attackable: %i, Show Level: %i\", spawn->GetTargetable(), spawn->GetShowName(), spawn->GetAttackable(), spawn->GetShowLevel());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Show Command Icon: %i, Display Hand Icon: %i\", spawn->GetShowCommandIcon(), spawn->GetShowHandIcon());\n\t\t\t\tif (spawn->IsEntity()) {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Facial Hair Type: %i, Hair Type: %i, Chest Type: %i, Legs Type: %i\", ((Entity*)spawn)->GetFacialHairType(), ((Entity*)spawn)->GetHairType(), ((Entity*)spawn)->GetChestType(), ((Entity*)spawn)->GetLegsType());\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Soga Facial Hair Type: %i, Soga Hair Type: %i, Wing Type: %i\", ((Entity*)spawn)->GetSogaFacialHairType(), ((Entity*)spawn)->GetSogaHairType(), ((Entity*)spawn)->GetWingType());\n\t\t\t\t}\n\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Model Type: %i, Soga Race Type: %i, Race Type: %u, Race Base Type: %u, Race Category: %s (subcategory: %s), Model Name: %s.\", spawn->GetModelType(), spawn->GetSogaModelType(), race_type, race_base_type, category, subcategory, modelname);\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Primary Command Type: %u, Secondary Command Type: %u\", spawn->GetPrimaryCommandListID(), spawn->GetSecondaryCommandListID());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Visual State: %i, Action State: %i, Mood State: %i, Initial State: %i, Activity Status: %i\", spawn->GetVisualState(), spawn->GetActionState(), spawn->GetMoodState(), spawn->GetInitialState(), spawn->GetActivityStatus());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Emote State: %i, Pitch: %f, Roll: %f, Hide Hood: %i\", spawn->GetEmoteState(), spawn->GetPitch(), spawn->GetRoll(), spawn->appearance.hide_hood);\n\t\t\t\tif (spawn->IsNPC())\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Randomize: %u\", ((NPC*)spawn)->GetRandomize());\n\t\t\t\tif (spawn->IsNPC()){\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Heat Resist/Base: %u/%u\",((NPC*)spawn)->GetHeatResistance(), ((NPC*)spawn)->GetHeatResistanceBase());\t\t\t\t\t\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Cold Resist/Base: %u/%u\",((NPC*)spawn)->GetColdResistance(), ((NPC*)spawn)->GetColdResistanceBase());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Magic Resist/Base: %u/%u\",((NPC*)spawn)->GetMagicResistance(), ((NPC*)spawn)->GetMagicResistanceBase());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Mental Resist/Base: %u/%u\",((NPC*)spawn)->GetMentalResistance(), ((NPC*)spawn)->GetMentalResistanceBase());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Divine Resist/Base: %u/%u\",((NPC*)spawn)->GetDivineResistance(), ((NPC*)spawn)->GetDivineResistanceBase());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Disease Resist/Base: %u/%u\",((NPC*)spawn)->GetDiseaseResistance(), ((NPC*)spawn)->GetDiseaseResistanceBase());\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Poison Resist/Base: %u/%u\",((NPC*)spawn)->GetPoisonResistance(), ((NPC*)spawn)->GetPoisonResistanceBase());\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tstring details;\n\t\t\t\tdetails += \"\\\\#0000FFName:\t\" + string(spawn->GetName()) + \"\\n\";\n\t\t\t\tdetails += \"Type:\t\" + string(type) + \"\\n\";\n\t\t\t\tdetails += \"ID:\t\" + to_string(spawn->GetDatabaseID()) + \"\\n\";\n\t\t\t\tdetails += \"Last Name:\t\" + string(spawn->GetLastName()) + \"\\n\";\n\t\t\t\tdetails += \"Sub-Title:\t\" + string(spawn->GetSubTitle()) + \"\\n\";\n\t\t\t\tdetails += \"Prefix:\t\" + string(spawn->GetPrefixTitle()) + \"\\n\";\n\t\t\t\tdetails += \"Suffix:\t\" + string(spawn->GetSuffixTitle()) + \"\\n\";\n\t\t\t\tdetails += \"Race:\t\t\" + to_string(spawn->GetRace()) + \"\\n\";\n\t\t\t\tdetails += \"Class:\t\t\" + to_string(spawn->GetAdventureClass()) + \"\\n\";\n\t\t\t\tdetails += \"Gender:\t\t\" + to_string(spawn->GetGender()) + \"\\n\";\n\t\t\t\tdetails += \"Level:\t\t\" + to_string(spawn->GetLevel()) + \"\\n\";\n\t\t\t\tdetails += \"HP:\t\t\" + to_string(spawn->GetHP()) + \" / \" + to_string(spawn->GetTotalHP()) + \"(\" + to_string(spawn->GetIntHPRatio()) + \"%)\\n\";\n\t\t\t\tdetails += \"Power:\t\t\" + to_string(spawn->GetPower()) + + \" / \" + to_string(spawn->GetTotalPower()) + \"\\n\";\n\t\t\t\tdetails += \"Difficulty:\t\t\" + to_string(spawn->GetDifficulty()) + \"\\n\";\n\t\t\t\tdetails += \"Heroic:\t\t\" + to_string(spawn->GetHeroic()) + \"\\n\";\n\t\t\t\tdetails += \"Group ID:\t\t\" + to_string(spawn->GetSpawnGroupID()) + \"\\n\";\n\t\t\t\tdetails += \"Faction ID:\t\t\" + to_string(spawn->GetFactionID()) + \"\\n\";\n\t\t\t\tdetails += \"Merchant ID:\t\" + to_string(spawn->GetMerchantID()) + \"\\n\";\n\t\t\t\tdetails += \"Transport ID:\t\" + to_string(spawn->GetTransporterID()) + \"\\n\";\n\t\t\t\tdetails += \"Location ID:\t\" + to_string(spawn->GetSpawnLocationID()) + \"\\n\";\n\t\t\t\tchar x[16];\n\t\t\t\tsnprintf(x, sizeof(x), \"%.2f\", spawn->GetX());\n\t\t\t\tchar y[16];\n\t\t\t\tsnprintf(y, sizeof(y), \"%.2f\", spawn->GetY());\n\t\t\t\tchar z[16];\n\t\t\t\tsnprintf(z, sizeof(z), \"%.2f\", spawn->GetZ());\n\t\t\t\tdetails += \"Location:\t\" + string(x) + \", \" + string(y) + \", \" + string(z) + \"\\n\";\n\n\t\t\t\tstring details2;\n\t\t\t\tdetails2 += \"Heading:\t\t\" + to_string(spawn->GetHeading()) + \"\\n\";\n\t\t\t\tdetails2 += \"Grid ID:\t\t\" + to_string(spawn->GetLocation()) + \"\\n\";\n\t\t\t\tdetails2 += \"Size:\t\t\" + to_string(spawn->GetSize()) + \"\\n\";\n\t\t\t\tdetails2 += \"Collision Radius:\t\" + to_string(spawn->GetCollisionRadius()) + \"\\n\";\n\t\t\t\tdetails2 += \"Respawn Time:\t\" + to_string(spawn->GetRespawnTime()) + \"\\n\";\n\t\t\t\tdetails2 += \"Targetable:\t\t\" + to_string(spawn->GetTargetable()) + \"\\n\";\n\t\t\t\tdetails2 += \"Show Name:\t\" + to_string(spawn->GetShowName()) + \"\\n\";\n\t\t\t\tdetails2 += \"Attackable:\t\t\" + to_string(spawn->GetAttackable()) + \"\\n\";\n\t\t\t\tdetails2 += \"Show Level:\t\t\" + to_string(spawn->GetShowLevel()) + \"\\n\";\n\t\t\t\tdetails2 += \"Show Command Icon:\t\" + to_string(spawn->GetShowCommandIcon()) + \"\\n\";\n\t\t\t\tdetails2 += \"Display Hand Icon:\t\" + to_string(spawn->GetShowHandIcon()) + \"\\n\";\n\t\t\t\tdetails2 += \"Model Type:\t\" + to_string(spawn->GetModelType()) + \"\\n\";\n\t\t\t\tdetails2 += \"Soga Race Type:\t\" + to_string(spawn->GetSogaModelType()) + \"\\n\";\n\t\t\t\tdetails2 += \"Race Type:\t\t\t\" + to_string(race_type) + \"\\n\";\n\t\t\t\tdetails2 += \"Race Base Type:\t\" + to_string(race_base_type) + \"\\n\";\n\t\t\t\tdetails2 += \"Race Category (Sub Category): \"\t + std::string(category) + \" (\" + std::string(subcategory) + \")\\n\";\n\t\t\t\tdetails2 += \"Model Name:\t\"\t  + std::string(modelname) + \"\\n\";\n\t\t\t\tdetails2 += \"Primary Command ID:\t\" + to_string(spawn->GetPrimaryCommandListID()) + \"\\n\";\n\t\t\t\tdetails2 += \"Secondary Cmd ID:\t\" + to_string(spawn->GetSecondaryCommandListID()) + \"\\n\";\n\t\t\t\tdetails2 += \"Visual State:\t\t\" + to_string(spawn->GetVisualState()) + \"\\n\";\n\t\t\t\tdetails2 += \"Action State:\t\" + to_string(spawn->GetActionState()) + \"\\n\";\n\t\t\t\tdetails2 += \"Mood State:\t\t\" + to_string(spawn->GetMoodState()) + \"\\n\";\n\t\t\t\tdetails2 += \"Initial State:\t\t\" + to_string(spawn->GetInitialState()) + \"\\n\";\n\t\t\t\tdetails2 += \"Activity Status:\t\" + to_string(spawn->GetActivityStatus()) + \"\\n\";\n\t\t\t\tdetails2 += \"Emote State:\t\t\" + to_string(spawn->GetEmoteState()) + \"\\n\";\n\n\t\t\t\tstring details3;\n\t\t\t\tdetails3 += \"Pitch:\t\" + to_string(spawn->GetPitch()) + \"\\n\";\n\t\t\t\tdetails3 += \"Roll:\t\" + to_string(spawn->GetRoll()) + \"\\n\";\n\t\t\t\tdetails3 += \"Hide Hood:\t\" + to_string(spawn->appearance.hide_hood) + \"\\n\";\n\t\t\t\tdetails3 += \"Speed:\t\" + to_string(spawn->GetSpeed()) + \"\\n\";\n\t\t\t\tdetails3 += \"BaseSpeed:\t\" + to_string(spawn->GetBaseSpeed()) + \"\\n\";\n\t\t\t\tif (client && client->GetCurrentZone()) {\n\t\t\t\t\tint32 dead_spawn_remaining_time = client->GetCurrentZone()->GetDeadSpawnRemainingTime(spawn->GetID());\n\t\t\t\t\tif (dead_spawn_remaining_time > 0)\n\t\t\t\t\t\tdetails3 += \"Dead Spawn Remaining:\t\" + FormatRemainingSpawnTime(dead_spawn_remaining_time) + \"\\n\";\n\t\t\t\t}\n\n\t\t\t\tif(spawn->IsSign()) {\n\t\t\t\t\tdetails3 += \"Sign Language: \" + to_string(((Sign*)spawn)->GetLanguage()) + \"\\n\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(spawn->IsEntity())\n\t\t\t\t{\n\t\t\t\t\tEntity* ent = (Entity*)spawn;\n\t\t\t\t\tdetails3 += \"STR / STRBase:\t\" + to_string(ent->GetInfoStruct()->get_str()) + \" / \" + to_string(ent->GetInfoStruct()->get_str_base()) + \"\\n\";\n\t\t\t\t\tdetails3 += \"AGI / AGIBase:\t\" + to_string(ent->GetInfoStruct()->get_agi()) + \" / \" + to_string(ent->GetInfoStruct()->get_agi_base()) + \"\\n\";\n\t\t\t\t\tdetails3 += \"STA / STABase:\t\" + to_string(ent->GetInfoStruct()->get_sta()) + \" / \" + to_string(ent->GetInfoStruct()->get_sta_base()) + \"\\n\";\n\t\t\t\t\tdetails3 += \"INT / INTBase:\t\" + to_string(ent->GetInfoStruct()->get_intel()) + \" / \" + to_string(ent->GetInfoStruct()->get_intel_base()) + \"\\n\";\n\t\t\t\t\tdetails3 += \"WIS / WISBase:\t\" + to_string(ent->GetInfoStruct()->get_wis()) + \" / \" + to_string(ent->GetInfoStruct()->get_wis_base()) + \"\\n\";\n\t\t\t\t\tdetails3 += \"HPRegen:\t\" + to_string(ent->GetInfoStruct()->get_hp_regen()) + \"\\n\";\n\t\t\t\t\tdetails3 += \"PowerRegen:\t\" + to_string(ent->GetInfoStruct()->get_power_regen()) + \"\\n\";\n\t\t\t\t}\n\n\t\t\t\tstring details4 = group_details + \"\\n\";\n\t\t\t\tif (spawn->IsEntity()) {\n\t\t\t\t\tdetails4 += \"Facial Hair Type:\t\" + to_string(((Entity*)spawn)->GetFacialHairType()) + \"\\n\";\n\t\t\t\t\tdetails4 += \"Hair Type:\t\t\" + to_string(((Entity*)spawn)->GetHairType()) + \"\\n\";\n\t\t\t\t\tdetails4 += \"Chest Type:\t\t\" + to_string(((Entity*)spawn)->GetChestType()) + \"\\n\";\n\t\t\t\t\tdetails4 += \"Legs Type:\t\t\" + to_string(((Entity*)spawn)->GetLegsType()) + \"\\n\";\n\t\t\t\t\tdetails4 += \"Soga Facial Hair Type:\t\" + to_string(((Entity*)spawn)->GetSogaFacialHairType()) + \"\\n\";\n\t\t\t\t\tdetails4 += \"Soga Hair Type:\t\" + to_string(((Entity*)spawn)->GetSogaHairType()) + \"\\n\";\n\t\t\t\t\tdetails4 += \"Wing Type:\t\t\" + to_string(((Entity*)spawn)->GetWingType()) + \"\\n\";\n\t\t\t\t\tif (spawn->IsNPC()) {\n\t\t\t\t\t\tdetails4 += \"\\nRandomize:\t\t\" + to_string(((NPC*)spawn)->GetRandomize()) + \"\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst char* spawnScriptMsg = (spawn->GetSpawnScript() && strlen(spawn->GetSpawnScript())>0) ? spawn->GetSpawnScript() : \"Not Set\";\n\t\t\t\tdetails4 += \"\\nSpawnScript:\t\t\" + std::string(spawnScriptMsg) + \"\\n\";\n\n\t\t\t\tstring title = string(spawn->GetName()) + \"(\" + to_string(spawn->GetDatabaseID()) + \")\";\n\t\t\t\tclient->SendShowBook(client->GetPlayer(), title, 0, 4, details, details2, details3, details4);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn details [group|radius]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This will display information about the currently selected spawn, or in the case of specifying a numerical radius will show minor details about spawns in the players radius.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }",
      "delegates": [
        {
          "function": "DescribeSpawnGroup",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 187,
          "body": "{\n\tPlayer* observer = client->GetPlayer();\n\tconst int32 active_id = observer->GetIDWithPlayerSpawn(spawn);\n\tconst int32 client_id = active_id ? active_id : observer->GetReservedSpawnID(spawn->GetID());\n\tconst char* mapping = active_id ? \"active\" : (client_id ? \"reserved\" : \"unassigned\");\n\tstd::vector<Spawn*>* members = spawn->GetSpawnGroup();\n\tstd::vector<int32> current_ids;\n\tstd::vector<string> member_rows;\n\tbool includes_self = false;\n\tif (members) {\n\t\tfor (Spawn* member : *members) {\n\t\t\tif (!member) {\n\t\t\t\tcurrent_ids.push_back(0);\n\t\t\t\tmember_rows.push_back(\"Missing member: group_spawn_id=0 (unassigned)\");\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tincludes_self = includes_self || member == spawn;\n\t\t\tconst int32 member_active_id = observer->GetIDWithPlayerSpawn(member);\n\t\t\tconst int32 member_id = member_active_id ? member_active_id : observer->GetReservedSpawnID(member->GetID());\n\t\t\tcurrent_ids.push_back(member_id);\n\t\t\tmember_rows.push_back(string(member->GetName()) + (member == spawn ? \" (selected)\" : \"\") +\n\t\t\t\t\": runtime_id=\" + to_string(member->GetID()) + \", group_spawn_id=\" + to_string(member_id) +\n\t\t\t\t\" (\" + (member_active_id ? \"active\" : (member_id ? \"reserved\" : \"unassigned\")) +\n\t\t\t\t\"), send_state=\" + GetSpawnGroupSendState(observer, member) +\n\t\t\t\t(member->IsDeletedSpawn() ? \", DELETED\" : \"\"));\n\t\t}\n\t}\n\tsafe_delete(members);\n\n\tconst string identity = \"Runtime ID: \" + to_string(spawn->GetID()) + \", observer client ID: \" +\n\t\tto_string(client_id) + \" (\" + mapping + \"), send_state=\" + GetSpawnGroupSendState(observer, spawn);\n\tconst string membership = \"Current group_size=\" + to_string(current_ids.size()) +\n\t\t(current_ids.empty() ? \" (ungrouped)\" : (includes_self ? \" (includes selected spawn)\" : \" (selected spawn MISSING)\"));\n\tstring summary = identity + \"\\n\" + membership + \"\\n\";\n\tsummary += \"Current group_spawn_id: \" + FormatSpawnGroupIDs(current_ids, 8) + \"\\n\";\n\n\tif (chat_output) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn group: %s, database group ID=%u\", spawn->GetName(), spawn->GetSpawnGroupID());\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, identity.c_str());\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, membership.c_str());\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Current group_spawn_id=%s\", FormatSpawnGroupIDs(current_ids, 255).c_str());\n\t\tfor (size_t i = 0; i < member_rows.size(); ++i)\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"  [%u] %s\", static_cast<unsigned>(i), member_rows[i].c_str());\n\t}\n\treturn summary;\n}"
        },
        {
          "function": "GetSpawnGroupSendState",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 177,
          "body": "{\n\tif (observer->IsRemovingSpawn(spawn->GetID()))\n\t\treturn \"removing\";\n\tif (observer->IsSendingSpawn(spawn->GetID()))\n\t\treturn \"sending\";\n\tif (observer->WasSentSpawn(spawn->GetID()))\n\t\treturn \"sent\";\n\treturn \"not sent\";\n}"
        },
        {
          "function": "FormatSpawnGroupIDs",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 165,
          "body": "{\n\tstring text = \"[\";\n\tfor (size_t i = 0; i < ids.size() && i < limit; ++i) {\n\t\tif (i)\n\t\t\ttext += \", \";\n\t\ttext += to_string(ids[i]);\n\t}\n\tif (ids.size() > limit)\n\t\ttext += \", ... (+\" + to_string(ids.size() - limit) + \")\";\n\treturn text + \"]\";\n}"
        },
        {
          "function": "SendNPCSpellDetails",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 300,
          "body": "{\n\tif (!client || !npc)\n\t\treturn;\n\n\tstring spell_details;\n\tspell_details += \"NPC: \" + string(npc->GetName()) + \" (\" + to_string(npc->GetDatabaseID()) + \")\\n\";\n\tspell_details += \"Primary Spell List: \" + to_string(npc->GetPrimarySpellList()) + \"\\n\";\n\tspell_details += \"Secondary Spell List: \" + to_string(npc->GetSecondarySpellList()) + \"\\n\";\n\tspell_details += \"Has Spells: \" + string(GetBoolText(npc->HasSpells())) + \"\\n\";\n\tif(npc->GetPrimarySpellList() > 0 && npc->GetSecondarySpellList() > 0 && npc->GetPrimarySpellList() != npc->GetSecondarySpellList()) {\n\t\tsint32 primary_chance = npc->GetPrimarySpellListChance() < 0 ? 50 : npc->GetPrimarySpellListChance();\n\t\tsint32 secondary_chance = npc->GetSecondarySpellListChance() < 0 ? 50 : npc->GetSecondarySpellListChance();\n\t\tif(primary_chance + secondary_chance == 0) {\n\t\t\tprimary_chance = 50;\n\t\t\tsecondary_chance = 50;\n\t\t}\n\t\tspell_details += \"List Selection: Segmented (normalized list-owned shares)\\n\";\n\t\tspell_details += \"Primary List Chance: \" + (npc->GetPrimarySpellListChance() < 0 ? string(\"50 (default)\") : to_string((sint32)npc->GetPrimarySpellListChance())) + \"\\n\";\n\t\tspell_details += \"Secondary List Chance: \" + (npc->GetSecondarySpellListChance() < 0 ? string(\"50 (default)\") : to_string((sint32)npc->GetSecondarySpellListChance())) + \"\\n\";\n\t\tspell_details += \"Effective Chance Pool: \" + to_string(primary_chance) + \" + \" + to_string(secondary_chance) + \" = \" + to_string(primary_chance + secondary_chance) + \"\\n\";\n\t\tspell_details += \"Primary Combat Selection Mode: \" + string(GetNPCSpellSelectionModeName(npc->GetPrimarySpellSelectionMode())) + \"\\n\";\n\t\tspell_details += \"Secondary Combat Selection Mode: \" + string(GetNPCSpellSelectionModeName(npc->GetSecondarySpellSelectionMode())) + \"\\n\\n\";\n\t}\n\telse {\n\t\tspell_details += \"List Selection: Single list\\n\";\n\t\tspell_details += \"Combat Selection Mode: \" + string(GetNPCSpellSelectionModeName(npc->GetSpellSelectionMode())) + \"\\n\\n\";\n\t}\n\tAppendNPCSpellBucketDetails(&spell_details, \"NPC::spells\", npc->GetSpells());\n\n\tstring cast_on_spawn_details;\n\tcast_on_spawn_details += \"NPC: \" + string(npc->GetName()) + \" (\" + to_string(npc->GetDatabaseID()) + \")\\n\\n\";\n\tstring cast_on_spawn_title = string(\"NPC::cast_on_spells[\") + GetNPCSpellCastTypeName(CAST_TYPE::CAST_ON_SPAWN) + \"]\";\n\tAppendNPCSpellBucketDetails(&cast_on_spawn_details, cast_on_spawn_title.c_str(), npc->GetCastOnSpells(CAST_TYPE::CAST_ON_SPAWN));\n\n\tstring cast_on_aggro_details;\n\tcast_on_aggro_details += \"NPC: \" + string(npc->GetName()) + \" (\" + to_string(npc->GetDatabaseID()) + \")\\n\\n\";\n\tstring cast_on_aggro_title = string(\"NPC::cast_on_spells[\") + GetNPCSpellCastTypeName(CAST_TYPE::CAST_ON_AGGRO) + \"]\";\n\tAppendNPCSpellBucketDetails(&cast_on_aggro_details, cast_on_aggro_title.c_str(), npc->GetCastOnSpells(CAST_TYPE::CAST_ON_AGGRO));\n\n\tstring title = string(npc->GetName()) + \" spell details (\" + to_string(npc->GetDatabaseID()) + \")\";\n\tclient->SendShowBook(client->GetPlayer(), title, 0, 3, spell_details, cast_on_spawn_details, cast_on_aggro_details);\n}"
        },
        {
          "function": "GetBoolText",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 161,
          "body": "{\n\treturn value ? \"true\" : \"false\";\n}"
        },
        {
          "function": "GetNPCSpellSelectionModeName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 245,
          "body": "{\n\tswitch (selection_mode) {\n\tcase NPC_SPELL_SELECTION_WEIGHTED:\n\t\treturn \"Weighted\";\n\tcase NPC_SPELL_SELECTION_MIXED_LEGACY:\n\t\treturn \"Mixed configuration (legacy fallback)\";\n\tdefault:\n\t\treturn \"Legacy\";\n\t}\n}"
        },
        {
          "function": "AppendNPCSpellBucketDetails",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 267,
          "body": "{\n\tif (!details || !title)\n\t\treturn;\n\n\t*details += \"\\\\#0000FF\";\n\t*details += title;\n\t*details += \"\\\\#000000\\n\";\n\t*details += \"Count: \" + to_string((int32)(npc_spells ? npc_spells->size() : 0)) + \"\\n\";\n\n\tif (!npc_spells || npc_spells->size() == 0) {\n\t\t*details += \"No spells loaded in this bucket.\\n\";\n\t\treturn;\n\t}\n\n\tfor (int32 i = 0; i < npc_spells->size(); i++) {\n\t\tNPCSpell* npc_spell = npc_spells->at(i);\n\t\tif (!npc_spell)\n\t\t\tcontinue;\n\n\t\t*details += \"\\n#\" + to_string(i + 1) + \"\\n\";\n\t\t*details += \"list_id: \" + to_string(npc_spell->list_id) + \"\\n\";\n\t\t*details += \"spell_id: \" + to_string(npc_spell->spell_id) + \"\\n\";\n\t\t*details += \"tier: \" + to_string((int32)npc_spell->tier) + \"\\n\";\n\t\t*details += \"spell_name: \" + GetNPCSpellName(npc_spell) + \"\\n\";\n\t\t*details += \"cast_on_spawn: \" + string(GetBoolText(npc_spell->cast_on_spawn)) + \"\\n\";\n\t\t*details += \"cast_on_initial_aggro: \" + string(GetBoolText(npc_spell->cast_on_initial_aggro)) + \"\\n\";\n\t\t*details += \"required_hp_ratio: \" + to_string((int32)npc_spell->required_hp_ratio) + \"\\n\";\n\t\t*details += \"require_level: \" + string(GetBoolText(npc_spell->require_level)) + \"\\n\";\n\t\t*details += \"selection_weight: \" + (npc_spell->selection_weight < 0 ? string(\"legacy/unconfigured\") : to_string((sint32)npc_spell->selection_weight)) + \"\\n\";\n\t\t*details += \"list_selection_chance: \" + (npc_spell->list_selection_chance < 0 ? string(\"default 50\") : to_string((sint32)npc_spell->list_selection_chance)) + \"\\n\";\n\t}\n}"
        },
        {
          "function": "GetNPCSpellName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 256,
          "body": "{\n\tif (!npc_spell)\n\t\treturn \"Unknown\";\n\n\tSpell* spell = master_spell_list.GetSpell(npc_spell->spell_id, npc_spell->tier);\n\tif (spell && spell->GetName())\n\t\treturn string(spell->GetName());\n\n\treturn \"Unknown\";\n}"
        },
        {
          "function": "GetNPCSpellCastTypeName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 234,
          "body": "{\n\tswitch (cast_type) {\n\tcase CAST_TYPE::CAST_ON_SPAWN:\n\t\treturn \"CAST_ON_SPAWN\";\n\tcase CAST_TYPE::CAST_ON_AGGRO:\n\t\treturn \"CAST_ON_AGGRO\";\n\tdefault:\n\t\treturn \"UNKNOWN\";\n\t}\n}"
        },
        {
          "function": "FormatRemainingSpawnTime",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 143,
          "body": "{\n\tif (remaining_time_ms <= 0)\n\t\treturn \"\";\n\n\tint64 total_seconds = (remaining_time_ms + 999) / 1000;\n\tif (total_seconds >= 3600) {\n\t\tint64 total_hours = (total_seconds + 3599) / 3600;\n\t\treturn to_string(total_hours) + \" hour\" + (total_hours == 1 ? \"\" : \"s\");\n\t}\n\n\tif (total_seconds >= 60) {\n\t\tint64 total_minutes = (total_seconds + 59) / 60;\n\t\treturn to_string(total_minutes) + \" minute\" + (total_minutes == 1 ? \"\" : \"s\");\n\t}\n\n\treturn to_string(total_seconds) + \" second\" + (total_seconds == 1 ? \"\" : \"s\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/spawn details aggro is for NPCs only!",
        "/spawn details spells is for NPCs only!",
        "Level: %i, HP: %u / %u, Power: %u / %u",
        "Heat Resist/Base: %u/%u",
        "Cold Resist/Base: %u/%u",
        "Magic Resist/Base: %u/%u",
        "Mental Resist/Base: %u/%u",
        "Divine Resist/Base: %u/%u",
        "Disease Resist/Base: %u/%u",
        "Poison Resist/Base: %u/%u",
        " / ",
        "STR / STRBase:\t",
        "AGI / AGIBase:\t",
        "STA / STABase:\t",
        "INT / INTBase:\t",
        "WIS / WISBase:\t",
        "Syntax: /spawn details [group|radius]",
        "required_hp_ratio: ",
        "legacy/unconfigured"
      ]
    },
    "50": {
      "symbol": "COMMAND_SPAWN_TARGET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5452,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0] && sep->IsNumber(0)){\n\t\t\t\tint32 spawn_id = atoul(sep->arg[0]);\n\t\t\t\tint16 response = client->GetCurrentZone()->SetSpawnTargetable(spawn_id);\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%i spawn(s) in the current zone were reset to targetable.\", response);\n\t\t\t}\n\t\t\telse if(sep && sep->arg[0][0] && sep->arg[1][0] && sep->IsNumber(1) && stricmp(sep->arg[0], \"radius\") == 0){\n\t\t\t\tfloat distance = atof(sep->arg[1]);\n\t\t\t\tint16 response = client->GetCurrentZone()->SetSpawnTargetable(client->GetPlayer(), distance);\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%i spawn(s) in the current zone were reset to targetable.\", response);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn target [spawn id]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This will set the given spawn as targetable.  Used to change a spawn if it was set to untargetable.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn target [spawn id]"
      ]
    },
    "45": {
      "symbol": "COMMAND_SPAWN_SET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5469,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tsint16 set_type = -1; \n\t\t\tstring type_str;\n\n\t\t\tif (spawn)\n\t\t\t{\n\t\t\t\t                                                                                                                   \n\t\t\t\tif(sep && sep->arg[0][0])\n\t\t\t\t{\n\t\t\t\t\tstring arg0_lower = sep->arg[0];\n\t\t\t\t\tboost::algorithm::to_lower(arg0_lower);\n\n\t\t\t\t\tif(((arg0_lower == \"location\") || (arg0_lower == \"list\") || (spawn && spawn->IsPlayer() == false && sep->arg[1][0])) && spawn_set_values.count(arg0_lower) == 1)\n\t\t\t\t\t{\n\t\t\t\t\t\t                                                               \n\t\t\t\t\t\tset_type = spawn_set_values[arg0_lower];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t\tif(set_type > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(set_type == SPAWN_SET_GROUP_LEVEL_OFF || set_type == SPAWN_SET_GROUP_LEVEL_RANGE || set_type == SPAWN_SET_GROUP_LEVEL_ON)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint32 group_id = spawn->GetSpawnGroupID();\n\t\t\t\t\t\t\tif(group_id == 0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This spawn is not in a group!\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tSpawnGroupLevelData level_settings = spawn->GetZone()->GetSpawnGroupLevelSettings(group_id);\n\n\t\t\t\t\t\t\tif(set_type == SPAWN_SET_GROUP_LEVEL_OFF || (set_type == SPAWN_SET_GROUP_LEVEL_RANGE && sep->arg[1][0] && strcasecmp(sep->arg[1], \"off\") == 0))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif(database.SetSpawnGroupLevelSettings(group_id, false, level_settings.level_min, level_settings.level_max))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tspawn->GetZone()->SetSpawnGroupLevelSettings(group_id, false, level_settings.level_min, level_settings.level_max);\n\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn group %u level range disabled. Reload spawns to apply level behavior changes.\", group_id);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Error setting group level settings, check console for details.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tbool set_by_arg_range = (set_type == SPAWN_SET_GROUP_LEVEL_RANGE || set_type == SPAWN_SET_GROUP_LEVEL_ON) && sep->IsNumber(1) && sep->IsNumber(2);\n\t\t\t\t\t\t\t\tbool set_by_on_range = (set_type == SPAWN_SET_GROUP_LEVEL_RANGE && strcasecmp(sep->arg[1], \"on\") == 0 && sep->IsNumber(2) && sep->IsNumber(3));\n\t\t\t\t\t\t\t\tbool set_from_saved = (set_type == SPAWN_SET_GROUP_LEVEL_ON && sep->arg[1][0] == '\\0') || (set_type == SPAWN_SET_GROUP_LEVEL_RANGE && strcasecmp(sep->arg[1], \"on\") == 0 && !sep->arg[2][0] && !sep->arg[3][0]);\n\n\t\t\t\t\t\t\t\tif(!set_by_arg_range && set_by_on_range)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlevel_settings.level_min = atoi(sep->arg[2]);\n\t\t\t\t\t\t\t\t\tlevel_settings.level_max = atoi(sep->arg[3]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(sep->arg[1][0] && set_type == SPAWN_SET_GROUP_LEVEL_ON && strcasecmp(sep->arg[1], \"on\") == 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_on\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_on [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [on]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [on] [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_off\");\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(sep->arg[1][0] && set_type == SPAWN_SET_GROUP_LEVEL_ON && !sep->IsNumber(1))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_on\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_on [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [on]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [on] [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_off\");\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(!set_by_arg_range && !set_from_saved)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif(!set_by_on_range && set_type == SPAWN_SET_GROUP_LEVEL_RANGE && sep->arg[1][0] && strcasecmp(sep->arg[1], \"on\") == 0 && (sep->arg[2][0] || sep->arg[3][0]))\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level on [min] [max]\");\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_on\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_on [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [on]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [on] [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level [min] [max]\");\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set group_level_off\");\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif(set_from_saved)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif(level_settings.level_min == 0 && level_settings.level_max == 0)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No level range is currently configured for this group. Use '/spawn set group_level [min] [max]' first.\");\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif(level_settings.level_max < level_settings.level_min)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tint16 tmp_level = level_settings.level_min;\n\t\t\t\t\t\t\t\t\tlevel_settings.level_min = level_settings.level_max;\n\t\t\t\t\t\t\t\t\tlevel_settings.level_max = tmp_level;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif(database.SetSpawnGroupLevelSettings(group_id, true, level_settings.level_min, level_settings.level_max))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tspawn->GetZone()->SetSpawnGroupLevelSettings(group_id, true, level_settings.level_min, level_settings.level_max);\n\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn group %u will randomize level between %u and %u. Reload spawns to apply level behavior changes.\", group_id, level_settings.level_min, level_settings.level_max);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Error setting group level settings, check console for details.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t                                                                              \n\t\t\t\t\t\tif(!(set_type >= SPAWN_SET_VALUE_PREFIX) && !(set_type <= SPAWN_SET_VALUE_MERCHANT_MAX_LEVEL) && set_type != SPAWN_SET_VALUE_NAME && ((set_type < SPAWN_SET_VALUE_SPAWN_SCRIPT) || (set_type > SPAWN_SET_VALUE_SUB_TITLE)) && set_type != SPAWN_SET_VALUE_LOCATION && sep->IsNumber(1) == false)\n\t\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Invalid value for set command.\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tstring name = string(spawn->GetName());\n\t\t\t\t\t\tbool customSetSpawn = false;\n\t\t\t\t\t\tif(set_type >= SPAWN_SET_CHEEK_TYPE && set_type <= SPAWN_SET_SOGA_NOSE_TYPE)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint8 index = sep->IsNumber(2) ? atoul(sep->arg[2]) : 0;\n\n\t\t\t\t\t\t\t                                                                      \n\t\t\t\t\t\t\tif(SetSpawnCommand(client, spawn, set_type, sep->arg[1], true, false, nullptr, index))\n\t\t\t\t\t\t\t\tcustomSetSpawn = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(customSetSpawn || SetSpawnCommand(client, spawn, set_type, sep->argplus[1]))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (set_type == SPAWN_SET_VALUE_EXPANSION_FLAG || set_type == SPAWN_SET_VALUE_HOLIDAY_FLAG)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"A /reload spawns is required to properly update the spawns with the xpack/holiday flag.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (set_type == SPAWN_SET_VALUE_NAME)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"New name will not be effective until zone reload.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (set_type == SPAWN_SET_SKIN_COLOR || (set_type >= SPAWN_SET_HAIR_COLOR1 && set_type <= SPAWN_SET_SOGA_EYE_COLOR))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully set color field to R G B: %s.\", sep->argplus[1]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if(set_type == SPAWN_SET_VALUE_LOCATION)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully set '%s' to '%u' for spawn '%s' (DBID: %u)\", sep->arg[0], client->GetPlayer()->GetLocation(), name.c_str(), spawn->GetDatabaseID());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully set '%s' to '%s' for spawn '%s' (DBID: %u)\", sep->arg[0], sep->arg[1], name.c_str(), spawn->GetDatabaseID());\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tswitch (set_type)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase SPAWN_SET_VALUE_EXPANSION_FLAG:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_VALUE_HOLIDAY_FLAG:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_VALUE_FACTION:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_AAXP_REWARDS:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_CHEEK_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_CHIN_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_EAR_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_EYE_BROW_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_EYE_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_LIP_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_NOSE_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_BODY_SIZE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_BODY_AGE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_CHEEK_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_CHIN_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_EAR_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_EYE_BROW_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_EYE_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_LIP_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_NOSE_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_BODY_SIZE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_BODY_AGE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_ATTACK_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_RACE_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_LOOT_TIER:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_LOOT_DROP_TYPE:\n\t\t\t\t\t\t\t\tcase SPAWN_SET_SCARED_STRONG_PLAYERS:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t                                        \n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->GetCurrentZone()->ApplySetSpawnCommand(client, spawn, set_type, sep->argplus[1]);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif((set_type >= SPAWN_SET_VALUE_RESPAWN && set_type <=SPAWN_SET_VALUE_LOCATION) || (set_type >= SPAWN_SET_VALUE_EXPIRE && set_type <=SPAWN_SET_VALUE_Z_OFFSET) || (set_type == SPAWN_SET_VALUE_PITCH || set_type == SPAWN_SET_VALUE_ROLL))\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif(spawn->GetSpawnLocationID() > 0 && database.UpdateSpawnLocationSpawns(spawn))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully saved spawn information for spawn '%s' (DBID: %u)\", name.c_str(), spawn->GetDatabaseID());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(spawn->GetSpawnLocationID() > 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Error saving spawn information, see console window for details.\");\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tif(spawn->GetDatabaseID() > 0 && database.SaveSpawnInfo(spawn))\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully saved spawn for spawn '%s' (DBID: %u)\", name.c_str(), spawn->GetDatabaseID());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if(spawn->GetDatabaseID() > 0)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Error saving spawn, see console window for details.\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if(set_type == 0)\n\t\t\t\t{\n\t\t\t\t\t                                                                                                      \n\t\t\t\t\tmap<string, int8>::iterator itr;\n\t\t\t\t\tint i=0;\n\t\t\t\t\tstring list;\n\t\t\t\t\tfor(itr = spawn_set_values.begin(); itr != spawn_set_values.end(); itr++, i++)\n\t\t\t\t\t{\n\t\t\t\t\t\tif(i==10)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, list.c_str());\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(i>0)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlist.append(\", \").append(itr->first);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlist = itr->first;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif(list.length() > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\t                                   \n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, list.c_str());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t              \n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn set [type] [value]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This command is used to change various settings for the targeted NPC or Object.\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"For a list of changeable settings use /spawn set list\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Note: /spawn set location does not require a value. The client's current location is used.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t\t}",
      "delegates": [
        {
          "function": "SetSpawnCommand",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 627,
          "body": "{\n\tif(!target)\n\t\treturn false;\n\tint32 val = 0;\n\ttry{\n\t\tif(type != SPAWN_SET_VALUE_NAME && \n\t\t\t!(type >= SPAWN_SET_VALUE_SPAWN_SCRIPT && type <= SPAWN_SET_VALUE_SUB_TITLE) && !(type >= SPAWN_SET_VALUE_PREFIX && type <= SPAWN_SET_VALUE_EXPANSION_FLAG || type == SPAWN_SET_VALUE_HOLIDAY_FLAG))\n\t\t\t{\n\t\t\t\tswitch(type)\n\t\t\t\t{\n\t\t\t\t\tcase SPAWN_SET_SKIN_COLOR:\n\t\t\t\t\tcase SPAWN_SET_HAIR_COLOR1:\n\t\t\t\t\tcase SPAWN_SET_HAIR_COLOR2:\n\t\t\t\t\tcase SPAWN_SET_HAIR_TYPE_COLOR:\n\t\t\t\t\tcase SPAWN_SET_HAIR_FACE_COLOR:\n\t\t\t\t\tcase SPAWN_SET_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\t\t\tcase SPAWN_SET_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\t\t\tcase SPAWN_SET_HAIR_HIGHLIGHT:\n\t\t\t\t\tcase SPAWN_SET_EYE_COLOR:\n\t\t\t\t\tcase SPAWN_SET_SOGA_SKIN_COLOR:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR1:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR2:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_COLOR:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_COLOR:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_HIGHLIGHT:\n\t\t\t\t\tcase SPAWN_SET_SOGA_EYE_COLOR:\n\t\t\t\t\tcase SPAWN_SET_RACE_TYPE:\n\t\t\t\t\t                                                        \n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tval = atoul(value);\n\t\t\t\t}\n\t\t\t}\n\t}\n\tcatch(...){\n\t\tif(client)\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid numeric spawn value: %s\", value);\n\t\treturn false;\n\t}\n\tif(temporary){\n\t\tchar tmp[128] = {0};\n\t\tswitch(type){\n\t\t\tcase SPAWN_SET_VALUE_NAME:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%s\", target->GetName());\n\t\t\t\ttarget->SetName(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_X_OFFSET: \n\t\t\t\t{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetXOffset());\n\t\t\t\ttarget->SetXOffset(float(val));\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_Y_OFFSET: \n\t\t\t\t{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetYOffset());\n\t\t\t\ttarget->SetYOffset(float(val));\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_Z_OFFSET: \n\t\t\t\t{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetZOffset());\n\t\t\t\ttarget->SetZOffset(float(val));\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EXPIRE: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", target->GetExpireTime());\n\t\t\t\ttarget->SetExpireTime(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EXPIRE_OFFSET: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", target->GetExpireOffsetTime());\n\t\t\t\ttarget->SetExpireOffsetTime(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SUB_TITLE: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%s\", target->GetSubTitle());\n\t\t\t\ttarget->SetSubTitle(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_LEVEL:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetLevel());\n\t\t\t\ttarget->SetLevel(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_DIFFICULTY:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetDifficulty());\n\t\t\t\ttarget->SetDifficulty(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_MODEL_TYPE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetModelType());\n\t\t\t\ttarget->SetModelType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_CLASS:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetAdventureClass());\n\t\t\t\ttarget->SetAdventureClass(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_GENDER:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetGender());\n\t\t\t\ttarget->SetGender(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SHOW_NAME:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetShowName());\n\t\t\t\ttarget->SetShowName(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_ATTACKABLE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetAttackable());\n\t\t\t\ttarget->SetAttackable(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SHOW_LEVEL:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetShowLevel());\n\t\t\t\ttarget->SetShowLevel(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_TARGETABLE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetTargetable());\n\t\t\t\ttarget->SetTargetable(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SHOW_COMMAND_ICON:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetShowCommandIcon());\n\t\t\t\ttarget->SetShowCommandIcon(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HAND_ICON:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetShowHandIcon());\n\t\t\t\ttarget->SetShowHandIcon(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetHairType());\n\t\t\t\t\t((Entity*)target)->SetHairType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_FACIAL_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetFacialHairType());\n\t\t\t\t\t((Entity*)target)->SetFacialHairType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_WING_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetWingType());\n\t\t\t\t\t((Entity*)target)->SetWingType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_CHEST_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetChestType());\n\t\t\t\t\t((Entity*)target)->SetChestType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_LEGS_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetLegsType());\n\t\t\t\t\t((Entity*)target)->SetLegsType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_SOGA_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetSogaHairType());\n\t\t\t\t\t((Entity*)target)->SetSogaHairType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SOGA_FACIAL_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->GetSogaFacialHairType());\n\t\t\t\t\t((Entity*)target)->SetSogaFacialHairType(val, send_update);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_SOGA_MODEL_TYPE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetSogaModelType());\n\t\t\t\ttarget->SetSogaModelType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_SIZE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetSize());\n\t\t\t\ttarget->SetSize(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_HP:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetHP());\n\t\t\t\ttarget->SetTotalHPBase(val);\n\t\t\t\ttarget->SetHP(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_POWER:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetPower());\n\t\t\t\ttarget->SetTotalPowerBase(val);\n\t\t\t\ttarget->SetPower(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HEROIC:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetHeroic());\n\t\t\t\ttarget->SetHeroic(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_RESPAWN:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", target->GetRespawnTime());\n\t\t\t\ttarget->SetRespawnTime(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_X:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetX());\n\t\t\t\ttarget->SetX(atof(value), send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_Y:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetY());\n\t\t\t\ttarget->SetY(atof(value), send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_Z:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetZ());\n\t\t\t\ttarget->SetZ(atof(value), send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HEADING:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetHeading());\n\t\t\t\ttarget->SetHeading(atof(value) + 360, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_VISUAL_STATE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetVisualState());\n\t\t\t\ttarget->SetVisualState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_ACTION_STATE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetActionState());\n\t\t\t\ttarget->SetActionState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_MOOD_STATE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetMoodState());\n\t\t\t\ttarget->SetMoodState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_INITIAL_STATE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetInitialState());\n\t\t\t\ttarget->SetInitialState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_ACTIVITY_STATE:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetActivityStatus());\n\t\t\t\ttarget->SetActivityStatus(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_COLLISION_RADIUS:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetCollisionRadius());\n\t\t\t\ttarget->SetCollisionRadius(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_DEVICE_ID: {\n\t\t\t\tif (target->IsObject()) {\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Object*)target)->GetDeviceID());\n\t\t\t\t\t((Object*)target)->SetDeviceID(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_PITCH: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetPitch());\n\t\t\t\ttarget->SetPitch(atof(value), send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_ROLL: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%f\", target->GetRoll());\n\t\t\t\ttarget->SetRoll(atof(value), send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HIDE_HOOD: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->appearance.hide_hood);\n\t\t\t\ttarget->SetHideHood(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EMOTE_STATE: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->appearance.emote_state);\n\t\t\t\ttarget->SetEmoteState(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_ICON: {\n\t\t\t    snprintf(tmp, sizeof(tmp), \"%i\", target->GetIconValue());\n\t\t\t    target->SetIcon(val);\n\t\t\t    break;\n\t\t\t}\n\n\t\t\tcase SPAWN_SET_VALUE_PREFIX: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%s\", target->GetPrefixTitle());\n\t\t\t\ttarget->SetPrefixTitle(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SPAWN_SET_VALUE_SUFFIX: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%s\", target->GetSuffixTitle());\n\t\t\t\ttarget->SetSuffixTitle(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SPAWN_SET_VALUE_LASTNAME: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%s\", target->GetLastName());\n\t\t\t\ttarget->SetLastName(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EXPANSION_FLAG:\n\t\t\tcase SPAWN_SET_VALUE_HOLIDAY_FLAG: {\n\t\t\t\t                                   \n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_MERCHANT_MIN_LEVEL: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetMerchantMinLevel());\n\t\t\t\ttarget->SetMerchantLevelRange(atoul(value), target->GetMerchantMaxLevel());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_MERCHANT_MAX_LEVEL: {\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->GetMerchantMaxLevel());\n\t\t\t\ttarget->SetMerchantLevelRange(target->GetMerchantMinLevel(), atoul(value));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_FACTION:{\n\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", target->faction_id);\n\t\t\t\tZoneServerSharedPtr zone = target->GetZone();\n\t\t\t\tif (!zone && client)\n\t\t\t\t\tzone = client->GetCurrentZone();\n\n\t\t\t\ttarget->faction_id = atoul(value);\n\t\t\t\tif(zone)\n\t\t\t\t{\n\t\t\t\t\tzone->RemoveDeadEnemyList(target);\n\t\t\t\t\tif(target->IsNPC())\n\t\t\t\t\t\tzone->AddEnemyList((NPC*)target);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SKIN_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_COLOR1:\n\t\t\tcase SPAWN_SET_HAIR_COLOR2:\n\t\t\tcase SPAWN_SET_HAIR_TYPE_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_FACE_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_HIGHLIGHT:\n\t\t\tcase SPAWN_SET_MODEL_COLOR:\n\t\t\tcase SPAWN_SET_EYE_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_SKIN_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR1:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR2:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_HIGHLIGHT:\n\t\t\tcase SPAWN_SET_SOGA_MODEL_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_EYE_COLOR:\n\t\t\t\t\t{\n\t\t\t\tif (target->IsEntity())\n\t\t\t\t{\n\t\t\t\t\tSeperator* skinsep = new Seperator(value, ' ', 3, 500, true);\n\t\t\t\t\tif (skinsep->IsNumber(0) && skinsep->IsNumber(1) && skinsep->IsNumber(2))\n\t\t\t\t\t{\n\t\t\t\t\t\tEQ2_Color clr;\n\t\t\t\t\t\tclr.red = atoul(skinsep->arg[0]);\n\t\t\t\t\t\tclr.green = atoul(skinsep->arg[1]);\n\t\t\t\t\t\tclr.blue = atoul(skinsep->arg[2]);\n\n\t\t\t\t\t\tswitch(type)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase SPAWN_SET_SKIN_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSkinColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_COLOR1:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairColor1(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_COLOR2:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairColor2(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_TYPE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_FACE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetFacialHairColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairTypeHighlightColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetFacialHairHighlightColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_HIGHLIGHT:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairHighlightColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_MODEL_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetModelColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_EYE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetEyeColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_SKIN_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaSkinColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR1:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairColor1(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR2:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairColor2(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaFacialHairColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairTypeHighlightColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaFacialHairHighlightColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_HIGHLIGHT:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairHighlightColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_MODEL_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaModelColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_EYE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaEyeColor(clr);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsafe_delete(skinsep);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_AAXP_REWARDS: {\n\t\t\t\ttarget->SetAAXPRewards(atoul(value));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_CHEEK_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.cheek_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.cheek_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_CHIN_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.chin_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.chin_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_EAR_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.ear_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.ear_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_EYE_BROW_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.eye_brow_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.eye_brow_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_EYE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.eye_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.eye_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_LIP_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.lip_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.lip_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_NOSE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.nose_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.nose_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_BODY_SIZE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.body_size);\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.body_size = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_BODY_AGE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.body_age);\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.body_age = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_CHEEK_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_cheek_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_cheek_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_CHIN_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_chin_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_chin_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_EAR_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_ear_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_ear_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_EYE_BROW_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_eye_brow_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_eye_brow_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_EYE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_eye_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_eye_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_LIP_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_lip_type[index]);\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_lip_type[index] = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_BODY_SIZE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_body_size);\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.soga_body_size = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_BODY_AGE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%i\", ((Entity*)target)->features.soga_body_age);\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.soga_body_age = new_value;\n\t\t\t\t\t((Entity*)target)->info_changed = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_ATTACK_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", ((Entity*)target)->GetInfoStruct()->get_attack_type());\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->GetInfoStruct()->set_attack_type(new_value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_RACE_TYPE:{\n\t\t\t\tif(target->GetModelType() > 0){\n\t\t\t\t\tSeperator* tmpsep = new Seperator(value, ' ', 3, 500, true);\n\t\t\t\t\tif (tmpsep->IsNumber(0))\n\t\t\t\t\t{\n\t\t\t\t\t\tint16 race_type = atoul(value);\n\t\t\t\t\t\tconst char* category = tmpsep->IsSet(1) ? tmpsep->arg[1] : \"NULL\";\n\t\t\t\t\t\tconst char* subcategory = tmpsep->IsSet(2) ? tmpsep->arg[2] : \"NULL\";\n\t\t\t\t\t\tconst char* model_name = tmpsep->IsSet(3) ? tmpsep->arg[3] : \"NULL\";\n\t\t\t\t\t\tif(race_types_list.AddRaceType(target->GetModelType(), race_type, category, subcategory, model_name)) {\n\t\t\t\t\t\t\tif(client) {\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Race type added to memory, however not saved to database.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(client) {\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Model type already on the race_types_list, use spawn set database to override and update database.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsafe_delete(tmpsep);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_LOOT_TIER:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", target->GetLootTier());\n\t\t\t\t\tint32 new_value = atoul(value);\n\t\t\t\t\ttarget->SetLootTier(new_value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_LOOT_DROP_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", target->GetLootDropType());\n\t\t\t\t\tint32 new_value = atoul(value);\n\t\t\t\t\ttarget->SetLootDropType(new_value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SCARED_STRONG_PLAYERS:{\n\t\t\t\tif(target->IsNPC()){\n\t\t\t\t\tsnprintf(tmp, sizeof(tmp), \"%u\", target->IsScaredByStrongPlayers());\n\t\t\t\t\tint32 new_value = atoul(value);\n\t\t\t\t\ttarget->SetScaredByStrongPlayers(new_value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(temp_value)\n\t\t\t\t*temp_value = string(tmp);\n\t\t}\n\t}\n\telse{ \n\t\t                                        \n\t\t                                                                         \n\n\t\tswitch(type){\n\t\tcase SPAWN_SET_VALUE_MERCHANT_MIN_LEVEL: {\n\t\t\ttarget->SetMerchantLevelRange(atoul(value), target->GetMerchantMaxLevel());\n\t\t\tbreak;\n\t\t}\n\t\tcase SPAWN_SET_VALUE_MERCHANT_MAX_LEVEL: {\n\t\t\ttarget->SetMerchantLevelRange(target->GetMerchantMinLevel(), atoul(value));\n\t\t\tbreak;\n\t\t}\n\t\tcase SPAWN_SET_VALUE_EXPANSION_FLAG: {\n\n\t\t\tif (target->GetDatabaseID() > 0)\n\t\t\t{\n\t\t\t\tchar query[256];\n\t\t\t\tsnprintf(query, 256, \"update spawn set expansion_flag=%u where id=%u\", atoul(value), target->GetDatabaseID());\n\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t{\n\t\t\t\t\tif(client)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Ran query:%s\", query);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase SPAWN_SET_VALUE_HOLIDAY_FLAG: {\n\n\t\t\tif (target->GetDatabaseID() > 0)\n\t\t\t{\n\t\t\t\tchar query[256];\n\t\t\t\tsnprintf(query, 256, \"update spawn set holiday_flag=%u where id=%u\", atoul(value), target->GetDatabaseID());\n\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t{\n\t\t\t\t\tif(client)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Ran query:%s\", query);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase SPAWN_SET_AAXP_REWARDS: {\n\n\t\t\tif (target->GetDatabaseID() > 0)\n\t\t\t{\n\t\t\t\tchar query[256];\n\t\t\t\tsnprintf(query, 256, \"update spawn set aaxp_rewards=%u where id=%u\", atoul(value), target->GetDatabaseID());\n\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t{\n\t\t\t\t\tif(client)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Ran query:%s\", query);\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\t\tcase SPAWN_SET_VALUE_NAME:{\n\t\t\t\ttarget->SetName(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_SUB_TITLE: {\n\t\t\t\ttarget->SetSubTitle(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_X_OFFSET: \n\t\t\t\t{\n\t\t\t\ttarget->SetXOffset(atof(value));\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_Y_OFFSET: \n\t\t\t\t{\n\t\t\t\ttarget->SetYOffset(atof(value));\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_Z_OFFSET: \n\t\t\t\t{\n\t\t\t\ttarget->SetZOffset(atof(value));\n\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EXPIRE: {\n\t\t\t\ttarget->SetExpireTime(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EXPIRE_OFFSET: {\n\t\t\t\ttarget->SetExpireOffsetTime(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_LEVEL:{\n\t\t\t\ttarget->SetLevel(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_DIFFICULTY:{\n\t\t\t\ttarget->SetDifficulty(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_MODEL_TYPE:{\n\t\t\t\ttarget->SetModelType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_CLASS:{\n\t\t\t\ttarget->SetAdventureClass(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_GENDER:{\n\t\t\t\ttarget->SetGender(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SHOW_NAME:{\n\t\t\t\ttarget->SetShowName(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_ATTACKABLE:{\n\t\t\t\ttarget->SetAttackable(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SHOW_LEVEL:{\n\t\t\t\ttarget->SetShowLevel(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_TARGETABLE:{\n\t\t\t\ttarget->SetTargetable(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SHOW_COMMAND_ICON:{\n\t\t\t\ttarget->SetShowCommandIcon(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HAND_ICON:{\n\t\t\t\ttarget->SetShowHandIcon(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetHairType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_FACIAL_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetFacialHairType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_WING_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetWingType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_CHEST_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetChestType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_LEGS_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetLegsType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_SOGA_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetSogaHairType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SOGA_FACIAL_HAIR_TYPE:{\n\t\t\t\tif(target->IsEntity())\n\t\t\t\t\t((Entity*)target)->SetSogaFacialHairType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_SOGA_MODEL_TYPE:{\n\t\t\t\ttarget->SetSogaModelType(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_SIZE:{\n\t\t\t\ttarget->SetSize(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_HP:{\n\t\t\t\ttarget->SetTotalHPBase(val);\n\t\t\t\ttarget->SetHP(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_POWER:{\n\t\t\t\ttarget->SetTotalPowerBase(val);\n\t\t\t\ttarget->SetPower(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HEROIC:{\n\t\t\t\ttarget->SetHeroic(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_RESPAWN:{\n\t\t\t\ttarget->SetRespawnTime(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_X:{\n\t\t\t\ttarget->SetX(atof(value), send_update);\n\t\t\t\ttarget->SetSpawnOrigX(target->GetX());\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_Y:{\n\t\t\t\ttarget->SetY(atof(value), send_update);\n\t\t\t\ttarget->SetSpawnOrigY(target->GetY());\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_Z:{\n\t\t\t\ttarget->SetZ(atof(value), send_update);\n\t\t\t\ttarget->SetSpawnOrigZ(target->GetZ());\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HEADING:{\n\t\t\t\ttarget->SetHeading(atof(value), send_update);\n\t\t\t\ttarget->SetSpawnOrigHeading(target->GetHeading());\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_COMMAND_PRIMARY:{\n\t\t\t\tZoneServerSharedPtr zone = target->GetZone();\n\t\t\t\tif (!zone && client)\n\t\t\t\t\tzone = client->GetCurrentZone();\n\n\t\t\t\tif(zone && zone->GetEntityCommandList(val))\n\t\t\t\t\ttarget->SetPrimaryCommands(zone->GetEntityCommandList(val));\n\t\t\t\ttarget->primary_command_list_id = val;\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_COMMAND_SECONDARY:{\n\t\t\t\tZoneServerSharedPtr zone = target->GetZone();\n\t\t\t\tif (!zone && client)\n\t\t\t\t\tzone = client->GetCurrentZone();\n\n\t\t\t\tif (zone && zone->GetEntityCommandList(val))\n\t\t\t\t\ttarget->SetSecondaryCommands(zone->GetEntityCommandList(val));\n\t\t\t\ttarget->secondary_command_list_id = val;\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_VISUAL_STATE:{\n\t\t\t\ttarget->SetVisualState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_ACTION_STATE:{\n\t\t\t\ttarget->SetActionState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_MOOD_STATE:{\n\t\t\t\ttarget->SetMoodState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_INITIAL_STATE:{\n\t\t\t\ttarget->SetInitialState(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_ACTIVITY_STATE:{\n\t\t\t\ttarget->SetActivityStatus(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_COLLISION_RADIUS:{\n\t\t\t\ttarget->SetCollisionRadius(val, send_update);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_FACTION:{\n\t\t\t\tZoneServerSharedPtr zone = target->GetZone();\n\t\t\t\tif (!zone && client)\n\t\t\t\t\tzone = client->GetCurrentZone();\n\n\t\t\t\ttarget->faction_id = val;\n\t\t\t\tif(zone)\n\t\t\t\t{\n\t\t\t\t\tzone->RemoveDeadEnemyList(target);\n\t\t\t\t\tif(target->IsNPC())\n\t\t\t\t\t\tzone->AddEnemyList((NPC*)target);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_DEVICE_ID:{\n\t\t\t\tif (target->IsObject())\n\t\t\t\t\t((Object*)target)->SetDeviceID(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_PITCH: {\n\t\t\t\ttarget->SetPitch(atof(value), send_update);\n\t\t\t\ttarget->SetSpawnOrigPitch(atof(value));\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_ROLL: {\n\t\t\t\ttarget->SetRoll(atof(value), send_update);\n\t\t\t\ttarget->SetSpawnOrigRoll(atof(value));\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_HIDE_HOOD: {\n\t\t\t\ttarget->SetHideHood(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_EMOTE_STATE: {\n\t\t\t\ttarget->SetEmoteState(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_ICON: {\n\t\t\t\ttarget->SetIcon(val);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_PREFIX: {\n\t\t\t\ttarget->SetPrefixTitle(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t }\n\t\t\tcase SPAWN_SET_VALUE_SUFFIX: {\n\t\t\t\ttarget->SetSuffixTitle(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_LASTNAME: {\n\t\t\t\ttarget->SetLastName(value);\n\t\t\t\tif(target->GetZone())\n\t\t\t\t\ttarget->GetZone()->SendUpdateTitles(target);\n\t\t\t    break;\n\t\t\t}\n\t\t\tcase SPAWN_SET_VALUE_SPAWN_SCRIPT:{\n\t\t\t\tif(lua_interface && lua_interface->GetSpawnScript(value) == 0){\n\t\t\t\t\tif(client){\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid Spawn Script file.  Be sure you give the absolute path.\");\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Example: /spawn set spawn_script 'SpawnScripts/example.lua'\");\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telse if(!database.UpdateSpawnScriptData(target->GetDatabaseID(), 0, 0, value))\n\t\t\t\t\treturn false;\n\t\t\t\telse{\n\t\t\t\t\tif(!world.GetSpawnLocationScript(target->GetSpawnLocationID()))\n\t\t\t\t\t\ttarget->SetSpawnScript(value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t  }\n\t\t\tcase SPAWN_SET_VALUE_SPAWNLOCATION_SCRIPT:{\n\t\t\t\tif(lua_interface && lua_interface->GetSpawnScript(value) == 0){\n\t\t\t\t\tif(client){\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid Spawn Script file.  Be sure you give the absolute path.\");\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Example: /spawn set spawnlocation_script 'SpawnScripts/example.lua'\");\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telse if(!database.UpdateSpawnScriptData(0, target->GetSpawnLocationID(), 0, value))\n\t\t\t\t\treturn false;\n\t\t\t\telse{\n\t\t\t\t\tif(!world.GetSpawnEntryScript(target->GetSpawnEntryID()))\n\t\t\t\t\t\ttarget->SetSpawnScript(value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t\t\t   }\n\t\t\tcase SPAWN_SET_VALUE_SPAWNENTRY_SCRIPT:{\n\t\t\t\tif(lua_interface && lua_interface->GetSpawnScript(value) == 0){\n\t\t\t\t\tif(client){\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid Spawn Script file.  Be sure you give the absolute path.\");\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Example: /spawn set spawnentry_script 'SpawnScripts/example.lua'\");\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telse if(!database.UpdateSpawnScriptData(0, 0, target->GetSpawnEntryID(), value))\n\t\t\t\t\treturn false;\n\t\t\t\telse\n\t\t\t\t\ttarget->SetSpawnScript(value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SPAWN_SET_SKIN_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_COLOR1:\n\t\t\tcase SPAWN_SET_HAIR_COLOR2:\n\t\t\tcase SPAWN_SET_HAIR_TYPE_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_FACE_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_HAIR_HIGHLIGHT:\n\t\t\tcase SPAWN_SET_MODEL_COLOR:\n\t\t\tcase SPAWN_SET_EYE_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_SKIN_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR1:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR2:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_HAIR_HIGHLIGHT:\n\t\t\tcase SPAWN_SET_SOGA_MODEL_COLOR:\n\t\t\tcase SPAWN_SET_SOGA_EYE_COLOR: {\n\t\t\t\tif (target->IsNPC())\n\t\t\t\t{\n\t\t\t\t\tSeperator* skinsep = new Seperator(value, ' ', 3, 500, true);\n\t\t\t\t\tif (skinsep->IsNumber(0) && skinsep->IsNumber(1) && skinsep->IsNumber(2))\n\t\t\t\t\t{\n\t\t\t\t\t\tEQ2_Color clr;\n\t\t\t\t\t\tclr.red = atoul(skinsep->arg[0]);\n\t\t\t\t\t\tclr.green = atoul(skinsep->arg[1]);\n\t\t\t\t\t\tclr.blue = atoul(skinsep->arg[2]);\n\t\t\t\t\t\tQuery replaceSkinQuery;\n\n\t\t\t\t\t\tstring fieldName(\"\");\n\t\t\t\t\t\tswitch(type)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase SPAWN_SET_SKIN_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSkinColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"skin_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_COLOR1:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairColor1(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_color1\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_COLOR2:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairColor2(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_color2\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_TYPE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_type_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_FACE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetFacialHairColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_face_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairTypeHighlightColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_type_highlight_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetFacialHairHighlightColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_face_highlight_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_HAIR_HIGHLIGHT:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetHairHighlightColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"hair_highlight\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_MODEL_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetModelColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"model_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_EYE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetEyeColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"eye_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_SKIN_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaSkinColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_skin_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR1:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairColor1(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_color1\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_COLOR2:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairColor2(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_color2\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_type_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaFacialHairColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_face_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_TYPE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairTypeHighlightColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_type_highlight_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_FACE_HIGHLIGHT_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaFacialHairHighlightColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_face_highlight_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_HAIR_HIGHLIGHT:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaHairHighlightColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_hair_highlight\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_MODEL_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaModelColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_model_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase SPAWN_SET_SOGA_EYE_COLOR:\n\t\t\t\t\t\t\t\t((Entity*)target)->SetSogaEyeColor(clr);\n\t\t\t\t\t\t\t\tfieldName.append(\"soga_eye_color\");\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceSkinQuery.AddQueryAsync(0, &database, Q_DELETE, \"delete from npc_appearance where spawn_id=%u and type='%s'\", target->GetDatabaseID(), fieldName.c_str());\n\t\t\t\t\t\treplaceSkinQuery.AddQueryAsync(0, &database, Q_INSERT, \"insert into npc_appearance set spawn_id=%u, type='%s', red=%u, green=%u, blue=%u\", target->GetDatabaseID(), fieldName.c_str(), clr.red, clr.green, clr.blue);\n\t\t\t\t\t}\n\t\t\t\t\tsafe_delete(skinsep);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tcase SPAWN_SET_CHEEK_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.cheek_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"cheek_type\", ((Entity*)target)->features.cheek_type[0], ((Entity*)target)->features.cheek_type[1], ((Entity*)target)->features.cheek_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_CHIN_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.chin_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"chin_type\", ((Entity*)target)->features.chin_type[0], ((Entity*)target)->features.chin_type[1], ((Entity*)target)->features.chin_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_EAR_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.ear_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"ear_type\", ((Entity*)target)->features.ear_type[0], ((Entity*)target)->features.ear_type[1], ((Entity*)target)->features.ear_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_EYE_BROW_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.eye_brow_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"eye_brow_type\", ((Entity*)target)->features.eye_brow_type[0], ((Entity*)target)->features.eye_brow_type[1], ((Entity*)target)->features.eye_brow_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_EYE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.eye_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"eye_type\", ((Entity*)target)->features.eye_type[0], ((Entity*)target)->features.eye_type[1], ((Entity*)target)->features.eye_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_LIP_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.lip_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"lip_type\", ((Entity*)target)->features.lip_type[0], ((Entity*)target)->features.lip_type[1], ((Entity*)target)->features.lip_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_NOSE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.nose_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"nose_type\", ((Entity*)target)->features.nose_type[0], ((Entity*)target)->features.nose_type[1], ((Entity*)target)->features.nose_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_BODY_SIZE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.body_size = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"body_size\", ((Entity*)target)->features.body_size, 0, 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_BODY_AGE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.body_age = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"body_age\", ((Entity*)target)->features.body_age, 0, 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_CHEEK_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_cheek_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_cheek_type\", ((Entity*)target)->features.soga_cheek_type[0], ((Entity*)target)->features.soga_cheek_type[1], ((Entity*)target)->features.soga_cheek_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_CHIN_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_chin_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_chin_type\", ((Entity*)target)->features.soga_chin_type[0], ((Entity*)target)->features.soga_chin_type[1], ((Entity*)target)->features.soga_chin_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_EAR_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_ear_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_ear_type\", ((Entity*)target)->features.soga_ear_type[0], ((Entity*)target)->features.soga_ear_type[1], ((Entity*)target)->features.soga_ear_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_EYE_BROW_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_eye_brow_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_eye_brow_type\", ((Entity*)target)->features.soga_eye_brow_type[0], ((Entity*)target)->features.soga_eye_brow_type[1], ((Entity*)target)->features.soga_eye_brow_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_EYE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_eye_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_eye_type\", ((Entity*)target)->features.soga_eye_type[0], ((Entity*)target)->features.soga_eye_type[1], ((Entity*)target)->features.soga_eye_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_LIP_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_lip_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_lip_type\", ((Entity*)target)->features.soga_lip_type[0], ((Entity*)target)->features.soga_lip_type[1], ((Entity*)target)->features.soga_lip_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_NOSE_TYPE:{\n\t\t\t\tif(target->IsEntity() && index < 3){\n\t\t\t\t\tsint8 new_value = atoi(value);\n\t\t\t\t\t((Entity*)target)->features.soga_nose_type[index] = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"soga_nose_type\", ((Entity*)target)->features.soga_nose_type[0], ((Entity*)target)->features.soga_nose_type[1], ((Entity*)target)->features.soga_nose_type[2]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_BODY_SIZE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.body_size = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"body_size\", ((Entity*)target)->features.body_size, 0, 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SOGA_BODY_AGE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->features.body_age = new_value;\n\t\t\t\t\tUpdateDatabaseAppearance(client, target, \"body_age\", ((Entity*)target)->features.body_age, 0, 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_ATTACK_TYPE:{\n\t\t\t\tif(target->IsEntity()){\n\t\t\t\t\tint8 new_value = atoul(value);\n\t\t\t\t\t((Entity*)target)->GetInfoStruct()->set_attack_type(new_value);\n\t\t\t\t\tif(target->IsNPC()) {\n\t\t\t\t\t\tif(target->GetDatabaseID()) {\n\t\t\t\t\t\t\tQuery spawnNPCQuery;\t\t\t\t\t\n\t\t\t\t\t\t\tspawnNPCQuery.AddQueryAsync(0, &database, Q_INSERT, \"update spawn_npcs set attack_type=%u where id=%u\", new_value, target->GetDatabaseID());\n\t\t\t\t\t\t} else if(client) {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid spawn to update the database (NPC only) or no database id for the NPC present.\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_RACE_TYPE:{\n\t\t\t\tif(target->GetModelType() > 0){\n\t\t\t\t\tSeperator* tmpsep = new Seperator(value, ' ', 3, 500, true);\n\t\t\t\t\tif (tmpsep->IsNumber(0))\n\t\t\t\t\t{\n\t\t\t\t\t\tQuery typequery;\n\t\t\t\t\t\tint16 race_type = atoul(value);\n\t\t\t\t\t\tconst char* category = tmpsep->IsSet(1) ? tmpsep->arg[1] : \"NULL\";\n\t\t\t\t\t\tconst char* subcategory = tmpsep->IsSet(2) ? tmpsep->arg[2] : \"NULL\";\n\t\t\t\t\t\tconst char* model_name = tmpsep->IsSet(3) ? tmpsep->arg[3] : \"NULL\";\n\t\t\t\t\t\tif(race_types_list.AddRaceType(target->GetModelType(), race_type, category, subcategory, model_name)) {\t\n\t\t\t\t\t\tif(client)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Model Type %u Race type %u inserted into memory + replaced into database, Model Type: %u set to Race Type: %u, Category: %s, SubCategory: %s, Model Name: %s.\", race_type, target->GetModelType(), race_type, category, subcategory, model_name);\n\t\t\t\t\t\t\ttypequery.AddQueryAsync(0, &database, Q_INSERT, \"insert into race_types (model_type, race_id, category, subcategory, model_name) values(%u, %u, '%s', '%s', '%s')\", target->GetModelType(), race_type, category, subcategory, model_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tif(client)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Model Type: %u Race type %u overrided in memory + replaced into database, Model Type: %u set to Race Type: %u, Category: %s, SubCategory: %s, Model Name: %s.\", race_type, target->GetModelType(), race_type, category, subcategory, model_name);\n\t\t\t\t\t\t\trace_types_list.AddRaceType(target->GetModelType(), race_type, category, subcategory, model_name, true);\n\t\t\t\t\t\t\ttypequery.AddQueryAsync(0, &database, Q_INSERT, \"update race_types set race_id=%u, category='%s', subcategory='%s', model_name='%s' where model_type=%u\", race_type, category, subcategory, model_name, target->GetModelType());\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tsafe_delete(tmpsep);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_LOOT_TIER:{\n\t\t\t\tint32 new_value = atoul(value);\n\t\t\t\ttarget->SetLootTier(new_value);\n\t\t\t\t\t\n\t\t\t\tif (target->GetDatabaseID() > 0)\n\t\t\t\t{\n\t\t\t\t\tchar query[256];\n\t\t\t\t\tsnprintf(query, 256, \"update spawn set loot_tier=%u where id=%u\", atoul(value), target->GetDatabaseID());\n\t\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(client)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Ran query:%s\", query);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_LOOT_DROP_TYPE:{\n\t\t\t\tint32 new_value = atoul(value);\n\t\t\t\ttarget->SetLootDropType(new_value);\n\t\t\t\t\n\t\t\t\tif (target->GetDatabaseID() > 0)\n\t\t\t\t{\n\t\t\t\t\tchar query[256];\n\t\t\t\t\tsnprintf(query, 256, \"update spawn set loot_drop_type=%u where id=%u\", atoul(value), target->GetDatabaseID());\n\t\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(client)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Ran query:%s\", query);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase SPAWN_SET_SCARED_STRONG_PLAYERS:{\n\t\t\t\tint32 new_value = atoul(value);\n\t\t\t\ttarget->SetScaredByStrongPlayers(new_value);\n\t\t\t\t\n\t\t\t\tif (target->GetDatabaseID() > 0)\n\t\t\t\t{\n\t\t\t\t\tchar query[256];\n\t\t\t\t\tsnprintf(query, 256, \"update spawn_npcs set scared_by_strong_players=%u where id=%u\", atoul(value), target->GetDatabaseID());\n\t\t\t\t\tif (database.RunQuery(query, strnlen(query, 256)))\n\t\t\t\t\t{\n\t\t\t\t\t\tif(client)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Ran query:%s\", query);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}"
        },
        {
          "function": "UpdateDatabaseAppearance",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 2027,
          "body": "{\n\tQuery replaceQuery;\n\n\tif(target->IsBot())\n\t{\n\t\tBot* bot = (Bot*)target;\n\t\tif(bot->BotID)\n\t\t\tdatabase.SaveBotFloats(bot->BotID, fieldName.c_str(), r, g, b);\n\t}\n\telse if(target->IsPlayer())\n\t{\n\t\treplaceQuery.AddQueryAsync(0, &database, Q_DELETE, \"delete from char_colors where char_id=%u and type='%s'\", ((Player*)target)->GetCharacterID(), fieldName.c_str());\n\t\treplaceQuery.AddQueryAsync(0, &database, Q_INSERT, \"insert into char_colors set char_id=%u, type='%s', red=%i, green=%i, blue=%i\", ((Player*)target)->GetCharacterID(), fieldName.c_str(), r, g, b);\n\t}\n\telse\n\t{\n\t\treplaceQuery.AddQueryAsync(0, &database, Q_DELETE, \"delete from npc_appearance where spawn_id=%u and type='%s'\", target->GetDatabaseID(), fieldName.c_str());\n\t\treplaceQuery.AddQueryAsync(0, &database, Q_INSERT, \"insert into npc_appearance set spawn_id=%u, type='%s', red=%i, green=%i, blue=%i\", target->GetDatabaseID(), fieldName.c_str(), r, g, b);\n\t}\n\n\t((Entity*)target)->changed = true;\n\t((Entity*)target)->info_changed = true;\n\tif(target->GetZone())\n\t\ttarget->GetZone()->AddChangedSpawn(target);\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn set group_level_on",
        "Syntax: /spawn set group_level_on [min] [max]",
        "Syntax: /spawn set group_level [on]",
        "Syntax: /spawn set group_level [on] [min] [max]",
        "Syntax: /spawn set group_level [min] [max]",
        "Syntax: /spawn set group_level_off",
        "Syntax: /spawn set group_level on [min] [max]",
        "No level range is currently configured for this group. Use '/spawn set group_level [min] [max]' first.",
        "A /reload spawns is required to properly update the spawns with the xpack/holiday flag.",
        "Syntax: /spawn set [type] [value]",
        "For a list of changeable settings use /spawn set list",
        "Note: /spawn set location does not require a value. The client's current location is used.",
        "Example: /spawn set spawn_script 'SpawnScripts/example.lua'",
        "Example: /spawn set spawnlocation_script 'SpawnScripts/example.lua'",
        "Example: /spawn set spawnentry_script 'SpawnScripts/example.lua'"
      ]
    },
    "46": {
      "symbol": "COMMAND_SPAWN_REMOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5737,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && !spawn->IsPlayer()){\n\t\t\t\tif(spawn->GetSpawnLocationID() > 0){\n\t\t\t\t\tstring name = string(spawn->GetName());\n\t\t\t\t\tint32 dbid = spawn->GetDatabaseID();\n\t\t\t\t\tif(database.RemoveSpawnFromSpawnLocation(spawn)){\n\t\t\t\t\t\tclient->GetCurrentZone()->RemoveSpawn(spawn, true, false, true, true, true);\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully removed spawn from zone for spawn '%s' (DBID: %u)\", name.c_str(), dbid);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Error removing spawn, see console window for details.\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"This spawn does not have a spawn group associated with it\");\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn remove\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This command is used for removing the targeted NPC or Object from the zone.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn remove"
      ]
    },
    "47": {
      "symbol": "COMMAND_SPAWN_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5759,
      "body": "{\n\t\t\tif(sep && sep->arg[0][0]){\n\t\t\t\tvector<string>* results = database.GetSpawnNameList(sep->argplus[0]);\n\t\t\t\tvector<string>::iterator itr;\n\t\t\t\tif(results){\n\t\t\t\t\tfor(itr=results->begin();itr!=results->end();itr++){\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, (*itr).c_str());\n\t\t\t\t\t}\n\t\t\t\t\tsafe_delete(results);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No matches found. \");\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn list [name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Name can be a partial match.\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Ex: /spawn list Qeynos Guard\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /spawn list [name]",
        "Ex: /spawn list Qeynos Guard"
      ]
    },
    "43": {
      "symbol": "COMMAND_SPAWN_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5779,
      "body": "{\n\t\t\tSpawn* spawn = cmdTarget;\n\t\t\tif(spawn && sep && ((sep->arg[1][0] && sep->IsNumber(0)) || (sep->arg[0][0] && strncasecmp(sep->arg[0], \"new\", 3) == 0))){\n\t\t\t\tif(spawn->GetSpawnLocationID() > 0){\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"This spawn already has a spawn group id of %u, use /spawn remove to reassign it\", spawn->GetSpawnLocationID());\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(spawn->GetDatabaseID() == 0){\n\t\t\t\t\tif(database.SaveSpawnInfo(spawn)) {\n\t\t\t\t\t\tchar spawn_type[32];\n\t\t\t\t\t\tmemset(spawn_type, 0, sizeof(spawn_type));\n\t\t\t\t\t\tif (spawn->IsNPC())\n\t\t\t\t\t\t\tstrncpy(spawn_type, \"NPC\", sizeof(spawn_type) - 1);\n\t\t\t\t\t\telse if (spawn->IsObject())\n\t\t\t\t\t\t\tstrncpy(spawn_type, \"Object\", sizeof(spawn_type) - 1);\n\t\t\t\t\t\telse if (spawn->IsSign())\n\t\t\t\t\t\t\tstrncpy(spawn_type, \"Sign\", sizeof(spawn_type) - 1);\n\t\t\t\t\t\telse if (spawn->IsGroundSpawn())\n\t\t\t\t\t\t\tstrncpy(spawn_type, \"GroundSpawn\", sizeof(spawn_type) - 1);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tstrncpy(spawn_type, \"Unknown\", sizeof(spawn_type) - 1);\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully saved spawn information with a %s id of %u\", spawn_type, spawn->GetDatabaseID());\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Error saving spawn information, see console window for details.\");\n\t\t\t\t}\n\t\t\t\tint32 spawn_group_id = 0;\n\t\t\t\tif(strncasecmp(sep->arg[0], \"new\", 3) == 0)\n\t\t\t\t\tspawn_group_id = database.GetNextSpawnLocation();\n\t\t\t\telse\n\t\t\t\t\tspawn_group_id = atol(sep->arg[0]);\n\t\t\t\tint8 percent = 100;\n\t\t\t\tif(sep->arg[2] && sep->IsNumber(2))\n\t\t\t\t\tpercent = atoi(sep->arg[2]);\n\t\t\t\tspawn->SetSpawnLocationID(spawn_group_id);\n\t\t\t\tfloat x_offset = database.GetSpawnLocationPlacementOffsetX(spawn->GetSpawnLocationID());\n\t\t\t\tfloat y_offset = database.GetSpawnLocationPlacementOffsetY(spawn->GetSpawnLocationID());\n\t\t\t\tfloat z_offset = database.GetSpawnLocationPlacementOffsetZ(spawn->GetSpawnLocationID());\n\t\t\t\tif(database.SaveSpawnEntry(spawn, sep->arg[1], percent, x_offset, y_offset, z_offset))\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Successfully saved spawn location with a spawn group of %u\", spawn->GetSpawnLocationID());\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Error saving spawn location, see console window for details.\");\t\n\t\t\t}\n\t\t\telse{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn add [spawn group id] [spawn group name] (percentage)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"This command is used for adding the targeted NPC or Object to the database.\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can substitute new for [spawn group id] to create a new one.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "This spawn already has a spawn group id of %u, use /spawn remove to reassign it",
        "Syntax: /spawn add [spawn group id] [spawn group name] (percentage)"
      ]
    },
    "1": {
      "symbol": "COMMAND_SPAWN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5829,
      "body": "{\n\t\t\tint32 id = 0;\n\t\t\tSpawn* spawn = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0)){\n\t\t\t\tid = atol(sep->arg[0]);\n\t\t\t\tspawn = client->GetCurrentZone()->GetSpawn(id);\n\t\t\t}\n\t\t\tif(id > 0 && spawn && spawn->appearance.name[0] == 0)\n\t\t\t\tid = 0;\n\t\t\tif(!id || !spawn){\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /spawn [spawn id] (x) (y) (z) (heading) (location)\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"All parameters are optional except the id.  The spawn id must be in the database.\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Ex: /spawn 1 0 0 0 0\");\n\t\t\t\tsafe_delete(sep);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(sep && sep->arg[1][0]){\n\t\t\t\tfloat x = atof(sep->arg[1]);\n\t\t\t\tspawn->SetX(x, false);\n\t\t\t}\n\t\t\telse\n\t\t\t\tspawn->SetX(client->GetPlayer()->GetX(), false);\n\t\t\tif(sep && sep->arg[2][0]){\n\t\t\t\tfloat y = atof(sep->arg[2]);\n\t\t\t\tspawn->SetY(y, false);\n\t\t\t}\n\t\t\telse\n\t\t\t\tspawn->SetY(client->GetPlayer()->GetY(), false);\n\t\t\tif(sep && sep->arg[3][0]){\n\t\t\t\tfloat z = atof(sep->arg[3]);\n\t\t\t\tspawn->SetZ(z, false);\n\t\t\t}\n\t\t\telse\n\t\t\t\tspawn->SetZ(client->GetPlayer()->GetZ(), false);\n\t\t\tif(sep && sep->arg[4][0]){\n\t\t\t\tfloat heading = atof(sep->arg[4]);\n\t\t\t\tspawn->SetHeading(heading);\n\t\t\t}\n\t\t\telse\n\t\t\t\tspawn->SetHeading(client->GetPlayer()->GetHeading(), false);\n\t\t\tspawn->SetSpawnOrigX(spawn->GetX());\n\t\t\tspawn->SetSpawnOrigY(spawn->GetY());\n\t\t\tspawn->SetSpawnOrigZ(spawn->GetZ());\n\t\t\tspawn->SetSpawnOrigHeading(spawn->GetHeading());\n\t\t\tspawn->SetTargetable(true);\n\n\t\t\tif(sep && sep->arg[5][0])\n\t\t\t\tspawn->SetLocation(atoul(sep->arg[5]));\n\t\t\telse\n\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\n\t\t\tif(spawn->IsNPC() && spawn->GetTotalHP() == 0){\n\t\t\t\tspawn->SetTotalHP(spawn->GetLevel() * 15);\n\t\t\t\tspawn->SetHP(spawn->GetTotalHP());\n\t\t\t}\n\t\t\tif(spawn->GetTotalPower() == 0){\n\t\t\t\tspawn->SetTotalPower(spawn->GetLevel() * 15);\n\t\t\t\tspawn->SetPower(spawn->GetTotalPower());\n\t\t\t}\n\t\t\tconst char* script = world.GetSpawnScript(id);\n\t\t\tif(script && lua_interface && lua_interface->GetSpawnScript(script) != 0)\n\t\t\t\tspawn->SetSpawnScript(string(script));\n\n\t\t\tspawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_PRESPAWN);\n\n\t\t\tclient->GetCurrentZone()->AddSpawn(spawn);\n\t\t\tif(spawn->IsNPC())\n\t\t\t\tspawn->GetZone()->AddLoot((NPC*)spawn);\n\t\t\tspawn->GetZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_SPAWN);\n\t\t\tLogWrite(COMMAND__INFO, 0, \"Command\", \"Received spawn command - Parms: %s\", command_parms->data.c_str());\n\t\t\tbreak;\n\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4,
        5
      ],
      "dynamic_arguments": false,
      "raw_parameters": true,
      "usage_messages": [
        "Syntax: /spawn [spawn id] (x) (y) (z) (heading) (location)",
        "All parameters are optional except the id.  The spawn id must be in the database.",
        "Ex: /spawn 1 0 0 0 0"
      ]
    },
    "21": {
      "symbol": "COMMAND_ADMINFLAG",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5901,
      "body": "{\n\t\t\t\tif(sep && sep->arg[0]){\n\t\t\t\t\tsint16 tmp_status = database.GetCharacterAdminStatus(sep->arg[0]);\n\t\t\t\t\tsint16 new_status = atoi(sep->arg[1]);\n\t\t\t\t\tif(tmp_status == -10)\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_ERROR,\"Unable to flag character.  Reason: Character does not exist.\");\n\t\t\t\t\telse if(tmp_status >= client->GetAdminStatus())\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_ERROR,\"Unable to flag character.  Reason: Character has same or higher level status.\");\n\t\t\t\t\telse if (new_status > client->GetAdminStatus())\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_ERROR, \"Unable to flag character.  Reason: New status is higher then your status.\");\n\t\t\t\t\telse{\n\t\t\t\t\t\tClient* client2 = client->GetCurrentZone()->GetClientByName(sep->arg[0]);\n\t\t\t\t\t\tif (!client2)\n\t\t\t\t\t\t\tclient2 = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(database.UpdateAdminStatus(sep->arg[0],new_status)) {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Character status updated to %i for %s.\",new_status,sep->arg[0]);\n\t\t\t\t\t\t\tif (client2) {\n\t\t\t\t\t\t\t\tclient2->SetAdminStatus(new_status);\n\t\t\t\t\t\t\t\tclient2->Message(CHANNEL_COLOR_YELLOW, \"%s has set your admin status to %i.\", client->GetPlayer()->GetName(), new_status);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_ERROR,\"Unable to flag character.  Unknown reason.\");\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\tsint16 status = database.GetCharacterAdminStatus(client->GetPlayer()->GetName());\n\t\t\t\t\tif(status != client->GetAdminStatus())\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Flag status was changed from %i to %i.\",status,client->GetAdminStatus());\n\t\t\t\t\t\tclient->SetAdminStatus(status);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /flag {name} {new_status}\");\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\" Standard User: 0\");\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\" Admin User: %i\", status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /flag {name} {new_status}"
      ]
    },
    "144": {
      "symbol": "COMMAND_CANNEDEMOTE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5943,
      "body": "{\n\t\t\t\tclient->GetCurrentZone()->HandleEmote(client->GetPlayer(), command_parms->data);\n\t\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": true,
      "usage_messages": []
    },
    "145": {
      "symbol": "COMMAND_BROADCAST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5947,
      "body": "{\n\t\t\tif (sep && sep->arg[0])\n\t\t\t\tzone_list.TransmitBroadcast(sep->argplus[0]);\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /broadcast {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /broadcast {message}"
      ]
    },
    "146": {
      "symbol": "COMMAND_ANNOUNCE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5954,
      "body": "{\n\t\t\tif (sep && sep->arg[0])\n\t\t\t\tzone_list.TransmitGlobalAnnouncement(sep->argplus[0]);\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /announce {message}\");\n\t\t\tbreak;\n\t\t\t\t\t\t\t   }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /announce {message}"
      ]
    },
    "36": {
      "symbol": "COMMAND_RELOAD_ITEMS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5961,
      "body": "{\n\t\t\tLogWrite(COMMAND__INFO, 0, \"Command\", \"Reloading items..\");\n\t\t\t\n\t\t\tint32 item_id = (sep && sep->arg[0]) ? atoul(sep->arg[0]) : 0;\n\t\t\tif(item_id > 0) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Reloading item %u based on /reload items [item_id].\", item_id);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Started Reloading items (this might take a few minutes...)\");\n\t\t\t}\n\t\t\t\n\t\t\tdatabase.ReloadItemList(item_id);\n\t\t\t\n\t\t\tif(!item_id) {\n\t\t\t\tdatabase.LoadMerchantInformation();                                                                  \n\t\t\t}\n\t\t\t\n\t\t\tpeer_manager.sendPeersMessage(\"/reloadcommand\", command->handler, item_id);\n\t\t\t\n\t\t\tif(item_id > 0) {\n\t\t\t\tif(master_item_list.GetItem(item_id))\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Reloaded active item %u.\", item_id);\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Item %u is unavailable; any stale template was evicted.\", item_id);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Finished Reloading items.\");\n\t\t\t}\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Reloading item %u based on /reload items [item_id].",
        "/reloadcommand"
      ]
    },
    "1011": {
      "symbol": "COMMAND_RELOAD_RECIPES",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 5991,
      "body": "{\n\t\t\tbool reload_items = false;\n\t\t\tif (sep && sep->arg[0] && sep->arg[0][0]) {\n\t\t\t\tif (stricmp(sep->arg[0], \"items\") != 0) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /reload recipes [items]\");\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treload_items = true;\n\t\t\t}\n\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\n\t\t\t\treload_items ? \"Reloading items, recipe books, and recipes...\" : \"Reloading recipe books and recipes...\");\n\t\t\tstring message;\n\t\t\tbool success = world.RunReloadCommand(command->handler, reload_items ? 1 : 0, nullptr, true, &message);\n\t\t\tclient->SimpleMessage(success ? CHANNEL_COLOR_YELLOW : CHANNEL_COLOR_RED,\n\t\t\t\tmessage.length() > 0 ? message.c_str() : (success ? \"Reload complete.\" : \"Reload failed.\"));\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /reload recipes [items]"
      ]
    },
    "35": {
      "symbol": "COMMAND_ENABLE_ABILITY_QUE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6009,
      "body": "{\n\t\t\tEQ2Packet* app = client->GetPlayer()->GetSpellBookUpdatePacket(client->GetVersion());\n\t\t\tif(app)\n\t\t\t\tclient->QueuePacket(app);\n\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "212": {
      "symbol": "COMMAND_ITEMSEARCH",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6015,
      "body": "{\n\t\t\t\n\t\t\t\tif(command->handler == COMMAND_ITEMSEARCH) {\n\t\t\t\t\tclient->SetGMStoreSearch(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SetGMStoreSearch(false);\n\t\t\t\t}\n\t\t\t\tPacketStruct* packet = configReader.getStruct(\"WS_StartBroker\", client->GetVersion());\n\t\t\t\tif (packet) {\n\t\t\t\t\tpacket->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()));\n\t\t\t\t\t                                      \n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 5, 0);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 20, 1);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 58, 3);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 40, 4);\n\t\t\t\t\tclient->QueuePacket(packet->serialize());\n\t\t\t\t\tif(client->GetVersion() > 561) {\n\t\t\t\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_BrokerBags\", client->GetVersion());\n\t\t\t\t\t\tif (packet2) {\n\t\t\t\t\t\t\tpacket2->setDataByName(\"char_id\", client->GetCharacterID());\n\t\t\t\t\t\t\tclient->QueuePacket(packet2->serialize());                                                   \n\t\t\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsafe_delete(packet);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "527": {
      "symbol": "COMMAND_FROMBROKER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6016,
      "body": "{\n\t\t\t\n\t\t\t\tif(command->handler == COMMAND_ITEMSEARCH) {\n\t\t\t\t\tclient->SetGMStoreSearch(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SetGMStoreSearch(false);\n\t\t\t\t}\n\t\t\t\tPacketStruct* packet = configReader.getStruct(\"WS_StartBroker\", client->GetVersion());\n\t\t\t\tif (packet) {\n\t\t\t\t\tpacket->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()));\n\t\t\t\t\t                                      \n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 5, 0);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 20, 1);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 58, 3);\n\t\t\t\t\tpacket->setDataByName(\"unknown2\", 40, 4);\n\t\t\t\t\tclient->QueuePacket(packet->serialize());\n\t\t\t\t\tif(client->GetVersion() > 561) {\n\t\t\t\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_BrokerBags\", client->GetVersion());\n\t\t\t\t\t\tif (packet2) {\n\t\t\t\t\t\t\tpacket2->setDataByName(\"char_id\", client->GetCharacterID());\n\t\t\t\t\t\t\tclient->QueuePacket(packet2->serialize());                                                   \n\t\t\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsafe_delete(packet);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "211": {
      "symbol": "COMMAND_ANIMTEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6045,
      "body": "{\n\t\t\tPacketStruct* command_packet = configReader.getStruct(\"WS_CannedEmote\", client->GetVersion());\n\t\t\tif(command_packet){\n\t\t\t\tint32 id = client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer());\n\t\t\t\tif (cmdTarget)\n\t\t\t\t\tid = client->GetPlayer()->GetIDWithPlayerSpawn(cmdTarget);\n\t\t\t\tcommand_packet->setDataByName ( \"spawn_id\" , id);\n\n\t\t\t\tint animID = 1;\n\n\t\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\t\tanimID = atoi(sep->arg[0]);\n\n\t\t\t\tVisualState* vs = NULL;\n\t\t\t\tif(animID == 0)\n\t\t\t\t{\n\t\t\t\t\tvs = visual_states.FindVisualState(sep->arg[0]);\n\t\t\t\t}\n\n\n\t\t\t\tchar msg[128];\n\t\t\t\tsnprintf(msg, sizeof(msg), \"Animation Test ID: %i\", animID);\n\t\t\t\tcommand_packet->setMediumStringByName ( \"emote_msg\" , msg );\n\n\t\t\t\tif(vs != NULL)\n\t\t\t\t\tcommand_packet->setDataByName ( \"anim_type\", vs->GetID ( ) );\n\t\t\t\telse\n\t\t\t\t\tcommand_packet->setDataByName ( \"anim_type\", animID );\n\n\t\t\t\tcommand_packet->setDataByName ( \"unknown0\", 0 );\n\t\t\t\tEQ2Packet* outapp = command_packet->serialize();\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(command_packet);\n\t\t\t}\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "22": {
      "symbol": "COMMAND_KICK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6081,
      "body": "{\n\t\t\t\tif( sep == 0 || sep->arg[0] == 0)\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"/kick [name]\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tClient* kickClient = client_lookups.Retain(zone_list.GetClientByCharName(string(sep->arg[0])));\n\n\t\t\t\t\tif ( kickClient == client )\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"You can't kick yourself!\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if(kickClient != NULL)\n\t\t\t\t\t{\n\t\t\t\t\t\tsint16 maxStatus = database.GetHighestCharacterAdminStatus(kickClient->GetAccountID());\n\n\t\t\t\t\t\tif ( maxStatus >= client->GetAdminStatus( ) || kickClient->GetAdminStatus() >= client->GetAdminStatus() )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED,\"Don't even think about it...\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Kicking %s...\",sep->arg[0]);\n\n\t\t\t\t\t\tkickClient->Disconnect();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Could not find %s.\",sep->arg[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/kick [name]"
      ]
    },
    "100": {
      "symbol": "COMMAND_LOCK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6118,
      "body": "{\n\t\t\t\tif( sep != NULL && sep->arg[0] != NULL && sep->IsNumber(0)){\n\t\t\t\t\tint worldLocked = atoi(sep->arg[0]);\n\t\t\t\t\tnet.world_locked = worldLocked;\n\t\t\t\t\tif ( worldLocked )\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"World server has been locked.\");\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"World server has been unlocked.\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"/lock [0/1]\");\n\n\t\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/lock [0/1]"
      ]
    },
    "23": {
      "symbol": "COMMAND_BAN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6133,
      "body": "{\n\t\t\t\tif( sep == 0 || sep->arg[0] == 0 || (sep->arg[1][0] != 0 && !sep->IsNumber(1) ) )\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"/ban [name] [permanent:0/1]\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tClient* kickClient = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\n\t\t\t\t\tif ( kickClient == client )\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"You can't ban yourself!\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if(kickClient != NULL)\n\t\t\t\t\t{\n\t\t\t\t\t\tsint16 maxStatus = database.GetHighestCharacterAdminStatus(kickClient->GetAccountID());\n\n\t\t\t\t\t\tif ( maxStatus > client->GetAdminStatus( ) || \n\t\t\t\t\t\t\tclient->GetAdminStatus ( ) > kickClient->GetAdminStatus ( ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED,\"Don't even think about it...\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Kicking & Banning %s...\",sep->arg[0]);\n\n\t\t\t\t\t\tint perm = atol(sep->arg[1]);\n\t\t\t\t\t\tif ( perm == 1 )\n\t\t\t\t\t\t\tdatabase.UpdateAdminStatus(sep->arg[0],-2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tdatabase.UpdateAdminStatus(sep->arg[0],-1);\n\t\t\t\t\t\tkickClient->Disconnect();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Could not find %s.\",sep->arg[0]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/ban [name] [permanent:0/1]"
      ]
    },
    "102": {
      "symbol": "COMMAND_SET_COMBAT_VOICE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6174,
      "body": "{\n\t\t\tint32 value = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tvalue = atoi(sep->arg[0]);\n\t\t\tclient->GetPlayer()->SetCombatVoice(value);\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "103": {
      "symbol": "COMMAND_SET_EMOTE_VOICE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6181,
      "body": "{\n\t\t\tint32 value = 0;\n\t\t\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\t\t\tvalue = atoi(sep->arg[0]);\n\t\t\tclient->GetPlayer()->SetEmoteVoice(value);\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "101": {
      "symbol": "COMMAND_GIVEITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6188,
      "body": "{\n\n\t\t\tif(sep && sep->arg[0][0] && sep->arg[0][1] && sep->IsNumber(1)){\n\t\t\t\tClient* itemToClient = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\n\t\t\t\tif ( itemToClient == NULL )\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Could not find %s.\",sep->arg[0]);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tint32 item_id = atol(sep->arg[1]);\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"Gave %s item id %i.\",sep->arg[0],item_id);\n\t\t\t\t\titemToClient->AddItem(item_id);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /giveitem [name] [item_id]\");\n\n\t\t\tbreak;\n\t\t\t\t\t\t\t  }",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /giveitem [name] [item_id]"
      ]
    },
    "75": {
      "symbol": "COMMAND_REPORT_BUG",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6208,
      "body": "{ Command_ReportBug(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ReportBug",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12941,
          "body": "{\n\tif(sep)\n\t{ \n\t\tstring data;\n\n\t\tif(sep->arg[0]){\n\t\t\tdata = string(sep->arg[0]);\n\t\t}\n\n\t\tfor(int i=1;i<sep->GetMaxArgNum();i++){\n\t\t\tif(sep->arg[i])\n\t\t\t\tdata.append(\" \").append(sep->arg[i]);\n\t\t}\n\n\t\tif(!sep->IsSet(7)){\n        data.append(\" \").append(std::to_string(client->GetVersion())).append(\"\\a\");\n\t\t}\n\t\n\t\tconst char* target_name = 0;\n\t\tint32 spawn_id = 0;\n\n\t\tif(client->GetPlayer()->GetTarget())\n\t\t{\n\t\t\ttarget_name = client->GetPlayer()->GetTarget()->GetName();\n\t\t\tspawn_id = client->GetPlayer()->GetTarget()->GetDatabaseID();\n\t\t}\n\t\telse\n\t\t\ttarget_name = \"N/A\";\n\n\t\tLogWrite(COMMAND__DEBUG, 1, \"Command\", \"%s\", data.c_str());\n\n\t\tif(world.ReportBug(data, client->GetPlayer()->GetName(), client->GetAccountID(), target_name, spawn_id, client->GetCurrentZone()->GetZoneID()))\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Successfully submitted bug.\");\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Error submitting bug.\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        7
      ],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "N/A"
      ]
    },
    "24": {
      "symbol": "COMMAND_INVENTORY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6209,
      "body": "{ Command_Inventory(client, sep, command); break; }",
      "delegates": [
        {
          "function": "Command_Inventory",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7626,
          "body": "{\n\tPrintSep(sep, \"Command_Inventory\");                                 \n\n\tPlayer* player = client->GetPlayer();\n\n\tif(sep && sep->arg[0][0])\n\t{\n\t\tLogWrite(COMMAND__INFO, 0, \"Command\", \"command: %s\", sep->argplus[0]);\n\n\t\tif(!client->GetPlayer()->Alive())\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED,\"You cannot do that right now.\");\n\t\telse if(sep->arg[1][0] && strncasecmp(\"destroy\", sep->arg[0], 6) == 0 && sep->IsNumber(1))\n\t\t{\n\t\t\tint16 index = atoi(sep->arg[1]);\n\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(index);\n\n\t\t\tif(item)\n\t\t\t{\n\t\t\t\tif(item->IsItemLocked() || player->item_list.HasPendingItemUse(item)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot destroy the item in use.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if(item->IsBag() && item->details.equip_slot_id) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot destroy the item, it is being used as quiver.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if(item->CheckFlag(NO_DESTROY)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You can't destroy this item.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(client->GetPlayer()->item_list.IsItemInSlotType(item, InventorySlotType::HOUSE_VAULT) || client->GetPlayer()->item_list.IsItemInSlotType(item, InventorySlotType::BASE_INVENTORY)) {\n\t\t\t\t\tbroker.RemoveItem(client->GetPlayer()->GetCharacterID(), item->details.unique_id, item->details.count, true);\n\t\t\t\t}\n\t\t\t\tconst int64 destroyed_unique_id = item->details.unique_id;\n\t\t\t\tif(item->GetItemScript() && lua_interface)\n\t\t\t\t\tlua_interface->RunItemScript(item->GetItemScript(), \"destroyed\", item, client->GetPlayer());\n\t\t\t\n\t\t\t\t                                                              \n\t\t\t\titem = player->item_list.GetItemFromUniqueID(destroyed_unique_id, true);\n\t\t\t\tif(!item || player->item_list.HasPendingItemUse(item))\n\t\t\t\t\treturn;\n\t\t\t\tindex = item->details.index;\n\t\t\t\t\n\t\t\t\tint32 bag_id = 0;\n\t\t\t\tif(item){\n\t\t\t\t\tbag_id = item->details.inv_slot_id;\n\t\t\t\t\tdatabase.DeleteItem(client->GetCharacterID(), item, 0);\n\t\t\t\t}\n\t\t\t\tclient->GetPlayer()->item_list.DestroyItem(index);\n\t\t\t\tclient->GetPlayer()->UpdateInventory(bag_id);\n\t\t\t\tclient->GetPlayer()->CalculateApplyWeight();\n\t\t\t\t\n\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t\t}\n\t\t}\n\t\telse if(sep->arg[4][0] && strncasecmp(\"move\", sep->arg[0], 4) == 0 && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3) && sep->IsNumber(4))\n\t\t{\n\t\t\tint16 from_index = atoi(sep->arg[1]);\n\t\t\tsint16 to_slot = atoi(sep->arg[2]);                                                            \n\t\t\tsint32 bag_id = atol(sep->arg[3]);\n\t\t\tint8 charges = atoi(sep->arg[4]);\n\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(from_index);\n\t\t\tint64 unique_id = 0;\n\t\t\tint16 count = 0;\n\t\t\tif(!item) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You have no item.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tunique_id = item->details.unique_id;\n\t\t\tcount = item->details.count;\n\t\t\tif(to_slot == item->details.slot_id && (bag_id == item->details.inv_slot_id)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(item->IsItemLocked() || player->item_list.HasPendingItemUse(item))\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot move the item in use.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(bag_id == InventorySlotType::SHARED_BANK && !client->GetPlayer()->item_list.SharedBankAddAllowed(item))\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"That item (or an item inside) cannot be shared.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsint32 old_inventory_id = 0;\n\n\t\t\tif(item)\n\t\t\t\told_inventory_id = item->details.inv_slot_id;\n\n\t\t\t          \n\t\t\tif (bag_id == InventorySlotType::BANK && to_slot == -1) \n\t\t\t{ \n\t\t\t\tif (player->HasFreeBankSlot())\n\t\t\t\t\tto_slot = player->FindFreeBankSlot();\n\t\t\t\telse \n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You do not have any free bank slots.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t                \n\t\t\tif (bag_id == 0 && to_slot == -1) \n\t\t\t{\n\t\t\t\tif (!player->item_list.GetFirstFreeSlot(&bag_id, &to_slot)) \n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You do not have any free slots.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbool item_deleted = false;\n\t\t\tEQ2Packet* outapp = client->GetPlayer()->MoveInventoryItem(bag_id, from_index, (int8)to_slot, charges, 0, &item_deleted, client->GetVersion());\n\t\t\tclient->QueuePacket(outapp);\n\n\t\t\tif(item_deleted)\n\t\t\t\titem = nullptr;\n\n\t\t\t                              \n\t\t\tif(old_inventory_id > 0 && item && item->details.inv_slot_id != old_inventory_id)\n\t\t\t{ \n\t\t\t\toutapp = client->GetPlayer()->SendBagUpdate(old_inventory_id, client->GetVersion());\n\t\t\t\tif(outapp)\n\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t}\n\n\t\t\tif(item && item->details.inv_slot_id > 0 && item->details.inv_slot_id != old_inventory_id)\n\t\t\t{\n\t\t\t\toutapp = client->GetPlayer()->SendBagUpdate(item->details.inv_slot_id, client->GetVersion());\n\n\t\t\t\tif(outapp)\n\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t}\n\t\t\t\n\t\t\tclient->GetPlayer()->CalculateApplyWeight();\n\t\t\tif(item) {\n\t\t\t\t\tif(!client->GetPlayer()->item_list.IsItemInSlotType(item, InventorySlotType::HOUSE_VAULT) && \n\t\t\t\t\t!client->GetPlayer()->item_list.IsItemInSlotType(item, InventorySlotType::BASE_INVENTORY)) {\n\t\t\t\t\t\t\tbroker.RemoveItem(client->GetPlayer()->GetCharacterID(), unique_id, charges);\n\t\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbroker.RemoveItem(client->GetPlayer()->GetCharacterID(), unique_id, count);\n\t\t\t}\n\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t}\n\t\telse if(sep->arg[1][0] && strncasecmp(\"equip\", sep->arg[0], 5) == 0 && sep->IsNumber(1))\n\t\t{\n\t\t\t\tint16 index = atoi(sep->arg[1]);\n\t\t\t\tint8 slot_id = 255;\n\t\t\t\tint8 unk3 = 0;\n\t\t\t\tint8 appearance_equip = 0;\n\t\t\t\t\n\t\t\t\tif(sep->arg[2][0] && sep->IsNumber(2))\n\t\t\t\t\tslot_id = player->ConvertSlotFromClient(atoi(sep->arg[2]), client->GetVersion());\n\t\t\t\tif(sep->arg[3][0] && sep->IsNumber(3))\n\t\t\t\t\tunk3 = atoul(sep->arg[3]);\n\t\t\t\tif(sep->arg[4][0] && sep->IsNumber(4))\n\t\t\t\t\tappearance_equip = atoul(sep->arg[4]);\n\n\t\t\t\tvector<EQ2Packet*> packets = client->GetPlayer()->EquipItem(index, client->GetVersion(), appearance_equip, slot_id);\n\t\t\t\tEQ2Packet* outapp = 0;\n\n\t\t\t\tfor(int32 i=0;i<packets.size();i++)\n\t\t\t\t{\n\t\t\t\t\toutapp = packets[i];\n\t\t\t\t\tif(outapp)\n\t\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\t}\n\n\t\t\t\tclient->GetPlayer()->UpdateWeapons();\n\t\t\t\tEQ2Packet* characterSheetPackets = client->GetPlayer()->GetPlayerInfo()->serialize(client->GetVersion());\n\t\t\t\tclient->QueuePacket(characterSheetPackets);\n\t\t\t\t\n\t\t\t\tclient->GetPlayer()->CalculateBonuses();\n\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t}\n\t\telse if (sep->arg[1][0] && strncasecmp(\"unpack\", sep->arg[0], 6) == 0 && sep->IsNumber(1))\n\t\t{\n\t\t\tif (client->GetPlayer()->EngagedInCombat())\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You may not unpack items while in combat.\");\n\t\t\telse {\n\t\t\t\tint16 index = atoi(sep->arg[1]);\n\t\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(index);\n\t\t\t\tif (item) {\n\t\t\t\t\tif(item->IsItemLocked())\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot unpack the item in use.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t                                                     \n\t\t\t\t\tif (item->item_sets.size() > 0) {\n\t\t\t\t\t\tfor (int32 i = 0; i < item->item_sets.size(); i++) {\n\t\t\t\t\t\t\tItemSet* set = item->item_sets[i];\n\t\t\t\t\t\t\tif (set->item_stack_size == 0)\n\t\t\t\t\t\t\t\tset->item_stack_size += 1;\n\t\t\t\t\t\t\tclient->AddItem(set->item_id, set->item_stack_size);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\tclient->RemoveItem(item, 1);\n\n\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t\t}\n\n\t\t}\n\t\telse if(sep->arg[1][0] && strncasecmp(\"unequip\", sep->arg[0], 7) == 0 && sep->IsNumber(1))\n\t\t{\n\t\t\tint16 index = player->ConvertSlotFromClient(atoi(sep->arg[1]), client->GetVersion());\n\t\t\tsint32 bag_id = -999;\n\t\t\tint8 to_slot = 255;\n\n\t\t\tif(sep->arg[3][0])\n\t\t\t{\n\t\t\t\tif(sep->IsNumber(2))\n\t\t\t\t\tbag_id = atol(sep->arg[2]);\n\n\t\t\t\tif(sep->IsNumber(3))\n\t\t\t\t\tto_slot = atoi(sep->arg[3]);\n\t\t\t}\n\n\t\t\tsint8 unk4 = 0;\n\t\t\tint8 appearance_equip = 0;\n\t\t\tif(sep->arg[4][0] && sep->IsNumber(4))\n\t\t\t\tunk4 = atoi(sep->arg[4]);\n\t\t\tif(sep->arg[5][0] && sep->IsNumber(5))\n\t\t\t\tappearance_equip = atoul(sep->arg[5]);\n\n\t\t\tvector<EQ2Packet*> packets = client->GetPlayer()->UnequipItem(index, bag_id, to_slot, client->GetVersion(), appearance_equip);\n\t\t\tEQ2Packet* outapp = 0;\n\n\t\t\tfor(int32 i=0;i<packets.size();i++)\n\t\t\t{\n\t\t\t\toutapp = packets[i];\n\n\t\t\t\tif(outapp)\n\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t}\n\n\t\t\tclient->UnequipItem(index, bag_id, to_slot, appearance_equip);\n\t\t\tclient->GetPlayer()->CalculateBonuses();\n\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t}\n\t\telse if(sep->arg[2][0] && strncasecmp(\"swap_equip\", sep->arg[0], 10) == 0 && sep->IsNumber(1) && sep->IsNumber(2))\n\t\t{\n\t\t\tif(client->GetPlayer()->EngagedInCombat() && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Player, AllowPlayerEquipCombat)->GetInt8() == 0) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You may not swap items while in combat.\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tint16 index1 = client->GetPlayer()->ConvertSlotFromClient(atoi(sep->arg[1]), client->GetVersion());\n\t\t\t\tint16 index2 = client->GetPlayer()->ConvertSlotFromClient(atoi(sep->arg[2]), client->GetVersion());\n\t\t\t\tint8 type = 0;\n\t\t\t\tif(sep->IsNumber(3))\n\t\t\t\t\ttype = atoul(sep->arg[3]);                                    \n\t\t\t\t\n\t\t\t\tEQ2Packet* outapp = client->GetPlayer()->SwapEquippedItems(index1, index2, client->GetVersion(), type);\n\n\t\t\t\tif(outapp)\n\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Unable to swap items\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (sep->arg[2][0] && strncasecmp(\"pop\", sep->arg[0], 3) == 0 && sep->IsNumber(1) && sep->IsNumber(2)) \n\t\t{\n\t\t\tsint16 to_slot = atoi(sep->arg[1]);\n\t\t\tsint32 bag_id = atoi(sep->arg[2]);\n\t\t\tItem* item = client->GetPlayer()->item_list.GetOverflowItem();\n\t\t\tif (item) {\n\t\t\t\t                \n\t\t\t\tif (bag_id == 0 && to_slot == -1) \n\t\t\t\t{ \n\t\t\t\t\tif (!player->item_list.GetFirstFreeSlot(&bag_id, &to_slot)) \n\t\t\t\t\t{\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_ERROR, \"You do not have any free slots.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t                            \n\t\t\t\t\titem->details.inv_slot_id = bag_id;\n\t\t\t\t\titem->details.slot_id = to_slot;\n\t\t\t\t\t                                                     \n\t\t\t\t\titem->save_needed = true;\n\t\t\t\t\t\n\t\t\t\t\t                                   \n\t\t\t\t\tif(player->item_list.AddItem(item)) {\n\t\t\t\t\t\t                                         \n\t\t\t\t\t\tplayer->item_list.RemoveOverflowItem(item);\n\t\t\t\t\t}\n\n\t\t\t\t\t                                   \n\t\t\t\t\tclient->QueuePacket(player->item_list.serialize(player, client->GetVersion()));\n\t\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (bag_id == InventorySlotType::BANK && to_slot == -1) {\n\t\t\t\t\t            \n\t\t\t\t\tif (!player->item_list.GetFirstFreeBankSlot(&bag_id, &to_slot)) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"You do not have any free bank slots.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\titem->details.inv_slot_id = bag_id;\n\t\t\t\t\titem->details.slot_id = to_slot;\n\t\t\t\t\titem->save_needed = true;\n\t\t\t\t\tif(player->item_list.AddItem(item)) {\n\t\t\t\t\t\tplayer->item_list.RemoveOverflowItem(item);\n\t\t\t\t\t}\n\t\t\t\t\tclient->QueuePacket(player->item_list.serialize(player, client->GetVersion()));\n\t\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t\t\t}\n\t\t\t\telse if (bag_id == InventorySlotType::SHARED_BANK) {\n\t\t\t\t\t              \n\t\t\t\t\tif (!player->item_list.SharedBankAddAllowed(item)) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"That item (or an item inside) cannot be shared.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tItem* tmp_item = player->item_list.GetItem(bag_id, to_slot);\n\t\t\t\t\tif (tmp_item) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"You can not place an overflow item into an occupied slot\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\titem->details.inv_slot_id = bag_id;\n\t\t\t\t\t\titem->details.slot_id = to_slot;\n\t\t\t\t\t\titem->save_needed = true;\n\t\t\t\t\t\tif(player->item_list.AddItem(item)) {\n\t\t\t\t\t\tplayer->item_list.RemoveOverflowItem(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclient->QueuePacket(player->item_list.serialize(player, client->GetVersion()));\n\t\t\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t                                                       \n\t\t\t\t\tItem* tmp_item = player->item_list.GetItem(bag_id, to_slot);\n\t\t\t\t\t                                                          \n\t\t\t\t\t                                                   \n\t\t\t\t\tif (tmp_item) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"You can not place an overflow item into an occupied slot\");\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\titem->details.inv_slot_id = bag_id;\n\t\t\t\t\t\titem->details.slot_id = to_slot;\n\t\t\t\t\t\titem->save_needed = true;\n\t\t\t\t\t\tif(player->item_list.AddItem(item)) {\n\t\t\t\t\t\tplayer->item_list.RemoveOverflowItem(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclient->QueuePacket(player->item_list.serialize(player, client->GetVersion()));\n\t\t\t\t\t\tclient->OpenShopWindow(nullptr);                                   \n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if(sep->arg[2][0] && strncasecmp(\"nosale\", sep->arg[0], 6) == 0 && sep->IsNumber(1) && sep->IsNumber(2))\n\t\t{\n\t\t\tsint64 data = strtoull(sep->arg[1], NULL, 0);\n\t\t\t\n\t\t\tint32 character_item_id = (int32) (data >> 32);\n\t\t\tint32 item_id = (int32) (data & 0xffffffffL);\n\n\t\t\tint8 sale_setting = atoi(sep->arg[2]);\n\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromUniqueID(character_item_id);\n\t\t\tif(item)\n\t\t\t{\n\t\t\t\titem->no_sale = sale_setting;\n\t\t\t\titem->save_needed = true;\n\t\t\t\tclient->SendSellMerchantList();\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /inventory {destroy|move|equip|unequip|swap_equip|pop} {item_id} [to_slot] [bag_id]\");\n\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4,
        5
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /inventory {destroy|move|equip|unequip|swap_equip|pop} {item_id} [to_slot] [bag_id]"
      ]
    },
    "118": {
      "symbol": "COMMAND_WEAPONSTATS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6210,
      "body": "{ Command_WeaponStats(client); break; }",
      "delegates": [
        {
          "function": "Command_WeaponStats",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12548,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\tSpawn* target = player->GetTarget();\n\t\n\tItem* primary = player->GetEquipmentList()->GetItem(EQ2_PRIMARY_SLOT);\n\tItem* secondary = player->GetEquipmentList()->GetItem(EQ2_SECONDARY_SLOT);\n\tItem* ranged = player->GetEquipmentList()->GetItem(EQ2_RANGE_SLOT);\n\tconst char* charName = player->GetName();\n\tif(target && target->IsEntity()) {\n\t\tprimary = ((Entity*)target)->GetEquipmentList()->GetItem(EQ2_PRIMARY_SLOT);\n\t\tsecondary = ((Entity*)target)->GetEquipmentList()->GetItem(EQ2_SECONDARY_SLOT);\n\t\tranged = ((Entity*)target)->GetEquipmentList()->GetItem(EQ2_RANGE_SLOT);\n\t\tcharName = target->GetName();\n\t}\n\telse {\n\t\ttarget = nullptr;\n\t}\n\tclient->Message(0, \"WeaponStats for %s\", charName);\n\tclient->SimpleMessage(0, \"Primary:\");\n\tif (primary) {\n\t\tclient->Message(0, \"Name: %s\", primary->name.c_str());\n\t\tif(primary->weapon_info) {\n\t\t\tclient->Message(0, \"Base Damage: %u - %u\", primary->weapon_info->damage_low3, primary->weapon_info->damage_high3);\n\t\t\tclient->Message(0, \"Mastery Damage: %u - %u\", primary->weapon_info->damage_low2, primary->weapon_info->damage_high2);\n\t\t\tclient->Message(0, \"Damage: %u - %u\", primary->weapon_info->damage_low1, primary->weapon_info->damage_high1);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(0, \"WARNING: WeaponInfo not assigned to primary item\");\n\t\t}\n\t\t\n\t\tclient->Message(0, \"Actual Damage: %u - %u\", target ? ((Entity*)target)->GetPrimaryWeaponMinDamage() : player->GetPrimaryWeaponMinDamage(),\n\t\t\t\t\t\t\t\t\t\t\t\t\ttarget ? ((Entity*)target)->GetPrimaryWeaponMaxDamage() : player->GetPrimaryWeaponMaxDamage());\n\t\tclient->Message(0, \"Actual Delay: %u\", target ? ((Entity*)target)->GetPrimaryWeaponDelay() : player->GetPrimaryWeaponDelay());\n\t\tclient->Message(0, \"Proc Percent: %d%%\", 0);\n\t\tclient->Message(0, \"Procs Per Minute: %d\", 0);\n\t}\n\telse {\n\t\tclient->SimpleMessage(0, \"Name: fist\");\n\t\tclient->Message(0, \"Base Damage: %u - %u\", target ? ((Entity*)target)->GetPrimaryWeaponMinDamage() : player->GetPrimaryWeaponMinDamage(),\n\t\t\t\t\t\t\t\t\t\t\t\t   target ? ((Entity*)target)->GetPrimaryWeaponMaxDamage() : player->GetPrimaryWeaponMaxDamage());\n\t\tclient->Message(0, \"Actual Damage: %u - %u\", target ? ((Entity*)target)->GetPrimaryWeaponMinDamage() : player->GetPrimaryWeaponMinDamage(), \n\t\t\t\t\t\t\t\t\t\t\t\t\t target ? ((Entity*)target)->GetPrimaryWeaponMaxDamage() : player->GetPrimaryWeaponMaxDamage());\n\t\tclient->Message(0, \"Actual Delay: %d\", target ? ((Entity*)target)->GetPrimaryWeaponDelay() : player->GetPrimaryWeaponDelay() * 0.1);\n\t\tclient->Message(0, \"Proc Percent: %d%%\", 0);\n\t\tclient->Message(0, \"Procs Per Minute: %d\", 0);\n\t}\n\tclient->SimpleMessage(0, \" \");\n\tclient->SimpleMessage(0, \" \");\n\tif (secondary) {\n\t\tclient->SimpleMessage(0, \"Secondary:\");\n\t\tclient->Message(0, \"Name: %s\", secondary->name.c_str());\n\t\tif(secondary->weapon_info) {\n\t\t\tclient->Message(0, \"Base Damage: %u - %u\", secondary->weapon_info->damage_low3, secondary->weapon_info->damage_high3);\n\t\t\tclient->Message(0, \"Mastery Damage: %u - %u\", secondary->weapon_info->damage_low2, secondary->weapon_info->damage_high2);\n\t\t\tclient->Message(0, \"Damage: %u - %u\", secondary->weapon_info->damage_low1, secondary->weapon_info->damage_high1);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(0, \"WARNING: WeaponInfo not assigned to secondary item\");\n\t\t}\n\t\tclient->Message(0, \"Actual Damage: %u - %u\", target ? ((Entity*)target)->GetSecondaryWeaponMinDamage() : player->GetSecondaryWeaponMinDamage(), \n\t\t\t\t\t\t\t\t\t\t\t\t\t target ? ((Entity*)target)->GetSecondaryWeaponMaxDamage() : player->GetSecondaryWeaponMaxDamage());\n\t\tclient->Message(0, \"Actual Delay: %d\", target ? ((Entity*)target)->GetSecondaryWeaponDelay() : player->GetSecondaryWeaponDelay() * 0.1);\n\t\tclient->Message(0, \"Proc Percent: %d%%\", 0);\n\t\tclient->Message(0, \"Procs Per Minute: %d\", 0);\n\t\tclient->SimpleMessage(0, \" \");\n\t\tclient->SimpleMessage(0, \" \");\n\t}\n\tclient->SimpleMessage(0, \"Ranged:\");\n\tif (ranged) {\n\t\tclient->Message(0, \"Name: %s\", ranged->name.c_str());\n\t\t\n\t\tif(ranged->ranged_info) {\n\t\t\tclient->Message(0, \"Base Damage: %u - %u\", ranged->ranged_info->weapon_info.damage_low3, ranged->ranged_info->weapon_info.damage_high3);\n\t\t\tclient->Message(0, \"Mastery Damage: %u - %u\", ranged->ranged_info->weapon_info.damage_low2, ranged->ranged_info->weapon_info.damage_high2);\n\t\t\tclient->Message(0, \"Damage: %u - %u\", ranged->ranged_info->weapon_info.damage_low1, ranged->ranged_info->weapon_info.damage_high1);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(0, \"WARNING: RangedInfo not assigned to ranged item\");\n\t\t}\n\t\tclient->Message(0, \"Actual Damage: %u - %u\", target ? ((Entity*)target)->GetRangedWeaponMinDamage() : player->GetRangedWeaponMinDamage(), \n\t\t\t\t\t\t\t\t\t\t\t\t\t target ? ((Entity*)target)->GetRangedWeaponMaxDamage() : player->GetRangedWeaponMaxDamage());\n\t\tclient->Message(0, \"Actual Delay: %d\",  target ? ((Entity*)target)->GetRangeWeaponDelay() : player->GetRangeWeaponDelay() * 0.1);\n\t\tclient->Message(0, \"Proc Percent: %d%%\", 0);\n\t\tclient->Message(0, \"Procs Per Minute: %d\", 0);\n\t}\n\telse\n\t\tclient->SimpleMessage(0, \"None\");\n\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "236": {
      "symbol": "COMMAND_SKILL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6211,
      "body": "{ Command_Skills(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Skills",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9796,
          "body": "{\n\tPlayer* player = 0;\n\tClient* to_client = 0;\n\n\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer())\n\t\tto_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\tswitch(handler)\n\t{\n\t\tcase COMMAND_SKILL:\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill [add|remove|list] [skill name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to add/remove skills for that player.\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_ADD:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                  \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You gave skill '%s' to player '%s'.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s gave you skill '%s'.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s already has the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (skill)                         \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Added skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You already have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill add [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_REMOVE:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                       \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s' from player %s.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s has removed skill '%s' from you.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Player '%s' does not have the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(skill)                              \n\t\t\t\t\t{\n\t\t\t\t\t\tPlayer* player = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill remove [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_LIST:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing skills like '%s':\", skill_name);\n\t\t\t\t\tmap<int32, Skill*>* skills = master_skill_list.GetAllSkills();\n\t\t\t\t\tmap<int32, Skill*>::iterator itr;\n\n\t\t\t\t\tif (skills && skills->size() > 0) \n\t\t\t\t\t{\n\t\t\t\t\t\tfor (itr = skills->begin(); itr != skills->end(); itr++) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSkill* skill = itr->second;\n\t\t\t\t\t\t\tstring current_skill_name = ::ToLower(string(skill->name.data.c_str()));\n\n\t\t\t\t\t\t\tif (current_skill_name.find(::ToLower(string(skill_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s (%u)\", skill->name.data.c_str(), skill->skill_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill list [skill name]\");\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /skill [add|remove|list] [skill name]",
        "Target player to add/remove skills for that player.",
        "Usage: /skill add [skill name]",
        "Usage: /skill remove [skill name]",
        "Usage: /skill list [skill name]"
      ]
    },
    "233": {
      "symbol": "COMMAND_SKILL_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6212,
      "body": "{ Command_Skills(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Skills",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9796,
          "body": "{\n\tPlayer* player = 0;\n\tClient* to_client = 0;\n\n\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer())\n\t\tto_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\tswitch(handler)\n\t{\n\t\tcase COMMAND_SKILL:\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill [add|remove|list] [skill name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to add/remove skills for that player.\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_ADD:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                  \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You gave skill '%s' to player '%s'.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s gave you skill '%s'.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s already has the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (skill)                         \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Added skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You already have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill add [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_REMOVE:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                       \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s' from player %s.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s has removed skill '%s' from you.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Player '%s' does not have the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(skill)                              \n\t\t\t\t\t{\n\t\t\t\t\t\tPlayer* player = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill remove [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_LIST:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing skills like '%s':\", skill_name);\n\t\t\t\t\tmap<int32, Skill*>* skills = master_skill_list.GetAllSkills();\n\t\t\t\t\tmap<int32, Skill*>::iterator itr;\n\n\t\t\t\t\tif (skills && skills->size() > 0) \n\t\t\t\t\t{\n\t\t\t\t\t\tfor (itr = skills->begin(); itr != skills->end(); itr++) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSkill* skill = itr->second;\n\t\t\t\t\t\t\tstring current_skill_name = ::ToLower(string(skill->name.data.c_str()));\n\n\t\t\t\t\t\t\tif (current_skill_name.find(::ToLower(string(skill_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s (%u)\", skill->name.data.c_str(), skill->skill_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill list [skill name]\");\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /skill [add|remove|list] [skill name]",
        "Target player to add/remove skills for that player.",
        "Usage: /skill add [skill name]",
        "Usage: /skill remove [skill name]",
        "Usage: /skill list [skill name]"
      ]
    },
    "234": {
      "symbol": "COMMAND_SKILL_REMOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6213,
      "body": "{ Command_Skills(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Skills",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9796,
          "body": "{\n\tPlayer* player = 0;\n\tClient* to_client = 0;\n\n\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer())\n\t\tto_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\tswitch(handler)\n\t{\n\t\tcase COMMAND_SKILL:\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill [add|remove|list] [skill name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to add/remove skills for that player.\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_ADD:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                  \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You gave skill '%s' to player '%s'.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s gave you skill '%s'.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s already has the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (skill)                         \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Added skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You already have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill add [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_REMOVE:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                       \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s' from player %s.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s has removed skill '%s' from you.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Player '%s' does not have the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(skill)                              \n\t\t\t\t\t{\n\t\t\t\t\t\tPlayer* player = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill remove [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_LIST:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing skills like '%s':\", skill_name);\n\t\t\t\t\tmap<int32, Skill*>* skills = master_skill_list.GetAllSkills();\n\t\t\t\t\tmap<int32, Skill*>::iterator itr;\n\n\t\t\t\t\tif (skills && skills->size() > 0) \n\t\t\t\t\t{\n\t\t\t\t\t\tfor (itr = skills->begin(); itr != skills->end(); itr++) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSkill* skill = itr->second;\n\t\t\t\t\t\t\tstring current_skill_name = ::ToLower(string(skill->name.data.c_str()));\n\n\t\t\t\t\t\t\tif (current_skill_name.find(::ToLower(string(skill_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s (%u)\", skill->name.data.c_str(), skill->skill_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill list [skill name]\");\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /skill [add|remove|list] [skill name]",
        "Target player to add/remove skills for that player.",
        "Usage: /skill add [skill name]",
        "Usage: /skill remove [skill name]",
        "Usage: /skill list [skill name]"
      ]
    },
    "235": {
      "symbol": "COMMAND_SKILL_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6214,
      "body": "{ Command_Skills(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Skills",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9796,
          "body": "{\n\tPlayer* player = 0;\n\tClient* to_client = 0;\n\n\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer())\n\t\tto_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\tswitch(handler)\n\t{\n\t\tcase COMMAND_SKILL:\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill [add|remove|list] [skill name]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to add/remove skills for that player.\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_ADD:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                  \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You gave skill '%s' to player '%s'.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s gave you skill '%s'.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s already has the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (skill)                         \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Added skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You already have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill add [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_REMOVE:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\t\t\tif (skill && to_client && !(client->GetPlayer() == to_client->GetPlayer()))                                                       \n\t\t\t\t\t{\n\t\t\t\t\t\tplayer = to_client->GetPlayer();\n\n\t\t\t\t\t\tif (player)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s' from player %s.\", skill_name, player->GetName());\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_COLOR_YELLOW, \"%s has removed skill '%s' from you.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Player '%s' does not have the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(skill)                              \n\t\t\t\t\t{\n\t\t\t\t\t\tPlayer* player = client->GetPlayer();\n\n\t\t\t\t\t\tif (player) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) \n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(client);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Removed skill '%s'.\", skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have the skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill remove [skill name]\");\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target player to give skill to that player.\");\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\tcase COMMAND_SKILL_LIST:\n\t\t\t{\n\t\t\t\tif (sep && sep->arg[0]) \n\t\t\t\t{\n\t\t\t\t\tconst char* skill_name = sep->argplus[0];\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing skills like '%s':\", skill_name);\n\t\t\t\t\tmap<int32, Skill*>* skills = master_skill_list.GetAllSkills();\n\t\t\t\t\tmap<int32, Skill*>::iterator itr;\n\n\t\t\t\t\tif (skills && skills->size() > 0) \n\t\t\t\t\t{\n\t\t\t\t\t\tfor (itr = skills->begin(); itr != skills->end(); itr++) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tSkill* skill = itr->second;\n\t\t\t\t\t\t\tstring current_skill_name = ::ToLower(string(skill->name.data.c_str()));\n\n\t\t\t\t\t\t\tif (current_skill_name.find(::ToLower(string(skill_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s (%u)\", skill->name.data.c_str(), skill->skill_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /skill list [skill name]\");\n\t\t\t\tbreak;\n\t\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /skill [add|remove|list] [skill name]",
        "Target player to add/remove skills for that player.",
        "Usage: /skill add [skill name]",
        "Usage: /skill remove [skill name]",
        "Usage: /skill list [skill name]"
      ]
    },
    "237": {
      "symbol": "COMMAND_ZONE_SET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6215,
      "body": "{ Command_ZoneSet(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ZoneSet",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12728,
          "body": "{\n\tif (sep && sep->arg[0] && sep->arg[1] && sep->arg[2]) \n\t{\n\t\tZoneServerSharedPtr zone = nullptr;\n\t\tint32 zone_id = 0;\n\t\tZoneChangeDetails zone_details;\n\t\tif (sep->IsNumber(0) && atoi(sep->arg[0]) > 0) \n\t\t{\n\t\t\tzone_id = atoul(sep->arg[0]);\n\t\t\tif(zone_list.GetZone(&zone_details, zone_id, \"\", false, false, false, false)) {\n\t\t\t\tzone = zone_details.zonePtr;\n\t\t\t}\n\t\t}\n\t\telse \n\t\t{\n\t\t\tzone_id = database.GetZoneID(sep->arg[0]);\n\n\t\t\tif(zone_list.GetZone(&zone_details, zone_id, \"\", false, false, false, false)) {\n\t\t\t\tzone = zone_details.zonePtr;\n\t\t\t}\n\t\t}\n\n\t\tif (zone_id > 0) \n\t\t{\n\t\t\tif (zone_set_values.count(string(sep->arg[1])) > 0)\n\t\t\t\tSetZoneCommand(client, zone_id, zone.get(), zone_set_values[sep->arg[1]], sep->arg[2]);\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The attribute '%s' is not valid.\", sep->arg[1]);\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The zone name or ID '%s' does not exist.\", sep->arg[0]);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /zone set [zone id|zone name] [attribute] [value]\");\n}"
        },
        {
          "function": "SetZoneCommand",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 2056,
          "body": "{\n\tif (client && zone_id > 0 && type > 0 && value) {\n\t\tsint32 int_value = 0;\n\t\tfloat float_value = 0;\n\t\tif (type == ZONE_SET_VALUE_SAFE_X || type == ZONE_SET_VALUE_SAFE_Y || type == ZONE_SET_VALUE_SAFE_Z || type == ZONE_SET_VALUE_UNDERWORLD) {\n\t\t\ttry {\n\t\t\t\tfloat_value = atof(value);\n\t\t\t}\n\t\t\tcatch (...) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Error converting '%s' to a float value\", value);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\telse if (type != ZONE_SET_VALUE_NAME && type != ZONE_SET_VALUE_FILE && type != ZONE_SET_VALUE_DESCRIPTION && type != ZONE_SET_VALUE_ZONE_TYPE && type != ZONE_SET_VALUE_LUA_SCRIPT && type != ZONE_SET_VALUE_ZONE_MOTD) {\n\t\t\ttry {\n\t\t\t\tint_value = atoi(value);\n\t\t\t}\n\t\t\tcatch (...) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Error converting '%s' to an integer value\", value);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tswitch (type) {\n\t\t\tcase ZONE_SET_VALUE_EXPANSION_ID: {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_NAME: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetZoneName(const_cast<char*>(value));\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"name\", value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_FILE: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetZoneFile(const_cast<char*>(value));\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"file\", value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_DESCRIPTION: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetZoneDescription(const_cast<char*>(value));\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"description\", value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_SAFE_X: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetSafeX(float_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"safe_x\", float_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_SAFE_Y: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetSafeY(float_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"safe_y\", float_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_SAFE_Z: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetSafeZ(float_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"safe_z\", float_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_UNDERWORLD: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetUnderWorld(float_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"underworld\", float_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_MIN_RECOMMENDED: {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_MAX_RECOMMENDED: {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_ZONE_TYPE: {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_ALWAYS_LOADED: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetAlwaysLoaded(int_value == 1);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"always_loaded\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_CITY_ZONE: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetCityZone(int_value == 1);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"city_zone\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_WEATHER_ALLOWED: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetWeatherAllowed(int_value == 1);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"weather_allowed\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_MIN_STATUS: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetMinimumStatus(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"min_status\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_MIN_LEVEL: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetMinimumLevel(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"min_level\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_MAX_LEVEL: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetMaximumLevel(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"max_level\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_START_ZONE: {\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"start_zone\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_INSTANCE_TYPE: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetInstanceType(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"instance_type\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_DEFAULT_REENTER_TIME: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetDefaultReenterTime(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"default_reenter_time\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_DEFAULT_RESET_TIME: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetDefaultResetTime(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"default_reset_time\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_DEFAULT_LOCKOUT_TIME: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetDefaultLockoutTime(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"default_lockout_time\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_FORCE_GROUP_TO_ZONE: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetForceGroupZoneOption(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"force_group_to_zone\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_LUA_SCRIPT: {\n\t\t\t\tif (lua_interface && lua_interface->GetZoneScript(value) == 0) {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid Zone Script file.  Be sure you give the absolute path.\");\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Example: /zone set lua_script 'ZoneScripts/QueensColony.lua'\");\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tworld.AddZoneScript(zone_id, const_cast<char*>(value));\n\t\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"lua_script\", value);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_SHUTDOWN_TIMER: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetShutdownTimer(int_value);\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"shutdown_timer\", int_value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase ZONE_SET_VALUE_ZONE_MOTD: {\n\t\t\t\tif (zone)\n\t\t\t\t\tzone->SetZoneMOTD(string(value));\n\t\t\t\tdatabase.SaveZoneInfo(zone_id, \"zone_motd\", value);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid zone attribute %i\", type);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\tif (client)\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"An error occured saving new zone data.\");\n\t\treturn false;\n\t}\n\treturn true;\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /zone set [zone id|zone name] [attribute] [value]",
        "Example: /zone set lua_script 'ZoneScripts/QueensColony.lua'"
      ]
    },
    "238": {
      "symbol": "COMMAND_ZONE_DETAILS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6216,
      "body": "{ Command_ZoneDetails(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ZoneDetails",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12687,
          "body": "{\n\tZoneInfo* zone_info = new ZoneInfo;\n\n\tif (sep && sep->arg[0]) \n\t{\n\t\tif (sep->IsNumber(0))\n\t\t\tzone_info->id = atoi(sep->arg[0]);\n\t\telse\n\t\t\tzone_info->id = database.GetZoneID(sep->arg[0]);\n\n\t\tif (zone_info->id > 0) \n\t\t{\n\t\t\tdatabase.LoadZoneInfo(zone_info);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"id: %u, name: %s, file: %s, description: %s\", zone_info->id, zone_info->name, zone_info->file, zone_info->description);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"safe_x: %f, safe_y: %f, safe_z: %f, underworld: %f\", zone_info->safe_x, zone_info->safe_y, zone_info->safe_z, zone_info->underworld);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"min_status: %u, min_level: %u, max_level: %u, xp_modifier: %u\", zone_info->min_status, zone_info->min_level, zone_info->max_level, zone_info->xp_modifier);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"instance_type: %u, shutdown_timer: %u, ruleset_id: %u\", zone_info->instance_type, zone_info->shutdown_timer, zone_info->ruleset_id);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"default_reenter_time: %u, default_reset_time: %u, default_lockout_time: %u\", zone_info->default_reenter_time, zone_info->default_reenter_time, zone_info->default_lockout_time);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"force_group_to_zone: %u, expansion_id: %u, min_version: %u\", zone_info->force_group_to_zone, zone_info->expansion_id, zone_info->min_version);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"always_loaded: %u, city_zone: %u, start_zone: %u, weather_allowed: %u\", zone_info->always_loaded, zone_info->city_zone, zone_info->start_zone, zone_info->weather_allowed);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"zone_type: %s, sky_file: %s\", zone_info->zone_type, zone_info->sky_file);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"lua_script: %s\", zone_info->lua_script);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"zone_motd: %s\", zone_info->zone_motd);\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The zone name or ID '%s' does not exist.\", sep->arg[0]);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /zone details [zone id|zone name]\");\n\n\tsafe_delete(zone_info);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /zone details [zone id|zone name]"
      ]
    },
    "241": {
      "symbol": "COMMAND_ENTITYCOMMAND",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6217,
      "body": "{ Command_EntityCommand(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_EntityCommand",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6830,
          "body": "{\n\tif( handler == COMMAND_ENTITYCOMMAND )\n\t{\n\t\t                                                               \n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /entity_command list [entity command name]\");\n\t\treturn;\n\t}\n\telse if( handler == COMMAND_ENTITYCOMMAND_LIST )\n\t{\n\t\t                                                   \n\t\tif (sep && sep->arg[0]) \n\t\t{\n\t\t\tconst char* entity_command_name = sep->argplus[0];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing entity commands like '%s':\", entity_command_name);\n\t\t\tmap<int32, vector<EntityCommand*>*>* entity_command_list_all = client->GetCurrentZone()->GetEntityCommandListAll();\n\t\t\tmap<int32, vector<EntityCommand*>*>::iterator itr;\n\n\t\t\tfor (itr = entity_command_list_all->begin(); itr != entity_command_list_all->end(); itr++) \n\t\t\t{\n\t\t\t\tvector<EntityCommand*>* entity_command_list = itr->second;\n\t\t\t\tvector<EntityCommand*>::iterator itr2;\n\n\t\t\t\tfor (itr2 = entity_command_list->begin(); itr2 != entity_command_list->end(); itr2++) \n\t\t\t\t{\n\t\t\t\t\tEntityCommand* entity_command = *itr2;\n\n\t\t\t\t\tif (ToLower(entity_command->name).find(ToLower(string(entity_command_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Command Text: %s, Command List ID: %u, Distance: %f\\n\", entity_command->name.c_str(), itr->first, entity_command->distance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse                   \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /entity_command list [entity command name]\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /entity_command list [entity command name]"
      ]
    },
    "242": {
      "symbol": "COMMAND_ENTITYCOMMAND_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6218,
      "body": "{ Command_EntityCommand(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_EntityCommand",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6830,
          "body": "{\n\tif( handler == COMMAND_ENTITYCOMMAND )\n\t{\n\t\t                                                               \n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /entity_command list [entity command name]\");\n\t\treturn;\n\t}\n\telse if( handler == COMMAND_ENTITYCOMMAND_LIST )\n\t{\n\t\t                                                   \n\t\tif (sep && sep->arg[0]) \n\t\t{\n\t\t\tconst char* entity_command_name = sep->argplus[0];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing entity commands like '%s':\", entity_command_name);\n\t\t\tmap<int32, vector<EntityCommand*>*>* entity_command_list_all = client->GetCurrentZone()->GetEntityCommandListAll();\n\t\t\tmap<int32, vector<EntityCommand*>*>::iterator itr;\n\n\t\t\tfor (itr = entity_command_list_all->begin(); itr != entity_command_list_all->end(); itr++) \n\t\t\t{\n\t\t\t\tvector<EntityCommand*>* entity_command_list = itr->second;\n\t\t\t\tvector<EntityCommand*>::iterator itr2;\n\n\t\t\t\tfor (itr2 = entity_command_list->begin(); itr2 != entity_command_list->end(); itr2++) \n\t\t\t\t{\n\t\t\t\t\tEntityCommand* entity_command = *itr2;\n\n\t\t\t\t\tif (ToLower(entity_command->name).find(ToLower(string(entity_command_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Command Text: %s, Command List ID: %u, Distance: %f\\n\", entity_command->name.c_str(), itr->first, entity_command->distance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse                   \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /entity_command list [entity command name]\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /entity_command list [entity command name]"
      ]
    },
    "244": {
      "symbol": "COMMAND_MERCHANT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6219,
      "body": "{ Command_Merchant(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Merchant",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8317,
          "body": "{\n\tif( handler == COMMAND_MERCHANT )\n\t{\n\t\t                                                          \n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /merchant list [merchant description]\");\n\t\treturn;\n\t}\n\telse if( handler == COMMAND_MERCHANT_LIST )\n\t{\n\t\t                                                     \n\t\tif (sep && sep->arg[0])\n\t\t{\n\t\t\tconst char* merchant_description = sep->argplus[0];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing merchants like '%s':\", merchant_description);\n\t\t\tmap<int32, MerchantInfo*>* merchant_info = world.GetMerchantInfo();\n\t\t\tmap<int32, MerchantInfo*>::iterator itr;\n\n\t\t\tfor (itr = merchant_info->begin(); itr != merchant_info->end(); itr++) \n\t\t\t{\n\t\t\t\tstring description = database.GetMerchantDescription(itr->first);\n\n\t\t\t\tif (ToLower(description).find(ToLower(string(merchant_description))) < 0xFFFFFFFF)\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Merchant ID: %u, Description: %s\", itr->first, description.c_str());\n\t\t\t}\n\t\t}\n\t\telse                  \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /merchant list [merchant description]\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /merchant list [merchant description]"
      ]
    },
    "245": {
      "symbol": "COMMAND_MERCHANT_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6220,
      "body": "{ Command_Merchant(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Merchant",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8317,
          "body": "{\n\tif( handler == COMMAND_MERCHANT )\n\t{\n\t\t                                                          \n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /merchant list [merchant description]\");\n\t\treturn;\n\t}\n\telse if( handler == COMMAND_MERCHANT_LIST )\n\t{\n\t\t                                                     \n\t\tif (sep && sep->arg[0])\n\t\t{\n\t\t\tconst char* merchant_description = sep->argplus[0];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing merchants like '%s':\", merchant_description);\n\t\t\tmap<int32, MerchantInfo*>* merchant_info = world.GetMerchantInfo();\n\t\t\tmap<int32, MerchantInfo*>::iterator itr;\n\n\t\t\tfor (itr = merchant_info->begin(); itr != merchant_info->end(); itr++) \n\t\t\t{\n\t\t\t\tstring description = database.GetMerchantDescription(itr->first);\n\n\t\t\t\tif (ToLower(description).find(ToLower(string(merchant_description))) < 0xFFFFFFFF)\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Merchant ID: %u, Description: %s\", itr->first, description.c_str());\n\t\t\t}\n\t\t}\n\t\telse                  \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /merchant list [merchant description]\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /merchant list [merchant description]"
      ]
    },
    "246": {
      "symbol": "COMMAND_APPEARANCE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6221,
      "body": "{ Command_Appearance(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Appearance",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6595,
          "body": "{\n\tif( handler == COMMAND_APPEARANCE )\n\t{\n\t\t                                                            \n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /appearance list [appearance name]\");\n\t\treturn;\n\t}\n\telse if( handler == COMMAND_APPEARANCE_LIST )\n\t{\n\t\t                                                \n\t\tif (sep && sep->arg[0]) \n\t\t{\n\t\t\tconst char* appearance_name = sep->argplus[0];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing appearances like '%s':\", appearance_name);\n\t\t\tvector<int16>* appearances = database.GetAppearanceIDsLikeName(string(appearance_name));\n\n\t\t\tif (appearances) \n\t\t\t{\n\t\t\t\tvector<int16>::iterator itr;\n\t\t\t\tfor (itr = appearances->begin(); itr != appearances->end(); itr++) \n\t\t\t\t{\n\t\t\t\t\tint16 id = *itr;\n\t\t\t\t\tstring name = database.GetAppearanceName(id);\n\n\t\t\t\t\tif (ToLower(name).find(ToLower(string(appearance_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s (%u)\", name.c_str(), id);\n\t\t\t\t}\n\t\t\t\tsafe_delete(appearances);\n\t\t\t}\n\t\t}\n\t\telse            \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /appearance list [appearance name]\");\n\t}\n\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /appearance list [appearance name]"
      ]
    },
    "247": {
      "symbol": "COMMAND_APPEARANCE_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6222,
      "body": "{ Command_Appearance(client, sep, command->handler); break; }",
      "delegates": [
        {
          "function": "Command_Appearance",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6595,
          "body": "{\n\tif( handler == COMMAND_APPEARANCE )\n\t{\n\t\t                                                            \n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /appearance list [appearance name]\");\n\t\treturn;\n\t}\n\telse if( handler == COMMAND_APPEARANCE_LIST )\n\t{\n\t\t                                                \n\t\tif (sep && sep->arg[0]) \n\t\t{\n\t\t\tconst char* appearance_name = sep->argplus[0];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Listing appearances like '%s':\", appearance_name);\n\t\t\tvector<int16>* appearances = database.GetAppearanceIDsLikeName(string(appearance_name));\n\n\t\t\tif (appearances) \n\t\t\t{\n\t\t\t\tvector<int16>::iterator itr;\n\t\t\t\tfor (itr = appearances->begin(); itr != appearances->end(); itr++) \n\t\t\t\t{\n\t\t\t\t\tint16 id = *itr;\n\t\t\t\t\tstring name = database.GetAppearanceName(id);\n\n\t\t\t\t\tif (ToLower(name).find(ToLower(string(appearance_name))) < 0xFFFFFFFF)\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s (%u)\", name.c_str(), id);\n\t\t\t\t}\n\t\t\t\tsafe_delete(appearances);\n\t\t\t}\n\t\t}\n\t\telse            \n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /appearance list [appearance name]\");\n\t}\n\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /appearance list [appearance name]"
      ]
    },
    "135": {
      "symbol": "COMMAND_TRACK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6223,
      "body": "{ Command_Track(client); break; }",
      "delegates": [
        {
          "function": "Command_Track",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10980,
          "body": "{\n\tif (!client->GetPlayer()->GetIsTracking())\n\t\tclient->GetPlayer()->GetZone()->AddPlayerTracking(client->GetPlayer());\n\telse\n\t\tclient->GetPlayer()->GetZone()->RemovePlayerTracking(client->GetPlayer(), TRACKING_STOP);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "249": {
      "symbol": "COMMAND_DISTANCE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6224,
      "body": "{ Command_Distance(client); break; }",
      "delegates": [
        {
          "function": "Command_Distance",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6729,
          "body": "{\n\tSpawn* target = client->GetPlayer()->GetTarget();\n\n\tif (target)\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Your distance from %s is %f\", target->GetName(), client->GetPlayer()->GetDistance(target));\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must have a spawn targeted to use /distance\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must have a spawn targeted to use /distance"
      ]
    },
    "136": {
      "symbol": "COMMAND_INSPECT_PLAYER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6225,
      "body": "{ Command_InspectPlayer(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_InspectPlayer",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7600,
          "body": "{\n\tClientLookupScope client_lookups;\n\tif (sep && sep->arg[0]) \n\t{\n\t\tClient* inspect_client = client_lookups.Retain(zone_list.GetClientByCharName(string(sep->arg[0])));\n\n\t\tif (inspect_client)\n\t\t\tclient->InspectPlayer(inspect_client->GetPlayer());\n\t}\n\telse \n\t{\n\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\n\t\tif (target && target->IsPlayer())\n\t\t\tclient->InspectPlayer((Player*)target);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "191": {
      "symbol": "COMMAND_ZONE_SAFE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6226,
      "body": "{ Command_ZoneSafeCoords(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ZoneSafeCoords",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12655,
          "body": "{\n\tZoneServerSharedPtr zone = nullptr;\n\tint32 zone_id = client->GetPlayer()->GetZone()->GetZoneID();\n\n\tif (zone_id > 0)\n\t{\n\t\tZoneChangeDetails zone_details;\n\t\tif(zone_list.GetZone(&zone_details, zone_id, \"\", false, false, false)) {\n\t\t\tzone = zone_details.zonePtr;\n\t\t}\n\t\tif (zone)\n\t\t{\n\t\t\tzone->SetSafeX(client->GetPlayer()->GetX());\n\t\t\tzone->SetSafeY(client->GetPlayer()->GetY());\n\t\t\tzone->SetSafeZ(client->GetPlayer()->GetZ());\n\t\t\tzone->SetSafeHeading(client->GetPlayer()->GetHeading());\n\t\t\tif( database.SaveZoneSafeCoords(zone_id, zone->GetSafeX(), zone->GetSafeY(), zone->GetSafeZ(), zone->GetSafeHeading()) )\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Zone safe coordinates updated!\");\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"FAILED to update zone safe coordinates!\");\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "250": {
      "symbol": "COMMAND_GUILDSAY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6227,
      "body": "{ Command_GuildSay(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_GuildSay",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7236,
          "body": "{\n\tGuild* guild = client->GetPlayer()->GetGuild();\n\n\tif (guild) \n\t{\n\t\tif (sep && sep->arg[0]) {\n\t\t\tbool success = guild->HandleGuildSay(client, sep->argplus[0]);\n\t\t\tif(success)\n\t\t\t\tpeer_manager.SendPeersGuildChannelMessage(guild->GetID(), std::string(client->GetPlayer()->GetName()), std::string(sep->argplus[0]), CHANNEL_GUILD_SAY, client->GetPlayer()->GetCurrentLanguage());\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"You are not a member of a guild\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "251": {
      "symbol": "COMMAND_OFFICERSAY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6228,
      "body": "{ Command_OfficerSay(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_OfficerSay",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7257,
          "body": "{\n\tGuild* guild = client->GetPlayer()->GetGuild();\n\n\tif (guild) \n\t{\n\t\tif (sep && sep->arg[0]) {\n\t\t\tbool success = guild->HandleOfficerSay(client, sep->argplus[0]);\n\t\t\tif(success)\n\t\t\t\tpeer_manager.SendPeersGuildChannelMessage(guild->GetID(), std::string(client->GetPlayer()->GetName()), std::string(sep->argplus[0]), CHANNEL_OFFICER_SAY, client->GetPlayer()->GetCurrentLanguage());\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"You are not a member of a guild\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "253": {
      "symbol": "COMMAND_SET_GUILD_MEMBER_NOTE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6229,
      "body": "{ Command_SetGuildMemberNote(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SetGuildMemberNote",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7220,
          "body": "{\n\tif (sep && sep->arg[0] && sep->arg[1]) \n\t{\n\t\tGuild* guild = client->GetPlayer()->GetGuild();\n\n\t\tif (guild)\n\t\t\tguild->SetGuildMemberNote(sep->arg[0], sep->argplus[1]);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "254": {
      "symbol": "COMMAND_SET_GUILD_OFFICER_NOTE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6230,
      "body": "{ Command_SetGuildOfficerNote(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SetGuildOfficerNote",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7204,
          "body": "{\n\tif (sep && sep->arg[0] && sep->arg[1]) \n\t{\n\t\tGuild* guild = client->GetPlayer()->GetGuild();\n\n\t\tif (guild)\n\t\t\tguild->SetGuildOfficerNote(sep->arg[0], sep->argplus[1]);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "252": {
      "symbol": "COMMAND_GUILD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6231,
      "body": "{ Command_Guild(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Guild",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6994,
          "body": "{\n\tGuild* guild = client->GetPlayer()->GetGuild();\n\tif (sep && sep->GetMaxArgNum() > 0 && sep->arg[0])\n\t{\n\t\tconst char* command = sep->arg[0];\n\t\tint32 length = strlen(command);\n\n\t\tLogWrite(COMMAND__DEBUG, 0, \"Command\", \"Guild Command: %s\", command);\n\n\t\tif (strncmp(command, \"rank_name\", length) == 0 && sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && guild) {\n\t\t\tguild->SetRankName(atoi(sep->arg[1]), sep->argplus[2]);\n\t\t\tpeer_manager.sendPeersGuildRankName(guild->GetID(), atoul(sep->arg[1]), std::string(sep->argplus[2]));\n\t\t}\n\t\telse if (strncmp(command, \"rank_permission\", length) == 0 && sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2) && sep->arg[3] && guild) {\n\t\t\tguild->SetPermission(atoi(sep->arg[1]), atoi(sep->arg[2]), strncmp(sep->arg[3], \"true\", 4) == 0 ? 1 : 0);\n\t\t\tpeer_manager.sendPeersGuildPermission(guild->GetID(), atoul(sep->arg[1]), atoul(sep->arg[2]), strncmp(sep->arg[3], \"true\", 4) == 0 ? 1 : 0);\n\t\t}\n\t\telse if (strncmp(command, \"filter_event\", length) == 0 && sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2) && sep->arg[3] && guild) {\n\t\t\tguild->SetEventFilter(atoi(sep->arg[1]), atoi(sep->arg[2]), strncmp(sep->arg[3], \"true\", 4) == 0 ? 1 : 0);\n\t\t\tpeer_manager.sendPeersGuildEventFilter(guild->GetID(), atoul(sep->arg[1]), atoul(sep->arg[2]), strncmp(sep->arg[3], \"true\", 4) == 0 ? 1 : 0);\n\t\t}\n\t\telse if (strncmp(command, \"kick\", length) == 0 && sep->arg[1] && guild) {\n\t\t\tint32 character_id = guild->KickGuildMember(client, sep->arg[1]);\n\t\t\tif(character_id > 0) {\n\t\t\t\tpeer_manager.sendPeersRemoveGuildMember(character_id, guild->GetID(), std::string(client->GetPlayer()->GetName()));\n\t\t\t}\n\t\t}\n\t\telse if (strncmp(command, \"demote\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->DemoteGuildMember(client, sep->arg[1]);\n\t\telse if (strncmp(command, \"promote\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->PromoteGuildMember(client, sep->arg[1]);\n\t\telse if (strncmp(command, \"points\", length) == 0 && guild)\n\t\t{\n\t\t\tif (sep->arg[1] && strncmp(sep->arg[1], \"add\", length) == 0)\n\t\t\t{\n\t\t\t\tif (sep->arg[2] && sep->IsNumber(2) && sep->arg[3])\n\t\t\t\t{\n\t\t\t\t\tfloat points = atof(sep->arg[2]);\n\t\t\t\t\tconst char* option = sep->arg[3];\n\t\t\t\t\tconst char* comment = sep->argplus[4];\n\n\t\t\t\t\tif (strncmp(option, \"all\", strlen(option)) == 0)\n\t\t\t\t\t\tguild->AddPointsToAll(client, points, comment);\n\t\t\t\t\telse if (strncmp(option, \"online\", strlen(option)) == 0)\n\t\t\t\t\t\tguild->AddPointsToAllOnline(client, points, comment);\n\t\t\t\t\telse if (strncmp(option, \"group\", strlen(option)) == 0)\n\t\t\t\t\t\tguild->AddPointsToGroup(client, points, comment);\n\t\t\t\t\telse if (strncmp(option, \"raid\", strlen(option)) == 0)\n\t\t\t\t\t\tguild->AddPointsToRaid(client, points, comment);\n\t\t\t\t\telse\n\t\t\t\t\t\tguild->AddPointsToGuildMember(client, points, option, comment);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (sep->arg[1] && strncmp(sep->arg[1], \"view\", strlen(sep->arg[1])) == 0 && sep->arg[2])\n\t\t\t\tguild->ViewGuildMemberPoints(client, sep->arg[2]);\n\t\t\telse\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unhandled guild points command: %s\", sep->argplus[0]);\n\t\t}\n\t\telse if (strncmp(command, \"motd\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->SetMOTD(sep->argplus[1]);\n\t\telse if (strncmp(command, \"recruiting\", length) == 0 && guild) \n\t\t{\n\t\t\tif (sep->arg[1])\n\t\t\t{\n\t\t\t\tconst char* option = sep->arg[1];\n\n\t\t\t\tif (strncmp(option, \"short_text\", strlen(option)) == 0 && sep->arg[2])\n\t\t\t\t\tguild->SetRecruitingShortDesc(sep->argplus[2]);\n\t\t\t\telse if (strncmp(option, \"long_text\", strlen(option)) == 0 && sep->arg[2])\n\t\t\t\t\tguild->SetRecruitingFullDesc(sep->argplus[2]);\n\t\t\t\telse if (strncmp(option, \"flag\", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2) && sep->arg[3])\n\t\t\t\t\tguild->SetRecruitingFlag(atoi(sep->arg[2]), strncmp(sep->arg[3], \"true\", 4) == 0 ? 1 : 0);\n\t\t\t\telse if (strncmp(option, \"min_level\", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2))\n\t\t\t\t\tguild->SetRecruitingMinLevel(atoi(sep->arg[2]));\n\t\t\t\telse if (strncmp(option, \"playstyle\", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2))\n\t\t\t\t\tguild->SetRecruitingPlayStyle(atoi(sep->arg[2]));\n\t\t\t\telse if (strncmp(option, \"tag\", strlen(option)) == 0 && sep->arg[2] && sep->IsNumber(2) && sep->arg[3] && sep->IsNumber(3))\n\t\t\t\t\tguild->SetRecruitingDescTag(atoi(sep->arg[2]), atoi(sep->arg[3]));\n\t\t\t\telse if (strncmp(command, \"recruiting\", strlen(option)) == 0)\n\t\t\t\t\tguild->ChangeMemberFlag(client, GUILD_MEMBER_FLAGS_RECRUITING_FOR_GUILD, strncmp(sep->arg[1], \"true\", 4) == 0 ? 1 : 0);\n\t\t\t\telse\n\t\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unhandled guild recruiting command: %s\", sep->argplus[0]);\n\t\t\t}\n\t\t\telse\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unhandled guild recruiting command: %s\", sep->argplus[0]);\n\t\t}\n\t\telse if (strncmp(command, \"notify_online\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->ChangeMemberFlag(client, GUILD_MEMBER_FLAGS_NOTIFY_LOGINS, strncmp(sep->arg[1], \"true\", 4) == 0 ? 1 : 0);\n\t\telse if (strncmp(command, \"event_privacy\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->ChangeMemberFlag(client, GUILD_MEMBER_FLAGS_DONT_GENERATE_EVENTS, strncmp(sep->arg[1], \"true\", 4) == 0 ? 1 : 0);\n\t\telse if (strncmp(command, \"recruiter\", length) == 0 && sep->arg[1] && sep->arg[2] && guild)\n\t\t\tguild->SetGuildRecruiter(client, sep->arg[1], strncmp(sep->arg[2], \"true\", 4) == 0 ? true : false);\n\t\telse if (strncmp(command, \"recruiter_description\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->SetGuildRecruiterDescription(client, sep->argplus[1]);\n\t\telse if (strncmp(command, \"lock_event\", length) == 0 && sep->arg[1] && sep->arg[2] && guild)\n\t\t\tguild->LockGuildEvent(atoul(sep->arg[1]), strncmp(sep->arg[2], \"true\", 4) == 0 ? true : false);\n\t\telse if (strncmp(command, \"delete_event\", length) == 0 && sep->arg[1] && guild)\n\t\t\tguild->DeleteGuildEvent(atoul(sep->arg[1]));\n\t\telse if (strncmp(command, \"invite\", length) == 0 && guild) \n\t\t{\n\t\t\tif (sep->arg[1] && strlen(sep->arg[1]) > 0)\n\t\t\t\tguild->InvitePlayer(client, sep->arg[1]);\n\t\t\telse \n\t\t\t{\n\t\t\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\t\t\tif (target) \n\t\t\t\t{\n\t\t\t\t\tif (target->IsPlayer())\n\t\t\t\t\t\tguild->InvitePlayer(client, target->GetName());\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"%s is not a player.\", target->GetName());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (strncmp(command, \"accept\", length) == 0) \n\t\t{\n\t\t\tPendingGuildInvite* pgi = client->GetPendingGuildInvite();\n\n\t\t\tif (pgi && pgi->guild && pgi->invited_by)\n\t\t\t\tpgi->guild->AddNewGuildMember(client, pgi->invited_by->GetName());\n\t\t\tclient->SetPendingGuildInvite(0);\n\t\t}\n\t\telse if (strncmp(command, \"decline\", length) == 0) \n\t\t{\n\t\t\tPendingGuildInvite* pgi = client->GetPendingGuildInvite();\n\n\t\t\tif (pgi && pgi->guild && pgi->invited_by && pgi->invited_by->IsPlayer())\n\t\t\t{\n\t\t\t\tClient* client_inviter = ((Player*)pgi->invited_by)->GetClient();\n\n\t\t\t\tif (client_inviter) {\n\t\t\t\t\tclient_inviter->Message(CHANNEL_NARRATIVE, \"%s has declined your invitation to join %s.\", client->GetPlayer()->GetName(), pgi->guild->GetName());\n\t\t\t\t}\n\t\t\t}\n\t\t\tclient->SetPendingGuildInvite(0);\n\t\t}\n\t\telse if (strncmp(command, \"create\", length) == 0 && sep->arg[1]) \n\t\t{\n\t\t\tconst char* guild_name = sep->argplus[1];\n\t\t\tif(!guild_name || strlen(guild_name) < 4) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"Guild name is too short.\");\n\t\t\t}\n\t\t\telse if (!guild_list.GetGuild(guild_name)) {\n\t\t\t\tif(net.is_primary) {\n\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, client, client->GetPlayer()->GetGroupMemberInfo() ? client->GetPlayer()->GetGroupMemberInfo()->group_id : 0);\n\t\t\t\t\tif(guildID > 0)\n\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), std::string(client->GetPlayer()->GetName()));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"A guild with that name already exists.\");\n\t\t}\n\t\telse if (strncmp(command, \"search\", length) == 0)\n\t\t\tclient->ShowGuildSearchWindow();\n\t\telse if (strncmp(command, \"recruiting_details\", length) == 0 && sep->arg[1] && sep->IsNumber(1))\n\t\t{\n\t\t\tGuild* to_guild = guild_list.GetGuild(atoul(sep->arg[1]));\n\n\t\t\tif (to_guild)\n\t\t\t\tto_guild->SendGuildRecruitingDetails(client);\n\t\t}\n\t\telse if (strncmp(command, \"recruiting_image\", length) == 0 && sep->arg[1] && sep->IsNumber(1)) \n\t\t{\n\t\t\tGuild* to_guild = guild_list.GetGuild(atoul(sep->arg[1]));\n\n\t\t\tif (to_guild)\n\t\t\t\tto_guild->SendGuildRecruitingImages(client);\n\t\t}\n\t\telse if (strncmp(command, \"recruiter_adventure_class\", length) == 0) \n\t\t{\n\t\t\tif (sep->arg[1])\n\t\t\t{\n\t\t\t\tconst char* option = sep->arg[1];\n\n\t\t\t\tif (strncmp(option, \"toggle\", strlen(option)) == 0)\n\t\t\t\t\tguild->ToggleGuildRecruiterAdventureClass(client);\n\t\t\t}\n\t\t\telse\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unhandled guild recruiter_adventure_class command: '%s'\", sep->argplus[0]);\n\t\t}\n\t\telse if (strncmp(command, \"display_heraldry\", length) == 0)\n\t\t{\n\t\t\t                                \n\t\t\tclient->GetPlayer()->toggle_character_flag(CF_SHOW_GUILD_HERALDRY);\n\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t}\n\t\telse\n\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Unhandled guild command: '%s'\", sep->argplus[0]);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "257": {
      "symbol": "COMMAND_CREATE_GUILD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6232,
      "body": "{ Command_CreateGuild(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CreateGuild",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7194,
          "body": "{\n\tCommand_GuildsCreate(client, sep, true);\n}"
        },
        {
          "function": "Command_GuildsCreate",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7346,
          "body": "{\n\tClientLookupScope client_lookups;\n\tSpawn* npc = nullptr;\n\tif(prompted_dialog) {\n\t\tauto target_npc = client->dialog_manager.getAcceptValue(\"create guild\");\n\t\tif(!target_npc) {\n\t\t\t                                            \n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif(!client->GetPlayer()->GetZone()){\n\t\t\t\t                               \n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnpc = client->GetPlayer()->GetZone()->GetSpawnByID(target_npc);\n\t\t\tif(!npc) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Did not find guild registrar, please re-initiate dialog with them.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\tif (sep && sep->arg[0]) \n\t{\n\t\tconst char* guild_name = sep->arg[0];\n\t\tif(prompted_dialog)\n\t\t\tguild_name = sep->argplus[0];\n\t\t\n\t\tint8 resp = database.CheckNameFilter(guild_name, 4, 41);\n\t\tif(!guild_name || resp == BADNAMELENGTH_REPLY) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild name is too short.\");\n\t\t}\n\t\telse if(resp == NAMEINVALID_REPLY || resp == NAMEFILTER_REPLY) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild name was rejected.\");\n\t\t}\n\t\telse if (!guild_list.GetGuild(guild_name)) \n\t\t{\n\t\t\tbool ret = false;\n\n\t\t\tif (!prompted_dialog && sep->arg[1] && strlen(sep->arg[1]) > 0 && client->GetAdminStatus() > 0) \n\t\t\t{\n\t\t\t\tClient* to_client = client_lookups.Retain(zone_list.GetClientByCharName(string(sep->arg[1])));\n\n\t\t\t\tif (to_client && !to_client->GetPlayer()->GetGuild()) \n\t\t\t\t{\n\t\t\t\t\tif(net.is_primary) {\n\t\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, to_client, to_client->GetPlayer()->GetGroupMemberInfo() ? to_client->GetPlayer()->GetGroupMemberInfo()->group_id : 0);\n\t\t\t\t\t\tif(guildID > 0)\n\t\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), std::string(to_client->GetPlayer()->GetName()));\n\t\t\t\t\t}\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Could not find target %s or target is already in a guild.\", sep->arg[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!prompted_dialog && client->GetAdminStatus() > 0 && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) \n\t\t\t{\n\t\t\t\tClient* to_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\t\t\t\tif (to_client && !to_client->GetPlayer()->GetGuild()) \n\t\t\t\t{\n\t\t\t\t\tif(net.is_primary) {\n\t\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, to_client, to_client->GetPlayer()->GetGroupMemberInfo() ? to_client->GetPlayer()->GetGroupMemberInfo()->group_id : 0);\n\t\t\t\t\t\tif(guildID > 0)\n\t\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), std::string(to_client->GetPlayer()->GetName()));\n\t\t\t\t\t}\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Could not find target %s or target is already in a guild.\", (to_client != nullptr) ? to_client->GetPlayer()->GetName() : \"NoTarget\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\tif(client->GetPlayer()->GetGuild()) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are already in a guild.\");\n\t\t\t\t\tif(client->GetAdminStatus() < 1)\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if(net.is_primary) {\n\t\t\t\t\tClient* leader = nullptr;\n\t\t\t\t\tif(prompted_dialog || client->GetAdminStatus() < 1)\n\t\t\t\t\t\tleader = client;\n\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, leader);\n\t\t\t\t\tif(guildID > 0) {\n\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t\t\tret = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), \"\", prompted_dialog, npc->GetID());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ret) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' was successfully created.\", guild_name);\n\t\t\t\tif(prompted_dialog) {                                           \n\t\t\t\t\tclient->GetCurrentZone()->CallSpawnScript(npc, SPAWN_SCRIPT_CASTED_ON, client->GetPlayer(), guild_name);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"There was an error creating the guild.\");\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' already exists.\", guild_name);\n\t}\n\telse if(!prompted_dialog)\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /guilds create [guild name] (player name).  If no player is specified, the player's target will be used.  If the player has no target, a guild with no members will be created.\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /guilds create [guild name] (player name).  If no player is specified, the player's target will be used.  If the player has no target, a guild with no members will be created."
      ]
    },
    "258": {
      "symbol": "COMMAND_GUILDS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6233,
      "body": "{ Command_Guilds(client); break; }",
      "delegates": [
        {
          "function": "Command_Guilds",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7280,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /guilds [create|delete|add|remove|list]\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /guilds [create|delete|add|remove|list]"
      ]
    },
    "261": {
      "symbol": "COMMAND_GUILDS_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6234,
      "body": "{ Command_GuildsAdd(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_GuildsAdd",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7292,
          "body": "{\n\tClientLookupScope client_lookups;\n\tif (sep && sep->arg[0] && sep->arg[0][0] != '\\0')\n\t{\n\t\tGuild* guild = 0;\n\t\tbool found = true;\n\n\t\tif (sep->IsNumber(0)) \n\t\t{\n\t\t\tguild = guild_list.GetGuild(atoul(sep->arg[0]));\n\n\t\t\tif (!guild) \n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild with ID %u does not exist.\", atoul(sep->arg[0]));\n\t\t\t\tfound = false;\n\t\t\t}\n\t\t}\n\t\telse \n\t\t{\n\t\t\tguild = guild_list.GetGuild(sep->arg[0]);\n\n\t\t\tif (!guild) \n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' does not exist.\", sep->arg[0]);\n\t\t\t\tfound = false;\n\t\t\t}\n\t\t}\n\t\tif (found) \n\t\t{\n\t\t\tClient* to_client = 0;\n\n\t\t\tif (sep->arg[1] && strlen(sep->arg[1]) > 0)\n\t\t\t\tto_client = client_lookups.Retain(zone_list.GetClientByCharName(string(sep->arg[1])));\n\t\t\telse if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer())\n\t\t\t\tto_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\t\t\tif (to_client)\n\t\t\t\tguild->InvitePlayer(client, to_client->GetPlayer()->GetName());\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Could not find player '%s' to invite to the guild.\", sep->arg[1]);\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /guilds add [guild name|guild id] (player name).\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /guilds add [guild name|guild id] (player name)."
      ]
    },
    "259": {
      "symbol": "COMMAND_GUILDS_CREATE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6235,
      "body": "{ Command_GuildsCreate(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_GuildsCreate",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7346,
          "body": "{\n\tClientLookupScope client_lookups;\n\tSpawn* npc = nullptr;\n\tif(prompted_dialog) {\n\t\tauto target_npc = client->dialog_manager.getAcceptValue(\"create guild\");\n\t\tif(!target_npc) {\n\t\t\t                                            \n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif(!client->GetPlayer()->GetZone()){\n\t\t\t\t                               \n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnpc = client->GetPlayer()->GetZone()->GetSpawnByID(target_npc);\n\t\t\tif(!npc) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Did not find guild registrar, please re-initiate dialog with them.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\tif (sep && sep->arg[0]) \n\t{\n\t\tconst char* guild_name = sep->arg[0];\n\t\tif(prompted_dialog)\n\t\t\tguild_name = sep->argplus[0];\n\t\t\n\t\tint8 resp = database.CheckNameFilter(guild_name, 4, 41);\n\t\tif(!guild_name || resp == BADNAMELENGTH_REPLY) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild name is too short.\");\n\t\t}\n\t\telse if(resp == NAMEINVALID_REPLY || resp == NAMEFILTER_REPLY) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild name was rejected.\");\n\t\t}\n\t\telse if (!guild_list.GetGuild(guild_name)) \n\t\t{\n\t\t\tbool ret = false;\n\n\t\t\tif (!prompted_dialog && sep->arg[1] && strlen(sep->arg[1]) > 0 && client->GetAdminStatus() > 0) \n\t\t\t{\n\t\t\t\tClient* to_client = client_lookups.Retain(zone_list.GetClientByCharName(string(sep->arg[1])));\n\n\t\t\t\tif (to_client && !to_client->GetPlayer()->GetGuild()) \n\t\t\t\t{\n\t\t\t\t\tif(net.is_primary) {\n\t\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, to_client, to_client->GetPlayer()->GetGroupMemberInfo() ? to_client->GetPlayer()->GetGroupMemberInfo()->group_id : 0);\n\t\t\t\t\t\tif(guildID > 0)\n\t\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), std::string(to_client->GetPlayer()->GetName()));\n\t\t\t\t\t}\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Could not find target %s or target is already in a guild.\", sep->arg[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!prompted_dialog && client->GetAdminStatus() > 0 && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) \n\t\t\t{\n\t\t\t\tClient* to_client = ((Player*)client->GetPlayer()->GetTarget())->GetClient();\n\n\t\t\t\tif (to_client && !to_client->GetPlayer()->GetGuild()) \n\t\t\t\t{\n\t\t\t\t\tif(net.is_primary) {\n\t\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, to_client, to_client->GetPlayer()->GetGroupMemberInfo() ? to_client->GetPlayer()->GetGroupMemberInfo()->group_id : 0);\n\t\t\t\t\t\tif(guildID > 0)\n\t\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), std::string(to_client->GetPlayer()->GetName()));\n\t\t\t\t\t}\n\t\t\t\t\tret = true;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Could not find target %s or target is already in a guild.\", (to_client != nullptr) ? to_client->GetPlayer()->GetName() : \"NoTarget\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse \n\t\t\t{\n\t\t\t\tif(client->GetPlayer()->GetGuild()) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are already in a guild.\");\n\t\t\t\t\tif(client->GetAdminStatus() < 1)\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if(net.is_primary) {\n\t\t\t\t\tClient* leader = nullptr;\n\t\t\t\t\tif(prompted_dialog || client->GetAdminStatus() < 1)\n\t\t\t\t\t\tleader = client;\n\t\t\t\t\tint32 guildID = world.CreateGuild(guild_name, leader);\n\t\t\t\t\tif(guildID > 0) {\n\t\t\t\t\t\tpeer_manager.sendPeersCreateGuild(guildID);\n\t\t\t\t\t\tret = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpeer_manager.sendPrimaryCreateGuildRequest(std::string(guild_name), \"\", prompted_dialog, npc->GetID());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ret) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' was successfully created.\", guild_name);\n\t\t\t\tif(prompted_dialog) {                                           \n\t\t\t\t\tclient->GetCurrentZone()->CallSpawnScript(npc, SPAWN_SCRIPT_CASTED_ON, client->GetPlayer(), guild_name);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"There was an error creating the guild.\");\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' already exists.\", guild_name);\n\t}\n\telse if(!prompted_dialog)\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /guilds create [guild name] (player name).  If no player is specified, the player's target will be used.  If the player has no target, a guild with no members will be created.\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /guilds create [guild name] (player name).  If no player is specified, the player's target will be used.  If the player has no target, a guild with no members will be created."
      ]
    },
    "260": {
      "symbol": "COMMAND_GUILDS_DELETE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6236,
      "body": "{ Command_GuildsDelete(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_GuildsDelete",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7471,
          "body": "{\n\tif (sep && sep->arg[0]) \n\t{\n\t\tGuild* guild = 0;\n\t\tbool found = true;\n\n\t\tif (sep->IsNumber(0)) \n\t\t{\n\t\t\tguild = guild_list.GetGuild(atoul(sep->arg[0]));\n\n\t\t\tif (!guild) \n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild with ID %u does not exist.\", atoul(sep->arg[0]));\n\t\t\t\tfound = false;\n\t\t\t}\n\t\t}\n\t\telse \n\t\t{\n\t\t\tguild = guild_list.GetGuild(sep->arg[0]);\n\n\t\t\tif (!guild) \n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' does not exist.\", sep->arg[0]);\n\t\t\t\tfound = false;\n\t\t\t}\n\t\t}\n\n\t\tif (found) \n\t\t{\n\t\t\tguild->RemoveAllGuildMembers();\n\t\t\tdatabase.DeleteGuild(guild);\n\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' was successfully deleted.\", guild->GetName());\n\t\t\tguild_list.RemoveGuild(guild, true);\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /guilds delete [guild name].\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /guilds delete [guild name]."
      ]
    },
    "263": {
      "symbol": "COMMAND_GUILDS_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6237,
      "body": "{ Command_GuildsList(client); break; }",
      "delegates": [
        {
          "function": "Command_GuildsList",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7519,
          "body": "{\n\tMutexMap<int32, Guild*>* guilds = guild_list.GetGuilds();\n\tMutexMap<int32, Guild*>::iterator itr = guilds->begin();\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Guild List:\");\n\tif (guilds->size() == 0)\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"None.\");\n\telse {\n\t\twhile (itr.Next()) {\n\t\t\tGuild* guild = itr.second;\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u) %s\", guild->GetID(), guild->GetName());\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "262": {
      "symbol": "COMMAND_GUILDS_REMOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6238,
      "body": "{ Command_GuildsRemove(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_GuildsRemove",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 7541,
          "body": "{\n\tif (sep && sep->arg[0] && sep->arg[0][0] != '\\0')\n\t{\n\t\tGuild* guild = 0;\n\t\tbool found = true;\n\n\t\tif (sep->IsNumber(0)) \n\t\t{\n\t\t\tguild = guild_list.GetGuild(atoul(sep->arg[0]));\n\n\t\t\tif (!guild) \n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild with ID %u does not exist.\", atoul(sep->arg[0]));\n\t\t\t\tfound = false;\n\t\t\t}\n\t\t}\n\t\telse \n\t\t{\n\t\t\tguild = guild_list.GetGuild(sep->arg[0]);\n\n\t\t\tif (!guild) \n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Guild '%s' does not exist.\", sep->arg[0]);\n\t\t\t\tfound = false;\n\t\t\t}\n\t\t}\n\n\t\tif (found) \n\t\t{\n\t\t\tClient* to_client = 0;\n\t\t\tchar* charName = nullptr;\n\t\t\tif(sep->arg[1][0])\n\t\t\t\tcharName = sep->arg[1];\n\t\t\telse if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer())\n\t\t\t\tcharName = ((Player*)client->GetPlayer()->GetTarget())->GetName();\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Missing player name or not a valid target to remove from the guild.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tint32 character_id = guild->KickGuildMember(client, charName);\n\t\t\tif(character_id > 0)\n\t\t\t\tpeer_manager.sendPeersRemoveGuildMember(character_id, guild->GetID(), std::string(client->GetPlayer()->GetName()));\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Could not find player '%s' to remove from the guild.\", charName);\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /guilds remove [guild name|guild id] (player name).\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /guilds remove [guild name|guild id] (player name)."
      ]
    },
    "18": {
      "symbol": "COMMAND_CLAIM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6239,
      "body": "{ Command_Claim(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Claim",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6639,
          "body": "{\n\t                              \n\tif (sep && sep->argplus[0] && sep->IsNumber(0)) \n\t{\n\t\tint32 char_id = client->GetCharacterID();\n\t\tint8 my_claim_id = atoi(sep->argplus[0]);\n\t\tvector<ClaimItems> claim = database.LoadCharacterClaimItems(char_id);\n\t\tif(my_claim_id < claim.size()) {\n\t\t\tItem* item = master_item_list.GetItem(claim[my_claim_id].item_id);\n\t\t\tif(item) {\n\t\t\t\tdatabase.ClaimItem(char_id, item->details.item_id, client);\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\telse {\n\t\t                                 \n\t\tclient->ShowClaimWindow();\n\t\treturn;\n\t}\n\treturn;\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "265": {
      "symbol": "COMMAND_CLEAR_ALL_QUEUED",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6240,
      "body": "{ Command_ClearAllQueued(client); break; }",
      "delegates": [
        {
          "function": "Command_ClearAllQueued",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6670,
          "body": "{\n\tZoneServerSharedPtr zone = client->GetPlayer()->GetZone();\n\tif (zone && zone->GetSpellProcess())\n\t\tzone->GetSpellProcess()->RemoveSpellFromQueue(client->GetPlayer());\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "268": {
      "symbol": "COMMAND_LOCATION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6241,
      "body": "{ Command_Location(client); break; }",
      "delegates": [
        {
          "function": "Command_Location",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8174,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Valid /location commands are:\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/location create [name] (include y).  Include y defaults to false\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/location add [location id]\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/location remove [location point id]\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/location delete [location id]\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/location list [locations|points|respawns] [location id if points used]\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Valid /location commands are:",
        "/location create [name] (include y).  Include y defaults to false",
        "/location add [location id]",
        "/location remove [location point id]",
        "/location delete [location id]",
        "/location list [locations|points|respawns] [location id if points used]"
      ]
    },
    "270": {
      "symbol": "COMMAND_LOCATION_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6242,
      "body": "{ Command_LocationAdd(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LocationAdd",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8191,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) \n\t{\n\t\tint32 location_id = atoul(sep->arg[0]);\n\t\tfloat x = client->GetPlayer()->GetX();\n\t\tfloat y = client->GetPlayer()->GetY();\n\t\tfloat z = client->GetPlayer()->GetZ();\n\n\t\tif (database.AddLocationPoint(location_id, x, y, z))\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Point (%f, %f, %f) was successfully added to location %u\", x, y, z, location_id);\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"A location with ID %u does not exist.  Use /location create to create one\", location_id);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /location add [location id]\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "A location with ID %u does not exist.  Use /location create to create one",
        "Usage: /location add [location id]"
      ]
    },
    "269": {
      "symbol": "COMMAND_LOCATION_CREATE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6243,
      "body": "{ Command_LocationCreate(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LocationCreate",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8216,
          "body": "{\n\tif (sep && sep->arg[0] && sep->arg[0][0] != '\\0')\n\t{\n\t\tconst char* name = sep->arg[0];\n\t\tbool include_y = false;\n\n\t\tif (sep->arg[1] && sep->IsNumber(1) && atoi(sep->arg[1]) > 0)\n\t\t\tinclude_y = true;\n\n\t\tint32 location_id = database.CreateLocation(client->GetPlayer()->GetZone()->GetZoneID(), client->GetPlayer()->GetLocation(), name, include_y);\n\n\t\tif (location_id > 0)\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Location '%s' was successfully created with location id %u\", name, location_id);\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"There was an error creating the requested location\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /location create [name] (include_y).  Include y defaults to false\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /location create [name] (include_y).  Include y defaults to false"
      ]
    },
    "273": {
      "symbol": "COMMAND_LOCATION_DELETE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6244,
      "body": "{ Command_LocationDelete(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LocationDelete",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8244,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t{\n\t\tint32 location_id = atoul(sep->arg[0]);\n\n\t\tif (database.DeleteLocation(location_id))\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Location id %u and all its points were successfully deleted\", location_id);\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"A location with ID %u does not exist\", location_id);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /location delete [location id]\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /location delete [location id]"
      ]
    },
    "274": {
      "symbol": "COMMAND_LOCATION_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6245,
      "body": "{ Command_LocationList(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LocationList",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8266,
          "body": "{\n\tif (sep && sep->arg[0]) \n\t{\n\t\tconst char* option = sep->arg[0];\n\n\t\tif (strncmp(option, \"locations\", strlen(option)) == 0)\n\t\t\tdatabase.ListLocations(client);\n\t\telse if (strncmp(option, \"respawns\", strlen(option)) == 0)\n\t\t\tclient->GetPlayer()->GetZone()->SendRespawnTimerList(client);\n\t\telse if (strncmp(option, \"points\", strlen(option)) == 0 && sep->arg[1] && sep->IsNumber(1)) \n\t\t{\n\t\t\tint32 location_id = atoul(sep->arg[1]);\n\t\t\tdatabase.ListLocationPoints(client, location_id);\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Useage: /location list [locations|points|respawns] [location ID if points used]\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Useage: /location list [locations|points|respawns] [location ID if points used]\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Useage: /location list [locations|points|respawns] [location ID if points used]"
      ]
    },
    "272": {
      "symbol": "COMMAND_LOCATION_REMOVE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6246,
      "body": "{ Command_LocationRemove(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LocationRemove",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8295,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) \n\t{\n\t\tint32 location_point_id = atoul(sep->arg[0]);\n\n\t\tif (database.DeleteLocationPoint(location_point_id))\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Location point was successfully deleted\");\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Location point with ID %u does not exist\", location_point_id);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /location remove [location point id]\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /location remove [location point id]"
      ]
    },
    "271": {
      "symbol": "COMMAND_GRID",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6247,
      "body": "{ Command_Grid(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Grid",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6944,
          "body": "{\n\tif (client->GetPlayer()->GetMap() != nullptr) {\n\t\tif(sep && sep->arg[0][0] && strncasecmp(\"spawns\", sep->arg[0], 6) == 0) {\n\t\t\tint32 grid = client->GetPlayer()->GetLocation();\n\t\t\t\t\n\t\t\tif(sep->IsNumber(1))\n\t\t\t\tgrid = atoul(sep->arg[1]);\n\t\t\t\n\t\t\tclient->GetCurrentZone()->SendClientSpawnListInGrid(client, grid);\n\t\t}\n\t\tif(sep && sep->arg[0][0] && strncasecmp(\"boundary\", sep->arg[0], 8) == 0) {\n\t\t\tint32 grid = client->GetPlayer()->GetLocation();\n\t\t\t\t\n\t\t\tif(sep->IsNumber(1))\n\t\t\t\tgrid = atoul(sep->arg[1]);\n\t\t\t\n\t\t\tif(!client->GetPlayer()->GetMap()) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"No map to check grid!\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tGridMapBorder* gmb = client->GetPlayer()->GetMap()->GetMapGridBorder(grid, false);\n\t\t\tif(gmb) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Grid %u border MinX %f MaxX %f, MinY %f MaxY %f, MinZ %f MaxZ %f\", grid, gmb->m_MinX, gmb->m_MaxX, gmb->m_MinY, gmb->m_MaxY, gmb->m_MinZ, gmb->m_MaxZ);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Grid %u has no grid map border\", grid);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Your Grid ID is %u\", client->GetPlayer()->GetLocation());\n\t\t\tauto loc = glm::vec3(client->GetPlayer()->GetX(), client->GetPlayer()->GetZ(), client->GetPlayer()->GetY());\n\t\t\tuint32 GridID = 0;\n\t\t\tuint32 WidgetID = 0;\n\t\t\tfloat new_z = client->GetPlayer()->FindBestZ(loc, nullptr, &GridID, &WidgetID);\n\t\t\tfloat minY = client->GetPlayer()->GetMap()->GetMinY();\n\t\t\tfloat maxY = client->GetPlayer()->GetMap()->GetMaxY();\n\t\t\tfloat minZ = client->GetPlayer()->GetMap()->GetMinZ();\n\t\t\tfloat maxZ = client->GetPlayer()->GetMap()->GetMaxZ();\n\t\t\tint32 grid_spawn_count = client->GetPlayer()->GetZone()->GetSpawnCountInGrid(GridID);\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Grid result is %u, at EQ2 Y coordinate %f.  Spawns on grid: %u.  Min/Max Y %f/%f Z %f/%f.  Widget ID: %u\", GridID, new_z, grid_spawn_count, minY, maxY, minZ, maxZ, WidgetID);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Grid result is %u, at EQ2 Y coordinate %f.  Spawns on grid: %u.  Min/Max Y %f/%f Z %f/%f.  Widget ID: %u"
      ]
    },
    "280": {
      "symbol": "COMMAND_TRY_ON",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6248,
      "body": "{ Command_TryOn(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TryOn",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11282,
          "body": "{\n\tItem *item = 0;\n\tsint32 crc;\n\n\tif (sep) {\n\t\t                                                                                       \n\t\tif (client->GetVersion() < 1096) {\n\t\t\tif (sep->arg[1] && sep->IsNumber(1) && sep->arg[2] && sep->IsNumber(2)) \n\t\t\t{\n\t\t\t\titem = master_item_list.GetItem(atoul(sep->arg[1]));\n\t\t\t\tcrc = atol(sep->arg[2]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t                                    \n\t\t\tif (strcmp(sep->arg[0], \"crc\") == 0) {\n\t\t\t\tif (sep->IsNumber(2) && sep->IsNumber(3)) {\n\t\t\t\t\titem = master_item_list.GetItem(atoul(sep->arg[2]));\n\t\t\t\t\tcrc = atol(sep->arg[3]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t                 \n\t\t\tif (strcmp(sep->arg[0], \"dbid\") == 0) {\n\t\t\t\tif (sep->IsNumber(2) && sep->IsNumber(4)) {\n\t\t\t\t\titem = master_item_list.GetItem(atoul(sep->arg[2]));\n\t\t\t\t\tcrc = atol(sep->arg[4]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (item)\n\t\t\tclient->ShowDressingRoom(item, crc);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "239": {
      "symbol": "COMMAND_RANDOMIZE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6249,
      "body": "{ Command_Randomize(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Randomize",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9458,
          "body": "{\n\tNPC* target = (NPC*)client->GetPlayer()->GetTarget();\n\tif (target) \n\t{\n\t\tif (target->IsNPC()) \n\t\t{\n\t\t\tif (sep && sep->arg[0] && !sep->IsNumber(0)) \n\t\t\t{\n\t\t\t\tconst char* value = sep->arg[0];\n\t\t\t\tif (strncasecmp(value, \"show\", strlen(value)) == 0) \n\t\t\t\t{\n\t\t\t\t\tclient->DisplayRandomizeFeatures(target->GetRandomize());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tif (sep->arg[1] && sep->IsNumber(1)) \n\t\t\t\t\t{\n\t\t\t\t\t\tint8 option = atoi(sep->arg[1]);\n\t\t\t\t\t\tif (option == 0 || option == 1) \n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tint32 feature = 0;\n\t\t\t\t\t\t\tchar feature_text[32] = {0};\n\t\t\t\t\t\t\tif (strncasecmp(value, \"gender\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_GENDER;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"gender\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"race\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_RACE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"race\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"model\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_MODEL_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"model\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"facial_hair\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_FACIAL_HAIR_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"facial hair\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"hair\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"hair\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"wing\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_WING_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"wings\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"cheek\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_CHEEK_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"cheeks\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"chin\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_CHIN_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"chin\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"ear\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_EAR_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"ears\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"eye_brow\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_EYE_BROW_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"eye brows\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"eye\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_EYE_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"eyes\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"lip\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_LIP_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"lips\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"nose\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_NOSE_TYPE;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"nose\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"eye_color\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_EYE_COLOR;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"eye color\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"hair_color\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_TYPE_COLOR;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"hair color\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"hair_color1\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_COLOR1;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"hair color1\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"hair_color2\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_COLOR2;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"hair color2\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"hair_highlight\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_HIGHLIGHT;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"hair highlights\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"facial_hair_color\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_FACE_COLOR;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"facial hair color\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"facial_hair_color_highlight\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_FACE_HIGHLIGHT_COLOR;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"facial hair color highlights\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"hair_color_highlight\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_HAIR_TYPE_HIGHLIGHT_COLOR;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"hair color highlights\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"skin_color\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_SKIN_COLOR;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"skin color\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"wing_color1\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_WING_COLOR1;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"wing color1\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (strncasecmp(value, \"wing_color2\", strlen(value)) == 0) {\n\t\t\t\t\t\t\t\tfeature = RANDOMIZE_WING_COLOR2;\n\t\t\t\t\t\t\t\tstrncpy(feature_text, \"wing color2\", sizeof(feature_text) - 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"'%s' is not a valid feature to randomize.\", value);\n\t\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Valid features are: 'gender', 'race', 'model', 'hair', 'facial_hair', 'legs', 'wings', 'cheek', 'chin', 'ear', 'eye', 'eye_brow', 'lip', 'nose', 'eye_color', 'hair_color1', 'hair_color2', 'hair_highlight', 'facial_hair_color', 'facial_hair_color_highlight', 'hair_color', 'hair_color_highlight', 'skin_color', 'wing_color1', 'wing_color2'.\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (feature > 0) {\n\t\t\t\t\t\t\t\tif (option == 1) {\n\t\t\t\t\t\t\t\t\tif (target->GetRandomize() & feature)\n\t\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"'%s' is already set to randomly generate their %s.\", target->GetName(), feature_text);\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\ttarget->AddRandomize(feature);\n\t\t\t\t\t\t\t\t\t\t((NPC*)client->GetCurrentZone()->GetSpawn(target->GetDatabaseID()))->AddRandomize(feature);\n\t\t\t\t\t\t\t\t\t\tdatabase.UpdateRandomize(target->GetDatabaseID(), feature);\n\t\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"'%s' will now generate their %s randomly.\", target->GetName(), feature_text);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (target->GetRandomize() & feature) {\n\t\t\t\t\t\t\t\t\t\ttarget->AddRandomize(-feature);\n\t\t\t\t\t\t\t\t\t\t((NPC*)client->GetCurrentZone()->GetSpawn(target->GetDatabaseID()))->AddRandomize(-feature);\n\t\t\t\t\t\t\t\t\t\tdatabase.UpdateRandomize(target->GetDatabaseID(), -feature);\n\t\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"'%s' will no longer generate their %s randomly.\", target->GetName(), feature_text);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"'%s' already does not randomly generate their %s.\", target->GetName(), feature_text);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must specify either a 1(on) or 0(off) as the second parameter.\");\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must specify either a 1(on) or 0(off) as the second parameter.\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /randomize [show | [feature [1|0]]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"'show' will display current configured features\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Valid features are: 'gender', 'race', 'model', 'hair', 'facial_hair', 'legs', 'wings', 'cheek', 'chin', 'ear', 'eye', 'eye_brow', 'lip', 'nose', 'eye_color', 'hair_color1', 'hair_color2', 'hair_highlight', 'facial_hair_color', 'facial_hair_color_highlight', 'hair_color', 'hair_color_highlight', 'skin_color', 'wing_color1', 'wing_color2'.\");\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"The target you wish to randomize must be an NPC.\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must select the target you wish to randomize.\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must specify either a 1(on) or 0(off) as the second parameter.",
        "Usage: /randomize [show | [feature [1|0]]",
        "The target you wish to randomize must be an NPC.",
        "You must select the target you wish to randomize."
      ]
    },
    "147": {
      "symbol": "COMMAND_AFK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6250,
      "body": "{ Command_AFK(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_AFK",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6555,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_AFK);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s afk.\", client->GetPlayer()->get_character_flag(CF_AFK)?\"now\":\"no longer\");\n\n\tif (player->get_character_flag(CF_AFK))\n\t{\n\t\tif (sep && sep->argplus[0])\n\t\t\tplayer->SetAwayMessage(\"I am away from the keyboard, \" + string(sep->argplus[0]));\n\t\telse\n\t\t\tplayer->SetAwayMessage(\"Sorry, I am A.F.K. (Away From Keyboard)\");\n\n\t\tstring message = string(player->GetName()) + \" is going afk.\";\n\t\tSpawn* target = player->GetTarget();\n\n\t\tif (target && target != player)\n\t\t{\n\t\t\tmessage = string(player->GetName()) + \" tells \" + string(target->GetName()) + \" that \";\n\t\t\tplayer->GetGender() == 1 ? message += \"he\" : message += \"she\";\n\t\t\tmessage += \" is going afk.\";\n\t\t}\n\n\t\tplayer->GetZone()->SimpleMessage(CHANNEL_COLOR_YELLOW, message.c_str(), player, 30);\n\t}\n\t\n\tif (player->get_character_flag(CF_AFK))\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_AFK);\n\telse\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_AFK);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "155": {
      "symbol": "COMMAND_SHOW_CLOAK",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6251,
      "body": "{ Command_ShowCloak(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ShowCloak",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9632,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tif (sep && sep->arg[0])\n\t{\n\t\tconst char* value = sep->arg[0];\n\t\tif (strncasecmp(value, \"true\", strlen(value)) == 0) \n\t\t{\n\t\t\tplayer->set_character_flag(CF_SHOW_CLOAK);\n\t\t\tplayer->reset_character_flag(CF2_SHOW_RANGED);\n\t\t}\n\t\telse if (strncasecmp(value, \"false\", strlen(value)) == 0) \n\t\t\tplayer->reset_character_flag(CF_SHOW_CLOAK);\n\t\telse\n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t\tLogWrite(COMMAND__WARNING, 0, \"Command\", \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Not supposed to be here! Please /bug this: Error in %s (%u)"
      ]
    },
    "153": {
      "symbol": "COMMAND_SHOW_HELM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6252,
      "body": "{ Command_ShowHelm(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ShowHelm",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9661,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\t\n\tif(client->GetVersion() <= 561) {\n\t\treturn;                         \n\t}\n\t\n\tif (sep && sep->arg[0])\n\t{\n\t\tPrintSep(sep, \"Command_ShowHelm\");\n\t\tconst char* value = sep->arg[0];\n\t\tif (strncasecmp(value, \"true\", strlen(value)) == 0) \n\t\t{\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HELM);\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HOOD);\n\t\t}\n\t\telse if (strncasecmp(value, \"false\", strlen(value)) == 0) \n\t\t\tplayer->toggle_character_flag(CF_HIDE_HELM);\n\t\telse\n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t\tLogWrite(COMMAND__WARNING, 0, \"Command\", \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Not supposed to be here! Please /bug this: Error in %s (%u)"
      ]
    },
    "159": {
      "symbol": "COMMAND_SHOW_HOOD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6253,
      "body": "{ Command_ShowHood(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ShowHood",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9695,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tif (sep && sep->arg[0])\n\t{\n\t\tPrintSep(sep, \"Command_ShowHood\");\n\t\tconst char* value = sep->arg[0];\n\n\t\tif (strncasecmp(value, \"true\", strlen(value)) == 0) \n\t\t{\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HOOD);\n\t\t\tif(client->GetVersion() > 561) {                               \n\t\t\t\tplayer->toggle_character_flag(CF_HIDE_HELM);\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(value, \"false\", strlen(value)) == 0) {\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HOOD);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t\tLogWrite(COMMAND__WARNING, 0, \"Command\", \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Not supposed to be here! Please /bug this: Error in %s (%u)"
      ]
    },
    "154": {
      "symbol": "COMMAND_SHOW_HOOD_OR_HELM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6254,
      "body": "{ Command_ShowHoodHelm(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ShowHoodHelm",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9729,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\t\n\tif(client->GetVersion() <= 561) {\n\t\treturn;                         \n\t}\n\t\n\tif (sep && sep->arg[0])\n\t{\n\t\tPrintSep(sep, \"Command_ShowHoodHelm\");\n\t\tconst char* value = sep->arg[0];\n\t\tif (strncasecmp(value, \"true\", strlen(value)) == 0) \n\t\t{\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HOOD);\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HELM);\n\t\t}\n\t\telse if (strncasecmp(value, \"false\", strlen(value)) == 0) \n\t\t{\n\t\t\t                                         \n\t\t\tplayer->toggle_character_flag(CF_HIDE_HOOD);\n\t\t\tplayer->toggle_character_flag(CF_HIDE_HELM);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t\tLogWrite(COMMAND__WARNING, 0, \"Command\", \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Not supposed to be here! Please /bug this: Error in %s (%u)"
      ]
    },
    "151": {
      "symbol": "COMMAND_SHOW_RANGED",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6255,
      "body": "{ Command_ShowRanged(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ShowRanged",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9767,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tif (sep && sep->arg[0])\n\t{\n\t\tconst char* value = sep->arg[0];\n\t\tif (strncasecmp(value, \"true\", strlen(value)) == 0) \n\t\t{\n\t\t\tplayer->set_character_flag(CF2_SHOW_RANGED);\n\t\t\tplayer->reset_character_flag(CF_SHOW_CLOAK);\n\t\t}\n\t\telse if (strncasecmp(value, \"false\", strlen(value)) == 0) \n\t\t\tplayer->reset_character_flag(CF2_SHOW_RANGED);\n\t\telse\n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t\tLogWrite(COMMAND__WARNING, 0, \"Command\", \"Not supposed to be here! Please /bug this: Error in %s (%u)\", __FUNCTION__, __LINE__);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Not supposed to be here! Please /bug this: Error in %s (%u)"
      ]
    },
    "157": {
      "symbol": "COMMAND_STOP_DRINKING",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6256,
      "body": "{ Command_StopDrinking(client); break; }",
      "delegates": [
        {
          "function": "Command_StopDrinking",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10130,
          "body": "{\n\tclient->GetPlayer()->reset_character_flag(CF_DRINK_AUTO_CONSUME);\n\tclient->GetPlayer()->SetActiveDrinkUniqueID(0);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You stop drinking your current drink.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "156": {
      "symbol": "COMMAND_STOP_EATING",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6257,
      "body": "{ Command_StopEating(client); break; }",
      "delegates": [
        {
          "function": "Command_StopEating",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10144,
          "body": "{\n\tclient->GetPlayer()->reset_character_flag(CF_FOOD_AUTO_CONSUME);\n\tclient->GetPlayer()->SetActiveFoodUniqueID(0);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You stop eating your current food.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "148": {
      "symbol": "COMMAND_TOGGLE_ANONYMOUS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6258,
      "body": "{ Command_Toggle_Anonymous(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Anonymous",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10281,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ANONYMOUS);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s anonymous.\", player->get_character_flag(CF_ANONYMOUS)?\"now\":\"no longer\");\n\n\tif (player->get_character_flag(CF_ANONYMOUS))\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_ANONYMOUS);\n\telse\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_ANONYMOUS);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "152": {
      "symbol": "COMMAND_TOGGLE_AUTOCONSUME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6259,
      "body": "{ Command_Toggle_AutoConsume(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_AutoConsume",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10301,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tif (sep && sep->arg[0])\n\t\tPrintSep(sep, \"COMMAND_SET_AUTO_CONSUME\");\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t{\n\t\tint8 slot = atoi(sep->arg[0]);\n\t\tint8 flag = atoi(sep->arg[1]);\n\t\tif (client->GetVersion() <= 373) {\n\t\t\tslot += 4;\n\t\t}\n\t\telse if (client->GetVersion() <= 561) {\n\t\t\tslot += 2;\n\t\t}\n\t\tif (slot == EQ2_FOOD_SLOT)\n\t\t{\n\t\t\tplayer->toggle_character_flag(CF_FOOD_AUTO_CONSUME);\n\t\t\tplayer->SetCharSheetChanged(true);\n\t\t\tclient->QueuePacket(player->GetEquipmentList()->serialize(client->GetVersion(), player));\n\t\t\tif (flag == 1)\n\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You decide to eat immediately whenever you become hungry.\");\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You decide to ignore the hunger.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tplayer->toggle_character_flag(CF_DRINK_AUTO_CONSUME);\n\t\t\tplayer->SetCharSheetChanged(true);\n\t\t\tclient->QueuePacket(player->GetEquipmentList()->serialize(client->GetVersion(), player));\n\t\t\tif (flag == 1)\n\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You decide to drink immediately whenever you become thirsty.\");\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You decide to ignore the thirst.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif(!client->CheckConsumptionAllowed(slot, false))\n\t\t\treturn;\n\t\t\n\t\tItem* item = player->GetEquipmentList()->GetItem(slot);\n\t\tif(item)\n\t\t\tclient->ConsumeFoodDrink(item, slot);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "189": {
      "symbol": "COMMAND_TOGGLE_BONUS_EXP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6260,
      "body": "{ Command_Toggle_BonusXP(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_BonusXP",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10360,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF2_CHARACTER_BONUS_EXPERIENCE_ENABLED);\n\tplayer->SetCharSheetChanged(true);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "187": {
      "symbol": "COMMAND_TOGGLE_COMBAT_EXP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6261,
      "body": "{ Command_Toggle_CombatXP(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_CombatXP",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10375,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_COMBAT_EXPERIENCE_ENABLED);\n\tplayer->SetCharSheetChanged(true);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "167": {
      "symbol": "COMMAND_TOGGLE_GM_HIDE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6262,
      "body": "{ Command_Toggle_GMHide(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_GMHide",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10390,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_HIDE_STATUS);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s hiding your GM status.\", player->get_character_flag(CF_HIDE_STATUS)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "168": {
      "symbol": "COMMAND_TOGGLE_GM_VANISH",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6263,
      "body": "{ Command_Toggle_GMVanish(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_GMVanish",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10769,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_GM_HIDDEN);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s invisible to who queries.\", player->get_character_flag(CF_GM_HIDDEN)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "1014": {
      "symbol": "COMMAND_GM_INVISIBLE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6264,
      "body": "{ Command_GMInvisible(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_GMInvisible",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10730,
          "body": "{\n\tif (!client || client->GetAdminStatus() < gm_invisible_required_status.load())\n\t\treturn;\n\tPlayer* player = client->GetPlayer();\n\tbool enabled = !player->GetGMInvisibleSetting();\n\tif (sep && sep->IsSet(1)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /gm_invisible [on|off|1|0|status]\");\n\t\treturn;\n\t}\n\tif (sep && sep->IsSet(0)) {\n\t\tif (!stricmp(sep->arg[0], \"status\")) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"GM invisibility is %s.\", player->IsGMInvisible() ? \"on\" : \"off\");\n\t\t\treturn;\n\t\t}\n\t\tif (!stricmp(sep->arg[0], \"on\") || !strcmp(sep->arg[0], \"1\"))\n\t\t\tenabled = true;\n\t\telse if (!stricmp(sep->arg[0], \"off\") || !strcmp(sep->arg[0], \"0\"))\n\t\t\tenabled = false;\n\t\telse {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /gm_invisible [on|off|1|0|status]\");\n\t\t\treturn;\n\t\t}\n\t}\n\t\n\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_GMINVISIBLE, (char*)std::to_string(enabled).c_str());\n\tplayer->SetGMInvisible(enabled);\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"GM invisibility is %s. %s\", enabled ? \"on\" : \"off\",\n\t\tenabled ? \"You and your owned spawns are hidden from lower-status players and protected from hostile effects.\" :\n\t\t\"Normal visibility and combat eligibility are being restored.\");\n\tLogWrite(COMMAND__INFO, 0, \"Command\", \"%s (%u) set gm_invisible %s\", player->GetName(), client->GetCharacterID(), enabled ? \"on\" : \"off\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /gm_invisible [on|off|1|0|status]"
      ]
    },
    "158": {
      "symbol": "COMMAND_TOGGLE_ILLUSIONS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6265,
      "body": "{ Command_Toggle_Illusions(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Illusions",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10784,
          "body": "{\n\tif (sep && sep->arg[0])\n\t\tPrintSep(sep, \"COMMAND_TOGGLE_ILLUSIONS\");\n\tclient->GetPlayer()->toggle_character_flag(CF_SHOW_ILLUSION);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "150": {
      "symbol": "COMMAND_TOGGLE_LFG",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6266,
      "body": "{ Command_Toggle_LFG(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_LFG",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10798,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_LFG);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s LFG.\", player->get_character_flag(CF_LFG)?\"now\":\"no longer\");\n\n\tif (player->get_character_flag(CF_LFG))\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_LFG);\n\telse\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_LFG);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "149": {
      "symbol": "COMMAND_TOGGLE_LFW",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6267,
      "body": "{ Command_Toggle_LFW(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_LFW",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10818,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_LFW);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You %s looking for work.\", player->get_character_flag(CF_LFW)?\"let others know you are\":\"stop\");\n\n\tif (player->get_character_flag(CF_LFW))\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_LFW);\n\telse\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_LFW);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "188": {
      "symbol": "COMMAND_TOGGLE_QUEST_EXP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6268,
      "body": "{ Command_Toggle_QuestXP(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_QuestXP",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10838,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_QUEST_EXPERIENCE_ENABLED);\n\tplayer->SetCharSheetChanged(true);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "170": {
      "symbol": "COMMAND_TOGGLE_ROLEPLAYING",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6269,
      "body": "{ Command_Toggle_Roleplaying(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Roleplaying",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10853,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ROLEPLAYING);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s roleplaying.\", player->get_character_flag(CF_ROLEPLAYING)?\"now\":\"no longer\");\n\n\tif (player->get_character_flag(CF_ROLEPLAYING))\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() + ACTIVITY_STATUS_ROLEPLAYING);\n\telse\n\t\tplayer->SetActivityStatus(player->GetActivityStatus() - ACTIVITY_STATUS_ROLEPLAYING);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "160": {
      "symbol": "COMMAND_TOGGLE_DUELS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6270,
      "body": "{ Command_Toggle_Duels(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Duels",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10866,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ALLOW_DUEL_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting duel invites.\", player->get_character_flag(CF_ALLOW_DUEL_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "161": {
      "symbol": "COMMAND_TOGGLE_TRADES",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6271,
      "body": "{ Command_Toggle_Trades(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Trades",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10874,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ALLOW_TRADE_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting trade invites.\", player->get_character_flag(CF_ALLOW_TRADE_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "162": {
      "symbol": "COMMAND_TOGGLE_GUILDS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6272,
      "body": "{ Command_Toggle_Guilds(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Guilds",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10882,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ALLOW_GUILD_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting guild invites.\", player->get_character_flag(CF_ALLOW_GUILD_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "163": {
      "symbol": "COMMAND_TOGGLE_GROUPS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6273,
      "body": "{ Command_Toggle_Groups(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Groups",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10890,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ALLOW_GROUP_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting group invites.\", player->get_character_flag(CF_ALLOW_GROUP_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "164": {
      "symbol": "COMMAND_TOGGLE_RAIDS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6274,
      "body": "{ Command_Toggle_Raids(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_Raids",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10898,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF_ALLOW_RAID_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting raid invites.\", player->get_character_flag(CF_ALLOW_RAID_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "165": {
      "symbol": "COMMAND_TOGGLE_LON",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6275,
      "body": "{ Command_Toggle_LON(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_LON",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10906,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF2_ALLOW_LON_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting LoN invites.\", player->get_character_flag(CF2_ALLOW_LON_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "171": {
      "symbol": "COMMAND_TOGGLE_VCINVITE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6276,
      "body": "{ Command_Toggle_VoiceChat(client); break; }",
      "delegates": [
        {
          "function": "Command_Toggle_VoiceChat",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10914,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tplayer->toggle_character_flag(CF2_ALLOW_VOICE_INVITES);\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"You are %s accepting voice chat invites.\", player->get_character_flag(CF2_ALLOW_VOICE_INVITES)?\"now\":\"no longer\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "276": {
      "symbol": "COMMAND_CANCEL_MAINTAINED",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6277,
      "body": "{ Command_CancelMaintained(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CancelMaintained",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6684,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) \n\t{\n\t\tint32 spell_index = atoul(sep->arg[0]);\n\t\tif(spell_index > 29)\n\t\t\treturn;\n\t\t\n\t\tclient->GetPlayer()->MMaintainedSpells.readlock(__FUNCTION__, __LINE__);\n\t\tMaintainedEffects mEffects = client->GetPlayer()->GetInfoStruct()->maintained_effects[spell_index];\n\t\tclient->GetPlayer()->MMaintainedSpells.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\n\t\tLuaSpell* spell = mEffects.ResolveSpell();\n\t\tif (!spell || !client->GetPlayer()->GetZone()->GetSpellProcess()->DeleteCasterSpell(spell, \"canceled\", false))\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"The maintained spell could not be cancelled.\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "278": {
      "symbol": "COMMAND_MOTD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6278,
      "body": "{ Command_MOTD(client); break; }",
      "delegates": [
        {
          "function": "Command_MOTD",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9209,
          "body": "{\n\tif (client)\n\t\tClientPacketFunctions::SendMOTD(client);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "279": {
      "symbol": "COMMAND_RANDOM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6279,
      "body": "{ Command_Random(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Random",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9432,
          "body": "{\n\tchar message[256] = {0};\n\n\tif (sep)\n\t{\n\t\tif (sep->GetArgNumber() == 0 && sep->IsNumber(0))\n\t\t\tsnprintf(message, sizeof(message), \"Random: %s rolls 1 to %i on the magic dice...and scores a %i!\", client->GetPlayer()->GetName(), atoi(sep->arg[0]), MakeRandomInt(1, atoi(sep->arg[0])));\n\t\telse if (sep->GetArgNumber() > 0 && sep->IsNumber(0) && sep->IsNumber(1))\n\t\t\tsnprintf(message, sizeof(message), \"Random: %s rolls from %i to %i on the magic dice...and scores a %i!\", client->GetPlayer()->GetName(), atoi(sep->arg[0]), atoi(sep->arg[1]), MakeRandomInt(atoi(sep->arg[0]), atoi(sep->arg[1])));\n\t\telse\n\t\t\tsnprintf(message, sizeof(message), \"Random: %s rolls from 1 to 100 on the magic dice...and scores a %i!\", client->GetPlayer()->GetName(), MakeRandomInt(1, 100));\n\t}\n\telse\n\t\tsnprintf(message, sizeof(message), \"Random: %s rolls from 1 to 100 on the magic dice...and scores a %i!\", client->GetPlayer()->GetName(), MakeRandomInt(1, 100));\n\t\t\t\n\tclient->GetPlayer()->GetZone()->HandleChatMessage(0, 0, CHANNEL_EMOTE, message);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "256": {
      "symbol": "COMMAND_CREATE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6280,
      "body": "{ Command_Create(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Create",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6709,
          "body": "{\n\tPrintSep(sep, \"COMMAND_CREATE\");\n\tclient->ShowRecipeBook();\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "299": {
      "symbol": "COMMAND_CREATEFROMRECIPE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6281,
      "body": "{ Command_CreateFromRecipe(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CreateFromRecipe",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6715,
          "body": "{\n\tPrintSep(sep, \"COMMAND_CREATEFROMRECIPE\");\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t\tClientPacketFunctions::SendCreateFromRecipe(client, atoul(sep->arg[0]));\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "281": {
      "symbol": "COMMAND_TITLE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6282,
      "body": "{ Command_Title(client); break; }",
      "delegates": [
        {
          "function": "Command_Title",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10158,
          "body": "{\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"Available subcommands: list, setprefix <index>, setsuffix <index>, fix\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "286": {
      "symbol": "COMMAND_TITLE_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6283,
      "body": "{ Command_TitleList(client); break; }",
      "delegates": [
        {
          "function": "Command_TitleList",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10170,
          "body": "{\n\t                                                                         \n\tvector<Title*>* titles = client->GetPlayer()->GetPlayerTitles()->GetAllTitles();\n\tvector<Title*>::iterator itr;\n\tTitle* title;\n\tsint32 i = 0;\n\n\tclient->Message(CHANNEL_NARRATIVE, \"Listing available titles:\");\n\tfor(itr = titles->begin(); itr != titles->end(); itr++)\n\t{\n\t\ttitle = *itr;\n\t\tclient->Message(CHANNEL_NARRATIVE, \"%i: type=[%s] title=[%s]\", i, title->GetPrefix() ? \"Prefix\":\"Suffix\", title->GetName());\n\t\ti++;\n\t}\n\n\tclient->GetPlayer()->GetPlayerTitles()->ReleaseReadLock();\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "287": {
      "symbol": "COMMAND_TITLE_SETPREFIX",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6284,
      "body": "{ Command_TitleSetPrefix(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TitleSetPrefix",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10196,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t{\n\t\tsint32 index = atoul(sep->arg[0]);\n\n\t\tif(index > -1)\n\t\t{\n\t\t\tTitle* title = client->GetPlayer()->GetPlayerTitles()->GetTitle(index);\n\t\t\tif(!title)\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Missing index %i to set title\", index);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if(!title->GetPrefix())\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"%s is not a prefix.\", title->GetName());\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse                                                           \n\t\t\tindex = -1;\n\n\t\tdatabase.SaveCharPrefixIndex(index, client->GetCharacterID());\n\t\tclient->SendTitleUpdate();\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "288": {
      "symbol": "COMMAND_TITLE_SETSUFFIX",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6285,
      "body": "{ Command_TitleSetSuffix(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TitleSetSuffix",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10231,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t{\n\t\tsint32 index = atoul(sep->arg[0]);\n\t\tif(index > -1)\n\t\t{\n\t\t\tTitle* title = client->GetPlayer()->GetPlayerTitles()->GetTitle(index);\n\t\t\tif(!title)\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Missing index %i to set title\", index);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if(title->GetPrefix())\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"%s is not a suffix.\", title->GetName());\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse                                                           \n\t\t\tindex = -1;\n\n\t\tdatabase.SaveCharSuffixIndex(index, client->GetCharacterID());\n\t\tclient->SendTitleUpdate();\n\t\tclient->GetPlayer()->info_changed = true;\n\t\tclient->GetPlayer()->GetZone()->AddChangedSpawn(client->GetPlayer());\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "289": {
      "symbol": "COMMAND_TITLE_FIX",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6286,
      "body": "{ Command_TitleFix(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TitleFix",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10267,
          "body": "{\n\tPrintSep(sep, \"COMMAND_TITLE_FIX\");\n\tLogWrite(MISC__TODO, 1, \"Titles\", \"TODO-Command: TITLE_FIX\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "290": {
      "symbol": "COMMAND_LANGUAGES",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6287,
      "body": "{ Command_Languages(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Languages",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8013,
          "body": "{\n\tlist<Language*>* languages = client->GetPlayer()->GetPlayerLanguages()->GetAllLanguages();\n\tlist<Language*>::iterator itr;\n\tLanguage* language;\n\tclient->Message(CHANNEL_NARRATIVE, \"You know the following languages:\");\n\n\tfor(itr = languages->begin(); itr != languages->end(); itr++)\n\t{\n\t\tlanguage = *itr;\n\t\tclient->Message(CHANNEL_NARRATIVE, \"%s\", language->GetName());\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "291": {
      "symbol": "COMMAND_SET_LANGUAGE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6288,
      "body": "{ Command_SetLanguage(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SetLanguage",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8034,
          "body": "{\n\tPlayer* player = client->GetPlayer();\n\n\tif (sep && sep->arg[0])\n\t{\n\t\tif(!sep->IsNumber(0))\n\t\t{\n\t\t\t                  \n\t\t\tconst char* value = sep->arg[0];\n\n\t\t\tif(strncasecmp(value, \"Common\", strlen(value)) == 0)\n\t\t\t{\n\t\t\t\tdatabase.SaveCharacterCurrentLang(0, client->GetCharacterID(), client);\n\t\t\t\tclient->SendLanguagesUpdate(0);\n\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You are now speaking %s\", value);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif(player->HasLanguage(value))\n\t\t\t\t{\n\t\t\t\t\tLanguage* language = player->GetPlayerLanguages()->GetLanguageByName(value);\n\t\t\t\t\tdatabase.SaveCharacterCurrentLang(language->GetID(), client->GetCharacterID(), client);\n\t\t\t\t\tclient->SendLanguagesUpdate(language->GetID());\n\t\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You are now speaking %s\", language->GetName());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You do not know how to speak %s\", value);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t                  \n\t\t\tint32 id = atoul(sep->arg[0]);\n\n\t\t\tif(player->HasLanguage(id))\n\t\t\t{\n\t\t\t\tLanguage* language = player->GetPlayerLanguages()->GetLanguage(id);\n\t\t\t\tdatabase.SaveCharacterCurrentLang(id, client->GetCharacterID(), client);\n\t\t\t\tclient->SendLanguagesUpdate(id);\n\t\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You are now speaking %s\", language->GetName());\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tLanguage* language = master_languages_list.GetLanguage(id);\n              \tif(language)\n             \tclient->Message(CHANNEL_NARRATIVE, \"You do not know how to speak %s\", language->GetName());\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\t                        \n\t\tint32 id = database.GetCharacterCurrentLang(client->GetCharacterID(), player);\n\n\t\tif(id > 0)\n\t\t{\n\t\t\tLanguage* language = player->GetPlayerLanguages()->GetLanguage(id);\n\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You are currently speaking %s \", language->GetName());\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_NARRATIVE, \"You are currently speaking Common\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "26": {
      "symbol": "COMMAND_FOLLOW",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6289,
      "body": "{ Command_Follow(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Follow",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6875,
          "body": "{\n\tPrintSep(sep, \"COMMAND_FOLLOW\");\n\t                                                               \n\tbool targetInGroup = false;\n\t                                     \n\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t                                             \n\tif (gmi && client->GetPlayer()->GetTarget()) {\n\t\tdeque<GroupMemberInfo*>::iterator itr;\n\n\t\tworld.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__);\n\n\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\tif (group)\n\t\t{\n\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t                                 \n\t\t\tfor (itr = members->begin(); itr != members->end(); itr++) {\n\t\t\t\t                                     \n\t\t\t\tif ((*itr)->member && (*itr)->member == client->GetPlayer()->GetTarget()) {\n\t\t\t\t\t                                     \n\t\t\t\t\ttargetInGroup = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t}\n\n\t\tworld.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__);\n\t}\n\tif (targetInGroup) {\n\t\t                                                                       \n\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"You start to follow %s.\", client->GetPlayer()->GetTarget()->GetName());\n\t\tclient->GetPlayer()->SetFollowTarget(client->GetPlayer()->GetTarget());\n\t\tclient->GetPlayer()->info_changed = true;\n\t\tclient->GetPlayer()->changed = true;\n\t}\n\telse\n\t\tclient->Message(CHANNEL_NARRATIVE, \"You must first select a group member to follow.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must first select a group member to follow."
      ]
    },
    "27": {
      "symbol": "COMMAND_STOP_FOLLOW",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6290,
      "body": "{ Command_StopFollow(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StopFollow",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6925,
          "body": "{\n\tPrintSep(sep, \"COMMAND_STOP_FOLLOW\");\n\tif (client->GetPlayer()->GetFollowTarget()) {\n\t\t                                                                       \n\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"You are no longer following %s\", client->GetPlayer()->GetFollowTarget()->GetName());\n\t\tclient->GetPlayer()->SetFollowTarget(0);\n\t\tclient->GetPlayer()->info_changed = true;\n\t\tclient->GetPlayer()->changed = true;\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "28": {
      "symbol": "COMMAND_LASTNAME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6291,
      "body": "{ Command_LastName(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LastName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8106,
          "body": "{\n\tif (!client)\n\t\treturn;\n\n\tif (sep && sep->arg[0])\n\t{\n\t\tif (!client->GetPlayer()->get_character_flag(CF_ENABLE_CHANGE_LASTNAME)){\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You must be atleast level %i to change your last name.\", rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Player, MinLastNameLevel)->GetInt8());\n\t\t\treturn;\n\t\t}\n\t\tclient->RemovePendingLastName();\n\n\t\tuchar* checkname = (uchar*)sep->arg[0];\n\t\tbool valid_name = true;\n\t\tfor (int32 i = 0; sep->arg[0][i] != '\\0'; i++) {\n\t\t\tif (!alpha_check(checkname[i])) {\n\t\t\t\tvalid_name = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!valid_name) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Your last name can only contain letters.\", rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Player, MinLastNameLevel)->GetInt8());\n\t\t\treturn;\n\t\t}\n\n\t\tstring last_name = (string)sep->arg[0];\n\t\tint8 max_length = rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Player, MaxLastNameLength)->GetInt8();\n\t\tint8 min_length = rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Player, MinLastNameLength)->GetInt8();\n\t\tif (last_name.length() <= max_length && last_name.length() >= min_length){\n\t\t\tclient->SetPendingLastName(last_name);\n\t\t\tclient->SendLastNameConfirmation();\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Your last name must be between %i and %i characters long.\", min_length, max_length);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must be atleast level %i to change your last name.",
        "Your last name must be between %i and %i characters long."
      ]
    },
    "29": {
      "symbol": "COMMAND_CONFIRMLASTNAME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6292,
      "body": "{ Command_ConfirmLastName(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ConfirmLastName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8152,
          "body": "{\n\tif (!client)\n\t\treturn;\n\n\tstring* name = client->GetPendingLastName();\n\tif (name){\n\t\tPlayer* player = client->GetPlayer();\n\t\tplayer->SetLastName(name->c_str(), false);\n\t\tclient->SendTitleUpdate();\n\t\tplayer->SetCharSheetChanged(true);\n\t\tclient->RemovePendingLastName();\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "137": {
      "symbol": "COMMAND_PET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6293,
      "body": "{ Command_Pet(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Pet",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9222,
          "body": "{\n\tPrintSep(sep, \"COMMAND_PET\");\n\t                                                                   \n\t                                                                         \n\n\n\tif (!sep || !sep->arg[0])\n\t\treturn;                                  \n\n\tif (strcmp(sep->arg[0], \"hide\") == 0) {\n\t\t                                                                                 \n\t\tEntity* pet = client->GetPlayer()->GetDeityPet();\n\t\tif (pet) {\n\t\t\tif (pet->IsPrivateSpawn())\n\t\t\t\tclient->GetPlayer()->HideDeityPet(false);\n\t\t\telse\n\t\t\t\tclient->GetPlayer()->HideDeityPet(true);\n\t\t}\n\n\t\tpet = client->GetPlayer()->GetCosmeticPet();\n\t\tif (pet) {\n\t\t\tif (pet->IsPrivateSpawn())\n\t\t\t\tclient->GetPlayer()->HideCosmeticPet(false);\n\t\t\telse\n\t\t\t\tclient->GetPlayer()->HideCosmeticPet(true);\n\t\t}\n\n\t\treturn;\n\t}\n\n\t                               \n\tif (!client->GetPlayer()->HasPet()) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have a pet.\");\n\t\treturn;\n\t}\n\t\n\tif (strcmp(sep->arg[0], \"stay\") == 0 || strcmp(sep->arg[0], \"stayhere\") == 0) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You command your pet to stay.\");\n\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_movement(1);\n\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\tif (client->GetPlayer()->GetPet())\n\t\t\tclient->GetPlayer()->GetPet()->SetFollowing(false);\n\t\tif (client->GetPlayer()->GetCharmedPet())\n\t\t\tclient->GetPlayer()->GetCharmedPet()->SetFollowing(false);\n\t}\n\telse if (strcmp(sep->arg[0], \"follow\") == 0 || strcmp(sep->arg[0], \"followme\") == 0) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You command your pet to follow.\");\n\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_movement(2);\n\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t}\n\telse if (strcmp(sep->arg[0], \"preserve_master\") == 0 || strcmp(sep->arg[0], \"guardme\") == 0) {\n\t\tif (client->GetPlayer()->GetInfoStruct()->get_pet_behavior() & 1) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Your pet will no longer protect you.\");\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_behavior(client->GetPlayer()->GetInfoStruct()->get_pet_behavior()-1);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You command your pet to protect you.\");\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_behavior(client->GetPlayer()->GetInfoStruct()->get_pet_behavior()+1);\n\t\t}\n\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t}\n\telse if (strcmp(sep->arg[0], \"preserve_self\") == 0 || strcmp(sep->arg[0], \"guardhere\") == 0) {                                           \n\t\tif (client->GetPlayer()->GetInfoStruct()->get_pet_behavior() & 2) {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Your pet will no longer protect itself.\");\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_behavior(client->GetPlayer()->GetInfoStruct()->get_pet_behavior()-2);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You command your pet to protect itself.\");\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_behavior(client->GetPlayer()->GetInfoStruct()->get_pet_behavior()+2);\n\t\t}\n\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t}\n\telse if (strcmp(sep->arg[0], \"backoff\") == 0) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You command your pet to back down.\");\n\t\tif (client->GetPlayer()->GetPet()) {\n\t\t\t((NPC*)client->GetPlayer()->GetPet())->Brain()->ClearHate();\n\t\t\t\t\t\n\t\t\tclient->GetPlayer()->GetPet()->SetFollowTarget(nullptr);\n\t\t\tclient->GetPlayer()->GetZone()->movementMgr->StopNavigation(client->GetPlayer()->GetPet());\n\t\t\tclient->GetPlayer()->GetPet()->ClearRunningLocations();\n\t\t\tclient->GetPlayer()->GetPet()->StopMovement();\n\t\t}\n\t\tif (client->GetPlayer()->GetCharmedPet()) {\n\t\t\t((NPC*)client->GetPlayer()->GetCharmedPet())->Brain()->ClearHate();\n\t\t\t\t\t\n\t\t\tclient->GetPlayer()->GetCharmedPet()->SetFollowTarget(nullptr);\n\t\t\tclient->GetPlayer()->GetZone()->movementMgr->StopNavigation(client->GetPlayer()->GetCharmedPet());\n\t\t\tclient->GetPlayer()->GetCharmedPet()->ClearRunningLocations();\n\t\t\tclient->GetPlayer()->GetCharmedPet()->StopMovement();\n\t\t}\n\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_behavior(0);\n\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t}\n\telse if (strcmp(sep->arg[0], \"attack\") == 0) {\n\t\tif (client->GetPlayer()->HasTarget() && client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\tif (client->GetPlayer()->AttackAllowed((Entity*)client->GetPlayer()->GetTarget())){\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You command your pet to attack your target.\");\n\t\t\t\tif (client->GetPlayer()->GetPet())\n\t\t\t\t\tclient->GetPlayer()->GetPet()->AddHate((Entity*)client->GetPlayer()->GetTarget(), 1, true);\n\t\t\t\tif (client->GetPlayer()->GetCharmedPet())\n\t\t\t\t\tclient->GetPlayer()->GetCharmedPet()->AddHate((Entity*)client->GetPlayer()->GetTarget(), 1, true);\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You can not attack that.\");\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have a target.\");\n\n\t}\n\telse if (strcmp(sep->arg[0], \"getlost\") == 0) {\n\t\tclient->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetPet());\n\t\tclient->GetPlayer()->DismissPet((NPC*)client->GetPlayer()->GetCharmedPet());\n\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You tell your pet to get lost.\");\n\t}\n\telse\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Unknown pet command %s.\", sep->arg[0]);\n\t\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "138": {
      "symbol": "COMMAND_PETNAME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6294,
      "body": "{ Command_PetName(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_PetName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9350,
          "body": "{\n\tif (sep && sep->arg[0]) {\n\t\tconst char* pet_name = sep->argplus[0];\n\t\tclient->SetPetName(pet_name);\n\t}\n\telse {\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_name(\"\");\n\t}\t\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "139": {
      "symbol": "COMMAND_NAME_PET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6295,
      "body": "{ Command_NamePet(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_NamePet",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9368,
          "body": "{\n\tCommand_PetName(client, sep);\n}"
        },
        {
          "function": "Command_PetName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9350,
          "body": "{\n\tif (sep && sep->arg[0]) {\n\t\tconst char* pet_name = sep->argplus[0];\n\t\tclient->SetPetName(pet_name);\n\t}\n\telse {\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_name(\"\");\n\t}\t\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "140": {
      "symbol": "COMMAND_RENAME",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6296,
      "body": "{ Command_Rename(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Rename",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9380,
          "body": "{\n\tCommand_PetName(client, sep);\n}"
        },
        {
          "function": "Command_PetName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9350,
          "body": "{\n\tif (sep && sep->arg[0]) {\n\t\tconst char* pet_name = sep->argplus[0];\n\t\tclient->SetPetName(pet_name);\n\t}\n\telse {\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_pet_name(\"\");\n\t}\t\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "141": {
      "symbol": "COMMAND_CONFIRMRENAME",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6297,
      "body": "{ Command_ConfirmRename(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ConfirmRename",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9392,
          "body": "{\n\tPrintSep(sep, \"COMMAND_CONFIRMRENAME\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Confirm Rename Pet Command\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"Pets are not yet implemented.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "142": {
      "symbol": "COMMAND_PETOPTIONS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6298,
      "body": "{ Command_PetOptions(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_PetOptions",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9406,
          "body": "{\n\tPrintSep(sep, \"COMMAND_PETOPTIONS\");\n\n\tPlayer* player = client->GetPlayer();\n\tSpawn* target = player->GetTarget();\n\tif (!target)\n\t\treturn;\n\n\tif (target == player->GetPet())\n\t\tclient->SendPetOptionsWindow(player->GetPet()->GetName());\n\telse if (target == player->GetCharmedPet())\n\t\tclient->SendPetOptionsWindow(player->GetCharmedPet()->GetName());\n\telse if (target == player->GetCosmeticPet())\n\t\tclient->SendPetOptionsWindow(player->GetCosmeticPet()->GetName(), 0);\n\telse if (target == player->GetDeityPet())\n\t\tclient->SendPetOptionsWindow(player->GetDeityPet()->GetName(), 0);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "172": {
      "symbol": "COMMAND_START_TRADE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6299,
      "body": "{ Command_TradeStart(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeStart",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10930,
          "body": "{\n\tPrintSep(sep, \"COMMAND_START_TRADE\");\n\n\tEntity* trader = client->GetPlayer();\n\tEntity* trader2 = 0;\n\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\tSpawn* spawn = client->GetPlayer()->GetSpawnWithPlayerID(atoi(sep->arg[0]));\n\t\tif (spawn) {\n\t\t\tif (spawn->IsEntity())\n\t\t\t\ttrader2 = (Entity*)spawn;\n\t\t}\n\t}\n\telse if (client->GetPlayer()->GetTarget()) {\n\t\tif (client->GetPlayer()->GetTarget()->IsEntity())\n\t\t\ttrader2 = (Entity*)client->GetPlayer()->GetTarget();\n\t}\n\n\t                                     \n\tif (trader && trader2) {\n\t\tif (trader == trader2) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can't trade with yourself.\");\n\t\t}\n\t\telse if (trader2->IsPlayer() || trader2->IsBot()) {\n\t\t\tLogWrite(PLAYER__ERROR, 0, \"Trade\", \"creating trade\");\n\t\t\tif (trader->trade)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are already trading.\");\n\t\t\telse if (trader2->trade)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Your target is already trading.\");\n\t\t\telse {\n\t\t\t\tTrade* trade = new Trade(trader, trader2);\n\t\t\t\ttrader->trade = trade;\n\t\t\t\ttrader2->trade = trade;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only trade with another player or a bot.\");\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Unable to find target\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "173": {
      "symbol": "COMMAND_ACCEPT_TRADE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6300,
      "body": "{ Command_TradeAccept(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeAccept",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10995,
          "body": "{\n\tPrintSep(sep, \"COMMAND_ACCEPT_TRADE\");\n\tstd::lock_guard<std::recursive_mutex> processing(client->ProcessingMutex());\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\t                                                                       \n\t\tstd::unique_lock<std::recursive_mutex> partner_processing;\n\t\tEntity* partner = trade->GetTradee(client->GetPlayer());\n\t\tif(partner && partner->IsPlayer() && static_cast<Player*>(partner)->GetClient()) {\n\t\t\tpartner_processing = std::unique_lock<std::recursive_mutex>(static_cast<Player*>(partner)->GetClient()->ProcessingMutex(), std::try_to_lock);\n\t\t\tif(!partner_processing.owns_lock()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"The other player is busy. Please accept the trade again.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tbool trade_complete = trade->SetTradeAccepted(client->GetPlayer());\n\t\tif (trade_complete)\n\t\t\tsafe_delete(trade);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "174": {
      "symbol": "COMMAND_REJECT_TRADE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6301,
      "body": "{ Command_TradeReject(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeReject",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11026,
          "body": "{\n\tPrintSep(sep, \"COMMAND_REJECT_TRADE\");\n\tCommand_TradeCancel(client, sep);\n}"
        },
        {
          "function": "Command_TradeCancel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11039,
          "body": "{\n\tPrintSep(sep, \"COMMAND_CANCEL_TRADE\");\n\tstd::lock_guard<std::recursive_mutex> processing(client->ProcessingMutex());\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tstd::unique_lock<std::recursive_mutex> partner_processing;\n\t\tEntity* partner = trade->GetTradee(client->GetPlayer());\n\t\tif(partner && partner->IsPlayer() && static_cast<Player*>(partner)->GetClient()) {\n\t\t\tpartner_processing = std::unique_lock<std::recursive_mutex>(static_cast<Player*>(partner)->GetClient()->ProcessingMutex(), std::try_to_lock);\n\t\t\tif(!partner_processing.owns_lock()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"The other player is busy. Please cancel the trade again.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\ttrade->CancelTrade(client->GetPlayer());\n\t\tsafe_delete(trade);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "175": {
      "symbol": "COMMAND_CANCEL_TRADE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6302,
      "body": "{ Command_TradeCancel(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeCancel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11039,
          "body": "{\n\tPrintSep(sep, \"COMMAND_CANCEL_TRADE\");\n\tstd::lock_guard<std::recursive_mutex> processing(client->ProcessingMutex());\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tstd::unique_lock<std::recursive_mutex> partner_processing;\n\t\tEntity* partner = trade->GetTradee(client->GetPlayer());\n\t\tif(partner && partner->IsPlayer() && static_cast<Player*>(partner)->GetClient()) {\n\t\t\tpartner_processing = std::unique_lock<std::recursive_mutex>(static_cast<Player*>(partner)->GetClient()->ProcessingMutex(), std::try_to_lock);\n\t\t\tif(!partner_processing.owns_lock()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"The other player is busy. Please cancel the trade again.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\ttrade->CancelTrade(client->GetPlayer());\n\t\tsafe_delete(trade);\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "176": {
      "symbol": "COMMAND_SET_TRADE_COIN",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6303,
      "body": "{ Command_TradeSetCoin(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeSetCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11068,
          "body": "{\n\tPrintSep(sep, \"COMMAND_SET_TRADE_COIN\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Set Trade Coin\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot trade with other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "177": {
      "symbol": "COMMAND_ADD_TRADE_COPPER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6304,
      "body": "{ Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_COPPER); break; }",
      "delegates": [
        {
          "function": "Command_TradeAddCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11082,
          "body": "{\n\tPrintSep(sep, \"COMMAND_ADD_TRADE_{coin type}\");\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_ADD_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount.\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "178": {
      "symbol": "COMMAND_ADD_TRADE_SILVER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6305,
      "body": "{ Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_SILVER); break; }",
      "delegates": [
        {
          "function": "Command_TradeAddCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11082,
          "body": "{\n\tPrintSep(sep, \"COMMAND_ADD_TRADE_{coin type}\");\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_ADD_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount.\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "179": {
      "symbol": "COMMAND_ADD_TRADE_GOLD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6306,
      "body": "{ Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_GOLD); break; }",
      "delegates": [
        {
          "function": "Command_TradeAddCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11082,
          "body": "{\n\tPrintSep(sep, \"COMMAND_ADD_TRADE_{coin type}\");\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_ADD_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount.\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "180": {
      "symbol": "COMMAND_ADD_TRADE_PLAT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6307,
      "body": "{ Command_TradeAddCoin(client, sep, COMMAND_ADD_TRADE_PLAT); break; }",
      "delegates": [
        {
          "function": "Command_TradeAddCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11082,
          "body": "{\n\tPrintSep(sep, \"COMMAND_ADD_TRADE_{coin type}\");\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_ADD_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_ADD_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->AddCoinToTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount.\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "181": {
      "symbol": "COMMAND_REMOVE_TRADE_COPPER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6308,
      "body": "{ Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_COPPER); break; }",
      "delegates": [
        {
          "function": "Command_TradeRemoveCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11140,
          "body": "{\n\tPrintSep(sep, \"COMMAND_REMOVE_TRADE_{coin type}\");\n\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_REMOVE_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "182": {
      "symbol": "COMMAND_REMOVE_TRADE_SILVER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6309,
      "body": "{ Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_SILVER); break; }",
      "delegates": [
        {
          "function": "Command_TradeRemoveCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11140,
          "body": "{\n\tPrintSep(sep, \"COMMAND_REMOVE_TRADE_{coin type}\");\n\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_REMOVE_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "183": {
      "symbol": "COMMAND_REMOVE_TRADE_GOLD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6310,
      "body": "{ Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_GOLD); break; }",
      "delegates": [
        {
          "function": "Command_TradeRemoveCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11140,
          "body": "{\n\tPrintSep(sep, \"COMMAND_REMOVE_TRADE_{coin type}\");\n\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_REMOVE_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "184": {
      "symbol": "COMMAND_REMOVE_TRADE_PLAT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6311,
      "body": "{ Command_TradeRemoveCoin(client, sep, COMMAND_REMOVE_TRADE_PLAT); break; }",
      "delegates": [
        {
          "function": "Command_TradeRemoveCoin",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11140,
          "body": "{\n\tPrintSep(sep, \"COMMAND_REMOVE_TRADE_{coin type}\");\n\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\tint32 amount = atoi(sep->arg[0]);\n\t\t\tint64 val = 0;\n\t\t\tswitch (handler) {\n\t\t\tcase COMMAND_REMOVE_TRADE_COPPER:\n\t\t\t{\n\t\t\t\tval = amount;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_SILVER:\n\t\t\t{\n\t\t\t\tval = amount * 100;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_GOLD:\n\t\t\t{\n\t\t\t\tval = amount * 10000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase COMMAND_REMOVE_TRADE_PLAT:\n\t\t\t{\n\t\t\t\tval = amount * 1000000;\n\t\t\t\ttrade->RemoveCoinFromTrade(client->GetPlayer(), val);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t{\n\t\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"No coin type specified in func: '%s', line %u\", __FUNCTION__, __LINE__);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid coin amount\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "185": {
      "symbol": "COMMAND_ADD_TRADE_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6312,
      "body": "{ Command_TradeAddItem(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeAddItem",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11199,
          "body": "{\n\tPrintSep(sep, \"COMMAND_ADD_TRADE_ITEM\");\n\t  \n                    \n              \n                  \n   \n\tif (!client->GetPlayer()->trade) {\n\t\tLogWrite(PLAYER__ERROR, 0, \"Trade\", \"Player is not currently trading.\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n\t\treturn;\n\t}\n\n\tif (sep && sep->IsSet(0) && sep->IsNumber(0) && sep->IsSet(1) && sep->IsNumber(1) && sep->IsSet(2) && sep->IsNumber(2)) {\n\t\tItem* item = 0;\n\t\tint32 index = atoi(sep->arg[0]);\n\t\titem = client->GetPlayer()->GetPlayerItemList()->GetItemFromIndex(index);\n\t\tif (item) {\n\t\t\tif(item->IsItemLocked() || item->details.equip_slot_id || client->GetPlayer()->item_list.HasPendingItemUse(item)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot trade an item currently in use.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if(item->details.inv_slot_id == InventorySlotType::BANK || item->details.inv_slot_id == InventorySlotType::SHARED_BANK) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot trade an item in the bank.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if(client->GetPlayer()->item_list.IsItemInSlotType(item, InventorySlotType::HOUSE_VAULT)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot trade an item in the house vault.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t\tint8 result = client->GetPlayer()->trade->AddItemToTrade(client->GetPlayer(), item, atoi(sep->arg[2]), atoi(sep->arg[1]));\n\t\t\tif (result == 1)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Item is already being traded.\");\n\t\t\telse if (result == 2)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can't trade NO-TRADE items.\");\n\t\t\telse if (result == 3)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can't trade HEIRLOOM items.\");\n\t\t\telse if (result == 4)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You cannot trade an item currently in use.\");\n\t\t\telse if (result == 253)\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You do not have enough quantity...\");\n\t\t\telse if (result == 254)\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You are trading with an older client with a %u trade slot restriction...\", client->GetPlayer()->trade->MaxSlots());\n\t\t\telse if (result == 255)\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Unknown error trying to add the item to the trade...\");\n\t\t}\n\t\telse {\n\t\t\tLogWrite(PLAYER__ERROR, 0, \"Trade\", \"Unable to get an item for the player (%s) from the index (%u)\", client->GetPlayer()->GetName(), index);\n\t\t\tclient->Message(CHANNEL_ERROR, \"Unable to find item at index %u\", index);\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid item.\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "186": {
      "symbol": "COMMAND_REMOVE_TRADE_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6313,
      "body": "{ Command_TradeRemoveItem(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TradeRemoveItem",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11263,
          "body": "{\n\tPrintSep(sep, \"COMMAND_REMOVE_TRADE_ITEM\");\n\t  \n                           \n   \n\n\tTrade* trade = client->GetPlayer()->trade;\n\tif (trade) {\n\t\tif (sep && sep->IsSet(0) && sep->IsNumber(0)) {\n\t\t\ttrade->RemoveItemFromTrade(client->GetPlayer(), atoi(sep->arg[0]));\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid item.\");\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not currently trading.\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "293": {
      "symbol": "COMMAND_ACCEPT_ADVANCEMENT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6314,
      "body": "{ Command_AcceptAdvancement(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_AcceptAdvancement",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6489,
          "body": "{\n\t Player *player = client->GetPlayer();\n\t if (sep && sep->IsSet(0)) {\n\t\t int32 trait_id = atoul(sep->arg[0]);\n\t\t TraitData* trait = nullptr;\n\t\t if(client->GetVersion() <= 561) {\n\t\t\t trait = master_trait_list.GetTraitByItemID(trait_id);\n\t\t }\n\t\t else {\n\t\t\ttrait = master_trait_list.GetTrait(trait_id);\n\t\t }\n\n\t\t if(!trait) {\n\t\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Invalid accept advancement of trait %u, no trait found.\", trait_id);\n\t\t\t return;                             \n\t\t }\n\t\t \n\t\t if(!master_trait_list.IsPlayerAllowedTrait(client, trait)) {\n\t\t\t client->SimpleMessage(CHANNEL_COLOR_RED, \"Not enough trait points to accept trait.\");\n\t\t\t return;\n\t\t }\n\t\t                                                                                                                       \n\t\t if (!player->HasSpell(trait->spellID, 0, true))\n\t\t {\n\t\t\t Spell* spell = master_spell_list.GetSpell(trait->spellID, trait->tier);\n\t\t\t if(spell) {\n\t\t\t\tplayer->AddSpellBookEntry(trait->spellID, trait->tier, player->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\t }\n\t\t\t else {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR! Trait is not a valid spell id %u may be disabled.\", trait->spellID);\n\t\t\t }\n\t\t }\n\t\t else\n\t\t {\n\t\t\t Spell* spell = master_spell_list.GetSpell(trait->spellID, trait->tier);\n\t\t\t if(spell) {\n\t\t\t\t sint32 old_slot = player->GetSpellSlot(spell->GetSpellID());\n\t\t\t\t player->RemoveSpellBookEntry(spell->GetSpellID());\n\t\t\t\t player->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\t\t player->UnlockSpell(spell);\n\t\t\t\t client->SendSpellUpdate(spell);\n\t\t\t }\n\t\t\t else {\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR! Trait is not a valid spell id %u may be disabled.\", trait->spellID);\n\t\t\t }\n\t\t }\n\n\t\t                     \n\t\t client->QueuePacket(player->GetSpellBookUpdatePacket(client->GetVersion()));\n\t\t ClientPacketFunctions::SendSkillSlotMappings(client);\n\t\t client->QueuePacket(master_trait_list.GetTraitListPacket(client));\n\t\t \n\t\t if(client->GetVersion() <= 561) {\n\t\t\tmaster_trait_list.ChooseNextTrait(client);\n\t\t }\n\t }\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "ERROR! Trait is not a valid spell id %u may be disabled."
      ]
    },
    "200": {
      "symbol": "COMMAND_DUEL",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6315,
      "body": "{ Command_Duel(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Duel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6746,
          "body": "{\n\tPrintSep(sep, \"COMMAND_DUEL\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Duel Command\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot duel other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "201": {
      "symbol": "COMMAND_DUELBET",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6316,
      "body": "{ Command_DuelBet(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_DuelBet",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6760,
          "body": "{\n\tPrintSep(sep, \"COMMAND_DUELBET\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Duel Bet Command\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot duel other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "202": {
      "symbol": "COMMAND_DUEL_ACCEPT",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6317,
      "body": "{ Command_DuelAccept(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_DuelAccept",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6774,
          "body": "{\n\tPrintSep(sep, \"COMMAND_DUEL_ACCEPT\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Accept Duel Command\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot duel other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "203": {
      "symbol": "COMMAND_DUEL_DECLINE",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6318,
      "body": "{ Command_DuelDecline(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_DuelDecline",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6788,
          "body": "{\n\tPrintSep(sep, \"COMMAND_DUEL_DECLINE\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Decline Duel Request Command\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot duel other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "204": {
      "symbol": "COMMAND_DUEL_SURRENDER",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6319,
      "body": "{ Command_DuelSurrender(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_DuelSurrender",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6802,
          "body": "{\n\tPrintSep(sep, \"COMMAND_DUEL_SURRENDER\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Surrender Duel Command\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot duel other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "205": {
      "symbol": "COMMAND_DUEL_TOGGLE",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6320,
      "body": "{ Command_DuelToggle(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_DuelToggle",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 6816,
          "body": "{\n\tPrintSep(sep, \"COMMAND_DUEL\");\n\tLogWrite(MISC__TODO, 1, \"Command\", \"TODO-Command: Duel Commands\");\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"You cannot duel other players (Not Implemented)\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "143": {
      "symbol": "COMMAND_SPAWN_TEMPLATE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6321,
      "body": "{ Command_SpawnTemplate(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SpawnTemplate",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9947,
          "body": "{\n\tif (sep == NULL || sep->arg[0] == NULL) \n\t{\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Examples:\\n/spawn template save Test - saves a template of the targetted spawn as the name Test\\n/spawn template list - shows a list of current templates\\n/spawn template spawn [id|name] creates a new spawn based on template [id|name] at your current location.\");\n\t\treturn;\n\t} \n\n\t                       \n\tconst char * template_cmd = sep->arg[0];\n\n\tif (strncasecmp(template_cmd, \"list\", strlen(template_cmd)) == 0) \n\t{\n\t\tif (!sep->IsSet(1))\n\t\t{\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Usage: /spawn template list [name|location_id]\");\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\"Examples:\\n/spawn template list [name] - will show all templates containing [name].\\n/spawn template list [location_id] - will show all templates that [location_id] is assigned to.\");\n\t\t\treturn;\n\t\t}\n\n\t\tmap<int32, string>* template_names = 0;\n\t\tif (sep->IsNumber(1))\n\t\t{\n\t\t\tint32 location_id = 0;\n\t\t\tlocation_id = atoi(sep->arg[1]);\n\t\t\ttemplate_names = database.GetSpawnTemplateListByID(location_id);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tconst char* name = 0;\n\t\t\tname = sep->argplus[1];\n\t\t\ttemplate_names = database.GetSpawnTemplateListByName(name);\n\t\t}\n\n\t\tif(!template_names)\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No templates found.\");\n\t\telse\n\t\t{\n\t\t\tmap<int32, string>::iterator itr;\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW,\" ID   Name: \");\n\t\t\tfor(itr = template_names->begin(); itr != template_names->end(); itr++)\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW,\"%03lu %s\", itr->first, itr->second.c_str());\n\t\t\tsafe_delete(template_names);\n\t\t}\n\t}\n\n\telse if (strncasecmp(template_cmd, \"save\", strlen(template_cmd)) == 0) \n\t{\n\t\tNPC* target = (NPC*)client->GetPlayer()->GetTarget();\n\t\tif ( target && (target->IsNPC() || target->IsObject() || target->IsSign() || target->IsWidget() || target->IsGroundSpawn()) ) \n\t\t{\n\t\t\tif (sep && sep->arg[1][0] && !sep->IsNumber(1))\n\t\t\t{\n\t\t\t\t                                                       \n\t\t\t\tconst char* name = 0;\n\t\t\t\tname = sep->argplus[1];\n\t\t\t\tmap<int32, string>* template_names = database.GetSpawnTemplateListByName(name);\n\t\t\t\tif(!template_names)\n\t\t\t\t{\n\t\t\t\t\tint32 new_template_id = database.SaveSpawnTemplate(target->GetSpawnLocationID(), name);\n\t\t\t\t\tif( new_template_id > 0 )\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn template '%s' added for spawn '%s' (%u) as TemplateID: %u\", name, target->GetName(), target->GetSpawnLocationID(), new_template_id);\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Failed to add new template '%s' for spawn '%s' (%u).\", name, target->GetName(), target->GetSpawnLocationID());\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Failed to add new template '%s' - Already exists!\", name);\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Saving a new spawn template requires a valid template name!\");\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: You must target the spawn you wish to save as a template!\");\n\t}\n\n\telse if (strncasecmp(template_cmd, \"remove\", strlen(template_cmd)) == 0) \n\t{\n\t\tif (sep && sep->arg[1][0] && sep->IsNumber(1))\n\t\t{\n\t\t\tint32 template_id = 0;\n\t\t\ttemplate_id = atoi(sep->arg[1]);\n\t\t\tif (database.RemoveSpawnTemplate(template_id))\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Spawn template ID: %u successfully removed.\", template_id);\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Failed to remove spawn template ID: %u\", template_id);\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Removing a spawn template requires a valid template ID!\");\n\t}\n\n\t                          \n\telse if (strncasecmp(template_cmd, \"spawn\", strlen(template_cmd)) == 0) \n\t{\n\t\tif (sep && sep->arg[1][0]) \n\t\t{\n\t\t\tint32 new_location = 0;\n\n\t\t\tif (sep->IsNumber(1))\n\t\t\t{\n\t\t\t\tint32 template_id = 0;\n\t\t\t\ttemplate_id = atoi(sep->arg[1]);\n\n\t\t\t\tnew_location = database.CreateSpawnFromTemplateByID(client, template_id);\n\t\t\t\tif( new_location > 0 )\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"New spawn location %u created from template ID: %u\", new_location, template_id);\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Failed to spawn the new spawn location from template ID: %u\", template_id);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tconst char* name = 0;\n\t\t\t\tname = sep->argplus[1];\n\n\t\t\t\tnew_location = database.CreateSpawnFromTemplateByName(client, name);\n\t\t\t\tif( new_location > 0 )\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"New spawn location %u created from template: '%s'\", new_location, name);\n\t\t\t\telse\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Failed to spawn the new spawn location from template: '%s'\", name);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Spawning a new spawn location requires a valid template name or ID!\");\n\t}\n\n\telse\n\t\tclient->Message(CHANNEL_COLOR_RED, \"ERROR: Unknown /spawn template command.\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Examples:\\n/spawn template save Test - saves a template of the targetted spawn as the name Test\\n/spawn template list - shows a list of current templates\\n/spawn template spawn [id|name] creates a new spawn based on template [id|name] at your current location.",
        "Usage: /spawn template list [name|location_id]",
        "Examples:\\n/spawn template list [name] - will show all templates containing [name].\\n/spawn template list [location_id] - will show all templates that [location_id] is assigned to.",
        "ERROR: Failed to add new template '%s' for spawn '%s' (%u).",
        "ERROR: Failed to add new template '%s' - Already exists!",
        "ERROR: Saving a new spawn template requires a valid template name!",
        "ERROR: You must target the spawn you wish to save as a template!",
        "ERROR: Failed to remove spawn template ID: %u",
        "ERROR: Removing a spawn template requires a valid template ID!",
        "ERROR: Failed to spawn the new spawn location from template ID: %u",
        "ERROR: Failed to spawn the new spawn location from template: '%s'",
        "ERROR: Spawning a new spawn location requires a valid template name or ID!",
        "ERROR: Unknown /spawn template command."
      ]
    },
    "800": {
      "symbol": "COMMAND_MOOD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6323,
      "body": "{ Command_Mood(client, sep); break;}",
      "delegates": [
        {
          "function": "Command_Mood",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13406,
          "body": "{\nPlayer* player = client->GetPlayer();\n\n\tif( sep && sep->arg[0] )\n\t{\n\t\tconst char* value = sep->arg[0];\n\t\tInfoStruct* info = player->GetInfoStruct();\n\t\tint32 cid = client->GetCharacterID();\n\t\tstring characterName = database.GetCharacterName(cid);\n\t\tchar tmp[1024];                                      \n\t\t                      \n\t\tchar* pname = \"mood\";\n\t\tchar* pval;              \n\t\tbool pt;                                 \n\n\t\t                            \n\t\tsnprintf(tmp, sizeof(tmp), \" \");\n\t\tif( strncasecmp(value, \"angry\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tsnprintf(tmp, sizeof(tmp), \"%s appears angry\", characterName.c_str());\n\t\t\tpval = \"11852\";\n\t\t\tplayer->SetMoodState(11852, 1);\n\t\t\tinfo->set_mood(11852);\n\t\t\tpt = database.insertCharacterProperty(client, pname, pval);\n\t\t}\n\t\telse if( strncasecmp(value, \"afraid\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tsnprintf(tmp, sizeof(tmp), \"%s appears afraid\", characterName.c_str());\n\t\t\tpval = \"11851\";\n\t\t\tplayer->SetMoodState(11851, 1);\n\t\t\tinfo->set_mood(11851);\n\t\t\tpt = database.insertCharacterProperty(client, pname, pval);\n\t\t} \n\t\telse if( strncasecmp(value, \"happy\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tsnprintf(tmp, sizeof(tmp), \"%s appears happy\", characterName.c_str());\n\t\t\tpval = \"11854\";\n\t\t\tplayer->SetMoodState(11854, 1);\n\t\t\tinfo->set_mood(11854);\n\t\t\tpt = database.insertCharacterProperty(client, pname, pval);\n\t\t} \n\t\telse if( strncasecmp(value, \"sad\", strlen(value)) == 0 ) {\n\t\t\tsnprintf(tmp, sizeof(tmp), \"%s appears sad\", characterName.c_str());\n\t\t\tpval = \"11856\";\n\t\t\tplayer->SetMoodState(11856, 1);\n\t\t\tinfo->set_mood(11856);\n\t\t\tpt = database.insertCharacterProperty(client, pname, pval);\n\t\t}\n\t\telse if( strncasecmp(value, \"tired\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tsnprintf(tmp, sizeof(tmp), \"%s appears tired\", characterName.c_str());\n\t\t\tpval = \"11857\";\n\t\t\tplayer->SetMoodState(11857, 1);\n\t\t\tinfo->set_mood(11857);\n\t\t\tpt = database.insertCharacterProperty(client, pname, pval);\n\t\t}\n\t\telse if( strncasecmp(value, \"none\", strlen(value)) == 0 ) \n\t\t{\n\t\t\t                                                              \n\t\t\tpval = \"11855\";\n\t\t\tplayer->SetMoodState(11855, 1);\n\t\t\tinfo->set_mood(11855);\n\t\t\tpt = database.insertCharacterProperty(client, pname, pval);\n\t\t\t                                                             \n\t\t\treturn;\n\t\t}else{\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"Listing Available Moods:\");\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"none\");\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"afraid\");\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"angry\");\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"happy\");\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"sad\");\n\t\t\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"tired\");\n\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\tclient->GetPlayer()->GetZone()->HandleChatMessage(0, 0, CHANNEL_EMOTE, tmp);\n\t\treturn;\n\t}\n\t\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"Listing Available Moods:\");\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"none\");\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"afraid\");\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"angry\");\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"happy\");\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"sad\");\n\tclient->SimpleMessage(CHANNEL_NARRATIVE, \"tired\");\n\treturn;\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "1000": {
      "symbol": "COMMAND_MODIFY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6325,
      "body": "{ Command_Modify(client); break; }",
      "delegates": [
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "1001": {
      "symbol": "COMMAND_MODIFY_CHARACTER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6326,
      "body": "{ Command_ModifyCharacter(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyCharacter",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8418,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\tint64 value = 0;\n\n\tPlayer* player = client->GetPlayer();\n\tClient* targetClient = client;\n\tif (player->HasTarget() && player->GetTarget()->IsPlayer()) {\n\t\tplayer = (Player*)player->GetTarget();\n\t\ttargetClient = player->GetClient();\n\t}\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\n\t{\n\t\tif (strcmp(sep->arg[0], \"add\") == 0)\n\t\t\t\n\t\t{\n\t\t\tif (strcmp(sep->arg[1], \"copper\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]);\n\t\t\t\tplayer->AddCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give yourself %llu copper coin%s\", value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give %s %llu copper coin%s\", player->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s gave you %llu copper coin%s\", client->GetPlayer()->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"silver\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]) * 100;\n\t\t\t\tplayer->AddCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give yourself %llu silver coin%s\", value / 100, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give %s %llu silver coin%s\", player->GetName(), value / 100, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s gave you %llu silver coin%s\", client->GetPlayer()->GetName(), value / 100, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"gold\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]) * 10000;\n\t\t\t\tplayer->AddCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give yourself %llu gold coin%s\", value / 10000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give %s %llu gold coin%s\", player->GetName(), value / 10000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s gave you %llu gold coin%s\", client->GetPlayer()->GetName(), value / 10000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"plat\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]) * 1000000;\n\t\t\t\tplayer->AddCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give yourself %llu platinum coin%s\", value / 1000000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give %s %llu platinum coin%s\", player->GetName(), value / 1000000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\tif(targetClient) {\t\t\t\t\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s gave you %llu platinum coin%s\", client->GetPlayer()->GetName(), value / 1000000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Usage: /modify character [action] [field] [value]\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Actions: add, remove\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Value  : copper, silver, gold, plat\");\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Example: /modify character add copper 20\");\n\t\t\t}\n\t\t}\n\n\t\telse if (strcmp(sep->arg[0], \"remove\") == 0)\n\t\t{\n\t\t\tif (strcmp(sep->arg[1], \"copper\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]);\n\t\t\t\tplayer->RemoveCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu copper coin%s from yourself\", value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu copper coin%s from %s\", value, (value > 1 ? \"s\" : \"\"), player->GetName());\n\t\t\t\t\tif(targetClient) {\t\t\t\t\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s takes %llu copper coin%s from you\", client->GetPlayer()->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"silver\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]) * 100;\n\t\t\t\tplayer->RemoveCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu silver coin%s from yourself\", value / 100, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu silver coin%s from %s\", value / 100, (value > 1 ? \"s\" : \"\"), player->GetName());\n\t\t\t\t\tif(targetClient) {\t\t\t\t\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s takes %llu silver coin%s from you\", client->GetPlayer()->GetName(), value / 100, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"gold\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]) * 10000;\n\t\t\t\tplayer->RemoveCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu gold coin%s from yourself\", value / 10000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu gold coin%s from %s\", value / 10000, (value > 1 ? \"s\" : \"\"), player->GetName());\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s takes %llu gold coin%s from you\", client->GetPlayer()->GetName(), value / 10000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"plat\") == 0)\n\t\t\t{\n\t\t\t\tvalue = atoi64(sep->arg[2]) * 1000000;\n\t\t\t\tplayer->RemoveCoins(value);\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu platinum coin%s from yourself\", value / 1000000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You take %llu platinum coin%s from %s\", value / 1000000, (value > 1 ? \"s\" : \"\"), player->GetName());\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s takes %llu platinum coin%s from you\", client->GetPlayer()->GetName(), value / 1000000, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Example: /modify character remove gold 15\");\n\t\t\t\t\n\t\t\t}\n\t\t}\n\n\t\telse if (strcmp(sep->arg[0], \"set\") == 0) {\n\n\t\t\tif (strcmp(sep->arg[1], \"tslevel\") == 0) {\n\t\t\t\tint8 level = atoi(sep->arg[2]);\n\n\t\t\t\tif (level > 0 && level < 256) {\n\t\t\t\t\tif (player) {\n\t\t\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t\t\t\tclient->ChangeTSLevel(player->GetTSLevel(), level);\n\t\t\t\t\t\telse if(targetClient)\n\t\t\t\t\t\t\ttargetClient->ChangeTSLevel(player->GetTSLevel(), level);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_ERROR, \"Level must be between 1 - 255\");\n\t\t\t}\n\n\t\t\telse if (strcmp(sep->arg[1], \"tsclass\") == 0) {\n\t\t\t\tint8 tsclass = atoi(sep->arg[2]);\n\n\t\t\t\tplayer->SetTradeskillClass(tsclass);\n\t\t\t\tplayer->GetInfoStruct()->set_tradeskill_class1(classes.GetTSBaseClass(player->GetTradeskillClass()));\n\t\t\t\tplayer->GetInfoStruct()->set_tradeskill_class2(classes.GetSecondaryTSBaseClass(player->GetTradeskillClass()));\n\t\t\t\tplayer->GetInfoStruct()->set_tradeskill_class3(player->GetTradeskillClass());\n\t\t\t\tplayer->SetCharSheetChanged(true);\n\t\t\t}\n\t\t\telse if (strcmp(sep->arg[1], \"gender\") == 0) {\n\t\t\t\tint8 gender = atoi(sep->arg[2]);\n\t\t\t\tclient->GetPlayer()->GetInfoStruct()->set_gender(gender);\n\t\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\t\tclient->UpdateTimeStampFlag ( GENDER_UPDATE_FLAG );\n\t\t\t}\n\t\t}\n\t}\n\telse\n\t{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Usage: /modify character [action] [field] [value]\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Actions: add, remove\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Value  : copper, silver, gold, plat\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Example: /modify character remove gold 15\");\n\t}\n\t\t\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify character [action] [field] [value]",
        "Example: /modify character add copper 20",
        "Example: /modify character remove gold 15",
        "Level must be between 1 - 255"
      ]
    },
    "1005": {
      "symbol": "COMMAND_MODIFY_QUEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6327,
      "body": "{ Command_ModifyQuest(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyQuest",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8874,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\tint64 value = 0;\n\n\tPlayer* player = client->GetPlayer();\n\tClient* targetClient = client;\n\tif (player->HasTarget() && player->GetTarget()->IsPlayer()) {\n\t\tplayer = (Player*)player->GetTarget();\n\t\ttargetClient = player->GetClient();\n\t}\n\n\t                                           \n\n\tif (sep && sep->arg[1])\n\t{\n\n\t\tif (strcmp(sep->arg[0], \"list\") == 0)\n\t\t{\n\t\t\tmap<int32, Quest*>* quests = player->GetPlayerQuests();\n\t\t\tmap<int32, Quest*>::iterator itr;\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s's Quest List:.\", client->GetPlayer()->GetName());\n\t\t\tif (quests->size() == 0)\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s has no quests.\", client->GetPlayer()->GetName());\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (itr = quests->begin(); itr != quests->end(); itr++)\n\t\t\t\t{\n\t\t\t\t\tQuest* quest = itr->second;\n\t\t\t\t\tif(quest) {\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u) %s\", itr->first, quest->GetName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\telse if (strcmp(sep->arg[0], \"completed\") == 0)\n\t\t{\n\n\t\t\tmap<int32, Quest*>* quests = player->GetCompletedPlayerQuests();\n\t\t\tmap<int32, Quest*>::iterator itr;\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s's Completed Quest List:.\", client->GetPlayer()->GetName());\n\t\t\tif (quests->size() == 0)\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s has no completed quests.\", client->GetPlayer()->GetName());\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor (itr = quests->begin(); itr != quests->end(); itr++)\n\t\t\t\t{\n\t\t\t\t\tQuest* quest = itr->second;\n\t\t\t\t\tif(quest) {\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u) %s\", itr->first, quest->GetName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\t                                                                     \n\t\t                                                                                         \n\t\telse if (strcmp(sep->arg[0], \"remove\") == 0)\n\t\t{\n\t\t\tint32 quest_id = 0;\n\n\t\t\tif (sep && sep->arg[1] && sep->IsNumber(1))\n\t\t\t\tquest_id = atoul(sep->arg[1]);\n\n\t\t\tif (quest_id > 0)\n\t\t\t{\n\t\t\t\tif (lua_interface && client->GetPlayer()->player_quests.count(quest_id) > 0)\n\t\t\t\t{\n\t\t\t\t\tQuest* quest = client->GetPlayer()->player_quests[quest_id];\n\t\t\t\t\tif (quest)\n\t\t\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The quest %s has been removed from your journal\", quest->GetName());\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You have removed the quest %s from %s's journal\", quest->GetName(), player->GetName());\n\t\t\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s has removed the quest %s from your journal\", client->GetPlayer()->GetName(), quest->GetName());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tLogWrite(COMMAND__INFO, 0, \"GM Command\", \"%s removed the quest %s from %s\", client->GetPlayer()->GetName(), quest->GetName(), player->GetName());\n\t\t\t\t\tlua_interface->CallQuestFunction(quest, \"Deleted\", client->GetPlayer());\n\t\t\t\t}\n\t\t\t\tclient->RemovePlayerQuest(quest_id);\n\t\t\t\tclient->GetCurrentZone()->SendQuestUpdates(client);\n\t\t\t}\n\t\t}\n\n\t\telse if (strcmp(sep->arg[0], \"advance\") == 0)\n\t\t{\n\t\t\tint32 quest_id = 0;\n\t\t\tint32 step = 0;\n\n\t\t\tif (sep && sep->arg[1] && sep->IsNumber(1))\n\t\t\t{\n\t\t\t\tquest_id = atoul(sep->arg[1]);\n\t\t\t\tQuest* quest = client->GetPlayer()->player_quests[quest_id];\n\n\t\t\t\tif(!quest) {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Quest not found!\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (sep && sep->arg[2] && sep->IsNumber(1))\n\t\t\t\t{\n\t\t\t\t\tstep = atoul(sep->arg[2]);\n\n\t\t\t\t\tif (quest_id > 0 && step > 0)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (player && player->IsPlayer() && quest_id > 0 && step > 0 && (player->player_quests.count(quest_id) > 0))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (client)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclient->AddPendingQuestUpdate(quest_id, step);\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"The quest %s has been advanced one step.\", quest->GetName());\n\t\t\t\t\t\t\t\tLogWrite(COMMAND__INFO, 0, \"GM Command\", \"%s advanced the quest %s one step\", client->GetPlayer()->GetName(), quest->GetName());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Quest ID and Step Number must be greater than 0!\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Step Number must be a number!\");\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Quest ID must be a number!\");\n\t\t\t}\n\t\t}\n\n\t\telse\n\t\t{\n\t\t\tCommand_Modify(client);\n\t\t}\n\t}\n\n\telse\n\t{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Usage: /modify quest [action] [quest id] [step number]\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Actions: list, completed, remove, advance\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Example: /modify quest list\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Example: /modify quest remove 156\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Example: /modify quest advance 50 1\");\n\t}\n\n}"
        },
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Quest ID and Step Number must be greater than 0!",
        "Step Number must be a number!",
        "Quest ID must be a number!",
        "Usage: /modify quest [action] [quest id] [step number]",
        "Example: /modify quest list",
        "Example: /modify quest remove 156",
        "Example: /modify quest advance 50 1",
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "1012": {
      "symbol": "COMMAND_FACTION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6328,
      "body": "{ Command_ModifyFaction(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyFaction",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8688,
          "body": "{\n\tconst string action = ToLower(string(GMPlayerArg(sep, 0)));\n\tif (action == \"search\") {\n\t\tstring field = ToLower(string(GMPlayerArg(sep, 1)));\n\t\tstring query;\n\t\tint page_arg = 3;\n\t\tif (field == \"all\")\n\t\t\tpage_arg = 2;\n\t\telse if (field == \"name\" || field == \"type\" || field == \"description\" || field == \"id\")\n\t\t\tquery = GMPlayerArg(sep, 2);\n\t\telse {\n\t\t\tquery = GMPlayerArg(sep, 1);\n\t\t\tfield = \"any\";\n\t\t\tpage_arg = 2;\n\t\t}\n\t\tlong long page = 1, id = 0;\n\t\tif ((field != \"all\" && query.empty()) || *GMPlayerArg(sep, page_arg + 1) ||\n\t\t\t(*GMPlayerArg(sep, page_arg) && !ParseGMPlayerInteger(GMPlayerArg(sep, page_arg), 1, UINT_MAX, page)) ||\n\t\t\t(field == \"id\" && !ParseGMPlayerInteger(query.c_str(), 0, UINT_MAX, id))) {\n\t\t\tSendFactionCommandHelp(client);\n\t\t\treturn;\n\t\t}\n\t\tquery = ToLower(query);\n\t\tvector<const Faction*> matches;\n\t\tfor (const auto& entry : master_faction_list.GetFactions()) {\n\t\t\tconst Faction* faction = entry.second;\n\t\t\tif (!faction)\n\t\t\t\tcontinue;\n\t\t\tif (field == \"all\" || (field == \"id\" && faction->id == id) ||\n\t\t\t\t((field == \"any\" || field == \"name\") && ToLower(faction->name).find(query) != string::npos) ||\n\t\t\t\t((field == \"any\" || field == \"type\") && ToLower(faction->type).find(query) != string::npos) ||\n\t\t\t\t((field == \"any\" || field == \"description\") && ToLower(faction->description).find(query) != string::npos))\n\t\t\t\tmatches.push_back(faction);\n\t\t}\n\t\tif (matches.empty()) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No factions matched that search.\");\n\t\t\treturn;\n\t\t}\n\t\tconst size_t page_size = 10;\n\t\tconst size_t pages = (matches.size() + page_size - 1) / page_size;\n\t\tif (page > static_cast<long long>(pages)) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Page out of range; this search has %u page(s).\", static_cast<unsigned>(pages));\n\t\t\treturn;\n\t\t}\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u faction(s); page %u/%u (ordered by ID).\", static_cast<unsigned>(matches.size()), static_cast<unsigned>(page), static_cast<unsigned>(pages));\n\t\tconst size_t start = static_cast<size_t>(page - 1) * page_size;\n\t\tfor (size_t i = start; i < matches.size() && i < start + page_size; ++i) {\n\t\t\tconst Faction* faction = matches[i];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"ID %u: %s | type: %s | default: %i%s\", faction->id, faction->name.c_str(), faction->type.c_str(), faction->default_value, faction->id <= 10 ? \" | fixed con; cannot edit standing\" : \"\");\n\t\t\tif (!faction->description.empty())\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"  %.300s\", faction->description.c_str());\n\t\t}\n\t\treturn;\n\t}\n\tconst bool inspect = action == \"get\";\n\tconst bool reset = action == \"reset\";\n\tconst bool set = action == \"set\";\n\tconst bool add = action == \"add\";\n\tif (!inspect && !reset && !set && !add && action != \"remove\") {\n\t\tSendFactionCommandHelp(client);\n\t\treturn;\n\t}\n\tconst int target_arg = inspect || reset ? 2 : 3;\n\tlong long id = 0, amount = 0;\n\tif (!ParseGMPlayerInteger(GMPlayerArg(sep, 1), 0, UINT_MAX, id) || *GMPlayerArg(sep, target_arg + 1)) {\n\t\tSendFactionCommandHelp(client);\n\t\treturn;\n\t}\n\tFaction* faction = master_faction_list.GetFaction(static_cast<int32>(id));\n\tif (!faction) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Unknown faction ID %u. Use /faction search <text>.\", static_cast<int32>(id));\n\t\treturn;\n\t}\n\tif (!inspect && id <= 10) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Faction IDs 0-10 have fixed con values and cannot have player standing changed.\");\n\t\treturn;\n\t}\n\tif (!inspect && !reset && !ParseGMPlayerInteger(GMPlayerArg(sep, 2), set ? -50000 : 1, set ? 50000 : INT_MAX, amount)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Set requires an integer from -50000 to 50000; add/remove require positive integer points (at most 2147483647).\");\n\t\treturn;\n\t}\n\tClientLookupScope lookups;\n\tClient* recipient = ResolveGMPlayer(client, GMPlayerArg(sep, target_arg), lookups);\n\tif (!recipient)\n\t\treturn;\n\tPlayer* player = recipient->GetPlayer();\n\tconst sint32 before = player->GetFactions()->GetFactionValue(faction->id);\n\tif (inspect) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s: %s (ID %u), standing %i, default %i, type %s, con %i.\", player->GetName(), faction->name.c_str(), faction->id, before, faction->default_value, faction->type.c_str(), player->GetFactions()->GetCon(faction->id));\n\t\treturn;\n\t}\n\tlong long after = reset ? faction->default_value : set ? amount : static_cast<long long>(before) + (add ? amount : -amount);\n\tconst bool clamped = after < -50000 || after > 50000;\n\tif (after < -50000) after = -50000;\n\tif (after > 50000) after = 50000;\n\tplayer->GetFactions()->SetFactionValue(faction->id, static_cast<sint32>(after));\n\tif (EQ2Packet* packet = player->GetFactions()->FactionUpdate(recipient->GetVersion()))\n\t\trecipient->QueuePacket(packet);\n\tdatabase.SavePlayerFactions(recipient);\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s: %s (ID %u), %i -> %i%s.\", player->GetName(), faction->name.c_str(), faction->id, before, static_cast<sint32>(after), clamped ? \" (clamped to standing limit)\" : \"\");\n\tif (recipient != client)\n\t\trecipient->Message(CHANNEL_COLOR_YELLOW, \"%s changed your faction %s (ID %u): %i -> %i.\", client->GetPlayer()->GetName(), faction->name.c_str(), faction->id, before, static_cast<sint32>(after));\n\tLogWrite(COMMAND__INFO, 0, \"Command\", \"GM %s (%u): faction %s, player %s (%u), faction %u, %i -> %i\", client->GetPlayer()->GetName(), client->GetAccountID(), action.c_str(), player->GetName(), recipient->GetCharacterID(), faction->id, before, static_cast<sint32>(after));\n}"
        },
        {
          "function": "GMPlayerArg",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8630,
          "body": "{\n\treturn sep && index <= sep->GetMaxArgNum() ? sep->arg[index] : \"\";\n}"
        },
        {
          "function": "ParseGMPlayerInteger",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8634,
          "body": "{\n\tif (!text || !*text)\n\t\treturn false;\n\tconst char* digit = text;\n\tif (*digit == '-' || *digit == '+')\n\t\t++digit;\n\tif (!*digit)\n\t\treturn false;\n\tfor (; *digit; ++digit) {\n\t\tif (*digit < '0' || *digit > '9')\n\t\t\treturn false;\n\t}\n\terrno = 0;\n\tchar* end = nullptr;\n\tconst long long value = std::strtoll(text, &end, 10);\n\tif (errno == ERANGE || *end || value < minimum || value > maximum)\n\t\treturn false;\n\tresult = value;\n\treturn true;\n}"
        },
        {
          "function": "SendFactionCommandHelp",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8680,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction search <text> [page] - searches names, types and descriptions; quote multiword text.\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction search name|type|description|id <value> [page], or /faction search all [page]\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction get|reset <id> [self|target|player] - inspect standing or restore its default.\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction set|add|remove <id> <amount> [self|target|player] - remove subtracts points.\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Standing: -50000 to 50000. Add/remove: positive points. Defaults to selected player, or self with no target; named players must be in this zone.\");\n}"
        },
        {
          "function": "ResolveGMPlayer",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8655,
          "body": "{\n\tif (stricmp(selector, \"self\") == 0)\n\t\treturn client;\n\tClient* recipient = nullptr;\n\tif (!*selector || stricmp(selector, \"target\") == 0) {\n\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\tif (!target && !*selector)\n\t\t\treturn client;\n\t\tif (!target || !target->IsPlayer()) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Select a player, or specify self or an online player name in this zone.\");\n\t\t\treturn nullptr;\n\t\t}\n\t\tif (target == client->GetPlayer())\n\t\t\treturn client;\n\t\trecipient = lookups.Retain(zone_list.GetClientByCharName(target->GetName()));\n\t}\n\telse\n\t\trecipient = lookups.Retain(zone_list.GetClientByCharName(selector));\n\tif (!recipient || !recipient->GetPlayer() || !recipient->IsReadyForUpdates() || recipient->GetCurrentZone() != client->GetCurrentZone()) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"The player must be online in your current zone.\");\n\t\treturn nullptr;\n\t}\n\treturn recipient;\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "%u faction(s); page %u/%u (ordered by ID).",
        "Unknown faction ID %u. Use /faction search <text>.",
        "Set requires an integer from -50000 to 50000; add/remove require positive integer points (at most 2147483647).",
        "/faction search <text> [page] - searches names, types and descriptions; quote multiword text.",
        "/faction search name|type|description|id <value> [page], or /faction search all [page]",
        "/faction get|reset <id> [self|target|player] - inspect standing or restore its default.",
        "/faction set|add|remove <id> <amount> [self|target|player] - remove subtracts points.",
        "Standing: -50000 to 50000. Add/remove: positive points. Defaults to selected player, or self with no target; named players must be in this zone.",
        "The player must be online in your current zone."
      ]
    },
    "1002": {
      "symbol": "COMMAND_MODIFY_FACTION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6329,
      "body": "{ Command_ModifyFaction(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyFaction",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8688,
          "body": "{\n\tconst string action = ToLower(string(GMPlayerArg(sep, 0)));\n\tif (action == \"search\") {\n\t\tstring field = ToLower(string(GMPlayerArg(sep, 1)));\n\t\tstring query;\n\t\tint page_arg = 3;\n\t\tif (field == \"all\")\n\t\t\tpage_arg = 2;\n\t\telse if (field == \"name\" || field == \"type\" || field == \"description\" || field == \"id\")\n\t\t\tquery = GMPlayerArg(sep, 2);\n\t\telse {\n\t\t\tquery = GMPlayerArg(sep, 1);\n\t\t\tfield = \"any\";\n\t\t\tpage_arg = 2;\n\t\t}\n\t\tlong long page = 1, id = 0;\n\t\tif ((field != \"all\" && query.empty()) || *GMPlayerArg(sep, page_arg + 1) ||\n\t\t\t(*GMPlayerArg(sep, page_arg) && !ParseGMPlayerInteger(GMPlayerArg(sep, page_arg), 1, UINT_MAX, page)) ||\n\t\t\t(field == \"id\" && !ParseGMPlayerInteger(query.c_str(), 0, UINT_MAX, id))) {\n\t\t\tSendFactionCommandHelp(client);\n\t\t\treturn;\n\t\t}\n\t\tquery = ToLower(query);\n\t\tvector<const Faction*> matches;\n\t\tfor (const auto& entry : master_faction_list.GetFactions()) {\n\t\t\tconst Faction* faction = entry.second;\n\t\t\tif (!faction)\n\t\t\t\tcontinue;\n\t\t\tif (field == \"all\" || (field == \"id\" && faction->id == id) ||\n\t\t\t\t((field == \"any\" || field == \"name\") && ToLower(faction->name).find(query) != string::npos) ||\n\t\t\t\t((field == \"any\" || field == \"type\") && ToLower(faction->type).find(query) != string::npos) ||\n\t\t\t\t((field == \"any\" || field == \"description\") && ToLower(faction->description).find(query) != string::npos))\n\t\t\t\tmatches.push_back(faction);\n\t\t}\n\t\tif (matches.empty()) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No factions matched that search.\");\n\t\t\treturn;\n\t\t}\n\t\tconst size_t page_size = 10;\n\t\tconst size_t pages = (matches.size() + page_size - 1) / page_size;\n\t\tif (page > static_cast<long long>(pages)) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Page out of range; this search has %u page(s).\", static_cast<unsigned>(pages));\n\t\t\treturn;\n\t\t}\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%u faction(s); page %u/%u (ordered by ID).\", static_cast<unsigned>(matches.size()), static_cast<unsigned>(page), static_cast<unsigned>(pages));\n\t\tconst size_t start = static_cast<size_t>(page - 1) * page_size;\n\t\tfor (size_t i = start; i < matches.size() && i < start + page_size; ++i) {\n\t\t\tconst Faction* faction = matches[i];\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"ID %u: %s | type: %s | default: %i%s\", faction->id, faction->name.c_str(), faction->type.c_str(), faction->default_value, faction->id <= 10 ? \" | fixed con; cannot edit standing\" : \"\");\n\t\t\tif (!faction->description.empty())\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"  %.300s\", faction->description.c_str());\n\t\t}\n\t\treturn;\n\t}\n\tconst bool inspect = action == \"get\";\n\tconst bool reset = action == \"reset\";\n\tconst bool set = action == \"set\";\n\tconst bool add = action == \"add\";\n\tif (!inspect && !reset && !set && !add && action != \"remove\") {\n\t\tSendFactionCommandHelp(client);\n\t\treturn;\n\t}\n\tconst int target_arg = inspect || reset ? 2 : 3;\n\tlong long id = 0, amount = 0;\n\tif (!ParseGMPlayerInteger(GMPlayerArg(sep, 1), 0, UINT_MAX, id) || *GMPlayerArg(sep, target_arg + 1)) {\n\t\tSendFactionCommandHelp(client);\n\t\treturn;\n\t}\n\tFaction* faction = master_faction_list.GetFaction(static_cast<int32>(id));\n\tif (!faction) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Unknown faction ID %u. Use /faction search <text>.\", static_cast<int32>(id));\n\t\treturn;\n\t}\n\tif (!inspect && id <= 10) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Faction IDs 0-10 have fixed con values and cannot have player standing changed.\");\n\t\treturn;\n\t}\n\tif (!inspect && !reset && !ParseGMPlayerInteger(GMPlayerArg(sep, 2), set ? -50000 : 1, set ? 50000 : INT_MAX, amount)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Set requires an integer from -50000 to 50000; add/remove require positive integer points (at most 2147483647).\");\n\t\treturn;\n\t}\n\tClientLookupScope lookups;\n\tClient* recipient = ResolveGMPlayer(client, GMPlayerArg(sep, target_arg), lookups);\n\tif (!recipient)\n\t\treturn;\n\tPlayer* player = recipient->GetPlayer();\n\tconst sint32 before = player->GetFactions()->GetFactionValue(faction->id);\n\tif (inspect) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s: %s (ID %u), standing %i, default %i, type %s, con %i.\", player->GetName(), faction->name.c_str(), faction->id, before, faction->default_value, faction->type.c_str(), player->GetFactions()->GetCon(faction->id));\n\t\treturn;\n\t}\n\tlong long after = reset ? faction->default_value : set ? amount : static_cast<long long>(before) + (add ? amount : -amount);\n\tconst bool clamped = after < -50000 || after > 50000;\n\tif (after < -50000) after = -50000;\n\tif (after > 50000) after = 50000;\n\tplayer->GetFactions()->SetFactionValue(faction->id, static_cast<sint32>(after));\n\tif (EQ2Packet* packet = player->GetFactions()->FactionUpdate(recipient->GetVersion()))\n\t\trecipient->QueuePacket(packet);\n\tdatabase.SavePlayerFactions(recipient);\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s: %s (ID %u), %i -> %i%s.\", player->GetName(), faction->name.c_str(), faction->id, before, static_cast<sint32>(after), clamped ? \" (clamped to standing limit)\" : \"\");\n\tif (recipient != client)\n\t\trecipient->Message(CHANNEL_COLOR_YELLOW, \"%s changed your faction %s (ID %u): %i -> %i.\", client->GetPlayer()->GetName(), faction->name.c_str(), faction->id, before, static_cast<sint32>(after));\n\tLogWrite(COMMAND__INFO, 0, \"Command\", \"GM %s (%u): faction %s, player %s (%u), faction %u, %i -> %i\", client->GetPlayer()->GetName(), client->GetAccountID(), action.c_str(), player->GetName(), recipient->GetCharacterID(), faction->id, before, static_cast<sint32>(after));\n}"
        },
        {
          "function": "GMPlayerArg",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8630,
          "body": "{\n\treturn sep && index <= sep->GetMaxArgNum() ? sep->arg[index] : \"\";\n}"
        },
        {
          "function": "ParseGMPlayerInteger",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8634,
          "body": "{\n\tif (!text || !*text)\n\t\treturn false;\n\tconst char* digit = text;\n\tif (*digit == '-' || *digit == '+')\n\t\t++digit;\n\tif (!*digit)\n\t\treturn false;\n\tfor (; *digit; ++digit) {\n\t\tif (*digit < '0' || *digit > '9')\n\t\t\treturn false;\n\t}\n\terrno = 0;\n\tchar* end = nullptr;\n\tconst long long value = std::strtoll(text, &end, 10);\n\tif (errno == ERANGE || *end || value < minimum || value > maximum)\n\t\treturn false;\n\tresult = value;\n\treturn true;\n}"
        },
        {
          "function": "SendFactionCommandHelp",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8680,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction search <text> [page] - searches names, types and descriptions; quote multiword text.\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction search name|type|description|id <value> [page], or /faction search all [page]\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction get|reset <id> [self|target|player] - inspect standing or restore its default.\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/faction set|add|remove <id> <amount> [self|target|player] - remove subtracts points.\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Standing: -50000 to 50000. Add/remove: positive points. Defaults to selected player, or self with no target; named players must be in this zone.\");\n}"
        },
        {
          "function": "ResolveGMPlayer",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8655,
          "body": "{\n\tif (stricmp(selector, \"self\") == 0)\n\t\treturn client;\n\tClient* recipient = nullptr;\n\tif (!*selector || stricmp(selector, \"target\") == 0) {\n\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\tif (!target && !*selector)\n\t\t\treturn client;\n\t\tif (!target || !target->IsPlayer()) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Select a player, or specify self or an online player name in this zone.\");\n\t\t\treturn nullptr;\n\t\t}\n\t\tif (target == client->GetPlayer())\n\t\t\treturn client;\n\t\trecipient = lookups.Retain(zone_list.GetClientByCharName(target->GetName()));\n\t}\n\telse\n\t\trecipient = lookups.Retain(zone_list.GetClientByCharName(selector));\n\tif (!recipient || !recipient->GetPlayer() || !recipient->IsReadyForUpdates() || recipient->GetCurrentZone() != client->GetCurrentZone()) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"The player must be online in your current zone.\");\n\t\treturn nullptr;\n\t}\n\treturn recipient;\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "%u faction(s); page %u/%u (ordered by ID).",
        "Unknown faction ID %u. Use /faction search <text>.",
        "Set requires an integer from -50000 to 50000; add/remove require positive integer points (at most 2147483647).",
        "/faction search <text> [page] - searches names, types and descriptions; quote multiword text.",
        "/faction search name|type|description|id <value> [page], or /faction search all [page]",
        "/faction get|reset <id> [self|target|player] - inspect standing or restore its default.",
        "/faction set|add|remove <id> <amount> [self|target|player] - remove subtracts points.",
        "Standing: -50000 to 50000. Add/remove: positive points. Defaults to selected player, or self with no target; named players must be in this zone.",
        "The player must be online in your current zone."
      ]
    },
    "1013": {
      "symbol": "COMMAND_ALIGNMENT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6330,
      "body": "{ Command_Alignment(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Alignment",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8797,
          "body": "{\n\tconst string action = ToLower(string(GMPlayerArg(sep, 0)));\n\tconst bool inspect = action == \"get\";\n\tconst int target_arg = inspect ? 1 : 2;\n\tif ((!inspect && action != \"set\") || *GMPlayerArg(sep, target_arg + 1)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/alignment get [self|target|player]\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/alignment set good|evil|<-128..127> [self|target|player] - good=1, evil=0; other values are custom, as in Lua SetAlignment.\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Defaults to selected player, or self with no target; named players must be in this zone.\");\n\t\treturn;\n\t}\n\tlong long value = 0;\n\tif (!inspect) {\n\t\tconst string alignment = ToLower(string(GMPlayerArg(sep, 1)));\n\t\tif (alignment == \"good\") value = ALIGNMENT_GOOD;\n\t\telse if (alignment == \"evil\") value = ALIGNMENT_EVIL;\n\t\telse if (!ParseGMPlayerInteger(alignment.c_str(), SCHAR_MIN, SCHAR_MAX, value)) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Alignment must be good (1), evil (0), or an integer from -128 to 127.\");\n\t\t\treturn;\n\t\t}\n\t}\n\tClientLookupScope lookups;\n\tClient* recipient = ResolveGMPlayer(client, GMPlayerArg(sep, target_arg), lookups);\n\tif (!recipient)\n\t\treturn;\n\tPlayer* player = recipient->GetPlayer();\n\tconst sint8 before = player->GetAlignment();\n\tif (inspect) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s: alignment %s (%i).\", player->GetName(), GMAlignmentName(before), before);\n\t\treturn;\n\t}\n\tconst sint8 after = static_cast<sint8>(value);\n\t                                                                  \n\tplayer->GetInfoStruct()->set_alignment(after);\n\tplayer->SetCharSheetChanged(true);\n\trecipient->Save();\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s: alignment %s (%i) -> %s (%i).\", player->GetName(), GMAlignmentName(before), before, GMAlignmentName(after), after);\n\tif (recipient != client)\n\t\trecipient->Message(CHANNEL_COLOR_YELLOW, \"%s changed your alignment: %s (%i) -> %s (%i).\", client->GetPlayer()->GetName(), GMAlignmentName(before), before, GMAlignmentName(after), after);\n\tLogWrite(COMMAND__INFO, 0, \"Command\", \"GM %s (%u): alignment, player %s (%u), %i -> %i\", client->GetPlayer()->GetName(), client->GetAccountID(), player->GetName(), recipient->GetCharacterID(), before, after);\n}"
        },
        {
          "function": "GMPlayerArg",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8630,
          "body": "{\n\treturn sep && index <= sep->GetMaxArgNum() ? sep->arg[index] : \"\";\n}"
        },
        {
          "function": "ParseGMPlayerInteger",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8634,
          "body": "{\n\tif (!text || !*text)\n\t\treturn false;\n\tconst char* digit = text;\n\tif (*digit == '-' || *digit == '+')\n\t\t++digit;\n\tif (!*digit)\n\t\treturn false;\n\tfor (; *digit; ++digit) {\n\t\tif (*digit < '0' || *digit > '9')\n\t\t\treturn false;\n\t}\n\terrno = 0;\n\tchar* end = nullptr;\n\tconst long long value = std::strtoll(text, &end, 10);\n\tif (errno == ERANGE || *end || value < minimum || value > maximum)\n\t\treturn false;\n\tresult = value;\n\treturn true;\n}"
        },
        {
          "function": "ResolveGMPlayer",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8655,
          "body": "{\n\tif (stricmp(selector, \"self\") == 0)\n\t\treturn client;\n\tClient* recipient = nullptr;\n\tif (!*selector || stricmp(selector, \"target\") == 0) {\n\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\tif (!target && !*selector)\n\t\t\treturn client;\n\t\tif (!target || !target->IsPlayer()) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Select a player, or specify self or an online player name in this zone.\");\n\t\t\treturn nullptr;\n\t\t}\n\t\tif (target == client->GetPlayer())\n\t\t\treturn client;\n\t\trecipient = lookups.Retain(zone_list.GetClientByCharName(target->GetName()));\n\t}\n\telse\n\t\trecipient = lookups.Retain(zone_list.GetClientByCharName(selector));\n\tif (!recipient || !recipient->GetPlayer() || !recipient->IsReadyForUpdates() || recipient->GetCurrentZone() != client->GetCurrentZone()) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"The player must be online in your current zone.\");\n\t\treturn nullptr;\n\t}\n\treturn recipient;\n}"
        },
        {
          "function": "GMAlignmentName",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8793,
          "body": "{\n\treturn value == ALIGNMENT_GOOD ? \"good\" : value == ALIGNMENT_EVIL ? \"evil\" : \"custom\";\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": true,
      "raw_parameters": false,
      "usage_messages": [
        "/alignment get [self|target|player]",
        "/alignment set good|evil|<-128..127> [self|target|player] - good=1, evil=0; other values are custom, as in Lua SetAlignment.",
        "Defaults to selected player, or self with no target; named players must be in this zone.",
        "Alignment must be good (1), evil (0), or an integer from -128 to 127.",
        "The player must be online in your current zone."
      ]
    },
    "1003": {
      "symbol": "COMMAND_MODIFY_GUILD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6331,
      "body": "{ Command_ModifyGuild(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyGuild",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8839,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\t{\n\t}\n\telse\n\t\tCommand_Modify(client);\n}"
        },
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "1004": {
      "symbol": "COMMAND_MODIFY_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6332,
      "body": "{ Command_ModifyItem(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyItem",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8852,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\t{\n\t}\n\telse\n\t\tCommand_Modify(client);\n}"
        },
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "1006": {
      "symbol": "COMMAND_MODIFY_SKILL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6333,
      "body": "{ Command_ModifySkill(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifySkill",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9030,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\t{\n\t\tif (strcmp(sep->arg[0], \"add\") == 0) {\n\t\t\tconst char* skill_name = sep->argplus[1];\n\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\tif (skill) {\n\t\t\t\tPlayer* player = 0;\n\t\t\t\tClient* to_client = 0;\n\n\t\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) {\n\t\t\t\t\tplayer = (Player*)client->GetPlayer()->GetTarget();\n\t\t\t\t\tto_client = player->GetClient();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tplayer = client->GetPlayer();\n\t\t\t\t\tto_client = client;\n\t\t\t\t}\n\n\t\t\t\tif (player)\n\t\t\t\t{\n\t\t\t\t\tif (!player->GetSkills()->HasSkill(skill->skill_id))\n\t\t\t\t\t{\n\t\t\t\t\t\tplayer->AddSkill(skill->skill_id, 1, player->GetLevel() * 5, true);\n\t\t\t\t\t\tif (to_client)\n\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\tif (to_client == client) {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"Added skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"You gave skill '%s' to player '%s'.\", skill_name, player->GetName());\n\t\t\t\t\t\t\tto_client->Message(CHANNEL_STATUS, \"%s gave you skill '%s'.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"%s already has the skill '%s'.\", to_client == client ? \"You\" : player->GetName(), skill_name);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_STATUS, \"The skill '%s' does not exist.\", skill_name);\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"remove\") == 0) {\n\t\t\tconst char* skill_name = sep->argplus[1];\n\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\n\t\t\tif (skill) {\n\t\t\t\tPlayer* player = 0;\n\t\t\t\tClient* to_client = 0;\n\n\t\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) {\n\t\t\t\t\tplayer = (Player*)client->GetPlayer()->GetTarget();\n\t\t\t\t\tto_client = player->GetClient();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tplayer = client->GetPlayer();\n\t\t\t\t\tto_client = client;\n\t\t\t\t}\n\n\t\t\t\tif (player)\n\t\t\t\t{\n\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id))\n\t\t\t\t\t{\n\t\t\t\t\t\tplayer->RemovePlayerSkill(skill->skill_id, true);\n\t\t\t\t\t\tif (to_client)\n\t\t\t\t\t\t\tClientPacketFunctions::SendSkillBook(to_client);\n\t\t\t\t\t\tif (client == to_client) {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"Removed skill '%s'.\", skill_name);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"Removed skill '%s' from player %s.\", skill_name, player->GetName());\n\t\t\t\t\t\t\tif(to_client) {\n\t\t\t\t\t\t\t\tto_client->Message(CHANNEL_STATUS, \"%s has removed skill '%s' from you.\", client->GetPlayer()->GetName(), skill_name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (client == to_client)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"You do not have the skill '%s'.\", skill_name);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"Player '%s' does not have the skill '%s'.\", player->GetName(), skill_name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_STATUS, \"The skill '%s' does not exist.\", skill_name);\n\t\t}\n\t\telse if (strcmp(sep->arg[0], \"set\") == 0) {\n\t\t\tif (!sep->IsNumber(2)) {\n\t\t\t\tclient->Message(CHANNEL_STATUS, \"The last parameter must be a number.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst char* skill_name = sep->arg[1];\n\t\t\tSkill* skill = master_skill_list.GetSkillByName(skill_name);\n\t\t\tif (skill) {\n\t\t\t\tint16 val = atoi(sep->arg[2]);\n\t\t\t\tPlayer* player = 0;\n\t\t\t\tClient* to_client = 0;\n\n\t\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsPlayer()) {\n\t\t\t\t\tplayer = (Player*)client->GetPlayer()->GetTarget();\n\t\t\t\t\tto_client = player->GetClient();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tplayer = client->GetPlayer();\n\t\t\t\t\tto_client = client;\n\t\t\t\t}\n\n\t\t\t\tif (player)\n\t\t\t\t{\n\t\t\t\t\tif (player->GetSkills()->HasSkill(skill->skill_id)) {\n\t\t\t\t\t\tplayer->GetSkills()->SetSkill(skill->skill_id, val);\n\t\t\t\t\t\tif (client != to_client)\n\t\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"You set %s's '%s' skill to %i.\", player->GetName(), skill_name, val);\n\t\t\t\t\t\tif(to_client) {\n\t\t\t\t\t\t\tto_client->Message(CHANNEL_STATUS, \"Your '%s' skill has been set to %i.\", skill_name, val);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclient->Message(CHANNEL_STATUS, \"Target does not have the skill '%s'.\", skill_name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->Message(CHANNEL_STATUS, \"The skill '%s' does not exist.\", skill_name);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Usage: /modify skill [action] [skill]\");\n\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Actions: add, remove, set\");\n\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Example: /modify skill add parry\");\n\t\t}\n\t}\n\telse {\n\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Usage: /modify skill [action] [skill]\");\n\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Actions: add, remove, set\");\n\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Example: /modify skill add parry\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "The last parameter must be a number.",
        "Usage: /modify skill [action] [skill]",
        "Example: /modify skill add parry"
      ]
    },
    "1007": {
      "symbol": "COMMAND_MODIFY_SPAWN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6334,
      "body": "{ Command_ModifySpawn(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifySpawn",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8379,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\t{\n\t\t                                                       \n\t\tif (strcmp(sep->arg[0], \"zoneto\") == 0) \n\t\t{\n\t\t\tif( sep->IsNumber(1) )\n\t\t\t{\n\t\t\t\tint32 spawn_id = atoul(sep->arg[1]);\n\t\t\t\tfloat x_coord = client->GetPlayer()->GetX();\n\t\t\t\tfloat y_coord = client->GetPlayer()->GetY();\n\t\t\t\tfloat z_coord = client->GetPlayer()->GetZ();\n\t\t\t\tfloat h_coord = client->GetPlayer()->GetHeading();\n\n\t\t\t\tdatabase.SaveSignZoneToCoords(spawn_id, x_coord, y_coord, z_coord, h_coord);\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Usage: /modify spawn zoneto spawn_id - sets spawn_id to your coords\");\n\t\t}\n\t}\n\telse\n\t\tCommand_Modify(client);\n}"
        },
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify spawn zoneto spawn_id - sets spawn_id to your coords",
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "1008": {
      "symbol": "COMMAND_MODIFY_SPELL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6335,
      "body": "{ Command_ModifySpell(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifySpell",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9176,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\t{\n\t}\n\telse\n\t\tCommand_Modify(client);\n}"
        },
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "1009": {
      "symbol": "COMMAND_MODIFY_ZONE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6336,
      "body": "{ Command_ModifyZone(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ModifyZone",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 9189,
          "body": "{\n\tPrintSep(sep, \"COMMAND_MODIFY\");\n\n\t                                           \n\tif( sep && sep->arg[1] )\n\t{\n\t}\n\telse\n\t\tCommand_Modify(client);\n}"
        },
        {
          "function": "Command_Modify",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 8355,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /modify [system] [action] [field] [value] {target|id}\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Systems: character, faction, guild, item, skill, spawn, spell, zone\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Actions: set, create, delete, add, remove\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Value  : field name in the table being modified\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target : modify current target, or specified {system} ID\");\n}"
        }
      ],
      "argument_indices": [
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /modify [system] [action] [field] [value] {target|id}"
      ]
    },
    "294": {
      "symbol": "COMMAND_JOIN_CHANNEL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6338,
      "body": "{ Command_JoinChannel(client, sep); break;}",
      "delegates": [
        {
          "function": "Command_JoinChannel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11317,
          "body": "{\n\tconst char *channel_name, *password = NULL;\n\n\tif (sep == NULL || !sep->IsSet(0)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /joinchannel <channel name> [password]\");\n\t\treturn;\n\t}\n\n\tchannel_name = sep->arg[0];\n\tif (sep->IsSet(1))\n\t\tpassword = sep->arg[1];\n\n\tif (!chat.ChannelExists(channel_name) && !chat.CreateChannel(channel_name, password)) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Unable to create channel '%s'.\", channel_name);\n\t\treturn;\n\t}\n\n\tif (chat.IsInChannel(client, channel_name)) {\n\t\tclient->Message(CHANNEL_NARRATIVE, \"You are already in '%s'.\", channel_name);\n\t\treturn;\n\t}\n\n\tif (chat.HasPassword(channel_name)) {\n\t\tif (password == NULL) {\n\t\t\tclient->Message(CHANNEL_NARRATIVE, \"Unable to join '%s': That channel is password protected.\", channel_name);\n\t\t\treturn;\n\t\t}\n\t\tif (!chat.PasswordMatches(channel_name, password)) {\n\t\t\tclient->Message(CHANNEL_NARRATIVE, \"Unable to join '%s': The password is not correc.t\", channel_name);\n\t\t\treturn;\n\t\t}\n\t}\n\t\n\tif (!chat.JoinChannel(client, channel_name))\n\t\tclient->Message(CHANNEL_COLOR_RED, \"There was an internal error preventing you from joining '%s'.\", channel_name);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /joinchannel <channel name> [password]"
      ]
    },
    "295": {
      "symbol": "COMMAND_JOIN_CHANNEL_FROM_LOAD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6339,
      "body": "{ Command_JoinChannelFromLoad(client, sep); break;}",
      "delegates": [
        {
          "function": "Command_JoinChannelFromLoad",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11354,
          "body": "{\n\tprintf(\"ScatDebug: Received 'joinfromchannel', using the same function as 'joinchannel' (not sure what the difference is)\\n\");\n\tCommand_JoinChannel(client, sep);\n}"
        },
        {
          "function": "Command_JoinChannel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11317,
          "body": "{\n\tconst char *channel_name, *password = NULL;\n\n\tif (sep == NULL || !sep->IsSet(0)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /joinchannel <channel name> [password]\");\n\t\treturn;\n\t}\n\n\tchannel_name = sep->arg[0];\n\tif (sep->IsSet(1))\n\t\tpassword = sep->arg[1];\n\n\tif (!chat.ChannelExists(channel_name) && !chat.CreateChannel(channel_name, password)) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Unable to create channel '%s'.\", channel_name);\n\t\treturn;\n\t}\n\n\tif (chat.IsInChannel(client, channel_name)) {\n\t\tclient->Message(CHANNEL_NARRATIVE, \"You are already in '%s'.\", channel_name);\n\t\treturn;\n\t}\n\n\tif (chat.HasPassword(channel_name)) {\n\t\tif (password == NULL) {\n\t\t\tclient->Message(CHANNEL_NARRATIVE, \"Unable to join '%s': That channel is password protected.\", channel_name);\n\t\t\treturn;\n\t\t}\n\t\tif (!chat.PasswordMatches(channel_name, password)) {\n\t\t\tclient->Message(CHANNEL_NARRATIVE, \"Unable to join '%s': The password is not correc.t\", channel_name);\n\t\t\treturn;\n\t\t}\n\t}\n\t\n\tif (!chat.JoinChannel(client, channel_name))\n\t\tclient->Message(CHANNEL_COLOR_RED, \"There was an internal error preventing you from joining '%s'.\", channel_name);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /joinchannel <channel name> [password]"
      ]
    },
    "296": {
      "symbol": "COMMAND_TELL_CHANNEL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6340,
      "body": "{ Command_TellChannel(client, sep); break;}",
      "delegates": [
        {
          "function": "Command_TellChannel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11359,
          "body": "{\n\tif (sep == NULL || !sep->IsSet(0) || !sep->IsSet(1)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /tellchannel <channel name> <message>\");\n\t\tPrintSep(sep, \"tellchannel\");\n\t\treturn;\n\t}\n\n\tchat.TellChannel(client, std::string(client->GetPlayer()->GetName()), client->GetPlayer()->GetCurrentLanguage(), sep->arg[0], sep->argplus[1]);\n\tpeer_manager.SendPeersChatChannelMessage(std::string(sep->arg[0]), std::string(client->GetPlayer()->GetName()), std::string(sep->argplus[1]), \n\t\t\t\t\t\t\t\t\t\t\t client->GetPlayer()->GetCurrentLanguage(), \"\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /tellchannel <channel name> <message>"
      ]
    },
    "297": {
      "symbol": "COMMAND_LEAVE_CHANNEL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6341,
      "body": "{ Command_LeaveChannel(client, sep); break;}",
      "delegates": [
        {
          "function": "Command_LeaveChannel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12524,
          "body": "{\n\tconst char *channel_name;\n\n\tif (sep == NULL || !sep->IsSet(0)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /leavechat <channel name>\");\n\t\tPrintSep(sep);\n\t\treturn;\n\t}\n\n\tchannel_name = sep->arg[0];\n\n\tif (!chat.IsInChannel(client, channel_name))\n\t\tclient->Message(CHANNEL_NARRATIVE, \"Unable to leave '%s': You are not in the channel.\", channel_name);\n\telse if (!chat.LeaveChannel(client, channel_name))\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"There was an internal error preventing you from leaving that channel MUAHAHA\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /leavechat <channel name>"
      ]
    },
    "298": {
      "symbol": "COMMAND_WHO_CHANNEL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6342,
      "body": "{ Command_WhoChannel(client, sep); break;}",
      "delegates": [
        {
          "function": "Command_WhoChannel",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12639,
          "body": "{\n\tconst char *channel_name;\n\n\tif (sep == NULL || !sep->IsSet(0)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /chatwho <channel name>\");\n\t\treturn;\n\t}\n\n\tchannel_name = sep->arg[0];\n\n\tif (!chat.ChannelExists(channel_name))\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"That channel does not exist!\");\n\telse\n\t\tchat.SendChannelUserList(client, channel_name);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /chatwho <channel name>"
      ]
    },
    "300": {
      "symbol": "COMMAND_RAIN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6343,
      "body": "{ Command_Rain(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Rain",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12765,
          "body": "{\n\tif (sep == NULL || !sep->IsSet(0) || !sep->IsNumber(0)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /rain <float>\");\n\t\treturn;\n\t}\n\n\tclient->Message(CHANNEL_COLOR_YELLOW,\"Setting rain to %.2f\", atof(sep->arg[0]));\n\tclient->GetCurrentZone()->SetRain(atof(sep->arg[0]));\n\tclient->GetCurrentZone()->SetCurrentWeather(atof(sep->arg[0]));\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /rain <float>"
      ]
    },
    "314": {
      "symbol": "COMMAND_WIND",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6344,
      "body": "{ Command_Wind(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Wind",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12776,
          "body": "{\n\tif (sep == NULL || !sep->IsSet(0) || !sep->IsNumber(0)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /wind <float>\");\n\t\treturn;\n\t}\n\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"Setting wind to %.2f\", atof(sep->arg[0]));\n\tclient->GetCurrentZone()->SetWind(atof(sep->arg[0]));\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /wind <float>"
      ]
    },
    "38": {
      "symbol": "COMMAND_WEATHER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6345,
      "body": "{ Command_Weather(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Weather",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12794,
          "body": "{\n\t                           \n\n\tif( sep && sep->arg[0] )\n\t{\n\t\tZoneServerSharedPtr zsZone = client->GetCurrentZone();\n\t\tconst char* value = sep->arg[0];\n\n\t\t                                      \n\t\tif( strncasecmp(value, \"details\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Weather Details for zone %s: \", zsZone->GetZoneName());\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"enabled: %i, allowed: %i, type: %i, frequency: %u\", zsZone->isWeatherEnabled(), zsZone->isWeatherAllowed(), zsZone->GetWeatherType(), zsZone->GetWeatherFrequency());\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"severity: %.2f = %.2f, current: %.2f\", zsZone->GetWeatherMinSeverity(), zsZone->GetWeatherMaxSeverity(), zsZone->GetCurrentWeather());\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"pattern: %i, chance: %i, amount: %.2f, offset: %.2f\", zsZone->GetWeatherPattern(), zsZone->GetWeatherChance(), zsZone->GetWeatherChangeAmount(), zsZone->GetWeatherDynamicOffset());\n\t\t}\n\t\telse if( strncasecmp(value, \"process\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tzsZone->SetWeatherLastChangedTime(Timer::GetUnixTimeStamp() - zsZone->GetWeatherFrequency());\n\t\t\tzsZone->ProcessWeather();\n\t\t}\n\t\telse if( strncasecmp(value, \"reset\", strlen(value)) == 0 ) \n\t\t{\n\t\t\tzsZone->SetWeatherType(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, WeatherType)->GetInt8());\n\t\t\tzsZone->SetWeatherFrequency(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, WeatherChangeFrequency)->GetInt32());\n\t\t\tzsZone->SetWeatherMinSeverity(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, MinWeatherSeverity)->GetFloat());\n\t\t\tzsZone->SetWeatherMaxSeverity(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, MaxWeatherSeverity)->GetFloat());\n\t\t\tzsZone->SetCurrentWeather(zsZone->GetWeatherMinSeverity());\n\t\t\tzsZone->SetWeatherPattern(1);\n\t\t\tzsZone->SetWeatherChance(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, WeatherChangeChance)->GetInt8());\n\t\t\tzsZone->SetWeatherChangeAmount(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, WeatherChangePerInterval)->GetFloat());\n\t\t\tzsZone->SetWeatherDynamicOffset(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Zone, WeatherDynamicMaxOffset)->GetFloat());\n\t\t\tzsZone->SetWeatherLastChangedTime(Timer::GetUnixTimeStamp() - zsZone->GetWeatherFrequency());\n\t\t\tzsZone->ProcessWeather();\n\t\t}\n\n\t\t                               \n\t\tif( sep->arg[1] )\n\t\t{\n\t\t\tif( strncasecmp(value, \"enable\", strlen(value)) == 0 && sep->IsNumber(1) ) \n\t\t\t\tzsZone->SetWeatherEnabled( ( atoi(sep->arg[1]) == 1 ) ? true : false );\n\t\t\telse if( strncasecmp(value, \"type\", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 3) ) \n\t\t\t\tzsZone->SetWeatherType(atoi(sep->arg[1]));\n\t\t\telse if( strncasecmp(value, \"frequency\", strlen(value)) == 0 && sep->IsNumber(1)) \n\t\t\t\tzsZone->SetWeatherFrequency( atoul(sep->arg[1]) );\n\t\t\telse if( strncasecmp(value, \"range\", strlen(value)) == 0 && sep->IsNumber(1) && sep->IsNumber(2) ) {\n\t\t\t\tzsZone->SetWeatherMinSeverity(atof(sep->arg[1]));\n\t\t\t\tzsZone->SetWeatherMaxSeverity(atof(sep->arg[2]));\n\t\t\t\tzsZone->SetRain(zsZone->GetWeatherMinSeverity());\n\t\t\t}\n\t\t\telse if( strncasecmp(value, \"current\", strlen(value)) == 0 && sep->IsNumber(1) ) {\n\t\t\t\tzsZone->SetCurrentWeather(atof(sep->arg[1]));\n\t\t\t\tzsZone->SetRain(zsZone->GetCurrentWeather());\n\t\t\t}\n\t\t\telse if( strncasecmp(value, \"pattern\", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 2) )\n\t\t\t\tzsZone->SetWeatherPattern( atoi(sep->arg[1]) );\n\t\t\telse if( strncasecmp(value, \"chance\", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 100) )\n\t\t\t\tzsZone->SetWeatherChance( atoi(sep->arg[1]) );\n\t\t\telse if( strncasecmp(value, \"amount\", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 1) )\n\t\t\t\tzsZone->SetWeatherChangeAmount( atof(sep->arg[1]) );\n\t\t\telse if( strncasecmp(value, \"offset\", strlen(value)) == 0 && sep->IsNumber(1) && (atoi(sep->arg[1]) >= 0 && atoi(sep->arg[1]) <= 1) )\n\t\t\t\tzsZone->SetWeatherDynamicOffset( atof(sep->arg[1]) );\n\t\t}\n\t}\n\telse\n\t{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /weather [command] [param]\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Commands: enable (0|1), type (0-3), frequency (sec), range|current (0.0 - 1.0)\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Commands: details, process, pattern (0|1), chance (%), amount (float), offset (float)\");\n\t\treturn;\n\t}\n\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /weather [command] [param]"
      ]
    },
    "86": {
      "symbol": "COMMAND_FROM_MERCHANT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6346,
      "body": "{ Command_SendMerchantWindow(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SendMerchantWindow",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12787,
          "body": "{\n\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\tif(spawn)\n\t\tclient->SendMerchantWindow(spawn, sell);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "301": {
      "symbol": "COMMAND_TO_MERCHANT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6347,
      "body": "{ Command_SendMerchantWindow(client, sep, true); break; }",
      "delegates": [
        {
          "function": "Command_SendMerchantWindow",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12787,
          "body": "{\n\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\tif(spawn)\n\t\tclient->SendMerchantWindow(spawn, sell);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "302": {
      "symbol": "COMMAND_SELECT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6348,
      "body": "{ Command_Select(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Select",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12869,
          "body": "{\n\tif (sep && sep->arg[0]) {\n\t\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\t\tint32 spawn_id = client->dialog_manager.getAcceptValue(\"select\");\n\t\tif(spawn && spawn_id == spawn->GetID()) {\n\t\t\tclient->GetCurrentZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_CASTED_ON, client->GetPlayer(), sep->arg[0] ? sep->argplus[0] : \"\");\n\t\t}\n\t\telse if (spawn && sep->arg[1] && strlen(sep->arg[1]) > 0)\n\t\t\tclient->GetCurrentZone()->CallSpawnScript(spawn, SPAWN_SCRIPT_CUSTOM, client->GetPlayer(), sep->arg[1]);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "303": {
      "symbol": "COMMAND_SMP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6349,
      "body": "{ Command_StationMarketPlace(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StationMarketPlace",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10103,
          "body": "{\n\tPrintSep(sep, \"COMMAND_SMP\");\n\t                                                                         \n\t                                                               \n\tif (sep && strcmp(sep->arg[0], \"gkw\") == 0) {\n\t\tPacketStruct* packet = configReader.getStruct(\"WS_MarketFundsUpdate\", client->GetVersion());\n\t\tif (packet) {\n\t\t\tpacket->setDataByName(\"account_id\", client->GetAccountID());\n\t\t\tpacket->setDataByName(\"character_id\", client->GetCharacterID());\n\t\t\tpacket->setDataByName(\"unknown1\", 1, 5);\n\t\t\tpacket->setDataByName(\"unknown1\", 26, 6);\n\t\t\tpacket->setDataByName(\"unknown2\", 0xFFFFFFFF);\n\t\t\tpacket->setDataByName(\"unknown3\", 248, 1);\n\t\t\tclient->QueuePacket(packet->serialize());\n\t\t}\n\t\tsafe_delete(packet);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "304": {
      "symbol": "COMMAND_CONSUME_FOOD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6350,
      "body": "{ Command_ConsumeFood(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ConsumeFood",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12888,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t{\n\t\tPlayer* player = client->GetPlayer();\n\t\tint32 slot = atoul(sep->arg[0]);\n\t\tif (client->GetVersion() <= 373) {\n\t\t\t                                                                              \n\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(slot);\n\t\t\tif(item && item->IsFood()) {\n\t\t\t\tif(client->CheckConsumptionAllowed(slot)) {\n\t\t\t\t\tif(item->IsFoodFood())\n\t\t\t\t\t\tslot = EQ2_FOOD_SLOT;\n\t\t\t\t\telse if(item->IsFoodDrink())\n\t\t\t\t\t\tslot = EQ2_DRINK_SLOT;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn;                  \n\t\t\t\t\t\n\t\t\t\t\tclient->ConsumeFoodDrink(item, slot);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t\tif (client->GetVersion() > 373 && client->GetVersion() <= 561) {\n\t\t\t\t\tslot += 2;\n\t\t\t\t}\n\t\t\t\tItem* item = player->GetEquipmentList()->GetItem(slot);\n\t\t\t\t\n\t\t\t\tif(client->CheckConsumptionAllowed(slot)) {\n\t\t\t\t\tclient->ConsumeFoodDrink(item, slot);\n\t\t\t\t}\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "538": {
      "symbol": "COMMAND_SET_CONSUME_FOOD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6351,
      "body": "{ Command_ConsumeFood(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ConsumeFood",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12888,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0))\n\t{\n\t\tPlayer* player = client->GetPlayer();\n\t\tint32 slot = atoul(sep->arg[0]);\n\t\tif (client->GetVersion() <= 373) {\n\t\t\t                                                                              \n\t\t\tItem* item = client->GetPlayer()->item_list.GetItemFromIndex(slot);\n\t\t\tif(item && item->IsFood()) {\n\t\t\t\tif(client->CheckConsumptionAllowed(slot)) {\n\t\t\t\t\tif(item->IsFoodFood())\n\t\t\t\t\t\tslot = EQ2_FOOD_SLOT;\n\t\t\t\t\telse if(item->IsFoodDrink())\n\t\t\t\t\t\tslot = EQ2_DRINK_SLOT;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn;                  \n\t\t\t\t\t\n\t\t\t\t\tclient->ConsumeFoodDrink(item, slot);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t\tif (client->GetVersion() > 373 && client->GetVersion() <= 561) {\n\t\t\t\t\tslot += 2;\n\t\t\t\t}\n\t\t\t\tItem* item = player->GetEquipmentList()->GetItem(slot);\n\t\t\t\t\n\t\t\t\tif(client->CheckConsumptionAllowed(slot)) {\n\t\t\t\t\tclient->ConsumeFoodDrink(item, slot);\n\t\t\t\t}\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "305": {
      "symbol": "COMMAND_AQUAMAN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6352,
      "body": "{ Command_Aquaman(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Aquaman",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12922,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) {\n\t\tif (atoi(sep->arg[0]) == 1) {\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_vision(4);\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_breathe_underwater(1);\n\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Maybe you ought to stick to the shallow end until you know how to swim.\");\n\t\t}\n\t\telse {\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_vision(0);\n\t\t\tclient->GetPlayer()->GetInfoStruct()->set_breathe_underwater(0);\n\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Aquaman mode turned off.\");\n\t\t}\n\t}\n\telse\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /aquaman [0|1]\");\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /aquaman [0|1]"
      ]
    },
    "306": {
      "symbol": "COMMAND_ATTUNE_INV",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6353,
      "body": "{ Command_Attune_Inv(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Attune_Inv",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 12980,
          "body": "{\n\tPrintSep(sep, \"Command_Attune_Inv\");\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) {\n\t\t                                              \n\t\tint16 index = atoi(sep->arg[0]);\n\t\t                                                                                             \n\t\tif (client->GetPlayer()->item_list.indexed_items.count(index) == 0) {\n\t\t\tLogWrite(ITEM__DEBUG, 0, \"Items\", \"%s has no item with an index of %i\", client->GetPlayer()->GetName(), index);\n\t\t\treturn;\n\t\t}\n\n\t\t               \n\t\tItem* item = client->GetPlayer()->item_list.indexed_items[index];\n\t\tif(item) {\n\t\t\t                                                                               \n\t\t\tif (!item->CheckFlag(ATTUNEABLE)) {\n\t\t\t\tLogWrite(ITEM__DEBUG, 0, \"Items\", \"attune_inv called for an item that is not attunable (%s)\", item->name.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t                            \n\t\t\titem->generic_info.item_flags -= ATTUNEABLE;\n\t\t\t                       \n\t\t\titem->generic_info.item_flags += ATTUNED;\n\t\t\t                            \n\t\t\titem->save_needed = true;\n\n\t\t\tclient->QueuePacket(item->serialize(client->GetVersion(), false, client->GetPlayer()));\n\n\t\t\tvector<EQ2Packet*> packets = client->GetPlayer()->EquipItem(index, client->GetVersion(), 0, -1);                     \n\t\t\tEQ2Packet* outapp = 0;\n\n\t\t\tfor (int32 i=0;i<packets.size();i++) {\n\t\t\t\toutapp = packets[i];\n\t\t\t\tif(outapp)\n\t\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t}\n\t\t\t\n\t\t\tclient->GetPlayer()->CalculateBonuses();\n\t\t}\n\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "307": {
      "symbol": "COMMAND_PLAYER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6354,
      "body": "{ Command_Player(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Player",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13043,
          "body": "{\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \" -- /player syntax --\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/player coins\");\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        " -- /player syntax --",
        "/player coins"
      ]
    },
    "308": {
      "symbol": "COMMAND_PLAYER_COINS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6355,
      "body": "{ Command_Player_Coins(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Player_Coins",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13048,
          "body": "{\n\t                       \n\t                            \n\tPlayer* player = client->GetPlayer();\n\tClient* targetClient = client;\n\tif (player->HasTarget() && player->GetTarget()->IsPlayer()) {\n\t\tplayer = (Player*)player->GetTarget();\n\t\ttargetClient = player->GetClient();\n\t}\n\n\tif (sep && sep->arg[0] && sep->arg[1]) {\n\t\tconst char* action = sep->arg[0];\n\t\tint64 value = 0;\n\n\t\tif (strncasecmp(action, \"add\", strlen(action)) == 0) {\n\t\t\tif (sep->IsNumber(1)) {\n\t\t\t\tvalue = atoi64(sep->arg[1]);\n\t\t\t\tplayer->AddCoins(value);\n\t\t\t\t\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give yourself %llu coin%s\", value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give %s %llu coin%s\", player->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s gave you %llu coin%s\", client->GetPlayer()->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse if (sep->arg[2] && sep->IsNumber(2)) {\n\t\t\t\tconst char* type = sep->arg[1];\n\t\t\t\tif (strncasecmp(type, \"copper\", strlen(type)) == 0) {\n\t\t\t\t\tvalue = atoi64(sep->arg[2]);\n\t\t\t\t}\n\t\t\t\telse if (strncasecmp(type, \"silver\", strlen(type)) == 0) {\n\t\t\t\t\tvalue = atoi64(sep->arg[2]) * 100;\n\t\t\t\t}\n\t\t\t\telse if (strncasecmp(type, \"gold\", strlen(type)) == 0) {\n\t\t\t\t\tvalue = atoi64(sep->arg[2]) * 10000;\n\t\t\t\t}\n\t\t\t\telse if (strncasecmp(type, \"plat\", strlen(type)) == 0) {\n\t\t\t\t\tvalue = atoi64(sep->arg[2]) * 1000000;\n\t\t\t\t}\n\t\t\t\tplayer->AddCoins(value);\n\t\t\t\t\n\t\t\t\tif (client->GetPlayer() == player)\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give yourself %llu coin%s\", value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"You give %s %llu coin%s\", player->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\tif(targetClient) {\n\t\t\t\t\t\ttargetClient->Message(CHANNEL_COLOR_YELLOW, \"%s gave you %llu coin%s\", client->GetPlayer()->GetName(), value, (value > 1 ? \"s\" : \"\"));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \" -- /player coins syntax --\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/player coins add [value] - adds the given number of coins to the player\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/player coins add copper [value] - adds the given amount of copper to the player\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/player coins add silver [value] - adds the given amount of silver to the player\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/player coins add gold [value] - adds the given amount of gold to the player\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/player coins add plat [value] - adds the given amount of platinum to the player\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        " -- /player coins syntax --",
        "/player coins add [value] - adds the given number of coins to the player",
        "/player coins add copper [value] - adds the given amount of copper to the player",
        "/player coins add silver [value] - adds the given amount of silver to the player",
        "/player coins add gold [value] - adds the given amount of gold to the player",
        "/player coins add plat [value] - adds the given amount of platinum to the player"
      ]
    },
    "309": {
      "symbol": "COMMAND_RESET_ZONE_TIMER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6356,
      "body": "{ Command_Reset_Zone_Timer(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Reset_Zone_Timer",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13024,
          "body": "{\n\tPrintSep(sep, \"Command_Reset_Zone_Timer\");\n\t                                               \n                                   \n                                                                                              \n             \n                                                           \n\n                                            \n                                                                                                  \n                         \n\n                                                                           \n                                                                                                     \n                                    \n   \n    \n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "310": {
      "symbol": "COMMAND_ACHIEVEMENT_ADD",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6357,
      "body": "{ Command_AchievementAdd(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_AchievementAdd",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13115,
          "body": "{\n\tPrintSep(sep, \"ACHIEVEMENT_ADD\");\n\tif (sep && sep->IsSet(0)) {\n\t\tint32 spell_id = atoul(sep->arg[1]);\n\t\tint8 spell_tier = 0;\n\t\tspell_tier = client->GetPlayer()->GetSpellTier(spell_id);\n\t\tAltAdvanceData* data = master_aa_list.GetAltAdvancement(spell_id);\n\t\t                         \n\t\tif (spell_tier >= data->maxRank) {\n\t\t\treturn;\n\t\t}\n\t\tif (!spell_tier) {\n\t\t\tspell_tier = 1;\n\t\t}\n\t\tif (!client->GetPlayer()->HasSpell(spell_id, 0, true))\n\t\t{\n\t\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier);\n\t\t\tclient->GetPlayer()->AddSpellBookEntry(spell_id, 1, client->GetPlayer()->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\tclient->GetPlayer()->UnlockSpell(spell);\n\t\t\tclient->SendSpellUpdate(spell);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier + 1);\n\t\t\tsint32 old_slot = client->GetPlayer()->GetSpellSlot(spell->GetSpellID());\n\t\t\tclient->GetPlayer()->RemoveSpellBookEntry(spell->GetSpellID());\n\t\t\tclient->GetPlayer()->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\tclient->GetPlayer()->UnlockSpell(spell);\n\t\t\tclient->SendSpellUpdate(spell);\n\t\t}\n\n\n\t\t                  \n\t\tif (!spell_tier)\n\t\t\tspell_tier = 1;\n\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier);\n\t\tif (spell) {\n\t\t\tclient->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer());\n\t\t}\n\t}\n\telse {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage:  /useability {spell_id} [spell_tier]\");\n\t}\n\tif(client->GetVersion() >= 843)\n\t\tmaster_aa_list.DisplayAA(client, 0, 0);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /useability {spell_id} [spell_tier]"
      ]
    },
    "311": {
      "symbol": "COMMAND_EDITOR",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6358,
      "body": "{ Command_Editor(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Editor",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13162,
          "body": "{\n\tPacketStruct* packet = configReader.getStruct(\"WS_ChoiceWindow\", client->GetVersion());\n\tif (packet) {\n\t\tstring url = string(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_World, EditorURL)->GetString());\n\n\t\tif (rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_World, EditorOfficialServer)->GetBool()) {\n\t\t\tchar command[255];\n\t\t\turl = \"browser \" + url;\n\t\t\tint32 spawn_id = 0;\n\t\t\tint32 zone_id = 0;\n\t\t\tstring type;\n\n\t\t\tif (client->GetCurrentZone())\n\t\t\t\tzone_id = client->GetCurrentZone()->GetZoneID();\n\n\t\t\tif (client->GetPlayer()->GetTarget()) {\n\t\t\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\t\t\tif (target->IsWidget())\n\t\t\t\t\ttype = \"widgets\";\n\t\t\t\telse if (target->IsSign())\n\t\t\t\t\ttype = \"signs\";\n\t\t\t\telse if (target->IsObject())\n\t\t\t\t\ttype = \"objects\";\n\t\t\t\telse if (target->IsNPC())\n\t\t\t\t\ttype = \"npcs\";\n\t\t\t\telse if (target->IsGroundSpawn())\n\t\t\t\t\ttype = \"ground\";\n\t\t\t\telse\n\t\t\t\t\ttype = \"spawn\";\n\n\t\t\t\tspawn_id = client->GetPlayer()->GetTarget()->GetDatabaseID();\n\t\t\t}\n\n\t\t\tsnprintf(command, sizeof(command), url.c_str(), zone_id, type.c_str(), spawn_id);\n\n\t\t\tpacket->setDataByName(\"accept_command\", command);\n\t\t}\n\t\telse if (rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_World, EditorIncludeID)->GetBool()) {\n\t\t\tchar command[255];\n\t\t\turl = \"browser \" + url;\n\t\t\tif (client->GetPlayer()->GetTarget())\n\t\t\t\tsnprintf(command, sizeof(command), url.c_str(), client->GetPlayer()->GetTarget()->GetDatabaseID());\n\n\t\t\tpacket->setDataByName(\"accept_command\", command);\n\t\t}\n\t\telse {\n\t\t\tstring command = \"browser \" + url;\n\t\t\tpacket->setDataByName(\"accept_command\", command.c_str());\n\t\t}\n\n\t\tpacket->setDataByName(\"text\", \"Open the web editor?\");\n\t\tpacket->setDataByName(\"accept_text\", \"Open\");\n\t\t\n\t\tpacket->setDataByName(\"cancel_text\", \"Cancel\");\n\t\t                                                                                                          \n\t\tpacket->setDataByName(\"unknown2\", 50);\n\t\tpacket->setDataByName(\"unknown4\", 1);\n\n\t\tclient->QueuePacket(packet->serialize());\n\t\tsafe_delete(packet);\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "312": {
      "symbol": "COMMAND_ACCEPT_RESURRECTION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6359,
      "body": "{ Command_AcceptResurrection(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_AcceptResurrection",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13225,
          "body": "{\n\tif(!client || !sep || client->GetPlayer()->GetID() != atoul(sep->arg[0]))\n\t\treturn;\n\tclient->GetResurrectMutex()->writelock(__FUNCTION__, __LINE__);\n\tif(client->GetCurrentRez()->active)\n\t\tclient->AcceptResurrection();\n\tclient->GetResurrectMutex()->releasewritelock(__FUNCTION__, __LINE__);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "313": {
      "symbol": "COMMAND_DECLINE_RESURRECTION",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6360,
      "body": "{ Command_DeclineResurrection(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_DeclineResurrection",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13234,
          "body": "{\n\tif(!client || !sep || client->GetPlayer()->GetID() != atoul(sep->arg[0]))\n\t\treturn;\n\tclient->GetResurrectMutex()->writelock(__FUNCTION__, __LINE__);\n\tif(client->GetCurrentRez()->active)\n\t\tclient->GetCurrentRez()->should_delete = true;\n\tclient->GetResurrectMutex()->releasewritelock(__FUNCTION__, __LINE__);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "84": {
      "symbol": "COMMAND_TEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6361,
      "body": "{ Command_Test(client, command_parms); break; }",
      "delegates": [
        {
          "function": "Command_Test",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 11371,
          "body": "{\n\tSeperator* sep = new Seperator(command_parms->data.c_str(), ' ', 50, 500, true);\n\tif (sep->IsSet(0)) {\n\t\tif (atoi(sep->arg[0]) == 1) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_SpellGainedMsg\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"spell_type\", 2);\n\t\t\t\tpacket2->setDataByName(\"spell_id\", 8308);\n\t\t\t\tpacket2->setDataByName(\"spell_name\", \"Sprint\");\n\t\t\t\tpacket2->setDataByName(\"add_silently\", 0);\n\t\t\t\tpacket2->setDataByName(\"tier\", 1);\n\t\t\t\tpacket2->setDataByName(\"blah1\", 1);\n\t\t\t\tpacket2->setDataByName(\"blah2\", 1);\n\t\t\t\tEQ2Packet* outapp = packet2->serialize();\n\t\t\t\tDumpPacket(outapp);\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 2) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_GuildUpdate\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"guild_name\", \"Test\");\n\t\t\t\tpacket2->setDataByName(\"guild_motd\", \"Test MOTD\");\n\t\t\t\tpacket2->setDataByName(\"guild_id\", 1234);\n\t\t\t\tpacket2->setDataByName(\"guild_level\", 1);\n\t\t\t\tpacket2->setDataByName(\"unknown\", 2);\n\t\t\t\tpacket2->setDataByName(\"unknown2\", 3);\n\t\t\t\tpacket2->setDataByName(\"exp_current\", 1);\n\t\t\t\tpacket2->setDataByName(\"exp_to_next_level\", 4);\n\t\t\t\tEQ2Packet* outapp = packet2->serialize();\n\t\t\t\tDumpPacket(outapp);\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 3) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_JoinGuildNotify\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"guild_id\", 1234);\n\t\t\t\tpacket2->setDataByName(\"character_id\", 1);\n\t\t\t\tpacket2->setDataByName(\"account_id\", 2);\n\t\t\t\tpacket2->setDataByName(\"guild_level\", 1);\n\t\t\t\tpacket2->setDataByName(\"name\", \"Test\");\n\t\t\t\tpacket2->setDataByName(\"unknown2\", 0);\n\t\t\t\tpacket2->setDataByName(\"unknown3\", 1);\n\t\t\t\tpacket2->setDataByName(\"adventure_class\", 6);\n\t\t\t\tpacket2->setDataByName(\"adventure_level\", 7);\n\t\t\t\tpacket2->setDataByName(\"tradeskill_class\", 4);\n\t\t\t\tpacket2->setDataByName(\"tradeskill_level\", 5);\n\t\t\t\tpacket2->setDataByName(\"rank\", 0);\n\t\t\t\tpacket2->setDataByName(\"member_flags\", 2);\n\t\t\t\tpacket2->setDataByName(\"join_date\", 1591112273);\n\t\t\t\tpacket2->setDataByName(\"guild_status\", 2);\n\t\t\t\tpacket2->setDataByName(\"last_login\", 1591132273);\n\t\t\t\tpacket2->setDataByName(\"recruiter_id\", 1);\n\t\t\t\tpacket2->setDataByName(\"points\", 2345);\n\t\t\t\tpacket2->setDataByName(\"note\", \"note\");\n\t\t\t\tpacket2->setMediumStringByName(\"officer_note\", \"O note\");\n\t\t\t\tpacket2->setMediumStringByName(\"zone\", \"Blah\");\n\n\t\t\t\tEQ2Packet* outapp = packet2->serialize();\n\t\t\t\tDumpPacket(outapp);\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 5) {\n\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 6) {\n\t\t\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\t\t\tif (!spawn)\n\t\t\t\tspawn = client->GetPlayer();\n\t\t\telse if (spawn->IsEntity())\n\t\t\t\t((Entity*)spawn)->SetSpeed(atof(sep->arg[4]));\n\t\t\tspawn->RunToLocation(atof(sep->arg[1]), atof(sep->arg[2]), atof(sep->arg[3]));\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 7) {\n\t\t\tint32 id = 0;\n\t\t\tSpawn* spawn = client->GetCurrentZone()->GetSpawn(7720001);\n\t\t\tif (spawn) {\n\t\t\t\tspawn->SetX(client->GetPlayer()->GetX() + .5, false);\n\t\t\t\tspawn->SetY(client->GetPlayer()->GetY(), false);\n\t\t\t\tspawn->SetZ(client->GetPlayer()->GetZ() + .5, false);\n\t\t\t\tfloat heading = client->GetPlayer()->GetHeading() + 180;\n\t\t\t\tif (heading > 360)\n\t\t\t\t\theading -= 360;\n\t\t\t\tspawn->SetLevel(5);\n\t\t\t\tspawn->SetAdventureClass(4);\n\t\t\t\tspawn->SetHeading(heading, false);\n\t\t\t\tspawn->SetSpawnOrigX(spawn->GetX());\n\t\t\t\tspawn->SetSpawnOrigY(spawn->GetY());\n\t\t\t\tspawn->SetSpawnOrigZ(spawn->GetZ());\n\t\t\t\tspawn->SetSpawnOrigHeading(spawn->GetHeading());\n\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\tspawn->appearance.targetable = 1;\n\t\t\t\tif (spawn->IsNPC() && spawn->GetTotalHP() == 0) {\n\t\t\t\t\tspawn->SetTotalHP(spawn->GetLevel() * 15);\n\t\t\t\t\tspawn->SetHP(spawn->GetTotalHP());\n\t\t\t\t}\n\t\t\t\tif (spawn->GetTotalPower() == 0) {\n\t\t\t\t\tspawn->SetTotalPower(spawn->GetLevel() * 15);\n\t\t\t\t\tspawn->SetPower(spawn->GetTotalPower());\n\t\t\t\t}\n\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\tsnprintf(spawn->appearance.name, sizeof(spawn->appearance.name), \"Offset %i\", offset);\n\t\t\t\tauto ghost_send_lock = client->GetPlayer()->LockSpawnGhostSends();\n\t\t\t\tEQ2Packet* ret = spawn->spawn_serialize(client->GetPlayer(), client->GetVersion(), offset, value1);\n\t\t\t\tif (ret) {\n\t\t\t\t\tconst int32 entity_id = client->GetPlayer()->GetIDWithPlayerSpawn(spawn);\n\t\t\t\t\tDumpPacket(ret);\n\t\t\t\t\tif (client->QueuePacket(ret))\n\t\t\t\t\t\tclient->GetPlayer()->CommitSpawnCreate(entity_id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 8) {\n\t\t\tint32 id = atoi(sep->arg[1]);\n\t\t\tSpawn* spawn = client->GetCurrentZone()->GetSpawn(id);\n\t\t\tif (spawn) {\n\t\t\t\tspawn->SetX(client->GetPlayer()->GetX() + .5, false);\n\t\t\t\tspawn->SetY(client->GetPlayer()->GetY(), false);\n\t\t\t\tspawn->SetZ(client->GetPlayer()->GetZ() + .5, false);\n\t\t\t\tfloat heading = client->GetPlayer()->GetHeading() + 180;\n\t\t\t\tif (heading > 360)\n\t\t\t\t\theading -= 360;\n\t\t\t\tspawn->SetLevel(5);\n\t\t\t\tspawn->SetAdventureClass(4);\n\t\t\t\tspawn->SetHeading(heading, false);\n\t\t\t\tspawn->SetSpawnOrigX(spawn->GetX());\n\t\t\t\tspawn->SetSpawnOrigY(spawn->GetY());\n\t\t\t\tspawn->SetSpawnOrigZ(spawn->GetZ());\n\t\t\t\tspawn->SetSpawnOrigHeading(spawn->GetHeading());\n\t\t\t\tspawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\tspawn->appearance.targetable = 1;\n\t\t\t\tif (spawn->IsNPC() && spawn->GetTotalHP() == 0) {\n\t\t\t\t\tspawn->SetTotalHP(spawn->GetLevel() * 15);\n\t\t\t\t\tspawn->SetHP(spawn->GetTotalHP());\n\t\t\t\t}\n\t\t\t\tif (spawn->GetTotalPower() == 0) {\n\t\t\t\t\tspawn->SetTotalPower(spawn->GetLevel() * 15);\n\t\t\t\t\tspawn->SetPower(spawn->GetTotalPower());\n\t\t\t\t}\n\t\t\t\tint16 offset = atoi(sep->arg[2]);\n\t\t\t\tint16 offset2 = atoi(sep->arg[3]);\n\t\t\t\tint32 value1 = atol(sep->arg[4]);\n\t\t\t\tint16 offset3 = 0;\n\t\t\t\tint16 offset4 = 0;\n\t\t\t\tint32 value2 = 0;\n\t\t\t\tif (sep->IsSet(7)) {\n\t\t\t\t\toffset3 = atoi(sep->arg[5]);\n\t\t\t\t\toffset4 = atoi(sep->arg[6]);\n\t\t\t\t\tvalue2 = atol(sep->arg[7]);\n\t\t\t\t}\n\t\t\t\tsnprintf(spawn->appearance.name, sizeof(spawn->appearance.name), \"Offset %i to %i\", offset, offset2);\n\t\t\t\tspawn->AddPrimaryEntityCommand(\"attack\", 10000, \"attack\",\"\", 0, 0);\n\t\t\t\tauto ghost_send_lock = client->GetPlayer()->LockSpawnGhostSends();\n\t\t\t\tEQ2Packet* ret = spawn->spawn_serialize(client->GetPlayer(), client->GetVersion(), offset, value1, offset2, offset3, offset4, value2);\n\t\t\t\tif (ret) {\n\t\t\t\t\tconst int32 entity_id = client->GetPlayer()->GetIDWithPlayerSpawn(spawn);\n\t\t\t\t\tDumpPacket(ret);\n\t\t\t\t\tif (client->QueuePacket(ret))\n\t\t\t\t\t\tclient->GetPlayer()->CommitSpawnCreate(entity_id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 9) {\t\t\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_DeathWindow\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setArrayLengthByName(\"location_count\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"location_ida\", 1234);\n\t\t\t\tpacket2->setArrayDataByName(\"unknown2a\", 3);\n\t\t\t\tpacket2->setArrayDataByName(\"zone_name\", \"Queen's Colony\");\n\t\t\t\tpacket2->setArrayDataByName(\"location_name\", \"Myrrin's Tower\");\n\t\t\t\tpacket2->setArrayDataByName(\"distance\", 134);\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint8 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint8 len = strlen(sep->arg[2]);\n\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 1);\n\t\t\t\t\t\tptr2 += 1;\n\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 10) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_QuestJournalUpdate\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setArrayLengthByName(\"num_quests\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"active\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"name\", \"Tasks aboard the Far Journey\");\n\t\t\t\tpacket2->setArrayDataByName(\"quest_type\", \"Hallmark\");\n\t\t\t\tpacket2->setArrayDataByName(\"quest_zone\", \"Hallmark\");\n\t\t\t\tpacket2->setArrayDataByName(\"journal_updated\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"quest_id\", 524);\n\t\t\t\tpacket2->setArrayDataByName(\"day\", 19);\n\t\t\t\tpacket2->setArrayDataByName(\"month\", 6);\n\t\t\t\tpacket2->setArrayDataByName(\"year\", 20);\n\t\t\t\tpacket2->setArrayDataByName(\"level\", 2);\n\t\t\t\tpacket2->setArrayDataByName(\"encounter_level\", 4);\n\t\t\t\tpacket2->setArrayDataByName(\"difficulty\", 3);\n\t\t\t\tpacket2->setArrayDataByName(\"visible\", 1);\n\t\t\t\tpacket2->setDataByName(\"visible_quest_id\", 524);\n\t\t\t\tpacket2->setDataByName(\"player_crc\", 2900677088);\n\t\t\t\tpacket2->setDataByName(\"player_name\", \"LethalEncounter\");\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint8 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint8 len = strlen(sep->arg[2]);\n\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 1);\n\t\t\t\t\t\tptr2 += 1;\n\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 11) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_QuestJournalReply\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"quest_id\", 524);\n\t\t\t\tpacket2->setDataByName(\"player_crc\", 2900677088);\n\t\t\t\tpacket2->setDataByName(\"name\", \"Tasks aboard the Far Journey\");\n\t\t\t\tpacket2->setDataByName(\"description\", \"I completed all the tasks assigned to me by Captain Varlos aboard the Far Journey\");\n\t\t\t\tpacket2->setDataByName(\"type\", \"Hallmark\");\n\t\t\t\tpacket2->setDataByName(\"complete_header\", \"To complete this quest, I must do the following tasks:\");\n\t\t\t\tpacket2->setDataByName(\"day\", 19);\n\t\t\t\tpacket2->setDataByName(\"month\", 6);\n\t\t\t\tpacket2->setDataByName(\"year\", 20);\n\t\t\t\tpacket2->setDataByName(\"level\", 1);\n\t\t\t\tpacket2->setDataByName(\"encounter_level\", 1);\n\t\t\t\tpacket2->setDataByName(\"difficulty\", 1);\n\t\t\t\tpacket2->setDataByName(\"time_obtained\", Timer::GetUnixTimeStamp());\n\t\t\t\t                                                                   \n\t\t\t\t                                                \n\t\t\t\t                                             \n\t\t\t\tpacket2->setArrayLengthByName(\"task_groups_completed\", 9);\n\t\t\t\tpacket2->setArrayLengthByName(\"num_task_groups\", 10);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I spoke to Waulon as Captain Varlos had asked of me.\");\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I found Waulon's hat in one of the boxes.\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I returned Waulon's hat.\", 2);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I have spoken to Ingrid.\", 3);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I purchased a Shard of Luclin.\", 4);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I gave the Shard of Luclin to Ingrid.\", 5);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I have spoken to Captain Varlos.\", 6);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I killed the rats that Captain Varlos requested.\", 7);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"Captain Varlos has ordered you to kill the escaped goblin.\", 8);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I killed the escaped goblin.\", 9);\n\t\t\t\t                                                   \n                                                                             \n                                                       \n                                                           \n                                                       \n                                               \n      \n\t\t\t\tpacket2->setArrayDataByName(\"waypoint\", 0xFFFFFFFF);\n\t\t\t\tpacket2->setDataByName(\"journal_updated\", 1);\n\t\t\t\tpacket2->setDataByName(\"bullets\", 1);\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint16 len = strlen(sep->arg[2]);\n\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 2);\n\t\t\t\t\t\tptr2 += 2;\n\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 12) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_QuestJournalReply\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"quest_id\", 5725);\n\t\t\t\tpacket2->setDataByName(\"player_crc\", 2900677088);\n\t\t\t\tpacket2->setDataByName(\"name\", \"Archetype Selection\");\n\t\t\t\tpacket2->setDataByName(\"description\", \"I have reported my profession to Garven Tralk.\");\n\t\t\t\tpacket2->setDataByName(\"type\", \"Hallmark\");\n\t\t\t\tpacket2->setDataByName(\"complete_header\", \"To complete this quest, I must do the following tasks:\");\n\t\t\t\tpacket2->setDataByName(\"day\", 19);\n\t\t\t\tpacket2->setDataByName(\"month\", 6);\n\t\t\t\tpacket2->setDataByName(\"year\", 20);\n\t\t\t\tpacket2->setDataByName(\"level\", 2);\n\t\t\t\tpacket2->setDataByName(\"encounter_level\", 4);\n\t\t\t\tpacket2->setDataByName(\"difficulty\", 3);\n\t\t\t\tpacket2->setDataByName(\"time_obtained\", Timer::GetUnixTimeStamp());\n\t\t\t\tpacket2->setDataByName(\"timer_start\", Timer::GetUnixTimeStamp());\n\t\t\t\tpacket2->setDataByName(\"timer_duration\", 300);\n\t\t\t\tpacket2->setDataByName(\"timer_running\", 1);\n\t\t\t\tpacket2->setArrayLengthByName(\"task_groups_completed\", 0);\n\t\t\t\tpacket2->setArrayLengthByName(\"num_task_groups\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"task_group\", \"I need to talk to Garven Tralk\");\n\t\t\t\tpacket2->setSubArrayLengthByName(\"num_tasks\", 1);\n\t\t\t\tpacket2->setSubArrayDataByName(\"task\", \"I need to talk to Garven Tralk\");\n\t\t\t\tpacket2->setSubArrayLengthByName(\"num_updates\", 1);\n\t\t\t\tpacket2->setSubArrayDataByName(\"update_currentval\", 0);\n\t\t\t\tpacket2->setSubArrayDataByName(\"update_maxval\", 1);\n\t\t\t\tpacket2->setSubArrayDataByName(\"icon\", 11);\n\n\t\t\t\tpacket2->setArrayDataByName(\"waypoint\", 0xFFFFFFFF);\n\t\t\t\tpacket2->setDataByName(\"journal_updated\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"unknown1\", 255);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"reward\", \"Quest Reward!\");\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"unknown2\", 0x3f);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"coin\", 150);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"status_points\", 5);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"exp_bonus\", 10);\n\t\t\t\tpacket2->setSubstructArrayLengthByName(\"reward_data\", \"num_rewards\", 1);\n\t\t\t\tpacket2->setSubstructArrayDataByName(\"reward_data\", \"reward_id\", 123);\n\t\t\t\tItem* item = master_item_list.GetItem(152755);\n\t\t\t\tpacket2->setArrayDataByName(\"reward_id\", item->details.item_id);\n\t\t\t\tpacket2->setItemArrayDataByName(\"item\", item, client->GetPlayer(), 0, 0, client->GetClientItemPacketOffset());\n\t\t\t\t                                                            \n                                                                                  \n                                                          \n                                                       \n                                                           \n                                                                    \n                                                            \n                                                               \n                                                        \n                                                              \n                                                         \n                                                                      \n                                                                      \n                                                            \n                                                                     \n                                                                  \n                                                                         \n                                                                           \n                                                                     \n                                                                           \n                                                                           \n                                                           \n                                                                \n                                                                \n                                                                               \n\t\t\t\t                         \n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint16 len = strlen(sep->arg[2]);\n\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 2);\n\t\t\t\t\t\tptr2 += 2;\n\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 13) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_OnScreenMsg\", client->GetVersion());\n\t\t\tif (packet2 && sep->IsSet(7)) {\n\t\t\t\tpacket2->setDataByName(\"unknown\", atoi(sep->arg[1]));\n\t\t\t\tchar blah[128];\n\t\t\t\tsnprintf(blah, sizeof(blah), \"\\\\#6EFF6EYou get better at \\12\\\\#C8FFC8%s\\\\#6EFF6E! (7/15)\", sep->arg[2]);\n\t\t\t\tpacket2->setDataByName(\"text\", blah);\n\t\t\t\tpacket2->setDataByName(\"message_type\", sep->arg[3]);\n\t\t\t\tpacket2->setDataByName(\"size\", atof(sep->arg[4]));\n\t\t\t\tpacket2->setDataByName(\"red\", atoi(sep->arg[5]));\n\t\t\t\tpacket2->setDataByName(\"green\", atoi(sep->arg[6]));\n\t\t\t\tpacket2->setDataByName(\"blue\", atoi(sep->arg[7]));\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 14) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_InstructionWindow\", client->GetVersion());\n\t\t\tif (packet2 && sep->IsSet(3)) {\n\t\t\t\tpacket2->setDataByName(\"open_seconds_min\", atof(sep->arg[1]));\n\t\t\t\tpacket2->setDataByName(\"open_seconds_max\", atof(sep->arg[2]));\n\t\t\t\tpacket2->setDataByName(\"voice_sync\", atoi(sep->arg[3]));\n\t\t\t\tpacket2->setDataByName(\"text\", \"Welcome to Norrath, the world of EverQuest II. Left click on the help button at any time for more detailed help and information.\");\n\t\t\t\tpacket2->setDataByName(\"voice\", \"voiceover/english/narrator/boat_06p_tutorial02/narrator_001_63779ca0.mp3\");\n\t\t\t\tpacket2->setArrayLengthByName(\"num_goals\", 1);\n\t\t\t\t                                            \n\t\t\t\tpacket2->setSubArrayLengthByName(\"num_tasks\", 1);\n\t\t\t\tpacket2->setSubArrayDataByName(\"task_text\", \"continue\");\n\t\t\t\tpacket2->setDataByName(\"complete_sound\", \"click\");\n\t\t\t\tpacket2->setDataByName(\"signal\", \"introduction\");\n\t\t\t\tpacket2->setDataByName(\"voice_key1\", 0xcda65173);\n\t\t\t\tpacket2->setDataByName(\"voice_key2\", 0x984bfc6d);\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t\tpacket2 = configReader.getStruct(\"WS_ShowWindow\", client->GetVersion());\n\t\t\t\tpacket2->setDataByName(\"window\", \"MainHUD.StartMenu\");\n\t\t\t\tpacket2->setDataByName(\"show\", 1);\n\t\t\t\tapp = packet2->serialize();\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\n\t\t\t\tpacket2 = configReader.getStruct(\"WS_FlashWindow\", client->GetVersion());\n\t\t\t\tpacket2->setDataByName(\"window\", \"MainHUD.StartMenu.help\");\n\t\t\t\tpacket2->setDataByName(\"flash_seconds\", 10);\n\t\t\t\tapp = packet2->serialize();\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 15) {\n\t\t\tif (client->GetVersion() >= 546) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Loot test 15 uses the scalar loot row only.\");\n\t\t\t}\n\t\t\telse {\n\t\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_UpdateLoot\", client->GetVersion());\n\t\t\t\tif (packet2) {\n\t\t\t\t\tpacket2->setArrayLengthByName(\"loot_count\", 1);\n\t\t\t\t\tpacket2->setArrayDataByName(\"name\", \"Test\");\n\t\t\t\t\tpacket2->setArrayDataByName(\"item_id\", 1234);\n\t\t\t\t\tpacket2->setArrayDataByName(\"count\", 1);\n\t\t\t\t\tpacket2->setArrayDataByName(\"icon\", 258);\n\t\t\t\t\tpacket2->setArrayDataByName(\"ability_id\", 0xFFFFFFFF);\n\t\t\t\t\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\t\t\t\t\tif (spawn)\n\t\t\t\t\t\tpacket2->setDataByName(\"object_id\", client->GetPlayer()->GetIDWithPlayerSpawn(spawn));\n\t\t\t\t\tpacket2->setDataByName(\"display\", 1);\n\t\t\t\t\tpacket2->setDataByName(\"loot_type\", 1);\n\t\t\t\t\tpacket2->setDataByName(\"lotto_timeout\", 60);\n\t\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\t\tDumpPacket(app);\n\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 16 && sep->IsNumber(1)) {\n\t\t\tchar blah[32];\n\t\t\tsnprintf(blah, sizeof(blah), \"Testing: %i\", atoi(sep->arg[1]));\n\t\t\tclient->SimpleMessage(atoi(sep->arg[1]), blah);\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 17 && sep->IsNumber(2)) {\n\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 18) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_QuestRewardPackMsg\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"unknown1\", 255);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"reward\", \"Quest Reward!\");\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"max_coin\", 0);\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"text\", \"Some custom text to mess things up?\");\n\t\t\t\tpacket2->setSubstructDataByName(\"reward_data\", \"status_points\", 5);\n\t\t\t\t                                                                  \n\t\t\t\tpacket2->setSubstructArrayLengthByName(\"reward_data\", \"num_rewards\", 1);\n\t\t\t\tItem* item = new Item(master_item_list.GetItem(9357));\n\t\t\t\tpacket2->setArrayDataByName(\"reward_id\", item->details.item_id);\n\t\t\t\t                         \n\t\t\t\tpacket2->setItemArrayDataByName(\"item\", item, client->GetPlayer(), 0, 0, client->GetClientItemPacketOffset());\n\t\t\t\tsafe_delete(item);\n\t\t\t\t                                                   \n                           \n                                                                    \n                                                                                 \n                      \n                                          \n                                                                    \n                                                                                 \n                                           \n                                                                    \n                                                                                   \n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint16 len = strlen(sep->arg[2]);\n\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 2);\n\t\t\t\t\t\tptr2 += 2;\n\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 19) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_UpdateLoot\", client->GetVersion());\n\t\t\tSpawn* spawn = client->GetPlayer()->GetTarget();\n\t\t\tItem* item = master_item_list.GetItem(130053);\n\t\t\tconst int16 version = client->GetVersion();\n\t\t\tif (!packet2 || !spawn || !item || version < 546 ||\n\t\t\t\t(version > 561 && version != 843 && version != 60114)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Loot test 19 needs an item, target, and a verified row schema.\");\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tpacket2->setArrayLengthByName(\"loot_count\", 1);\n\t\t\t\tif (version == 843 || version == 60114) {\n\t\t\t\t\tpacket2->setArrayDataByName(\"loot_item_id\", item->details.item_id);\n\t\t\t\t\tpacket2->setDataByName(\"loot_id\", spawn->GetID());\n\t\t\t\t\tpacket2->setSubArrayLengthByName(\"eligible_count\", 0, 0);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tpacket2->setArrayDataByName(\"loot_id\", item->details.item_id);\n\t\t\t\t\tpacket2->setDataByName(\"spawn_id\", spawn->GetID());\n\t\t\t\t}\n\t\t\t\tpacket2->setItemArrayDataByName(\"item\", item, client->GetPlayer(), 0, 0, 2, true);\n\t\t\t\tpacket2->setDataByName(\"display\", 1);\n\t\t\t\tpacket2->setDataByName(\"loot_type\", 1);\n\t\t\t\tpacket2->setDataByName(\"lotto_timeout\", 60);\n\t\t\t\tpacket2->PrintPacket();\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\tint16 offset2 = 0;\n\t\t\t\t\tint32 value1 = 0;\n\t\t\t\t\tif (sep->IsSet(3)) {\n\t\t\t\t\t\toffset2 = atoi(sep->arg[2]);\n\t\t\t\t\t\tvalue1 = atol(sep->arg[3]);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tvalue1 = atol(sep->arg[2]);\n\t\t\t\t\tint16 offset3 = 0;\n\t\t\t\t\tint16 offset4 = 0;\n\t\t\t\t\tint32 value2 = 0;\n\t\t\t\t\tif (sep->IsSet(6)) {\n\t\t\t\t\t\toffset3 = atoi(sep->arg[4]);\n\t\t\t\t\t\toffset4 = atoi(sep->arg[5]);\n\t\t\t\t\t\tvalue2 = atol(sep->arg[6]);\n\t\t\t\t\t}\n\t\t\t\t\toffset--;\n\t\t\t\t\tif (offset2 > 0 && offset2 >= offset) {\n\t\t\t\t\t\toffset2--;\n\t\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\t\tptr2 += offset;\n\t\t\t\t\t\tfor (int i = offset; i <= offset2; i++) {\n\t\t\t\t\t\t\tif (value1 > 0xFFFF) {\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\t\t\tptr2 += 3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (value1 > 0xFF) {\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\tptr2++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t\t\tptr2++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (offset4 > 0 && offset4 >= offset3) {\n\t\t\t\t\t\toffset3--;\n\t\t\t\t\t\toffset4--;\n\t\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\t\tptr2 += offset3;\n\t\t\t\t\t\tfor (int i = offset3; i <= offset4; i++) {\n\t\t\t\t\t\t\tif (value2 > 0xFFFF) {\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value2, 4);\n\t\t\t\t\t\t\t\ti += 3;\n\t\t\t\t\t\t\t\tptr2 += 3;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (value2 > 0xFF) {\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value2, 2);\n\t\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\t\tptr2++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value2, 1);\n\t\t\t\t\t\t\tptr2++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 21) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_OfferQuest\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"unknown0\", 255);\n\t\t\t\tpacket2->setDataByName(\"reward\", \"New Quest\");\n\t\t\t\tpacket2->setDataByName(\"title\", \"Title\");\n\t\t\t\tpacket2->setDataByName(\"description\", \"description\");\n\t\t\t\tpacket2->setDataByName(\"quest_difficulty\", 3);\n\t\t\t\tpacket2->setDataByName(\"unknown1\", 5);\n\t\t\t\tpacket2->setDataByName(\"level\", 3);\n\t\t\t\tpacket2->setDataByName(\"coin\", 150);\n\t\t\t\tpacket2->setDataByName(\"status_points\", 5);\n\t\t\t\tpacket2->setDataByName(\"exp_bonus\", 10);\n\t\t\t\tpacket2->setArrayLengthByName(\"num_rewards\", 1);\n\t\t\t\tItem* item = new Item(master_item_list.GetItem(36212));\n\t\t\t\tpacket2->setArrayDataByName(\"reward_id\", item->details.item_id);\n\t\t\t\titem->stack_count = 20;\n\t\t\t\tpacket2->setItemArrayDataByName(\"item\", item, client->GetPlayer(), 0, 0, client->GetClientItemPacketOffset());\n\t\t\t\tsafe_delete(item);\n\t\t\t\tchar accept[35] = { 0 };\n\t\t\t\tchar decline[35] = { 0 };\n\t\t\t\tsnprintf(accept, sizeof(accept), \"q_accept_pending_quest %u\", 0);\n\t\t\t\tsnprintf(decline, sizeof(decline), \"q_deny_pending_quest %u\", 0);\n\t\t\t\tpacket2->setDataByName(\"accept_command\", accept);\n\t\t\t\tpacket2->setDataByName(\"decline_command\", decline);\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\tDumpPacket(app);\n\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 22) {                              \n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_OfferQuest\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"unknown0\", 255);\n\t\t\t\tpacket2->setDataByName(\"reward\", \"New Quest\");\n\t\t\t\tpacket2->setDataByName(\"title\", \"Title\");\n\t\t\t\tpacket2->setDataByName(\"description\", \"description\");\n\t\t\t\tpacket2->setDataByName(\"quest_difficulty\", 3);\n\t\t\t\tpacket2->setDataByName(\"unknown1\", 5);\n\t\t\t\tpacket2->setDataByName(\"level\", 3);\n\t\t\t\tpacket2->setDataByName(\"coin\", 150);\n\t\t\t\tpacket2->setDataByName(\"status_points\", 5);\n\t\t\t\tpacket2->setDataByName(\"exp_bonus\", 10);\n\t\t\t\tpacket2->setArrayLengthByName(\"num_rewards\", 1);\n\t\t\t\tItem* item = new Item(master_item_list.GetItem(36212));\n\t\t\t\tpacket2->setArrayDataByName(\"reward_id\", item->details.item_id);\n\t\t\t\titem->stack_count = 20;\n\t\t\t\tpacket2->setItemArrayDataByName(\"item\", item, client->GetPlayer(), 0, 0, client->GetClientItemPacketOffset());\n\t\t\t\tsafe_delete(item);\n\t\t\t\tchar accept[35] = { 0 };\n\t\t\t\tchar decline[35] = { 0 };\n\t\t\t\tsnprintf(accept, sizeof(accept), \"q_accept_pending_quest %u\", 0);\n\t\t\t\tsnprintf(decline, sizeof(decline), \"q_deny_pending_quest %u\", 0);\n\t\t\t\tpacket2->setDataByName(\"accept_command\", accept);\n\t\t\t\tpacket2->setDataByName(\"decline_command\", decline);\n\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\tptr2 += offset;\n\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tint8 len = strlen(sep->arg[2]);\n\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 1);\n\t\t\t\t\t\tptr2 += 1;\n\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tDumpPacket(app);\n\t\t\t\tclient->QueuePacket(app);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\t\n\t\telse if (atoi(sep->arg[0]) == 23) {\n\t\t\tif (client->GetPlayer()->GetTarget()) {\n\t\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_UpdateMerchant\", client->GetVersion());\n\t\t\t\tif (packet2) {\n\t\t\t\t\tMerchantPacket::SetDefaults(packet2);\n\t\t\t\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\t\t\t\tpacket2->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(target));\n\t\t\t\t\tItem* item = master_item_list.GetItem(12565);\n\t\t\t\t\tif (!item) {\n\t\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tint8 i = 0;\n\t\t\t\t\tpacket2->setArrayLengthByName(\"num_items\", 1);\n\t\t\t\t\tpacket2->setArrayDataByName(\"item_name\", MerchantPacket::Text(item->name, 0xff).c_str(), i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"item_id\", item->details.item_id, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"stack_size\", item->stack_count, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"icon\", item->GetIcon(client->GetVersion()), i);\n\t\t\t\t\tint8 tmp_level = 0;\n\t\t\t\t\tif (item->generic_info.adventure_default_level > 0)\n\t\t\t\t\t\ttmp_level = item->generic_info.adventure_default_level;\n\t\t\t\t\telse\n\t\t\t\t\t\ttmp_level = item->generic_info.tradeskill_default_level;\n\t\t\t\t\tpacket2->setArrayDataByName(\"level\", tmp_level, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"tier\", item->details.tier, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"item_id2\", item->details.item_id, i);\n\t\t\t\t\tint8 item_difficulty = client->GetPlayer()->GetArrowColor(tmp_level);\n\t\t\t\t\tif (item_difficulty != ARROW_COLOR_WHITE && item_difficulty != ARROW_COLOR_RED && item_difficulty != ARROW_COLOR_GRAY)\n\t\t\t\t\t\titem_difficulty = ARROW_COLOR_WHITE;\n\t\t\t\t\titem_difficulty = MerchantPacket::Difficulty(item_difficulty);\n\t\t\t\t\tpacket2->setArrayDataByName(\"item_difficulty\", item_difficulty, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"quantity\", 2, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"unknown5\", 255, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"stack_size2\", item->stack_count, i);\n\t\t\t\t\tpacket2->setArrayDataByName(\"description\", MerchantPacket::Description(packet2, item->description).c_str(), i);\n\t\t\t\t\tpacket2->setDataByName(\"type\", 2);\n\t\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\t\tint16 offset = atoi(sep->arg[1]);\n\t\t\t\t\t\tuchar* ptr2 = app->pBuffer;\n\t\t\t\t\t\tptr2 += offset;\n\t\t\t\t\t\tif (sep->IsNumber(2)) {\n\t\t\t\t\t\t\tint32 value1 = atol(sep->arg[2]);\n\t\t\t\t\t\t\tif (value1 > 0xFFFF)\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 4);\n\t\t\t\t\t\t\telse if (value1 > 0xFF)\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 2);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&value1, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tint8 len = strlen(sep->arg[2]);\n\t\t\t\t\t\t\tmemcpy(ptr2, (uchar*)&len, 1);\n\t\t\t\t\t\t\tptr2 += 1;\n\t\t\t\t\t\t\tmemcpy(ptr2, sep->arg[2], len);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tDumpPacket(app);\n\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 24) {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_EnableGameEvent\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tif (sep->IsSet(2)) {\n\t\t\t\t\tpacket2->setDataByName(\"event_name\", sep->arg[1]);\n\t\t\t\t\tpacket2->setDataByName(\"enabled\", atoi(sep->arg[2]));\t\t\t\t\t\n\t\t\t\t\tEQ2Packet* app = packet2->serialize();\n\t\t\t\t\tDumpPacket(app);\n\t\t\t\t\tclient->QueuePacket(app);\n\t\t\t\t\tsafe_delete(packet2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 25) {\n\t\t\tif (sep->IsSet(1)) {\n\t\t\t\tWidget* new_spawn = new Widget();\n\t\t\t\tint32 id = atoul(sep->arg[1]);\n\t\t\t\tnew_spawn->SetWidgetID(id);\n\t\t\t\tauto ghost_send_lock = client->GetPlayer()->LockSpawnGhostSends();\n\t\t\t\tEQ2Packet* ret = new_spawn->serialize(client->GetPlayer(), client->GetVersion());\n\t\t\t\tif (ret) {\n\t\t\t\t\tconst int32 entity_id = client->GetPlayer()->GetIDWithPlayerSpawn(new_spawn);\n\t\t\t\t\tif (client->QueuePacket(ret))\n\t\t\t\t\t\tclient->GetPlayer()->CommitSpawnCreate(entity_id);\n\t\t\t\t}\n\t\t\t\tclient->GetPlayer()->RemoveSpawn(new_spawn);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 26) {\n\t\t\tif (sep->IsSet(4)) {\n\t\t\t\tWidget* new_spawn = new Widget();\n\t\t\t\tint32 id = atoul(sep->arg[1]);\n\t\t\t\tnew_spawn->SetWidgetID(id);\n\t\t\t\tfloat x = atof(sep->arg[2]);\n\t\t\t\tfloat y = atof(sep->arg[3]);\n\t\t\t\tfloat z = atof(sep->arg[4]);\n\t\t\t\tnew_spawn->SetLocation(client->GetPlayer()->GetLocation());\n\t\t\t\tnew_spawn->SetWidgetX(x);\n\t\t\t\tnew_spawn->SetWidgetY(y);\n\t\t\t\tnew_spawn->SetWidgetZ(z);\n\t\t\t\tnew_spawn->SetX(x);\n\t\t\t\tnew_spawn->SetY(y);\n\t\t\t\tnew_spawn->SetZ(z);\n\t\t\t\tauto ghost_send_lock = client->GetPlayer()->LockSpawnGhostSends();\n\t\t\t\tEQ2Packet* ret = new_spawn->serialize(client->GetPlayer(), client->GetVersion());\n\t\t\t\tif (ret) {\n\t\t\t\t\tconst int32 entity_id = client->GetPlayer()->GetIDWithPlayerSpawn(new_spawn);\n\t\t\t\t\tif (client->QueuePacket(ret))\n\t\t\t\t\t\tclient->GetPlayer()->CommitSpawnCreate(entity_id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 27) {\n\t\t\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_HearSimpleDamage\", client->GetVersion());\n\t\t\tif (packet2 && target && sep->IsSet(4)) {\n\t\t\t\tclient->GetPlayer()->GetZone()->SendDamagePacket(client->GetPlayer(), target, atoul(sep->arg[1]), atoul(sep->arg[2]), atoul(sep->arg[3]), atoul(sep->arg[4]), sep->arg[5] != nullptr ? sep->arg[5] : \"\");\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 28 && sep->IsNumber(1)) {\n\t\t\tWorld::newValue = strtoull(sep->arg[1], NULL, 0);\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 29 && sep->IsNumber(1)) {\n\t\t\tclient->SendHearCast(client->GetPlayer(), client->GetPlayer()->GetTarget() ? client->GetPlayer()->GetTarget() : client->GetPlayer(),\n\t\t\t\t\t\t\t\t strtoull(sep->arg[1], NULL, 0), atoul(sep->arg[2]));\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 30) {\n\t\t\tPacketStruct* packet = configReader.getStruct(\"WS_UpdateSkillBook\", client->GetVersion());\n\t\t\tif (packet) {\n\t\t\t\tpacket->setDataByName(\"unknown\", World::newValue);\n\t\t\t\tEQ2Packet* outapp = packet->serialize();\n\t\t\t\tDumpPacket(outapp);\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(packet);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 31) {\n\t\t\tclient->SendRecipeList();\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 32 && sep->IsNumber(1) && sep->IsNumber(2)) {\n\t\t\tif(client->GetVersion() <= 561) {\n\t\t\t\tint32 param = atoul(sep->arg[1]);\n\t\t\t\tint32 paramvalue = atoul(sep->arg[2]);\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Send control flag param %u param value %u\", param, paramvalue);\n\t\t\t\tClientPacketFunctions::SendServerControlFlagsClassic(client, param, paramvalue);\n\t\t\t}\n\t\t\telse if(sep->IsNumber(3)) {\n\t\t\t\tint8 param1 = atoul(sep->arg[1]);\n\t\t\t\tint8 param2 = atoul(sep->arg[2]);\n\t\t\t\tint8 paramval = atoul(sep->arg[3]);\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Send control flag param1 %u param2 %u param value %u\", param1, param2, paramval);\n\t\t\t\tClientPacketFunctions::SendServerControlFlags(client, param1, param2, paramval);\n\t\t\t}\n\t\t}\n\t\telse if (atoi(sep->arg[0]) == 33 && sep->IsNumber(1) && sep->IsNumber(2)) {\n\t\t\tclient->GetCurrentZone()->SendHealPacket(client->GetPlayer(), client->GetPlayer()->GetTarget() ? client->GetPlayer()->GetTarget() : client->GetPlayer(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t atoul(sep->arg[1]), atoul(sep->arg[2]), \"TestSpell\");\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 34 && sep->IsNumber(1) && sep->IsNumber(2)) {\n\t\t\tPacketStruct* packet = configReader.getStruct(\"WS_QuestRewardPackMsg\", client->GetVersion());\n\t\t\tpacket->setSubstructDataByName(\"reward_data\", \"unknown1\", atoi(sep->arg[1]));\n\t\t\tItem* item = master_item_list.GetItem(atoul(sep->arg[2]));\n\t\t\tif(item) {\n\t\t\t\tpacket->setSubstructArrayLengthByName(\"reward_data\", \"num_select_rewards\", 1);\n\t\t\t\tpacket->setArrayDataByName(\"select_reward_id\", item->details.item_id, 0);\n\t\t\t\tpacket->setItemArrayDataByName(\"select_item\", item, client->GetPlayer(), 0, 0, World::newValue - 2);\n\t\t\t}\n\n\t\t\tclient->QueuePacket(packet->serialize());\n\t\t\tsafe_delete(packet);\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 35) {\n\t\t\tif(client->GetPlayer()->GetGroupMemberInfo() && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\t\tif(target->GetGroupMemberInfo()) {\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(client->GetPlayer()->GetGroupMemberInfo()->group_id);\n\t\t\t\t\tPlayerGroup* group2 = world.GetGroupManager()->GetGroup(target->GetGroupMemberInfo()->group_id);\n\t\t\t\t\tif(group && group2) {\n\t\t\t\t\t\tgroup->AddGroupToRaid(group2->GetID());\n\t\t\t\t\t\tgroup2->AddGroupToRaid(group->GetID());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 36) {\n\t\t\tclient->GetPlayer()->SendRaidUpdate(client);\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 37) {\n\t\t\tGuild* guild = client->GetPlayer()->GetGuild();\n\t\t\tif(guild)\n\t\t\t\tguild->SendGuildMemberList();\n\t\t\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 38) {\n\t\t\tclient->GetPlayer()->GetZone()->SendFlightPathsPackets(client);\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 39) {\n\t\t\tclient->OpenShopWindow(nullptr, true);\n\t\t}\n\t\telse if(atoi(sep->arg[0]) == 40) {\n\t\t\t\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_HouseStoreLog\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setDataByName(\"data\", sep->arg[1]);\n\t\t\t\tpacket2->setDataByName(\"coin_gain_session\", atoul(sep->arg[2]));\n\t\t\t\tpacket2->setDataByName(\"coin_gain_alltime\", atoul(sep->arg[3]));\n\t\t\t\tpacket2->setDataByName(\"sales_log_open\", atoi(sep->arg[4]));\n\t\t\t\tEQ2Packet* outapp = packet2->serialize();\n\t\t\t\tDumpPacket(outapp);\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\t}\n\telse {\n\t\t\tPacketStruct* packet2 = configReader.getStruct(\"WS_ExaminePartialSpellInfo\", client->GetVersion());\n\t\t\tif (packet2) {\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"show_name\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown\", 7);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown2\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown3\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown4\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown5\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown6\", \"Testing\");\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown7\", \"Testing\");\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"unknown8\", 66);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"title\", \"Blah Title Blah\");\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"title_text\", \"Blah Blah\");\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"title_text2\", \"Blah Blah2\");\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"show_popup\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"info_header\", \"packettype\", 3);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"skill_name\", \"Testing\");\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"level\", 19);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"tier\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"health_cost\", 5);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"min_class_skill_req\", 3); \n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"mana_cost\", 6);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"req_concentration\", 7);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"cast_time\", 200);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"recovery\", 220);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"recast\", 280);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"beneficial\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"maintained\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"spell_book_type\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"quality\", 3);\n\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_1a\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_1b\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_1c\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_1d\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_2a\", 2);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_2b\", 2);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_2c\", 2);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_2d\", 2);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_3\", 3);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_4\", 4);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_5\", 5);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"test_6\", 6);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"min_class_skill_req\", 1);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"min_class_skill_rec\", 30123);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"num_reagents\", 1);\n\t\t\t\tpacket2->setSubstructArrayLengthByName(\"spell_info\", \"num_reagents\", 1);\n\t\t\t\tpacket2->setArrayDataByName(\"reagent\", \"Alcohol\");\n\t\t\t\tpacket2->setArrayDataByName(\"consumed\", \"123\");\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"class_skill\", 52);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"id\", 8308);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"icon\", 303);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"icon2\", 0xFFFF);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"icontype\", 317);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"type\", 2);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"spell_text_color\", 255);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"duration1\", 600);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"duration2\", 600);\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"name\", \"Sprint\");\n\t\t\t\tpacket2->setSubstructDataByName(\"spell_info\", \"description\", \"Test description\");\n\t\t\t\tEQ2Packet* outapp = packet2->serialize();\n\t\t\t\tDumpPacket(outapp);\n\t\t\t\tclient->QueuePacket(outapp);\n\t\t\t\tsafe_delete(packet2);\n\t\t\t}\n\t\t}\n\treturn;\n\tPacketStruct* p = configReader.getStruct(\"WS_EqTargetItemCmd\", client->GetVersion());\n\tif (!p) return;\n\n\t                                                                                   \n\t                                                                              \n\t\t   \n\n\n\n\n\n\n\n\n\n\n\n\n\n\t                                                                                   \n                                                 \n                                                   \n                                                                                            \n               \n                                            \n                       \n   \n    \n\n\t                                                  \n                     \n                                                                               \n                                                                           \n\n                                           \n                                                                                                                                                    \n                                    \n\n                                                                           \n    \n\n\t                  \n\t\t                             \n\t\t                                                                                                                                                                                                                                                           \n\n\t\t                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      \n\n\t\t                                                       \n\t\t                                                                                                                                                                                                                                                                                                                            \n\t    \n\n                                                                                  \n              \n               \n             \n                                                                                 \n                             \n                               \n                           \n         \n  \n\n                                \n                                                                               \n\n\tif (client->GetPlayer()->GetTarget()) {\n\t\tPacketStruct* packet = configReader.getStruct(\"WS_SetControlGhost\", client->GetVersion());\n\t\tif (packet) {\n\t\t\tpacket->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()->GetTarget()));\n\t\t\tpacket->setDataByName(\"size\", 0);\n\t\t\tpacket->setDataByName(\"unknown2\", 0);\n\t\t\tEQ2Packet* app = packet->serialize();\n\t\t\tclient->QueuePacket(app);\n\t\t\tsafe_delete(packet);\n\t\t}\n\n\t\tPacketStruct* set_pov = configReader.getStruct(\"WS_SetPOVGhostCmd\", client->GetVersion());\n\t\tif (set_pov) {\n\t\t\tset_pov->setDataByName(\"spawn_id\", client->GetPlayer()->GetIDWithPlayerSpawn(client->GetPlayer()->GetTarget()));\n\t\t\tEQ2Packet* app_pov = set_pov->serialize();\n\t\t\tclient->QueuePacket(app_pov);\n\t\t\tsafe_delete(set_pov);\n\t\t}\n\t}\n\n\tSeperator* sep2 = new Seperator(command_parms->data.c_str(), ' ', 50, 500, true);\n\n\tPacketStruct* packet = configReader.getStruct(\"WS_OpenCharCust\", client->GetVersion());\n\tif (packet) {\n\n\n\t\tif (sep2 && sep2->arg[0] && sep2->IsNumber(0))\n\t\t\tpacket->setDataByName(\"Type\", atoi(sep2->arg[0]));\n\t\telse\n\t\t\tpacket->setDataByName(\"Type\", 2);\n\n\t\tif (sep2 && sep2->arg[1] && sep2->IsNumber(1))\n\t\t\tpacket->setDataByName(\"race_id\", atoi(sep2->arg[1]));\n\t\telse\n\t\t\tpacket->setDataByName(\"race_id\", 0);\n\n\t\tif (sep2 && sep2->arg[2] && sep2->IsNumber(2))\n\t\t\tpacket->setDataByName(\"gender\", atoi(sep2->arg[2]));\n\t\telse\n\t\t\tpacket->setDataByName(\"gender\", 2);\n\n\t\tif (sep2 && sep2->arg[3] && sep2->IsNumber(3))\n\t\t\tpacket->setDataByName(\"unknown\", atoi(sep2->arg[3]), 0);\n\t\telse\n\t\t\tpacket->setDataByName(\"unknown\", 0, 0);\n\n\t\tif (sep2 && sep2->arg[4] && sep2->IsNumber(4))\n\t\t\tpacket->setDataByName(\"unknown\", atoi(sep2->arg[4]), 1);\n\t\telse\n\t\t\tpacket->setDataByName(\"unknown\", 0, 1);\n\n\t\tif (sep2 && sep2->arg[5] && sep2->IsNumber(5))\n\t\t\tpacket->setDataByName(\"unknown\", atoi(sep2->arg[5]), 2);\n\t\telse\n\t\t\tpacket->setDataByName(\"unknown\", 0, 2);\n\n\n\t\tclient->QueuePacket(packet->serialize());\n\t}\n\tsafe_delete(packet);\n\tsafe_delete(sep2);\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        7
      ],
      "dynamic_arguments": false,
      "raw_parameters": true,
      "usage_messages": [
        "To complete this quest, I must do the following tasks:",
        "\\\\#6EFF6EYou get better at \\12\\\\#C8FFC8%s\\\\#6EFF6E! (7/15)",
        "voiceover/english/narrator/boat_06p_tutorial02/narrator_001_63779ca0.mp3"
      ]
    },
    "39": {
      "symbol": "COMMAND_SPEED",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6362,
      "body": "{ Command_Speed(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Speed",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 10075,
          "body": "{\n\tif(sep && sep->arg[0][0] && sep->IsNumber(0)){\n\t\tfloat new_speed = atof(sep->arg[0]);\n\t\tif (new_speed >= 0.0f)\n\t\t{\n\t\t\tclient->GetPlayer()->SetSpeed(new_speed, true);\n\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_SPEED, sep->arg[0]);\n\t\t\tif (new_speed == 0.0f)\n\t\t\t\tclient->SimpleMessage(CHANNEL_STATUS, \"Speed reset to the spawn's base speed.\");\n\t\t\telse\n\t\t\t\tclient->Message(CHANNEL_STATUS, \"Setting speed to %.2f.\", new_speed);\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_STATUS, \"Invalid speed provided %s.\", sep->arg[0]);\n\t}\n\telse{\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /speed {new speed value|0 to reset}\");\n\t}\n\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /speed {new speed value|0 to reset}"
      ]
    },
    "500": {
      "symbol": "COMMAND_BOT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6364,
      "body": "{ Command_Bot(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 51,
          "body": "{\n\n\tif (sep && sep->IsSet(0)) {\n\t\tBotAction requested_action = BotAction::Manage;\n\t\tif (strncasecmp(\"help\", sep->arg[0], 4) == 0 || strncasecmp(\"list\", sep->arg[0], 4) == 0)\n\t\t\trequested_action = BotAction::Inspect;\n\t\telse if (strncasecmp(\"camp\", sep->arg[0], 4) == 0)\n\t\t\trequested_action = BotAction::Camp;\n\t\telse if (strncasecmp(\"delete\", sep->arg[0], 6) == 0)\n\t\t\trequested_action = BotAction::Delete;\n\t\tBotAccessContext access_context;\n\t\taccess_context.source = BotInvocationSource::DirectCommand;\n\t\tif (requested_action == BotAction::Manage && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\t\taccess_context.target_bot = static_cast<Bot*>(client->GetPlayer()->GetTarget());\n\t\tBotAccessDecision access = BotAccessPolicy::Evaluate(client, requested_action, access_context);\n\t\tBotAccessPolicy::Audit(client, requested_action, access_context, access);\n\t\tif (!access.allowed) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, access.reason.c_str());\n\t\t\treturn;\n\t\t}\n\t\tif (strncasecmp(\"invite\", sep->arg[0], 6) == 0) {\n\t\t\tBot* bot = ResolveActiveBot(client, sep, 1);\n\t\t\tif (!bot) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Target one of your active bots or use /bot invite [id].\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!RequireBotAccess(client, BotAction::Manage, bot))\n\t\t\t\treturn;\n\t\t\tBotLifecycle::InviteToGroup(client, bot);\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"hold\", sep->arg[0], 4) == 0 || strncasecmp(\"resume\", sep->arg[0], 6) == 0) {\n\t\t\tconst bool hold = strncasecmp(\"hold\", sep->arg[0], 4) == 0;\n\t\t\tGroupMemberInfo* owner_group = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif (owner_group) {\n\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(owner_group->group_id);\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\tfor (GroupMemberInfo* member_info : *group->GetMembers()) {\n\t\t\t\t\t\tif (member_info && member_info->member && member_info->member->IsBot()) {\n\t\t\t\t\t\t\tBot* bot = static_cast<Bot*>(member_info->member);\n\t\t\t\t\t\t\tif (bot->GetOwner() == client->GetPlayer()) {\n\t\t\t\t\t\t\t\tBotBrain* brain = dynamic_cast<BotBrain*>(bot->Brain());\n\t\t\t\t\t\t\t\tif (brain)\n\t\t\t\t\t\t\t\t\tbrain->SetHeld(hold);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t}\n\t\t\t}\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, hold ? \"Your companions will hold here.\" : \"Your companions resume following.\");\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"camp\", sep->arg[0], 4) == 0) {\n\t\t\tBot* bot = nullptr;\n\t\t\tint32 camp_index = 0;\n\t\t\tif (sep->GetInt(1, camp_index) && client->GetPlayer()->SpawnedBots.count(camp_index)) {\n\t\t\t\tSpawn* camp_spawn = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[camp_index]);\n\t\t\t\tif (camp_spawn && camp_spawn->IsBot())\n\t\t\t\t\tbot = static_cast<Bot*>(camp_spawn);\n\t\t\t}\n\t\t\telse if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\t\t\tbot = static_cast<Bot*>(client->GetPlayer()->GetTarget());\n\t\t\tif (!bot) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (bot->GetOwner() != client->GetPlayer()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only camp your own bots.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tBotAccessContext camp_context;\n\t\t\tcamp_context.source = BotInvocationSource::DirectCommand;\n\t\t\tcamp_context.target_bot = bot;\n\t\t\tBotAccessDecision camp_access = BotAccessPolicy::Evaluate(client, BotAction::Camp, camp_context);\n\t\t\tBotAccessPolicy::Audit(client, BotAction::Camp, camp_context, camp_access, bot->BotIndex);\n\t\t\tif (!camp_access.allowed) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, camp_access.reason.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbot->Camp();\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"attack\", sep->arg[0], 6) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) {\n\t\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\n\t\t\t\tif (client->GetPlayer()->GetDistance(target) <= 50) {\n\t\t\t\t\tif (client->GetPlayer()->AttackAllowed(target)) {\n\t\t\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\t\t\tif (gmi) {\n\t\t\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\t\t\tif (group)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t\t\t\t\t\tdeque<GroupMemberInfo*>::iterator itr;\n\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\tfor (itr = members->begin(); itr != members->end(); itr++) {\n                                                               \n              \n             \n\t\t\t\t\t\t\t\t\tif ((*itr)->member && (*itr)->member->IsBot() && ((Bot*)(*itr)->member)->GetOwner() == client->GetPlayer()) {\n                                      \n\t\t\t\t\t\t\t\t\t\t((Bot*)(*itr)->member)->SetCombatTarget(target->GetID());\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can not attack that target.\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target is to far away.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Not a valid target.\");\n\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"spells\", sep->arg[0], 6) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\n\t\t\t\tmap<int32, int8>* spells = bot->GetBotSpells();\n\t\t\t\tmap<int32, int8>::iterator itr;\n\t\t\t\tstring output;\n\t\t\t\tfor (itr = spells->begin(); itr != spells->end(); itr++) {\n\t\t\t\t\tSpell* spell = master_spell_list.GetSpell(itr->first, itr->second);\n\t\t\t\t\tif (spell) {\n\t\t\t\t\t\toutput += spell->GetName();\n\t\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, output.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"maintank\", sep->arg[0], 8) == 0) {\n\t\t\tif (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"Not a valid target.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif (!gmi) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"You are not in a group.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\tif (!world.GetGroupManager()->IsInGroup(gmi->group_id, target)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"Target is not in your group.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\tif (group)\n\t\t\t{\n\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers(); \n\t\t\t\t\n\t\t\t\tfor (int8 i = 0; i < members->size(); i++) {\n\t\t\t\t\tGroupMemberInfo* gmi2 = members->at(i);\n\t\t\t\t\tif(!gmi2 || !gmi2->member)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (gmi2->member->IsBot() && ((Bot*)gmi2->member)->GetOwner() == client->GetPlayer()) {\n\t\t\t\t\t\t((Bot*)gmi2->member)->SetMainTank(target);\n\t\t\t\t\t\tclient->Message(CHANNEL_COMMAND_TEXT, \"Setting main tank for %s to %s\", gmi2->member->GetName(), target->GetName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"delete\", sep->arg[0], 6) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n\t\t\t\tif (!database.BotExists(client->GetCharacterID(), index)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No owned bot has that id.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->Camp();\n\t\t\t\t}\n\n\t\t\t\tdatabase.DeleteBot(client->GetCharacterID(), index);\n\t\t\t\tBotAccessDecision deleted = access;\n\t\t\t\tdeleted.reason = \"deleted\";\n\t\t\t\tBotAccessPolicy::Audit(client, BotAction::Delete, access_context, deleted, index);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Bot has been deleted.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to delete a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"follow\", sep->arg[0], 6) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n\n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->SetFollowTarget(client->GetPlayer(), 5);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to have a bot follow you\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"stopfollow\", sep->arg[0], 10) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n \n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->SetFollowTarget(nullptr);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to stop a following bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"summon\", sep->arg[0], 6) == 0) {\n\t\t\tif (sep->IsSet(1) && strncasecmp(\"group\", sep->arg[1], 5) == 0) {\n\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\tif (gmi) {\n\t\t\t\t\tPlayer* player = client->GetPlayer();\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\tif (group)\n\t\t\t\t\t{\n\t\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t\t\t\tfor (int8 i = 0; i < members->size(); i++) {\n\t\t\t\t\t\t\tEntity* member = members->at(i)->member;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(!member)\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (member->IsBot() && ((Bot*)member)->GetOwner() == player) {\n\t\t\t\t\t\t\t\tif(member->GetZone() && member->GetLocation() != player->GetLocation()) {\n\t\t\t\t\t\t\t\t\tmember->SetLocation(player->GetLocation());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmember->SetX(player->GetX());\n\t\t\t\t\t\t\t\tmember->SetY(player->GetY());\n\t\t\t\t\t\t\t\tmember->SetZ(player->GetZ());\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Summoning %s.\", member->GetName());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not in a group.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\t\t\tPlayer* player = client->GetPlayer();\n\t\t\t\t\tif (bot && bot->GetOwner() == player) {\n\t\t\t\t\t\tbot->SetLocation(player->GetLocation());\n\t\t\t\t\t\tbot->SetX(player->GetX());\n\t\t\t\t\t\tbot->SetY(player->GetY());\n\t\t\t\t\t\tbot->SetZ(player->GetZ());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Summoning %s.\", bot->GetName());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only summon your own bots.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"test\", sep->arg[0], 4) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t((Bot*)client->GetPlayer()->GetTarget())->MessageGroup(\"Test message\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"BotCommands:\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot create - opens the guided companion recruiter\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot create [race] [gender] [class] [name] - legacy numeric creation\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot customize - customize the appearance of the bot\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot list - list all the bots you have created with this character\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot spawn [id] - activates and follows an owned bot\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot invite [id] - invites an active owned bot to your group\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot camp - removes the bot from your group and despawns them\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot attack - commands your bots to attack your target\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot hold or /bot resume - pauses or resumes your companions\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot spells - lists bot spells, not fully implemented yet\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot maintank - sets targeted group member as the main tank for your bots\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot delete [id] - deletes the bot with the given id (obtained from /bot list)\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot help\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Target one of your active bots or use /bot invite [id].",
        "You must target a bot",
        "You must give the id (from /bot list) to delete a bot",
        "You must give the id (from /bot list) to have a bot follow you",
        "You must give the id (from /bot list) to stop a following bot",
        "You must target a bot.",
        "/bot create - opens the guided companion recruiter",
        "/bot create [race] [gender] [class] [name] - legacy numeric creation",
        "/bot customize - customize the appearance of the bot",
        "/bot list - list all the bots you have created with this character",
        "/bot spawn [id] - activates and follows an owned bot",
        "/bot invite [id] - invites an active owned bot to your group",
        "/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided",
        "/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)",
        "/bot camp - removes the bot from your group and despawns them",
        "/bot attack - commands your bots to attack your target",
        "/bot hold or /bot resume - pauses or resumes your companions",
        "/bot spells - lists bot spells, not fully implemented yet",
        "/bot maintank - sets targeted group member as the main tank for your bots",
        "/bot delete [id] - deletes the bot with the given id (obtained from /bot list)",
        "/bot help"
      ]
    },
    "501": {
      "symbol": "COMMAND_BOT_CREATE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6365,
      "body": "{ Command_Bot_Create(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_Create",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 375,
          "body": "{\n\tif (sep && sep->IsSet(0) && strcasecmp(sep->arg[0], \"ui\") == 0) {\n\t\tBotRecruitment::HandleCallback(client, sep);\n\t\treturn;\n\t}\n\tif (!sep || !sep->IsSet(0)) {\n\t\tBotRecruitment::Begin(client, BotInvocationSource::GuidedUI);\n\t\treturn;\n\t}\n\tint32 race_value = 0;\n\tint32 gender_value = 0;\n\tint32 class_value = 0;\n\tif (!sep->GetInt(0, race_value) || !sep->GetInt(1, gender_value) || !sep->GetInt(2, class_value) || !sep->IsSet(3)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /bot create [race ID] [gender ID] [class ID] [name], or use bare /bot create.\");\n\t\treturn;\n\t}\n\tstring recruit_name = sep->arg[3];\n\ttransform(recruit_name.begin(), recruit_name.end(), recruit_name.begin(), [](unsigned char c) { return static_cast<char>(tolower(c)); });\n\tif (!recruit_name.empty())\n\t\trecruit_name[0] = static_cast<char>(toupper(static_cast<unsigned char>(recruit_name[0])));\n\tBotAccessContext context;\n\tcontext.source = BotInvocationSource::DirectCommand;\n\tstd::string error;\n\tint32 bot_index = 0;\n\tBot* recruited = BotLifecycle::CreateAndActivate(client, static_cast<int8>(race_value), static_cast<int8>(gender_value),\n\t\tstatic_cast<int8>(class_value), recruit_name, context, error, &bot_index);\n\tif (!recruited) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, error.c_str());\n\t\treturn;\n\t}\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s was recruited as bot %u, is visible, and is following you.\",\n\t\trecruited->GetName(), bot_index);\n\treturn;\n     \n                       \n                 \n                          \n             \n\n           \n            \n                          \n                    \n        \n                                                                                                      \n          \n   \n\n                          \n                      \n        \n                                                                                                       \n          \n   \n\n                          \n                        \n        \n                                                                                                      \n          \n   \n\n                      \n                              \n                                                                      \n                                                                        \n   \n        \n                                                                                                     \n          \n   \n\n  \n       \n                                                                                                             \n                                                                                                                           \n                                                                                   \n                                                                             \n         \n  \n\n                                                      \n                                     \n                                                                                                                             \n         \n  \n                                        \n                                                                                            \n         \n  \n                                      \n                                                                                               \n         \n  \n                                       \n                                                                               \n         \n  \n                                         \n                                                                                        \n         \n  \n\n                    \n                \n                \n                                       \n        \n               \n                                   \n        \n            \n                               \n        \n              \n                                   \n        \n              \n                                   \n        \n            \n                               \n        \n               \n                                   \n        \n               \n                                     \n        \n               \n                                   \n        \n            \n                               \n        \n            \n                               \n        \n            \n                               \n        \n           \n                             \n        \n              \n                                   \n        \n            \n                               \n        \n               \n                                   \n        \n          \n                                 \n        \n             \n                                \n        \n             \n                                                                                                \n        \n              \n                                   \n        \n              \n                                   \n        \n  \n\n                                \n                       \n               \n\n                                                                  \n\n                                                                                                          \n\n                \n                   \n                                                        \n                                             \n                                      \n                                    \n                                    \n                                  \n                                  \n                                         \n                                  \n                               \n                                   \n                               \n                                          \n                                          \n                                          \n                                                      \n                                   \n                                   \n                                   \n                                               \n                                                        \n                               \n                                     \n                                    \n                                                  \n                              \n                         \n                  \n                                \n                                              \n                                                   \n                                         \n    \n                                   \n                                                 \n                                                         \n                                            \n    \n                                      \n                       \n                                           \n\n               \n                                                                                                                       \n                     \n                                                                                        \n                                                                                        \n    \n         \n                        \n                          \n                                                                   \n\n                \n                                                      \n    \n   \n        \n                                                                                                                   \n   \n\n                       \n  \n     \n                                                                                                        \n      \n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /bot create [race ID] [gender ID] [class ID] [name], or use bare /bot create."
      ]
    },
    "502": {
      "symbol": "COMMAND_BOT_CUSTOMIZE",
      "status": "disabled",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6366,
      "body": "{ Command_Bot_Customize(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_Customize",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 623,
          "body": "{\n\tBot* bot = 0;\n\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\tbot = (Bot*)client->GetPlayer()->GetTarget();\n\tif (!RequireBotAccess(client, BotAction::Manage, bot))\n\t\treturn;\n\t\n\t\n\tclient->Message(CHANNEL_COLOR_RED, \"This command is disabled and requires new implementation.\");\n\n\t                                                      \n                                                                                         \n               \n\n                                             \n                                              \n\n                                                                \n                                                                 \n\n                                                                             \n                                                                                     \n\n                                       \n                                            \n                                                     \n                                                             \n                                       \n                                            \n                                                                           \n                                         \n                                            \n   \n    \n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "503": {
      "symbol": "COMMAND_BOT_SPAWN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6367,
      "body": "{ Command_Bot_Spawn(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_Spawn",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 659,
          "body": "{\n\tint32 requested_bot_id = 0;\n\tif (!sep || !sep->GetInt(0, requested_bot_id)) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Syntax: /bot spawn [id]\");\n\t\treturn;\n\t}\n\tBotAccessContext context;\n\tcontext.source = BotInvocationSource::DirectCommand;\n\tstd::string error;\n\tBot* activated = BotLifecycle::Activate(client, requested_bot_id, context, error);\n\tif (!activated) {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, error.c_str());\n\t\treturn;\n\t}\n\tclient->Message(CHANNEL_COMMANDS, \"%s is active and follows you.\", activated->GetName());\n\treturn;\n     \n\n              \n                                     \n                                                           \n                                                                                           \n          \n   \n\n                       \n                                                       \n\n                                                                \n                                                \n                                             \n                                      \n                                    \n                                    \n                                  \n                                  \n                                         \n                                  \n                               \n                                          \n                                          \n                                          \n                                                      \n                                   \n                                   \n                                   \n                                               \n                                                        \n                               \n                                                  \n                         \n                  \n                                \n                                              \n                                         \n    \n                                   \n                                                 \n                                            \n    \n                                      \n                        \n                           \n                       \n                                           \n   \n                   \n                                                     \n                                                     \n    \n                                                                            \n\n                    \n                                                                                           \n                         \n                                                                                   \n                         \n                                                                                               \n                         \n                                                                            \n                         \n                                                                                                \n                         \n                                                                            \n                         \n                                                                             \n        \n                                                                                    \n    \n\n                                                           \n   \n                     \n                                 \n    \n   \n        \n                                                                     \n   \n  \n       \n                           \n  \n      \n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Syntax: /bot spawn [id]"
      ]
    },
    "504": {
      "symbol": "COMMAND_BOT_LIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6368,
      "body": "{ Command_Bot_List(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_List",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 765,
          "body": "{\n\tif (!RequireBotAccess(client, BotAction::Inspect))\n\t\treturn;\n\tstring bot_list;\n\tbot_list = database.GetBotList(client->GetCharacterID());\n\tif (!bot_list.empty())\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, bot_list.c_str());\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "505": {
      "symbol": "COMMAND_BOT_INV",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6369,
      "body": "{ Command_Bot_Inv(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_Inv",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 774,
          "body": "{\n\tBot* access_target = client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot() ?\n\t\tstatic_cast<Bot*>(client->GetPlayer()->GetTarget()) : nullptr;\n\tif (!RequireBotAccess(client, BotAction::Manage, access_target))\n\t\treturn;\n\tif (sep && sep->IsSet(0)) {\n\t\tif (strncasecmp(\"give\", sep->arg[0], 4) == 0) {\n\t\t\tif (client->GetPlayer()->trade) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are already trading.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\tif (bot->trade) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Bot is already in a trade...\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (bot->GetOwner() != client->GetPlayer()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only trade with your own bot.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tTrade* trade = new Trade(client->GetPlayer(), bot);\n\t\t\tclient->GetPlayer()->trade = trade;\n\t\t\tbot->trade = trade;\n\t\t}\n\t\telse if (strncasecmp(\"list\", sep->arg[0], 4) == 0) {\n\t\t\tif (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\tif (bot->GetOwner() != client->GetPlayer()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only see the inventory of your own bot.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstring item_list = \"Bot Items:\\nSlot\\tName\\n\";\n\t\t\tfor (int8 i = 0; i < NUM_SLOTS; i++) {\n\t\t\t\tItem* item = bot->GetEquipmentList()->GetItem(i);\n\t\t\t\tif (item) {\n\t\t\t\t\t                      \n\t\t\t\t\titem_list += to_string(i) + \":\\t\" + item->CreateItemLink(client->GetVersion(), true) + \"\\n\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, item_list.c_str());\n\t\t}\n\t\telse if (strncasecmp(\"remove\", sep->arg[0], 6) == 0) {\n\t\t\tint32 slot_val;\n\t\t\tif (sep->GetInt(1, slot_val)) {\n\t\t\t\tint8 slot = (int8)slot_val;\n\t\t\t\tif (slot >= NUM_SLOTS) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Invalid slot\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\t\tif (bot->GetOwner() != client->GetPlayer()) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only remove items from your own bot.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\n\t\t\t\tif (client->GetPlayer()->trade) {\n\t\t\t\t\tTrade* trade = client->GetPlayer()->trade;\n\t\t\t\t\tif (trade->GetTradee(client->GetPlayer()) != bot) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are already in a trade.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tbot->AddItemToTrade(slot);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (bot->trade) {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Your bot is already trading...\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tTrade* trade = new Trade(client->GetPlayer(), bot);\n\t\t\t\t\tclient->GetPlayer()->trade = trade;\n\t\t\t\t\tbot->trade = trade;\n\n\t\t\t\t\tbot->AddItemToTrade(slot);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tCommand_Bot(client, sep);\n\t}\n\telse\n\t\tCommand_Bot(client, sep);\n}"
        },
        {
          "function": "Command_Bot",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 51,
          "body": "{\n\n\tif (sep && sep->IsSet(0)) {\n\t\tBotAction requested_action = BotAction::Manage;\n\t\tif (strncasecmp(\"help\", sep->arg[0], 4) == 0 || strncasecmp(\"list\", sep->arg[0], 4) == 0)\n\t\t\trequested_action = BotAction::Inspect;\n\t\telse if (strncasecmp(\"camp\", sep->arg[0], 4) == 0)\n\t\t\trequested_action = BotAction::Camp;\n\t\telse if (strncasecmp(\"delete\", sep->arg[0], 6) == 0)\n\t\t\trequested_action = BotAction::Delete;\n\t\tBotAccessContext access_context;\n\t\taccess_context.source = BotInvocationSource::DirectCommand;\n\t\tif (requested_action == BotAction::Manage && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\t\taccess_context.target_bot = static_cast<Bot*>(client->GetPlayer()->GetTarget());\n\t\tBotAccessDecision access = BotAccessPolicy::Evaluate(client, requested_action, access_context);\n\t\tBotAccessPolicy::Audit(client, requested_action, access_context, access);\n\t\tif (!access.allowed) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, access.reason.c_str());\n\t\t\treturn;\n\t\t}\n\t\tif (strncasecmp(\"invite\", sep->arg[0], 6) == 0) {\n\t\t\tBot* bot = ResolveActiveBot(client, sep, 1);\n\t\t\tif (!bot) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Target one of your active bots or use /bot invite [id].\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!RequireBotAccess(client, BotAction::Manage, bot))\n\t\t\t\treturn;\n\t\t\tBotLifecycle::InviteToGroup(client, bot);\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"hold\", sep->arg[0], 4) == 0 || strncasecmp(\"resume\", sep->arg[0], 6) == 0) {\n\t\t\tconst bool hold = strncasecmp(\"hold\", sep->arg[0], 4) == 0;\n\t\t\tGroupMemberInfo* owner_group = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif (owner_group) {\n\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(owner_group->group_id);\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\tfor (GroupMemberInfo* member_info : *group->GetMembers()) {\n\t\t\t\t\t\tif (member_info && member_info->member && member_info->member->IsBot()) {\n\t\t\t\t\t\t\tBot* bot = static_cast<Bot*>(member_info->member);\n\t\t\t\t\t\t\tif (bot->GetOwner() == client->GetPlayer()) {\n\t\t\t\t\t\t\t\tBotBrain* brain = dynamic_cast<BotBrain*>(bot->Brain());\n\t\t\t\t\t\t\t\tif (brain)\n\t\t\t\t\t\t\t\t\tbrain->SetHeld(hold);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t}\n\t\t\t}\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, hold ? \"Your companions will hold here.\" : \"Your companions resume following.\");\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"camp\", sep->arg[0], 4) == 0) {\n\t\t\tBot* bot = nullptr;\n\t\t\tint32 camp_index = 0;\n\t\t\tif (sep->GetInt(1, camp_index) && client->GetPlayer()->SpawnedBots.count(camp_index)) {\n\t\t\t\tSpawn* camp_spawn = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[camp_index]);\n\t\t\t\tif (camp_spawn && camp_spawn->IsBot())\n\t\t\t\t\tbot = static_cast<Bot*>(camp_spawn);\n\t\t\t}\n\t\t\telse if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\t\t\tbot = static_cast<Bot*>(client->GetPlayer()->GetTarget());\n\t\t\tif (!bot) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (bot->GetOwner() != client->GetPlayer()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only camp your own bots.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tBotAccessContext camp_context;\n\t\t\tcamp_context.source = BotInvocationSource::DirectCommand;\n\t\t\tcamp_context.target_bot = bot;\n\t\t\tBotAccessDecision camp_access = BotAccessPolicy::Evaluate(client, BotAction::Camp, camp_context);\n\t\t\tBotAccessPolicy::Audit(client, BotAction::Camp, camp_context, camp_access, bot->BotIndex);\n\t\t\tif (!camp_access.allowed) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, camp_access.reason.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbot->Camp();\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"attack\", sep->arg[0], 6) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) {\n\t\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\n\t\t\t\tif (client->GetPlayer()->GetDistance(target) <= 50) {\n\t\t\t\t\tif (client->GetPlayer()->AttackAllowed(target)) {\n\t\t\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\t\t\tif (gmi) {\n\t\t\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\t\t\tif (group)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t\t\t\t\t\tdeque<GroupMemberInfo*>::iterator itr;\n\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\tfor (itr = members->begin(); itr != members->end(); itr++) {\n                                                               \n              \n             \n\t\t\t\t\t\t\t\t\tif ((*itr)->member && (*itr)->member->IsBot() && ((Bot*)(*itr)->member)->GetOwner() == client->GetPlayer()) {\n                                      \n\t\t\t\t\t\t\t\t\t\t((Bot*)(*itr)->member)->SetCombatTarget(target->GetID());\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can not attack that target.\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target is to far away.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Not a valid target.\");\n\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"spells\", sep->arg[0], 6) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\n\t\t\t\tmap<int32, int8>* spells = bot->GetBotSpells();\n\t\t\t\tmap<int32, int8>::iterator itr;\n\t\t\t\tstring output;\n\t\t\t\tfor (itr = spells->begin(); itr != spells->end(); itr++) {\n\t\t\t\t\tSpell* spell = master_spell_list.GetSpell(itr->first, itr->second);\n\t\t\t\t\tif (spell) {\n\t\t\t\t\t\toutput += spell->GetName();\n\t\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, output.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"maintank\", sep->arg[0], 8) == 0) {\n\t\t\tif (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"Not a valid target.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif (!gmi) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"You are not in a group.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\tif (!world.GetGroupManager()->IsInGroup(gmi->group_id, target)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"Target is not in your group.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\tif (group)\n\t\t\t{\n\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers(); \n\t\t\t\t\n\t\t\t\tfor (int8 i = 0; i < members->size(); i++) {\n\t\t\t\t\tGroupMemberInfo* gmi2 = members->at(i);\n\t\t\t\t\tif(!gmi2 || !gmi2->member)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (gmi2->member->IsBot() && ((Bot*)gmi2->member)->GetOwner() == client->GetPlayer()) {\n\t\t\t\t\t\t((Bot*)gmi2->member)->SetMainTank(target);\n\t\t\t\t\t\tclient->Message(CHANNEL_COMMAND_TEXT, \"Setting main tank for %s to %s\", gmi2->member->GetName(), target->GetName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"delete\", sep->arg[0], 6) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n\t\t\t\tif (!database.BotExists(client->GetCharacterID(), index)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No owned bot has that id.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->Camp();\n\t\t\t\t}\n\n\t\t\t\tdatabase.DeleteBot(client->GetCharacterID(), index);\n\t\t\t\tBotAccessDecision deleted = access;\n\t\t\t\tdeleted.reason = \"deleted\";\n\t\t\t\tBotAccessPolicy::Audit(client, BotAction::Delete, access_context, deleted, index);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Bot has been deleted.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to delete a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"follow\", sep->arg[0], 6) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n\n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->SetFollowTarget(client->GetPlayer(), 5);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to have a bot follow you\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"stopfollow\", sep->arg[0], 10) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n \n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->SetFollowTarget(nullptr);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to stop a following bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"summon\", sep->arg[0], 6) == 0) {\n\t\t\tif (sep->IsSet(1) && strncasecmp(\"group\", sep->arg[1], 5) == 0) {\n\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\tif (gmi) {\n\t\t\t\t\tPlayer* player = client->GetPlayer();\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\tif (group)\n\t\t\t\t\t{\n\t\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t\t\t\tfor (int8 i = 0; i < members->size(); i++) {\n\t\t\t\t\t\t\tEntity* member = members->at(i)->member;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(!member)\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (member->IsBot() && ((Bot*)member)->GetOwner() == player) {\n\t\t\t\t\t\t\t\tif(member->GetZone() && member->GetLocation() != player->GetLocation()) {\n\t\t\t\t\t\t\t\t\tmember->SetLocation(player->GetLocation());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmember->SetX(player->GetX());\n\t\t\t\t\t\t\t\tmember->SetY(player->GetY());\n\t\t\t\t\t\t\t\tmember->SetZ(player->GetZ());\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Summoning %s.\", member->GetName());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not in a group.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\t\t\tPlayer* player = client->GetPlayer();\n\t\t\t\t\tif (bot && bot->GetOwner() == player) {\n\t\t\t\t\t\tbot->SetLocation(player->GetLocation());\n\t\t\t\t\t\tbot->SetX(player->GetX());\n\t\t\t\t\t\tbot->SetY(player->GetY());\n\t\t\t\t\t\tbot->SetZ(player->GetZ());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Summoning %s.\", bot->GetName());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only summon your own bots.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"test\", sep->arg[0], 4) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t((Bot*)client->GetPlayer()->GetTarget())->MessageGroup(\"Test message\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"BotCommands:\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot create - opens the guided companion recruiter\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot create [race] [gender] [class] [name] - legacy numeric creation\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot customize - customize the appearance of the bot\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot list - list all the bots you have created with this character\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot spawn [id] - activates and follows an owned bot\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot invite [id] - invites an active owned bot to your group\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot camp - removes the bot from your group and despawns them\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot attack - commands your bots to attack your target\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot hold or /bot resume - pauses or resumes your companions\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot spells - lists bot spells, not fully implemented yet\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot maintank - sets targeted group member as the main tank for your bots\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot delete [id] - deletes the bot with the given id (obtained from /bot list)\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot help\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must target a bot",
        "You must target a bot.",
        "Target one of your active bots or use /bot invite [id].",
        "You must give the id (from /bot list) to delete a bot",
        "You must give the id (from /bot list) to have a bot follow you",
        "You must give the id (from /bot list) to stop a following bot",
        "/bot create - opens the guided companion recruiter",
        "/bot create [race] [gender] [class] [name] - legacy numeric creation",
        "/bot customize - customize the appearance of the bot",
        "/bot list - list all the bots you have created with this character",
        "/bot spawn [id] - activates and follows an owned bot",
        "/bot invite [id] - invites an active owned bot to your group",
        "/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided",
        "/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)",
        "/bot camp - removes the bot from your group and despawns them",
        "/bot attack - commands your bots to attack your target",
        "/bot hold or /bot resume - pauses or resumes your companions",
        "/bot spells - lists bot spells, not fully implemented yet",
        "/bot maintank - sets targeted group member as the main tank for your bots",
        "/bot delete [id] - deletes the bot with the given id (obtained from /bot list)",
        "/bot help"
      ]
    },
    "506": {
      "symbol": "COMMAND_BOT_SETTINGS",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6370,
      "body": "{ Command_Bot_Settings(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_Settings",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 880,
          "body": "{\n\tBot* access_target = client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot() ?\n\t\tstatic_cast<Bot*>(client->GetPlayer()->GetTarget()) : nullptr;\n\tif (!RequireBotAccess(client, BotAction::Manage, access_target))\n\t\treturn;\n\tint32 val;\n\tif (sep && sep->IsSet(0) && sep->GetInt(1, val)) {\n\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\tif (bot->GetOwner() == client->GetPlayer()) {\n\t\t\t\tif (strncasecmp(\"helm\", sep->arg[0], 4) == 0) {\n\t\t\t\t\tbot->ShowHelm = (val == 1) ? true : false;\n\t\t\t\t\tbot->info_changed = true;\n\t\t\t\t\tbot->changed = true;\n\t\t\t\t\tbot->GetZone()->SendSpawnChanges(bot);\n\t\t\t\t}\n\t\t\t\telse if (strncasecmp(\"cloak\", sep->arg[0], 5) == 0) {\n\t\t\t\t\tbot->ShowCloak = (val == 1) ? true : false;\n\t\t\t\t\tbot->info_changed = true;\n\t\t\t\t\tbot->changed = true;\n\t\t\t\t\tbot->GetZone()->SendSpawnChanges(bot);\n\t\t\t\t}\n\t\t\t\telse if (strncasecmp(\"taunt\", sep->arg[0], 5) == 0) {\n\t\t\t\t\tbot->CanTaunt = (val == 1) ? true : false;\n\t\t\t\t}\n\t\t\t\telse if (strncasecmp(\"hood\", sep->arg[0], 4) == 0) {\n\t\t\t\t\tbot->SetHideHood((val == 1) ? 0 : 1);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tCommand_Bot(client, sep);\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only change settings on your own bot.\");\n\t\t}\n\t\telse\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot.\");\n\t}\n\telse\n\t\tCommand_Bot(client, sep);\n}"
        },
        {
          "function": "Command_Bot",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 51,
          "body": "{\n\n\tif (sep && sep->IsSet(0)) {\n\t\tBotAction requested_action = BotAction::Manage;\n\t\tif (strncasecmp(\"help\", sep->arg[0], 4) == 0 || strncasecmp(\"list\", sep->arg[0], 4) == 0)\n\t\t\trequested_action = BotAction::Inspect;\n\t\telse if (strncasecmp(\"camp\", sep->arg[0], 4) == 0)\n\t\t\trequested_action = BotAction::Camp;\n\t\telse if (strncasecmp(\"delete\", sep->arg[0], 6) == 0)\n\t\t\trequested_action = BotAction::Delete;\n\t\tBotAccessContext access_context;\n\t\taccess_context.source = BotInvocationSource::DirectCommand;\n\t\tif (requested_action == BotAction::Manage && client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\t\taccess_context.target_bot = static_cast<Bot*>(client->GetPlayer()->GetTarget());\n\t\tBotAccessDecision access = BotAccessPolicy::Evaluate(client, requested_action, access_context);\n\t\tBotAccessPolicy::Audit(client, requested_action, access_context, access);\n\t\tif (!access.allowed) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, access.reason.c_str());\n\t\t\treturn;\n\t\t}\n\t\tif (strncasecmp(\"invite\", sep->arg[0], 6) == 0) {\n\t\t\tBot* bot = ResolveActiveBot(client, sep, 1);\n\t\t\tif (!bot) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMANDS, \"Target one of your active bots or use /bot invite [id].\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!RequireBotAccess(client, BotAction::Manage, bot))\n\t\t\t\treturn;\n\t\t\tBotLifecycle::InviteToGroup(client, bot);\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"hold\", sep->arg[0], 4) == 0 || strncasecmp(\"resume\", sep->arg[0], 6) == 0) {\n\t\t\tconst bool hold = strncasecmp(\"hold\", sep->arg[0], 4) == 0;\n\t\t\tGroupMemberInfo* owner_group = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif (owner_group) {\n\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(owner_group->group_id);\n\t\t\t\tif (group) {\n\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\tfor (GroupMemberInfo* member_info : *group->GetMembers()) {\n\t\t\t\t\t\tif (member_info && member_info->member && member_info->member->IsBot()) {\n\t\t\t\t\t\t\tBot* bot = static_cast<Bot*>(member_info->member);\n\t\t\t\t\t\t\tif (bot->GetOwner() == client->GetPlayer()) {\n\t\t\t\t\t\t\t\tBotBrain* brain = dynamic_cast<BotBrain*>(bot->Brain());\n\t\t\t\t\t\t\t\tif (brain)\n\t\t\t\t\t\t\t\t\tbrain->SetHeld(hold);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t}\n\t\t\t}\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, hold ? \"Your companions will hold here.\" : \"Your companions resume following.\");\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"camp\", sep->arg[0], 4) == 0) {\n\t\t\tBot* bot = nullptr;\n\t\t\tint32 camp_index = 0;\n\t\t\tif (sep->GetInt(1, camp_index) && client->GetPlayer()->SpawnedBots.count(camp_index)) {\n\t\t\t\tSpawn* camp_spawn = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[camp_index]);\n\t\t\t\tif (camp_spawn && camp_spawn->IsBot())\n\t\t\t\t\tbot = static_cast<Bot*>(camp_spawn);\n\t\t\t}\n\t\t\telse if (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot())\n\t\t\t\tbot = static_cast<Bot*>(client->GetPlayer()->GetTarget());\n\t\t\tif (!bot) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (bot->GetOwner() != client->GetPlayer()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only camp your own bots.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tBotAccessContext camp_context;\n\t\t\tcamp_context.source = BotInvocationSource::DirectCommand;\n\t\t\tcamp_context.target_bot = bot;\n\t\t\tBotAccessDecision camp_access = BotAccessPolicy::Evaluate(client, BotAction::Camp, camp_context);\n\t\t\tBotAccessPolicy::Audit(client, BotAction::Camp, camp_context, camp_access, bot->BotIndex);\n\t\t\tif (!camp_access.allowed) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, camp_access.reason.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tbot->Camp();\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"attack\", sep->arg[0], 6) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity() && client->GetPlayer()->GetTarget()->Alive()) {\n\t\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\n\t\t\t\tif (client->GetPlayer()->GetDistance(target) <= 50) {\n\t\t\t\t\tif (client->GetPlayer()->AttackAllowed(target)) {\n\t\t\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\t\t\tif (gmi) {\n\t\t\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\t\t\tif (group)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t\t\t\t\t\tdeque<GroupMemberInfo*>::iterator itr;\n\t\t\t\t\t\t\t\t\n \t\t\t\t\t\t\t\tfor (itr = members->begin(); itr != members->end(); itr++) {\n                                                               \n              \n             \n\t\t\t\t\t\t\t\t\tif ((*itr)->member && (*itr)->member->IsBot() && ((Bot*)(*itr)->member)->GetOwner() == client->GetPlayer()) {\n                                      \n\t\t\t\t\t\t\t\t\t\t((Bot*)(*itr)->member)->SetCombatTarget(target->GetID());\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can not attack that target.\");\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Target is to far away.\");\n\t\t\t}\n\t\t\telse\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Not a valid target.\");\n\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"spells\", sep->arg[0], 6) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\n\t\t\t\tmap<int32, int8>* spells = bot->GetBotSpells();\n\t\t\t\tmap<int32, int8>::iterator itr;\n\t\t\t\tstring output;\n\t\t\t\tfor (itr = spells->begin(); itr != spells->end(); itr++) {\n\t\t\t\t\tSpell* spell = master_spell_list.GetSpell(itr->first, itr->second);\n\t\t\t\t\tif (spell) {\n\t\t\t\t\t\toutput += spell->GetName();\n\t\t\t\t\t\toutput += \"\\n\";\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, output.c_str());\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"maintank\", sep->arg[0], 8) == 0) {\n\t\t\tif (!client->GetPlayer()->GetTarget() || !client->GetPlayer()->GetTarget()->IsEntity()) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"Not a valid target.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\tif (!gmi) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"You are not in a group.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tEntity* target = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\tif (!world.GetGroupManager()->IsInGroup(gmi->group_id, target)) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COMMAND_TEXT, \"Target is not in your group.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\tif (group)\n\t\t\t{\n\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers(); \n\t\t\t\t\n\t\t\t\tfor (int8 i = 0; i < members->size(); i++) {\n\t\t\t\t\tGroupMemberInfo* gmi2 = members->at(i);\n\t\t\t\t\tif(!gmi2 || !gmi2->member)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (gmi2->member->IsBot() && ((Bot*)gmi2->member)->GetOwner() == client->GetPlayer()) {\n\t\t\t\t\t\t((Bot*)gmi2->member)->SetMainTank(target);\n\t\t\t\t\t\tclient->Message(CHANNEL_COMMAND_TEXT, \"Setting main tank for %s to %s\", gmi2->member->GetName(), target->GetName());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"delete\", sep->arg[0], 6) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n\t\t\t\tif (!database.BotExists(client->GetCharacterID(), index)) {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"No owned bot has that id.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->Camp();\n\t\t\t\t}\n\n\t\t\t\tdatabase.DeleteBot(client->GetCharacterID(), index);\n\t\t\t\tBotAccessDecision deleted = access;\n\t\t\t\tdeleted.reason = \"deleted\";\n\t\t\t\tBotAccessPolicy::Audit(client, BotAction::Delete, access_context, deleted, index);\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Bot has been deleted.\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to delete a bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"follow\", sep->arg[0], 6) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n\n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->SetFollowTarget(client->GetPlayer(), 5);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to have a bot follow you\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"stopfollow\", sep->arg[0], 10) == 0) {\n\t\t\tint32 index;\n\t\t\tif (sep->GetInt(1, index)) {\n \n\t\t\t\t                                                          \n\t\t\t\tif (client->GetPlayer()->SpawnedBots.count(index) > 0) {\n\t\t\t\t\tSpawn* bot = client->GetCurrentZone()->GetSpawnByID(client->GetPlayer()->SpawnedBots[index]);\n\t\t\t\t\tif (bot && bot->IsBot())\n\t\t\t\t\t\t((Bot*)bot)->SetFollowTarget(nullptr);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must give the id (from /bot list) to stop a following bot\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"summon\", sep->arg[0], 6) == 0) {\n\t\t\tif (sep->IsSet(1) && strncasecmp(\"group\", sep->arg[1], 5) == 0) {\n\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\tif (gmi) {\n\t\t\t\t\tPlayer* player = client->GetPlayer();\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\tif (group)\n\t\t\t\t\t{\n\t\t\t\t\t\tgroup->MGroupMembers.readlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t\tdeque<GroupMemberInfo*>* members = group->GetMembers();\n\t\t\t\t\t\tfor (int8 i = 0; i < members->size(); i++) {\n\t\t\t\t\t\t\tEntity* member = members->at(i)->member;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(!member)\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (member->IsBot() && ((Bot*)member)->GetOwner() == player) {\n\t\t\t\t\t\t\t\tif(member->GetZone() && member->GetLocation() != player->GetLocation()) {\n\t\t\t\t\t\t\t\t\tmember->SetLocation(player->GetLocation());\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmember->SetX(player->GetX());\n\t\t\t\t\t\t\t\tmember->SetY(player->GetY());\n\t\t\t\t\t\t\t\tmember->SetZ(player->GetZ());\n\t\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Summoning %s.\", member->GetName());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tgroup->MGroupMembers.releasereadlock(__FUNCTION__, __LINE__);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You are not in a group.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t\tBot* bot = (Bot*)client->GetPlayer()->GetTarget();\n\t\t\t\t\tPlayer* player = client->GetPlayer();\n\t\t\t\t\tif (bot && bot->GetOwner() == player) {\n\t\t\t\t\t\tbot->SetLocation(player->GetLocation());\n\t\t\t\t\t\tbot->SetX(player->GetX());\n\t\t\t\t\t\tbot->SetY(player->GetY());\n\t\t\t\t\t\tbot->SetZ(player->GetZ());\n\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Summoning %s.\", bot->GetName());\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You can only summon your own bots.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You must target a bot.\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse if (strncasecmp(\"test\", sep->arg[0], 4) == 0) {\n\t\t\tif (client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsBot()) {\n\t\t\t\t((Bot*)client->GetPlayer()->GetTarget())->MessageGroup(\"Test message\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"BotCommands:\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot create - opens the guided companion recruiter\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot create [race] [gender] [class] [name] - legacy numeric creation\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot customize - customize the appearance of the bot\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot list - list all the bots you have created with this character\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot spawn [id] - activates and follows an owned bot\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot invite [id] - invites an active owned bot to your group\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot camp - removes the bot from your group and despawns them\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot attack - commands your bots to attack your target\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot hold or /bot resume - pauses or resumes your companions\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot spells - lists bot spells, not fully implemented yet\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot maintank - sets targeted group member as the main tank for your bots\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot delete [id] - deletes the bot with the given id (obtained from /bot list)\");\n\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot help\");\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "You must target a bot.",
        "Target one of your active bots or use /bot invite [id].",
        "You must target a bot",
        "You must give the id (from /bot list) to delete a bot",
        "You must give the id (from /bot list) to have a bot follow you",
        "You must give the id (from /bot list) to stop a following bot",
        "/bot create - opens the guided companion recruiter",
        "/bot create [race] [gender] [class] [name] - legacy numeric creation",
        "/bot customize - customize the appearance of the bot",
        "/bot list - list all the bots you have created with this character",
        "/bot spawn [id] - activates and follows an owned bot",
        "/bot invite [id] - invites an active owned bot to your group",
        "/bot inv [give/list/remove] - manage bot equipment, for remove a slot must be provided",
        "/bot settings [helm/hood/cloak/taunt] [0/1] - Turn setting on (1) or off(0)",
        "/bot camp - removes the bot from your group and despawns them",
        "/bot attack - commands your bots to attack your target",
        "/bot hold or /bot resume - pauses or resumes your companions",
        "/bot spells - lists bot spells, not fully implemented yet",
        "/bot maintank - sets targeted group member as the main tank for your bots",
        "/bot delete [id] - deletes the bot with the given id (obtained from /bot list)",
        "/bot help"
      ]
    },
    "507": {
      "symbol": "COMMAND_BOT_HELP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6371,
      "body": "{ Command_Bot_Help(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Bot_Help",
          "file": "WorldServer/Bots/BotCommands.cpp",
          "line": 921,
          "body": "{\n\tif (!RequireBotAccess(client, BotAction::Inspect))\n\t\treturn;\n\tif (sep && sep->IsSet(0)) {\n\t\tif (strncasecmp(\"race\", sep->arg[0], 4) == 0) {\n\t\t\tstring title = \"Race ID's\";\n\t\t\tstring details;\n\t\t\tdetails += \"0\\tBarbarian\\n\";\n\t\t\tdetails += \"1\\tDark Elf\\n\";\n\t\t\tdetails += \"2\\tDwarf\\n\";\n\t\t\tdetails += \"3\\tErudite\\n\";\n\t\t\tdetails += \"4\\tFroglok\\n\";\n\t\t\tdetails += \"5\\tGnome\\n\";\n\t\t\tdetails += \"6\\tHalf Elf\\n\";\n\t\t\tdetails += \"7\\tHalfling\\n\";\n\t\t\tdetails += \"8\\tHigh Elf\\n\";\n\t\t\tdetails += \"9\\tHuman\\n\";\n\t\t\tdetails += \"10\\tIksar\\n\";\n\t\t\tdetails += \"11\\tKerra\\n\";\n\t\t\tdetails += \"12\\tOgre\\n\";\n\t\t\tdetails += \"13\\tRatonga\\n\";\n\t\t\tdetails += \"14\\tTroll\\n\";\n\t\t\tdetails += \"15\\tWood Elf\\n\";\n\t\t\tdetails += \"16\\tFae\\n\";\n\t\t\tdetails += \"17\\tArasai\\n\";\n\t\t\tdetails += \"18\\tSarnak\\n\";\n\t\t\tdetails += \"19\\tVampire\\n\";\n\t\t\tdetails += \"20\\tAerakyn\\n\";\n\t\t\tclient->SendShowBook(client->GetPlayer(), title, 0, 1, details);\n\t\t\treturn;\n\t\t}\n\t\telse if (strncasecmp(\"class\", sep->arg[0], 5) == 0) {\n\t\t\tstring title = \"Class ID's\";\n\t\t\tstring details;\n\t\t\tdetails += \"0\\tCOMMONER\\n\";\n\t\t\tdetails += \"1\\tFIGHTER\\n\";\n\t\t\tdetails += \"2\\tWARRIOR\\n\";\n\t\t\tdetails += \"3\\tGUARDIAN\\n\";\n\t\t\tdetails += \"4\\tBERSERKER\\n\";\n\t\t\tdetails += \"5\\tBRAWLER\\n\";\n\t\t\tdetails += \"6\\tMONK\\n\";\n\t\t\tdetails += \"7\\tBRUISER\\n\";\n\t\t\tdetails += \"8\\tCRUSADER\\n\";\n\t\t\tdetails += \"9\\tSHADOWKNIGHT\\n\";\n\t\t\tdetails += \"10\\tPALADIN\\n\";\n\t\t\tdetails += \"11\\tPRIEST\\n\";\n\t\t\tdetails += \"12\\tCLERIC\\n\";\n\t\t\tdetails += \"13\\tTEMPLAR\\n\";\n\t\t\tdetails += \"14\\tINQUISITOR\\n\";\n\t\t\tdetails += \"15\\tDRUID\\n\";\n\t\t\tdetails += \"16\\tWARDEN\\n\";\n\t\t\tdetails += \"17\\tFURY\\n\";\n\t\t\tdetails += \"18\\tSHAMAN\\n\";\n\t\t\tdetails += \"19\\tMYSTIC\\n\";\n\t\t\tdetails += \"20\\tDEFILER\\n\";\n\n\t\t\tstring details2 = \"21\\tMAGE\\n\";\n\t\t\tdetails2 += \"22\\tSORCERER\\n\";\n\t\t\tdetails2 += \"23\\tWIZARD\\n\";\n\t\t\tdetails2 += \"24\\tWARLOCK\\n\";\n\t\t\tdetails2 += \"25\\tENCHANTER\\n\";\n\t\t\tdetails2 += \"26\\tILLUSIONIST\\n\";\n\t\t\tdetails2 += \"27\\tCOERCER\\n\";\n\t\t\tdetails2 += \"28\\tSUMMONER\\n\";\n\t\t\tdetails2 += \"29\\tCONJUROR\\n\";\n\t\t\tdetails2 += \"30\\tNECROMANCER\\n\";\n\t\t\tdetails2 += \"31\\tSCOUT\\n\";\n\t\t\tdetails2 += \"32\\tROGUE\\n\";\n\t\t\tdetails2 += \"33\\tSWASHBUCKLER\\n\";\n\t\t\tdetails2 += \"34\\tBRIGAND\\n\";\n\t\t\tdetails2 += \"35\\tBARD\\n\";\n\t\t\tdetails2 += \"36\\tTROUBADOR\\n\";\n\t\t\tdetails2 += \"37\\tDIRGE\\n\";\n\t\t\tdetails2 += \"38\\tPREDATOR\\n\";\n\t\t\tdetails2 += \"39\\tRANGER\\n\";\n\t\t\tdetails2 += \"40\\tASSASSIN\\n\";\n\n\t\t\tstring details3 = \"\\\\#FF0000Following aren't implemented yet.\\\\#000000\\n\";\n\t\t\tdetails3 += \"41\\tANIMALIST\\n\";\n\t\t\tdetails3 += \"42\\tBEASTLORD\\n\";\n\t\t\tdetails3 += \"43\\tSHAPER\\n\";\n\t\t\tdetails3 += \"44\\tCHANNELER\\n\";\n\n\t\t\tclient->SendShowBook(client->GetPlayer(), title, 0, 3, details, details2, details3);\n\t\t\treturn;\n\t\t}\n\t}\n\telse {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Bot help is WIP.\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot help race - race id list\");\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"/bot help class - class id list\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "/bot help race - race id list",
        "/bot help class - class id list"
      ]
    },
    "750": {
      "symbol": "GET_AA_XML",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6372,
      "body": "{ Get_AA_Xml(client, sep); break; }",
      "delegates": [
        {
          "function": "Get_AA_Xml",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13251,
          "body": "{\n\tPrintSep(sep, \"Get_AA_Xml\");\n\tif (sep && sep->IsSet(0)) {\n\t\tstring tabnum = sep->arg[0];\n\t\tstring spellid = sep->arg[1];\n\n\n\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "751": {
      "symbol": "ADD_AA",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6373,
      "body": "{ Add_AA(client, sep); break; }",
      "delegates": [
        {
          "function": "Add_AA",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13261,
          "body": "{\n\tPrintSep(sep, \"Add_AA\");\n\tif (sep && sep->IsSet(0)) {\n\t\tint32 spell_id = atoul(sep->arg[1]);\n\t\tint8 spell_tier = 0;\n\t\tspell_tier = client->GetPlayer()->GetSpellTier(spell_id);\n\t\tAltAdvanceData* data = master_aa_list.GetAltAdvancement(spell_id);\n\t\t                         \n\t\tif(!data) {\n\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Error in Add_AA no data for spell_id %u spell_tier %u\", spell_id, spell_tier);\n\t\t\treturn;\n\t\t}\n\t\tif (spell_tier >= data->maxRank) {\n\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"Error in Add_AA spell_tier %u >= maxRank %u\", spell_tier, data->maxRank);\n\t\t\treturn;\n\t\t}\n\t\tif (!spell_tier) {\n\t\t\tspell_tier = 1;\n\t\t}\n\t\tif (!client->GetPlayer()->HasSpell(spell_id, 0, true))\n\t\t{\n\t\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier);\n\t\t\tif(spell)\n\t\t\t{\n\t\t\t\tclient->GetPlayer()->AddSpellBookEntry(spell_id, 1, client->GetPlayer()->GetFreeSpellBookSlot(spell->GetSpellData()->spell_book_type), spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\t\tclient->GetPlayer()->UnlockSpell(spell);\n\t\t\t\tclient->SendSpellUpdate(spell);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier + 1 );\n\t\t\tif(spell)\n\t\t\t{\n\t\t\t\tsint32 old_slot = client->GetPlayer()->GetSpellSlot(spell->GetSpellID());\n\t\t\t\tclient->GetPlayer()->RemoveSpellBookEntry(spell->GetSpellID());\n\t\t\t\tclient->GetPlayer()->AddSpellBookEntry(spell->GetSpellID(), spell->GetSpellTier(), old_slot, spell->GetSpellData()->spell_book_type, spell->GetSpellData()->linked_timer, true);\n\t\t\t\tclient->GetPlayer()->UnlockSpell(spell);\n\t\t\t\tclient->SendSpellUpdate(spell);\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\t\t                  \n\t\tif (!spell_tier)\n\t\t\tspell_tier = 1;\n\t\tSpell* spell = master_spell_list.GetSpell(spell_id, spell_tier);\n\t\tif (spell) {\n\t\t\tclient->GetCurrentZone()->ProcessSpell(spell, client->GetPlayer(), client->GetPlayer());\n\t\t}\n\t}\n\telse {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage:  /useability {spell_id} [spell_tier]\");\n\t}\n\tif(client->GetVersion() >= 843)\n\t\tmaster_aa_list.DisplayAA(client, 0, 0);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage:  /useability {spell_id} [spell_tier]"
      ]
    },
    "752": {
      "symbol": "COMMIT_AA_PROFILE",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6374,
      "body": "{ Commit_AA_Profile(client, sep); break; }",
      "delegates": [
        {
          "function": "Commit_AA_Profile",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13318,
          "body": "{\n\tPrintSep(sep, \"Commit_AA_Profile\");\n\tif (sep && sep->IsSet(0)) {\n\n\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "753": {
      "symbol": "BEGIN_AA_PROFILE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6375,
      "body": "{ Begin_AA_Profile(client, sep); break; }",
      "delegates": [
        {
          "function": "Begin_AA_Profile",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13325,
          "body": "{\n\tPrintSep(sep, \"Begin_AA_Profile\");\n\tif (sep && sep->IsSet(0)) {\n\t\tif(client->GetVersion() > 843)\n\t\t\tmaster_aa_list.DisplayAA(client, 100, 2);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "754": {
      "symbol": "BACK_AA",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6376,
      "body": "{ Back_AA(client, sep); break; }",
      "delegates": [
        {
          "function": "Back_AA",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13332,
          "body": "{\n\tif (sep && sep->IsSet(0)) {\n\t\tPrintSep(sep, \"Back_AA\");\n\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "755": {
      "symbol": "REMOVE_AA",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6377,
      "body": "{ Remove_AA(client, sep); break; }",
      "delegates": [
        {
          "function": "Remove_AA",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13338,
          "body": "{\n\tif (sep && sep->IsSet(0)) {\n\t\tPrintSep(sep, \"Remove_AA\");\n\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "756": {
      "symbol": "SWITCH_AA_PROFILE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6378,
      "body": "{ Switch_AA_Profile(client, sep); break; }",
      "delegates": [
        {
          "function": "Switch_AA_Profile",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13242,
          "body": "{\n\tPrintSep(sep, \"Switch_AA_Profile\");\n\t\tif (sep && sep->IsSet(0)) {\n\t\tstring type = sep->arg[0];\n\t\tint8 newtemplate = atoul(sep->arg[1]);\n\t\tif(client->GetVersion() > 843)\n\t\t\tmaster_aa_list.DisplayAA(client, newtemplate, 1);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "757": {
      "symbol": "CANCEL_AA_PROFILE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6379,
      "body": "{ Cancel_AA_Profile(client, sep); break; }",
      "delegates": [
        {
          "function": "Cancel_AA_Profile",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13345,
          "body": "{\n\tMasterAAList master_aa_list;\n\tPrintSep(sep, \"Cancel_AA_Profile\");\t\n\tif(client->GetVersion() > 843)\n\t\tmaster_aa_list.DisplayAA(client, 0, 0);\n\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "758": {
      "symbol": "SAVE_AA_PROFILE",
      "status": "diagnostic_only",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6380,
      "body": "{ Save_AA_Profile(client, sep); break; }",
      "delegates": [
        {
          "function": "Save_AA_Profile",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13352,
          "body": "{\n\tif (sep && sep->IsSet(0)) {\n\t\tPrintSep(sep, \"Save_AA_Profile\");\n\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "315": {
      "symbol": "COMMAND_TARGETITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6381,
      "body": "{ Command_TargetItem(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_TargetItem",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13359,
          "body": "{\n\tif (!sep || sep->GetArgNumber() < 1 || !client->GetPlayer()) return;\n\n\tif (!sep->IsNumber(0)) return;\n\n\tint32 request_id = atoul(sep->arg[0]);\n\n\tif (!sep->IsNumber(1)) return;\n\n\tsint32 item_id = atoi(sep->arg[1]);\n\n\tif (client->IsCurrentTransmuteID(request_id)) {\n\t\tTransmute::HandleItemResponse(client, client->GetPlayer(), request_id, reinterpret_cast<int32&>(item_id));\n\t}\n\telse if (client->IsCurrentTransmuteID(item_id)) {\n\t\tif (!sep->IsSet(2)) return;\n\n\t\tif (sep->IsNumber(2) && atoi(sep->arg[2]) == 1) {\n\t\t\tTransmute::HandleConfirmResponse(client, client->GetPlayer(), reinterpret_cast<int32&>(item_id));\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "521": {
      "symbol": "COMMAND_FINDSPAWN",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6382,
      "body": "{ Command_FindSpawn(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_FindSpawn",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13382,
          "body": "{\n\tif(sep)\n\t\tclient->GetCurrentZone()->FindSpawn(client, (char*)sep->argplus[0]);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "525": {
      "symbol": "COMMAND_MOVECHARACTER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6383,
      "body": "{ Command_MoveCharacter(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_MoveCharacter",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13387,
          "body": "{\n\tif(sep && sep->arg[0][0] && sep->arg[1][0])\n\t{\n\t\tstring name = database.getSafeEscapeString(sep->arg[0]);\n\t\tstring zoneName = database.getSafeEscapeString(sep->arg[1]);\n\t\tint32 zone_duplicating_id = 0;\n\t\tif(sep->arg[2][0])\n\t\t\tzone_duplicating_id = atoul(sep->arg[2]);\n\t\t\n\t\tstring query = \"UPDATE characters c, zones z set c.x = z.safe_x, c.y = z.safe_y, c.z = z.safe_z, c.heading = z.safe_heading, c.current_zone_id = z.id, c.zone_duplicating_id = \" + std::to_string(zone_duplicating_id) + \" where c.name = '\" + name + \"' and z.name='\" + zoneName + \"'\";\n\t\tif (database.RunQuery(query.c_str(), query.length()))\n\t\t{\n\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Ran query:%s\", query.c_str());\n\t\t}\n\t\telse\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Query FAILED to run: %s\", query.c_str());\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "526": {
      "symbol": "COMMAND_CRAFTITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6384,
      "body": "{\n\t\t\t\t\tItem* item = 0;\n\t\t\t\t\tif (sep && sep->IsNumber(0)) {\n\t\t\t\t\t\tint32 item_id = atol(sep->arg[0]);\n\t\t\t\t\t\tint32 quantity = 1;\n\n\t\t\t\t\t\tif (sep->arg[1] && sep->IsNumber(1))\n\t\t\t\t\t\t\tquantity = atoi(sep->arg[1]);\n\t\t\t\t\t\titem = new Item(master_item_list.GetItem(item_id));\n\t\t\t\t\t\tif (!item) {\n\t\t\t\t\t\t\tLogWrite(TRADESKILL__ERROR, 0, \"CraftItem\", \"Item (%u) not found.\", item_id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\titem->details.count = quantity;\n\t\t\t\t\t\t\t                                                                                                       \n\t\t\t\t\t\t\tclient->Message(CHANNEL_COLOR_CHAT_RELATIONSHIP, \"You created %s.\", item->CreateItemLink(client->GetVersion()).c_str());\n\t\t\t\t\t\t\tbool itemDeleted = false;\n\t\t\t\t\t\t\tclient->AddItem(item, &itemDeleted);\n\t\t\t\t\t\t\t                                  \n\t\t\t\t\t\t\tint8 update_amt = 0;\n\t\t\t\t\t\t\tif (!itemDeleted && item->stack_count > 1)\n\t\t\t\t\t\t\t\tupdate_amt = 1;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tupdate_amt = quantity;\n\n\t\t\t\t\t\t\tif(!itemDeleted)\n\t\t\t\t\t\t\t\tclient->GetPlayer()->CheckQuestsCraftUpdate(item, update_amt);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\telse {\n\t\t\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Usage: /craftitem {item_id} [quantity] \");\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}",
      "delegates": [],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /craftitem {item_id} [quantity] "
      ]
    },
    "529": {
      "symbol": "COMMAND_UNMENTOR",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6420,
      "body": "{\n\t\t\tclient->GetPlayer()->MentorTarget();\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "528": {
      "symbol": "COMMAND_MENTOR",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6421,
      "body": "{\n\t\t\tclient->GetPlayer()->MentorTarget();\n\t\t\tbreak;\n\t\t}",
      "delegates": [],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "530": {
      "symbol": "COMMAND_CANCEL_EFFECT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6425,
      "body": "{ Command_CancelEffect(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CancelEffect",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13501,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) \n\t{\n\t\tint32 spell_id = atoul(sep->arg[0]);\n\t\t\n\t\tSpellEffects* effect = client->GetPlayer()->GetSpellEffect(spell_id);\n\t\tLuaSpell* active_spell = effect ? effect->ResolveSpell() : nullptr;\n\t\tif(!effect || !active_spell || !active_spell->spell || active_spell->spell->GetSpellData()->det_type) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tEntity* caster = client->GetPlayer()->GetZone() ? static_cast<Entity*>(client->GetPlayer()->GetZone()->GetSpawnByID(effect->caster_id)) : nullptr;\n\t\tMaintainedEffects* meffect = caster ? caster->GetMaintainedSpell(spell_id) : nullptr;\n\t\tLuaSpell* maintained_spell = meffect ? meffect->ResolveSpell() : nullptr;\n\t\t\n\t\tif (!maintained_spell || !maintained_spell->ResolveCaster() || !maintained_spell->ResolveCaster()->GetZone() ||\n\t\t!maintained_spell->ResolveCaster()->GetZone()->GetSpellProcess()->DeleteCasterSpell(maintained_spell, \"canceled\", false, client->GetPlayer()))\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"The spell effect could not be cancelled.\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "531": {
      "symbol": "COMMAND_CUREPLAYER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6426,
      "body": "{ Command_CurePlayer(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CurePlayer",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13536,
          "body": "{\n\tClientLookupScope client_lookups;\n\tEntity* target = nullptr;\n\tbool use_spells = true;\n\tbool use_potions = true;\n\tif (sep && sep->arg[0] && sep->arg[1]) {\n\t\tif(sep->arg[2]) {\n\t\t\tstd::string type(sep->arg[2]);\n\t\t\tboost::algorithm::to_lower(type);\n\t\t\tif(type == \"potion\")\n\t\t\t\tuse_spells = false;\n\t\t\telse if(type == \"spell\")\n\t\t\t\tuse_potions = false;\n\t\t}\n\t\t\n\t\tif(strlen(sep->arg[0]) > 1 && isdigit(sep->arg[0][1])) {\n\t\t\tint32 mapped_position = (int32)(sep->arg[0][1]) - 48;\n\t\t\t\n\t\t\t                                    \n\t\t\tif(sep->arg[0][0] == 'g' && !mapped_position) {\n\t\t\t\ttarget = (Entity*)client->GetPlayer();\n\t\t\t}\n\t\t\telse if(sep->arg[0][0] == 'r') {\n\t\t\t\tstd::vector<int32> raidGroups;\n\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\tif(gmi)\n\t\t\t\t\tworld.GetGroupManager()->GetRaidGroups(gmi->group_id, &raidGroups);\n\t\t\t\tif(raidGroups.size() < 1) {\n\t\t\t\t\tif (gmi && gmi->group_id) {\n\t\t\t\t\t\traidGroups.push_back(gmi->group_id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tint8 group_idx = mapped_position / 6;\n\t\t\t\tif(group_idx < raidGroups.size()) {\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(raidGroups.at(group_idx));\n\t\t\t\t\tif(group) {\n\t\t\t\t\t\tint8 actual_idx = mapped_position - (group_idx * 6);\n\t\t\t\t\t\ttarget = group->GetGroupMemberByPosition(client->GetPlayer(), actual_idx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\tif (gmi && gmi->group_id) {\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\tif(group) {\n\t\t\t\t\t\ttarget = group->GetGroupMemberByPosition(client->GetPlayer(), mapped_position);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t\tClient* target_client = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\t\t\tif(target_client && target_client->GetPlayer() && target_client->GetPlayer()->GetZone() == client->GetPlayer()->GetZone()) {\n\t\t\t\t\ttarget = (Entity*)target_client->GetPlayer();\n\t\t\t\t}\n\t\t}\n\t\t\n\t\tItemEffectType type = EFFECT_CURE_TYPE_ALL;\n\t\tbool successful_spell = false;\n\t\tbool successful_potion = false;\n\t\tif(target) {\n\t\t\tSpellBookEntry* entry = nullptr;\n\t\t\tstd::string str(sep->arg[1]);\n\t\t\tboost::algorithm::to_lower(str);\n\t\t\t\t\tif(str == \"arcane\") {\n\t\t\t\t\t\ttype = EFFECT_CURE_TYPE_ARCANE;\n\t\t\t\t\t\t                                   \n\t\t\t\t\t\tif(use_spells && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureArcaneSpellID)->GetInt32()) {\n\t\t\t\t\t\t\tentry = client->GetPlayer()->GetSpellBookSpell(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureArcaneSpellID)->GetInt32());                \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(str == \"trauma\") {\n\t\t\t\t\t\ttype = EFFECT_CURE_TYPE_TRAUMA;\n\t\t\t\t\t\t                                   \n\t\t\t\t\t\tif(use_spells && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureTraumaSpellID)->GetInt32()) {\n\t\t\t\t\t\t\tentry = client->GetPlayer()->GetSpellBookSpell(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureTraumaSpellID)->GetInt32());                \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(str == \"noxious\") {\n\t\t\t\t\t\ttype = EFFECT_CURE_TYPE_NOXIOUS;\n\t\t\t\t\t\tif(use_spells && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureNoxiousSpellID)->GetInt32()) {\n\t\t\t\t\t\t\tentry = client->GetPlayer()->GetSpellBookSpell(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureNoxiousSpellID)->GetInt32());                \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(str == \"curse\") {\n\t\t\t\t\t\ttype = EFFECT_CURE_TYPE_CURSE;\n\t\t\t\t\t\tif(use_spells && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureCurseSpellID)->GetInt32()) {\n\t\t\t\t\t\t\tentry = client->GetPlayer()->GetSpellBookSpell(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureCurseSpellID)->GetInt32());              \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if(str == \"magic\") {\n\t\t\t\t\t\ttype = EFFECT_CURE_TYPE_MAGIC;\n\t\t\t\t\t\tif(use_spells && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureMagicSpellID)->GetInt32()) {\n\t\t\t\t\t\t\tentry = client->GetPlayer()->GetSpellBookSpell(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureMagicSpellID)->GetInt32());              \n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(use_spells) {\n\t\t\t\t\t                                                                                          \n\t\t\t\t\tif(!entry && rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureSpellID)->GetInt32()) {\n\t\t\t\t\t\tentry = client->GetPlayer()->GetSpellBookSpell(rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Spells, CureSpellID)->GetInt32());        \n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif(entry && entry->spell_id) {\n\t\t\t\t\t\tSpell* spell = master_spell_list.GetSpell(entry->spell_id, entry->tier);\n\t\t\t\t\t\ttarget->GetZone()->ProcessSpell(spell, (Entity*)client->GetPlayer(), target, true, false);\n\t\t\t\t\t\tsuccessful_spell = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\t\t\n\t\tif(!successful_spell && use_potions && target && type != NO_EFFECT_TYPE) {\n\t\t\tvector<Item*>* potential_items = client->GetItemsByEffectType(type, EFFECT_CURE_TYPE_ALL);\n\t\t\tif (potential_items && potential_items->size() > 0) {\n\t\t\t\tvector<Item*>::iterator itr;\n\t\t\t\tfor (itr = potential_items->begin(); itr != potential_items->end(); itr++)\n\t\t\t\t{\n\t\t\t\t\tItem* item = *itr;\n\t\t\t\t\tif(client->UseItem(item, target)) {\n\t\t\t\t\t\tsuccessful_potion = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_delete(potential_items);\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "533": {
      "symbol": "COMMAND_SHARE_QUEST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6427,
      "body": "{ Command_ShareQuest(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ShareQuest",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13673,
          "body": "{\n\tif (sep && sep->arg[0] && sep->IsNumber(0)) {\n\t\tint32 quest_id = atoul(sep->arg[0]);\n\t\t\n\t\tbool hasQuest = client->GetPlayer()->HasAnyQuest(quest_id);\n\t\tif(hasQuest) {\n\t\tQuest* quest = master_quest_list.GetQuest(quest_id, false);\n\t\t\tif(quest) {\n\t\t\t\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t\t\t\tif (gmi && gmi->group_id) {\n\t\t\t\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\t\t\t\tif (group) {\n\t\t\t\t\t\tgroup->ShareQuestWithGroup(client, quest);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"Cannot find quest.\");\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "9": {
      "symbol": "COMMAND_YELL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6428,
      "body": "{ Command_Yell(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Yell",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13705,
          "body": "{\n\tEntity* player = (Entity*)client->GetPlayer();\n\tSpawn* res = nullptr;\n\tSpawn* prev = nullptr;\n\tbool cycleAll = false;\n\tif (player->GetTarget() == player) {\n\t\tcycleAll = true;                                     \n\t}\n\telse if (player->GetTarget()) {\n\t\tres = player->GetTarget();                                                                   \n\t}\n\n\tif (res && !client->GetPlayer()->IsEngagedBySpawnID(res->GetID()))\n\t\treturn;\n\n\tbool groupPermissionYell = true;\n\n\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\t                                             \n\tif (gmi) {\n\t\tdeque<GroupMemberInfo*>::iterator itr;\n\n\t\tworld.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__);\n\n\t\tPlayerGroup* group = world.GetGroupManager()->GetGroup(gmi->group_id);\n\t\tif (group && !group->GetGroupOptions()->default_yell && !gmi->leader) {                                             \n\t\t\tgroupPermissionYell = false;\n\t\t}\n\n\t\tworld.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__);\n\t}\n\n\tif (!groupPermissionYell) {\n\t\tLogWrite(COMMAND__ERROR, 0, \"Command\", \"%s permission to yell denied due to group yell method set to leader only\", client->GetPlayer()->GetName());\n\t\treturn;\n\t}\n\n\tbool alreadyYelled = false;\n\tdo {\n\t\tif (!res && player->IsEngagedInEncounter(&res)) {                                                     \n\n\t\t}\n\t\tif (!res || prev == res) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (res->IsNPC() && ((NPC*)res)->Brain()) {\n\t\t\tif (!alreadyYelled) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"You yell for help!\");\n\t\t\t\tstring yellMsg = std::string(client->GetPlayer()->GetName()) + \" yelled for help!\";\n\t\t\t\tclient->GetPlayer()->GetZone()->SimpleMessage(CHANNEL_COLOR_RED, yellMsg.c_str(), client->GetPlayer(), 35.0f, false);\n\t\t\t\tclient->GetPlayer()->GetZone()->SendYellPacket(client->GetPlayer());\n\t\t\t}\n\t\t\talreadyYelled = true;\n\n\t\t\tNPC* npc = (NPC*)res;\n\t\t\tnpc->Brain()->ClearEncounter();\n\t\t\tnpc->SetLockedNoLoot(ENCOUNTER_STATE_BROKEN);\n\t\t\tnpc->UpdateEncounterState(ENCOUNTER_STATE_BROKEN);\n\t\t}\n\t\tprev = res;\n\t\tres = nullptr;\n\t} while (cycleAll);\n\n\tif (!player->IsEngagedInEncounter()) {\n\t\tif (player->GetInfoStruct()->get_engaged_encounter()) {\n\t\t\tplayer->GetInfoStruct()->set_engaged_encounter(0);\n\t\t\tplayer->SetRegenValues((player->GetInfoStruct()->get_effective_level() > 0) ? player->GetInfoStruct()->get_effective_level() : player->GetLevel());\n\t\t\tclient->GetPlayer()->SetCharSheetChanged(true);\n\t\t\tplayer->info_changed = true;\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "534": {
      "symbol": "COMMAND_SETAUTOLOOTMODE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6429,
      "body": "{ Command_SetAutoLootMode(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SetAutoLootMode",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13785,
          "body": "{\n\tif (sep && sep->IsNumber(0)) {\n\t\tint8 mode = atoul(sep->arg[0]);\n\t\tswitch (mode) {\n\t\tcase AutoLootMode::METHOD_DISABLED: {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Disabled auto loot mode\");\n\t\t\tbreak;\n\t\t}\n\t\tcase AutoLootMode::METHOD_ACCEPT: {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Enabled auto loot mode for need and lotto.\");\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tmode = AutoLootMode::METHOD_DECLINE;\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_YELLOW, \"Enabled auto loot mode to decline need and lotto.\");\n\t\t\tbreak;\n\t\t}\n\t\t}\n\t\tclient->GetPlayer()->GetInfoStruct()->set_group_auto_loot_method(mode);\n\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_AUTOLOOTMETHOD, (char*)std::to_string(mode).c_str());\n\t\tclient->SendDefaultGroupOptions();\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "535": {
      "symbol": "COMMAND_ASSIST",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6430,
      "body": "{ Command_Assist(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Assist",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13872,
          "body": "{\n\tEntity* player = (Entity*)client->GetPlayer();\n\tSpawn* res = nullptr;\n\tif(sep && sep->arg[0]) {\n\t\tif(!stricmp(sep->arg[0], \"on\")) {\n\t\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_ASSISTAUTOATTACK, \"1\");\n\t\t\treturn;\n\t\t}\n\t\telse if(!stricmp(sep->arg[0], \"off\")) {\n\t\t\tdatabase.insertCharacterProperty(client, CHAR_PROPERTY_ASSISTAUTOATTACK, \"0\");\n\t\t\treturn;\n\t\t}\n\t\tClient* otherClient = client->GetPlayer()->GetZone()->GetClientByName(sep->arg[0]);\n\t\tif(otherClient) {\n\t\t\tres = otherClient->GetPlayer();\n\t\t}\n\t}\n\t\n\tif (player->GetTarget()) {\n\t\tres = player->GetTarget();                                                                   \n\t}\n\tif(res && res->GetTarget()) {\n\t\tres = res->GetTarget();\n\t}\n\t\n\tif(res) {\n\t\tclient->TargetSpawn(res);\n\t\t\n\t\tif(client->GetPlayer()->GetInfoStruct()->get_assist_auto_attack() && !player->EngagedInCombat()) {\n\t\t\tCommand_AutoAttack(client, nullptr);\n\t\t}\n\t}\n}"
        },
        {
          "function": "Command_AutoAttack",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13814,
          "body": "{\n\tint8 type = 1;\n\tbool update = false;\n\tPlayer* player = client->GetPlayer();\n\tif(!player)\n\t\treturn;\n\tbool incombat = player->EngagedInCombat();\n\tif(sep && sep->arg[0] && sep->IsNumber(0))\n\t\ttype = atoi(sep->arg[0]);\n\tif(!client->GetPlayer()->Alive()){\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED,\"You cannot do that right now.\");\n\t\treturn;\n\t}\n\tif(type == 0){\n\t\tif(incombat)\n\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You stop fighting.\");\n\t\t\tplayer->StopCombat(type);\n\t\t\tupdate = true;\n\t}\n\telse {\n\t\tif(type == 2){\n\t\t\tplayer->InCombat(false);\n\t\t\tif(incombat && player->GetRangeAttack()){\n\t\t\t\tplayer->StopCombat(type);\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You stop fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tplayer->SetRangeAttack(true);\n\t\t\t\tplayer->InCombat(true, true);\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You start fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tplayer->InCombat(false, true);\n\t\t\tplayer->SetRangeAttack(false);\n\t\t\tplayer->InCombat(true);\n\t\t\tif(!incombat) {\n\t\t\t\tclient->SimpleMessage(CHANNEL_GENERAL_COMBAT, \"You start fighting.\");\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\t      \n                                                                            \n\t}\n\t\n\tif(update) {\n\t\tplayer->SetCharSheetChanged(true);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "536": {
      "symbol": "COMMAND_TARGET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6431,
      "body": "{ Command_Target(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Target",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13912,
          "body": "{\n\tEntity* player = (Entity*)client->GetPlayer();\n\tSpawn* res = nullptr;\n\tif(sep && sep->arg[0] && player->GetZone()) {\n\t\tfloat max_distance = rule_manager.GetZoneRule(client->GetCurrentZoneID(), R_Player, MaxTargetCommandDistance)->GetFloat();\n\t\t\n\t\tif(max_distance < 1.0f) {\n\t\t\tmax_distance = 10.0f;\n\t\t}\n\t\t\n\t\tplayer->GetZone()->SetPlayerTargetByName(client, (char*)sep->argplus[0], max_distance);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "537": {
      "symbol": "COMMAND_TARGET_PET",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6432,
      "body": "{ Command_Target_Pet(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Target_Pet",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13933,
          "body": "{\n\tEntity* player = (Entity*)client->GetPlayer();\n\tSpawn* res = client->GetPlayer()->GetPet();\n\n\tif(res) {\n\t\tclient->TargetSpawn(res);\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "539": {
      "symbol": "COMMAND_WHOGROUP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6433,
      "body": "{ Command_WhoGroup(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_WhoGroup",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13948,
          "body": "{\n\tEntity* player = (Entity*)client->GetPlayer();\n\tif(player->GetGroupMemberInfo()) {\n\t\tworld.GetGroupManager()->SendWhoGroupMembers(client, player->GetGroupMemberInfo()->group_id);\n\t}\n\telse {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You are not currently in a group.\");\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "540": {
      "symbol": "COMMAND_WHORAID",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6434,
      "body": "{ Command_WhoRaid(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_WhoRaid",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13963,
          "body": "{\n\tEntity* player = (Entity*)client->GetPlayer();\n\tif(player->GetGroupMemberInfo()) {\n\t\tworld.GetGroupManager()->SendWhoRaidMembers(client, player->GetGroupMemberInfo()->group_id);\n\t}\n\telse {\n\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You are not currently in a group or raid.\");\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "541": {
      "symbol": "COMMAND_RAIDINVITE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6435,
      "body": "{ Command_RaidInvite(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_RaidInvite",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13978,
          "body": "{\n\tClientLookupScope client_lookups;\n\tEntity* target = nullptr;\n\tif( sep && sep->arg[0] ) {\n\t\tClient* target_client = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\tif(target_client)\n\t\t\ttarget = (Entity*)target_client->GetPlayer();\n\t}\n\tif(!target) {\n\t\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity())\n\t\t\ttarget = (Entity*)client->GetPlayer()->GetTarget();\n\t}\n\tworld.GetGroupManager()->SendRaidInvite(client, target);\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "542": {
      "symbol": "COMMAND_RAID_LOOTER",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6436,
      "body": "{ Command_Raid_Looter(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Raid_Looter",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 13998,
          "body": "{\n\tClientLookupScope client_lookups;\n\tif(!client->GetPlayer()->GetGroupMemberInfo() || client->GetPlayer()->GetGroupMemberInfo()->leader)\n\t\treturn;\n\tEntity* target = nullptr;\n\tif( sep && sep->arg[0] ) {\n\t\tClient* target_client = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\tif(target_client)\n\t\t\ttarget = (Entity*)target_client->GetPlayer();\n\t}\n\tif(!target) {\n\t\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity())\n\t\t\ttarget = (Entity*)client->GetPlayer()->GetTarget();\n\t}\n\t\n\tbool isLeaderRaid = world.GetGroupManager()->IsInRaidGroup(client->GetPlayer()->GetGroupMemberInfo()->group_id, client->GetPlayer()->GetGroupMemberInfo()->group_id, true);\n\tif(isLeaderRaid && target && target->IsEntity()) {\n\t\tif(((Entity*)target)->GetGroupMemberInfo() && world.GetGroupManager()->IsInRaidGroup(client->GetPlayer()->GetGroupMemberInfo()->group_id, ((Entity*)target)->GetGroupMemberInfo()->group_id, false)) {\n\t\t\tif(((Entity*)target)->GetGroupMemberInfo()->is_raid_looter) {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s removed as a raid looter.\", target->GetName());\n\t\t\t\t((Entity*)target)->GetGroupMemberInfo()->is_raid_looter = false;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"%s added as a raid looter.\", target->GetName());\n\t\t\t\t((Entity*)target)->GetGroupMemberInfo()->is_raid_looter = true;\n\t\t\t}\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "543": {
      "symbol": "COMMAND_KICKFROMGROUP",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6437,
      "body": "{ Command_KickFromGroup(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_KickFromGroup",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14033,
          "body": "{\n\tClientLookupScope client_lookups;\n\tEntity* target = nullptr;\n\tClient* target_client = nullptr;\n\tif( sep && sep->arg[0] ) {\n\t\ttarget_client = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\tif(target_client) {\n\t\t\ttarget = target_client->GetPlayer();\n\t\t}\n\t}\n\tif(!target) {\n\t\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity())\n\t\t\ttarget = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\n\t\tif(target && target->IsPlayer())\n\t\t\ttarget_client = ((Player*)target)->GetClient();\n\t}\n\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\n\tif (gmi && gmi->leader && target && target->GetGroupMemberInfo() && gmi->group_id == target->GetGroupMemberInfo()->group_id) {\n\t\tint32 group_id = gmi->group_id;\n\t\tworld.GetGroupManager()->RemoveGroupMember(group_id, target);\n\t\tif (!world.GetGroupManager()->IsGroupIDValid(group_id)) {\n\t\t\t                                                                                                  \n\t\t}\n\t\telse {\n\t\t\tworld.GetGroupManager()->GroupMessage(group_id, \"%s has been removed from the group.\", target->GetName());\n\t\t}\n\n\t\tif(target_client)\n\t\t\ttarget_client->SimpleMessage(CHANNEL_GROUP_CHAT, \"You have been kicked from the group\");\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "544": {
      "symbol": "COMMAND_KICKFROMRAID",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6438,
      "body": "{ Command_KickFromRaid(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_KickFromRaid",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14072,
          "body": "{\n\tClientLookupScope client_lookups;\n\tEntity* target = nullptr;\n\tClient* target_client = nullptr;\n\tif( sep && sep->arg[0] ) {\n\t\ttarget_client = client_lookups.Retain(zone_list.GetClientByCharName(sep->arg[0]));\n\t\tif(target_client) {\n\t\t\ttarget = target_client->GetPlayer();\n\t\t}\n\t}\n\tif(!target) {\n\t\tif(client->GetPlayer()->GetTarget() && client->GetPlayer()->GetTarget()->IsEntity())\n\t\t\ttarget = (Entity*)client->GetPlayer()->GetTarget();\n\t\t\n\t\tif(target && target->IsPlayer())\n\t\t\ttarget_client = ((Player*)target)->GetClient();\n\t}\n\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\tif(gmi && gmi->leader && target && target->GetGroupMemberInfo() && world.GetGroupManager()->IsInRaidGroup(gmi->group_id, target->GetGroupMemberInfo()->group_id, false) && \n\t\tworld.GetGroupManager()->IsInRaidGroup(gmi->group_id, gmi->group_id, true)) {\n\t\tGroupOptions goptions;\n\t\tworld.GetGroupManager()->GetDefaultGroupOptions(gmi->group_id, &goptions);\n\t\tworld.GetGroupManager()->RemoveGroupFromRaid(gmi->group_id, target->GetGroupMemberInfo()->group_id);\n\t\tstd::vector<int32> raidGroups;\n\t\tworld.GetGroupManager()->GetRaidGroups(gmi->group_id, &raidGroups);\n\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, gmi->group_id, \"\", \"\", &goptions, \"\", &raidGroups, true);\n\t\tstd::vector<int32> emptyRaid;\n\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, target->GetGroupMemberInfo()->group_id, \"\", \"\", &goptions, \"\", &emptyRaid, true);\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "545": {
      "symbol": "COMMAND_LEAVERAID",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6439,
      "body": "{ Command_LeaveRaid(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_LeaveRaid",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14108,
          "body": "{\n\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\tint32 orig_group_id = 0;\n\tif(gmi && gmi->leader && world.GetGroupManager()->IsInRaidGroup(gmi->group_id, gmi->group_id, false)) {\n\t\torig_group_id = gmi->group_id;\n\t\tGroupOptions goptions;\n\t\tworld.GetGroupManager()->GetDefaultGroupOptions(gmi->group_id, &goptions);\n\t\tstd::vector<int32> raidGroups;\n\t\tworld.GetGroupManager()->GetRaidGroups(gmi->group_id, &raidGroups);\n\t\tstd::vector<int32>::iterator cur_group_itr = std::find(raidGroups.begin(), raidGroups.end(), gmi->group_id);\n\t\tif(cur_group_itr != raidGroups.end())\n\t\t\traidGroups.erase(cur_group_itr);\n\t\t\n\t\tbool sendEmpty = false;\n\t\tstd::vector<int32> emptyRaid;\n\t\tif(raidGroups.size() < 2) {\n\t\t\tsendEmpty = true;\n\t\t}\n\t\t\n\t\tfor(cur_group_itr = raidGroups.begin(); cur_group_itr != raidGroups.end(); cur_group_itr++) {\n\t\t\tif(sendEmpty) {\n\t\t\t\tworld.GetGroupManager()->ClearGroupRaid((*cur_group_itr));\n\t\t\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, (*cur_group_itr), \"\", \"\", &goptions, \"\", &emptyRaid, true);\n\t\t\t\tworld.GetGroupManager()->SendGroupUpdate((*cur_group_itr), nullptr, true);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tworld.GetGroupManager()->ReplaceRaidGroups((*cur_group_itr), &raidGroups);\n\t\t\t}\n\t\t}\n\t\t\n\t\tif(!sendEmpty) {\n\t\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, orig_group_id, \"\", \"\", &goptions, \"\", &raidGroups, true);\n\t\t}\n\t\n\t\tworld.GetGroupManager()->ClearGroupRaid(orig_group_id);\n\t\tworld.GetGroupManager()->SendGroupUpdate(orig_group_id, nullptr, true);\n\t\t\n\t\tpeer_manager.sendPeersNewGroupRequest(\"\", 0, orig_group_id, \"\", \"\", &goptions, \"\", &emptyRaid, true);\n\t}\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "546": {
      "symbol": "COMMAND_SPLIT",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6440,
      "body": "{ Command_Split(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_Split",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14154,
          "body": "{\n                                             \n\tint32 plat = 0, gold = 0, silver = 0, copper = 0;\n\tif(sep->IsNumber(0))\n\t\tplat = atoul(sep->arg[0]);\n\tif(sep->IsNumber(1))\n\t\tgold = atoul(sep->arg[1]);\n\tif(sep->IsNumber(2))\n\t\tsilver = atoul(sep->arg[2]);\n\tif(sep->IsNumber(3))\n\t\tcopper = atoul(sep->arg[3]);\n\t\n\tworld.GetGroupManager()->SplitWithGroupOrRaid(client, plat, gold, silver, copper);\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "547": {
      "symbol": "COMMAND_RAIDSAY",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6441,
      "body": "{ Command_RaidSay(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_RaidSay",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14174,
          "body": "{\n\tGroupMemberInfo* gmi = client->GetPlayer()->GetGroupMemberInfo();\n\tif(sep && sep->arg[0] && gmi) {\n\t\tworld.GetGroupManager()->GroupLock(__FUNCTION__, __LINE__);\n\t\tint32 spawn_group_id = gmi->group_id;\n\t\tPlayerGroup* spawn_group = world.GetGroupManager()->GetGroup(spawn_group_id);\n\t\tbool israidgroup = (spawn_group && spawn_group->IsGroupRaid());\n\t\tworld.GetGroupManager()->ReleaseGroupLock(__FUNCTION__, __LINE__);\n\t\tif(israidgroup) {\n\t\t\tworld.GetGroupManager()->GroupChatMessage(gmi->group_id, client->GetPlayer(), client->GetPlayer()->GetCurrentLanguage(), sep->argplus[0], CHANNEL_RAID_SAY);\n\t\t\tpeer_manager.SendPeersChannelMessage(gmi->group_id, std::string(client->GetPlayer()->GetName()), std::string(sep->argplus[0]), CHANNEL_RAID_SAY, client->GetPlayer()->GetCurrentLanguage());\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "1010": {
      "symbol": "COMMAND_RELOAD_ZONEINFO",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6442,
      "body": "{ Command_ReloadZoneInfo(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_ReloadZoneInfo",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14194,
          "body": "{\n\tworld.ClearZoneInfoCache();\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "802": {
      "symbol": "COMMAND_SLE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6443,
      "body": "{ Command_SetLocationEntry(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_SetLocationEntry",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14199,
          "body": "{\n\tif(client->GetCurrentZone()->GetInstanceType() == PERSONAL_HOUSE_INSTANCE) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Use in a non house zone.\");\n\t\treturn;\n\t}\n\t\n\tif (!sep->IsSet(1) || (sep->IsNumber(0))) {\n\t\tclient->Message(CHANNEL_COLOR_YELLOW, \"Usage: /sle <column_name> <new_value>\");\n\t\treturn;\n\t}\n\t\n\tSpawn* target = client->GetPlayer()->GetTarget();\n\t\n\tif(!target) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Target missing for set location entry, /sle <column_name> <new_value>\");\n\t\treturn;\n\t}\n\n\t                                                                      \n\tint32 spawnEntryID = target->GetSpawnEntryID();\n\tint32 spawnPlacementID = target->GetSpawnLocationPlacementID();\n\tint32 spawnLocationID = target->GetSpawnLocationID();\n\tint32 dbID = target->GetDatabaseID();\n\tif (spawnPlacementID == 0 || spawnLocationID == 0 || spawnEntryID == 0 || dbID == 0) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Error: no valid spawn entry selected.\");\n\t\treturn;\n\t}\n\n\t                                   \n\tstatic const std::unordered_set<std::string> allowed = {\n\t\t\"x\",\n\t\t\"y\",\n\t\t\"z\",\n\t\t\"x_offset\",\n\t\t\"y_offset\",\n\t\t\"z_offset\",\n\t\t\"heading\",\n\t\t\"pitch\",\n\t\t\"roll\",\n\t\t\"respawn\",\n\t\t\"respawn_offset_low\",\n\t\t\"respawn_offset_high\",\n\t\t\"duplicated_spawn\",\n\t\t\"expire_timer\",\n\t\t\"expire_offset\",\n\t\t\"grid_id\",\n\t\t\"processed\",\n\t\t\"instance_id\",\n\t\t\"lvl_override\",\n\t\t\"hp_override\",\n\t\t\"mp_override\",\n\t\t\"str_override\",\n\t\t\"sta_override\",\n\t\t\"wis_override\",\n\t\t\"int_override\",\n\t\t\"agi_override\",\n\t\t\"heat_override\",\n\t\t\"cold_override\",\n\t\t\"magic_override\",\n\t\t\"mental_override\",\n\t\t\"divine_override\",\n\t\t\"disease_override\",\n\t\t\"poison_override\",\n\t\t\"difficulty_override\",\n\t\t\"spawnpercentage\",\n\t\t\"condition\"\n\t};\n\n\n\tconst std::string& field = std::string(sep->arg[0]);\n\tif (!allowed.count(field)) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Error: column '%s' is not modifiable.\", field.c_str());\n\t\treturn;\n\t}\n\t\n\tconst std::string& val = std::string(sep->arg[1]);\n\tstd::string safeVal = database.getSafeEscapeString(val.c_str());\n\n\tQuery query;\t\n\tif(field == \"spawnpercentage\" || field == \"condition\") {\n\t\t\t\tquery.AddQueryAsync(0, \n\t\t\t\t\t\t\t&database,\n\t\t\t\t\t\t\tQ_UPDATE,\n\t\t\t\t\t\t\t                                                             \n\t\t\t\t\t\t\t\"UPDATE spawn_location_entry \"\n\t\t\t\t\t\t\t\"SET %s='%s' \"\n\t\t\t\t\t\t\t\"WHERE id=%u and spawn_location_id=%u and spawn_id=%u \",\n\t\t\t\t\t\t\tfield.c_str(),\n\t\t\t\t\t\t\tsafeVal.c_str(),\n\t\t\t\t\t\t\tspawnEntryID,\n\t\t\t\t\t\t\tspawnLocationID,\n\t\t\t\t\t\t\tdbID\n\t\t);\n\t}\n\telse {\n\t\tquery.AddQueryAsync(0, \n\t\t\t\t\t\t\t&database,\n\t\t\t\t\t\t\tQ_UPDATE,\n\t\t\t\t\t\t\t                                                             \n\t\t\t\t\t\t\t\"UPDATE spawn_location_placement \"\n\t\t\t\t\t\t\t\"SET %s='%s' \"\n\t\t\t\t\t\t\t\"WHERE id=%u and spawn_location_id=%u \",\n\t\t\t\t\t\t\tfield.c_str(),\n\t\t\t\t\t\t\tsafeVal.c_str(),\n\t\t\t\t\t\t\tspawnPlacementID,\n\t\t\t\t\t\t\tspawnLocationID\n\t\t);\n\t}\n\n\tclient->Message(CHANNEL_COLOR_YELLOW, \"Modified %s to %s for row entry id %u, spawn placement id %u, related to location id %u and spawn database id %u.\", \n\t\t\t\t\tfield.c_str(), val.c_str(), spawnEntryID, spawnPlacementID, spawnLocationID, dbID);\n}"
        }
      ],
      "argument_indices": [
        0,
        1
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Usage: /sle <column_name> <new_value>",
        "Target missing for set location entry, /sle <column_name> <new_value>"
      ]
    },
    "803": {
      "symbol": "COMMAND_STORE_LIST_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6444,
      "body": "{ Command_StoreListItem(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StoreListItem",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14314,
          "body": "{\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\t\n\tif(sep && sep->arg[0]) {\n\t\tauto info = broker.GetSellerInfo(client->GetPlayer()->GetCharacterID());\n\t\tif(!info) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Player %u is not in the broker database.\", client->GetPlayer()->GetCharacterID());\n\t\t}\n\t\telse if(sep->IsNumber(0)) {\n\t\t\tint64 unique_id = atoll(sep->arg[0]);\n\t\t\tif(client->GetPlayer()->item_list.CanStoreSellItem(unique_id, true)) {\n\t\t\t\tItem* item = client->GetPlayer()->item_list.GetVaultItemFromUniqueID(unique_id, true);\n\t\t\t\tif(item) {\n\t\t\t\t\t                                                                    \n\t\t\t\t\t                                                                  \n\t\t\t\t\tif(!client->GetPlayer()->item_list.SetVaultItemLockUniqueID(client, unique_id, true, true))\n\t\t\t\t\t\treturn;\n\t\t\t\t\tbool isInv = !client->GetPlayer()->item_list.IsItemInSlotType(item, InventorySlotType::HOUSE_VAULT);\n\t\t\t\t\tint64 cost = broker.GetSalePrice(client->GetPlayer()->GetCharacterID(), item->details.unique_id);\n\t\t\t\t\tclient->AddItemSale(item->details.unique_id, item->details.item_id, cost, item->details.inv_slot_id, item->details.slot_id, item->details.count, isInv, true, item->creator);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Broker issue, cannot find item %u.\", unique_id);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclient->SetItemSaleStatus(unique_id, true);\n\t\t\t\tclient->SetSellerStatus();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid arguments for /store_list_item unique_id.\");\n\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Invalid arguments for /store_list_item unique_id."
      ]
    },
    "804": {
      "symbol": "COMMAND_STORE_SET_PRICE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6445,
      "body": "{ Command_StoreSetPrice(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StoreSetPrice",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14353,
          "body": "{\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\t\n\tif(sep && sep->arg[0]) {\n\t\tauto info = broker.GetSellerInfo(client->GetPlayer()->GetCharacterID());\n\t\tint64 unique_id = atoll(sep->arg[0]);\n\t\tif(!info) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Player %u is not in the broker database.\", client->GetPlayer()->GetCharacterID());\n\t\t}\n\t\telse if(info->sell_from_inventory && broker.IsItemFromInventory(client->GetPlayer()->GetCharacterID(), unique_id)) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"You cannot change the price while selling.\");\n\t\t}\n\t\telse if(info->sell_from_inventory && !broker.IsItemFromInventory(client->GetPlayer()->GetCharacterID(), unique_id) && broker.IsItemForSale(client->GetPlayer()->GetCharacterID(), unique_id)) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"You cannot change the price while selling.\");\n\t\t}\n\t\telse if(sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3) && sep->IsNumber(4)) {\n\t\t\tint32 plat = atoul(sep->arg[1]);\n\t\t\tint32 gold = atoul(sep->arg[2]);\n\t\t\tint32 silver = atoul(sep->arg[3]);\n\t\t\tint32 copper = atoul(sep->arg[4]);\n\t\t\tint64 price = (int64)plat * 1000000 + (int64)gold * 10000 + (int64)silver * 100 + (int64)copper;\n\t\t\t\n\t\t\tLogWrite(PLAYER__INFO, 5, \"Broker\",\n\t\t\t  \"--StoreSetPrice: %u (%u), cost=%u\",\n\t\t\t  client->GetPlayer()->GetCharacterID(), unique_id, price\n\t\t\t);\n\t\t\tclient->SetItemSaleCost(unique_id, plat, gold, silver, copper);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid arguments for /store_set_price unique_id platinum gold silver copper.\");\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Invalid arguments for /store_set_price unique_id platinum gold silver copper."
      ]
    },
    "805": {
      "symbol": "COMMAND_STORE_SET_PRICE_LOCAL",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6446,
      "body": "{ Command_StoreSetPriceLocal(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StoreSetPriceLocal",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14389,
          "body": "{\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\t\n\tif(sep && sep->arg[0]) {\n\t\tauto info = broker.GetSellerInfo(client->GetPlayer()->GetCharacterID());\n\t\tif(!info) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Player %u is not in the broker database.\", client->GetPlayer()->GetCharacterID());\n\t\t}\n\t\telse if(info->sell_from_inventory) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"You cannot change the price while selling.\");\n\t\t}\n\t\telse if(sep->IsNumber(0) && sep->IsNumber(1) && sep->IsNumber(2) && sep->IsNumber(3) && sep->IsNumber(4)) {\n\t\t\tint64 unique_id = atoll(sep->arg[0]);\n\t\t\tint32 plat = atoul(sep->arg[1]);\n\t\t\tint32 gold = atoul(sep->arg[2]);\n\t\t\tint32 silver = atoul(sep->arg[3]);\n\t\t\tint32 copper = atoul(sep->arg[4]);\n\t\t\tint64 price = (int64)plat * 1000000 + (int64)gold * 10000 + (int64)silver * 100 + (int64)copper;\n\t\t\tLogWrite(PLAYER__INFO, 5, \"Broker\",\n\t\t\t  \"--StoreSetLocalPrice: %u (%u), cost=%u\",\n\t\t\t  client->GetPlayer()->GetCharacterID(), unique_id, price\n\t\t\t);\n\t\t\tclient->SetItemSaleCost(unique_id, plat, gold, silver, copper);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid arguments for /store_set_price_local unique_id platinum gold silver copper.\");\n\t\t}\n\t}\n\t\n}"
        }
      ],
      "argument_indices": [
        0,
        1,
        2,
        3,
        4
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Invalid arguments for /store_set_price_local unique_id platinum gold silver copper."
      ]
    },
    "806": {
      "symbol": "COMMAND_STORE_START_SELLING",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6447,
      "body": "{ Command_StoreStartSelling(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StoreStartSelling",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14435,
          "body": "{\n\tstd::lock_guard<std::recursive_mutex> processing(client->ProcessingMutex());\n\tif(!CanStartInventorySales(client))\n\t\treturn;\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\t\n\tbroker.AddSeller(client->GetPlayer()->GetCharacterID(), std::string(client->GetPlayer()->GetName()), client->GetPlayer()->GetPlayerInfo()->GetHouseZoneID(), true, true);\n\tclient->OpenShopWindow(nullptr);\n\tbroker.LockActiveItemsForClient(client);\n}"
        },
        {
          "function": "CanStartInventorySales",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14422,
          "body": "{\n\tfor(const auto& offer : broker.GetActiveForSaleItems(client->GetPlayer()->GetCharacterID())) {\n\t\tif(!offer.for_sale || !offer.from_inventory)\n\t\t\tcontinue;\n\t\tItem* item = client->GetPlayer()->item_list.GetVaultItemFromUniqueID(offer.unique_id);\n\t\tif(item && client->GetPlayer()->item_list.HasPendingItemUse(item)) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot start selling while an offered item is in use.\");\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "807": {
      "symbol": "COMMAND_STORE_STOP_SELLING",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6448,
      "body": "{ Command_StoreStopSelling(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StoreStopSelling",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14449,
          "body": "{\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\t\n\tbroker.AddSeller(client->GetPlayer()->GetCharacterID(), std::string(client->GetPlayer()->GetName()), client->GetPlayer()->GetPlayerInfo()->GetHouseZoneID(), true, false);\n\tclient->OpenShopWindow(nullptr);\n\tbroker.LockActiveItemsForClient(client);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "808": {
      "symbol": "COMMAND_STORE_UNLIST_ITEM",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6449,
      "body": "{ Command_StoreUnlistItem(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_StoreUnlistItem",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14460,
          "body": "{\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\tif(sep && sep->arg[0]) {\n\t\tauto info = broker.GetSellerInfo(client->GetPlayer()->GetCharacterID());\n\t\tif(!info) {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Player %u is not in the broker database.\", client->GetPlayer()->GetCharacterID());\n\t\t}\n\t\telse if(sep->IsNumber(0)) {\n\t\t\tint64 unique_id = atoll(sep->arg[0]);\n\t\t\tclient->SetItemSaleStatus(unique_id, false);\n\t\t\tclient->SetSellerStatus();\n\t\t\tclient->GetPlayer()->item_list.SetVaultItemLockUniqueID(client, unique_id, false, false);\n\t\t}\n\t\telse {\n\t\t\tclient->Message(CHANNEL_COLOR_RED, \"Invalid arguments for /store_unlist_item unique_id.\");\n\n\t\t}\n\t}\n}"
        }
      ],
      "argument_indices": [
        0
      ],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": [
        "Invalid arguments for /store_unlist_item unique_id."
      ]
    },
    "809": {
      "symbol": "COMMAND_CLOSE_STORE_KEEP_SELLING",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6450,
      "body": "{ Command_CloseStoreKeepSelling(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CloseStoreKeepSelling",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14483,
          "body": "{\n\tstd::lock_guard<std::recursive_mutex> processing(client->ProcessingMutex());\n\tif(!CanStartInventorySales(client))\n\t\treturn;\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\tauto info = broker.GetSellerInfo(client->GetPlayer()->GetCharacterID());\n\tclient->SetShopWindowStatus(false);\n\tif(!info) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Player %u is not in the broker database.\", client->GetPlayer()->GetCharacterID());\n\t}\n\telse {\n\t\tbool itemsSelling = broker.IsSellingItems(client->GetPlayer()->GetCharacterID());\n\t\tbroker.AddSeller(client->GetPlayer()->GetCharacterID(), std::string(client->GetPlayer()->GetName()), client->GetPlayer()->GetPlayerInfo()->GetHouseZoneID(), itemsSelling, true);\n\t}\n\tbroker.LockActiveItemsForClient(client);\n}"
        },
        {
          "function": "CanStartInventorySales",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14422,
          "body": "{\n\tfor(const auto& offer : broker.GetActiveForSaleItems(client->GetPlayer()->GetCharacterID())) {\n\t\tif(!offer.for_sale || !offer.from_inventory)\n\t\t\tcontinue;\n\t\tItem* item = client->GetPlayer()->item_list.GetVaultItemFromUniqueID(offer.unique_id);\n\t\tif(item && client->GetPlayer()->item_list.HasPendingItemUse(item)) {\n\t\t\tclient->SimpleMessage(CHANNEL_COLOR_RED, \"You cannot start selling while an offered item is in use.\");\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    },
    "810": {
      "symbol": "COMMAND_CANCEL_STORE",
      "status": "implemented",
      "file": "WorldServer/Commands/Commands.cpp",
      "line": 6451,
      "body": "{ Command_CancelStore(client, sep); break; }",
      "delegates": [
        {
          "function": "Command_CancelStore",
          "file": "WorldServer/Commands/Commands.cpp",
          "line": 14503,
          "body": "{\n\tif(!client->GetShopWindowStatus()) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Shop not available.\");\n\t\treturn;\n\t}\n\tauto info = broker.GetSellerInfo(client->GetPlayer()->GetCharacterID());\n\tclient->SetShopWindowStatus(false);\n\tif(!info) {\n\t\tclient->Message(CHANNEL_COLOR_RED, \"Player %u is not in the broker database.\", client->GetPlayer()->GetCharacterID());\n\t}\n\telse {\n\t\tbool itemsSelling = broker.IsSellingItems(client->GetPlayer()->GetCharacterID(), true);\n\t\tbroker.AddSeller(client->GetPlayer()->GetCharacterID(), std::string(client->GetPlayer()->GetName()), client->GetPlayer()->GetPlayerInfo()->GetHouseZoneID(), itemsSelling, false);\n\t}\n\tbroker.LockActiveItemsForClient(client);\n}"
        }
      ],
      "argument_indices": [],
      "dynamic_arguments": false,
      "raw_parameters": false,
      "usage_messages": []
    }
  },
  "registrations": [
    {
      "command": "acceptinvite",
      "subcommand": "",
      "handler": 96,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUP_ACCEPT_INVITE",
      "implementation_status": "implemented"
    },
    {
      "command": "accept_advancement",
      "subcommand": "",
      "handler": 293,
      "required_status": 0,
      "handler_symbol": "COMMAND_ACCEPT_ADVANCEMENT",
      "implementation_status": "implemented"
    },
    {
      "command": "accept_pending_summon",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "accept_resurrection",
      "subcommand": "",
      "handler": 312,
      "required_status": 0,
      "handler_symbol": "COMMAND_ACCEPT_RESURRECTION",
      "implementation_status": "implemented"
    },
    {
      "command": "accept_reward",
      "subcommand": "",
      "handler": 85,
      "required_status": 0,
      "handler_symbol": "COMMAND_ACCEPT_REWARD",
      "implementation_status": "implemented"
    },
    {
      "command": "accept_trade",
      "subcommand": "",
      "handler": 173,
      "required_status": 0,
      "handler_symbol": "COMMAND_ACCEPT_TRADE",
      "implementation_status": "implemented"
    },
    {
      "command": "accept_work",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "achievement_add",
      "subcommand": "",
      "handler": 310,
      "required_status": 0,
      "handler_symbol": "COMMAND_ACHIEVEMENT_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "achievement_conversion",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "achievement_freerespec",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "achievement_profile_save",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "achievement_profile_swap",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "achievement_respec",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "add_aa",
      "subcommand": "",
      "handler": 751,
      "required_status": 200,
      "handler_symbol": "ADD_AA",
      "implementation_status": "implemented"
    },
    {
      "command": "add_mail_copper",
      "subcommand": "",
      "handler": 127,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_MAIL_COPPER",
      "implementation_status": "implemented"
    },
    {
      "command": "add_mail_gold",
      "subcommand": "",
      "handler": 125,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_MAIL_GOLD",
      "implementation_status": "implemented"
    },
    {
      "command": "add_mail_plat",
      "subcommand": "",
      "handler": 124,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_MAIL_PLAT",
      "implementation_status": "implemented"
    },
    {
      "command": "add_mail_silver",
      "subcommand": "",
      "handler": 126,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_MAIL_SILVER",
      "implementation_status": "implemented"
    },
    {
      "command": "add_payment_coin",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "add_trade_copper",
      "subcommand": "",
      "handler": 177,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_TRADE_COPPER",
      "implementation_status": "implemented"
    },
    {
      "command": "add_trade_gold",
      "subcommand": "",
      "handler": 179,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_TRADE_GOLD",
      "implementation_status": "implemented"
    },
    {
      "command": "add_trade_item",
      "subcommand": "",
      "handler": 185,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_TRADE_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "add_trade_krono",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "add_trade_plat",
      "subcommand": "",
      "handler": 180,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_TRADE_PLAT",
      "implementation_status": "implemented"
    },
    {
      "command": "add_trade_silver",
      "subcommand": "",
      "handler": 178,
      "required_status": 0,
      "handler_symbol": "COMMAND_ADD_TRADE_SILVER",
      "implementation_status": "implemented"
    },
    {
      "command": "add_work_component",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "add_work_payment",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "afk",
      "subcommand": "",
      "handler": 147,
      "required_status": 0,
      "handler_symbol": "COMMAND_AFK",
      "implementation_status": "implemented"
    },
    {
      "command": "alignment",
      "subcommand": "",
      "handler": 1013,
      "required_status": 200,
      "handler_symbol": "COMMAND_ALIGNMENT",
      "implementation_status": "implemented"
    },
    {
      "command": "animtest",
      "subcommand": "",
      "handler": 211,
      "required_status": 200,
      "handler_symbol": "COMMAND_ANIMTEST",
      "implementation_status": "implemented"
    },
    {
      "command": "announce",
      "subcommand": "",
      "handler": 146,
      "required_status": 10,
      "handler_symbol": "COMMAND_ANNOUNCE",
      "implementation_status": "implemented"
    },
    {
      "command": "anon",
      "subcommand": "",
      "handler": 148,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_ANONYMOUS",
      "implementation_status": "implemented"
    },
    {
      "command": "answer_tradeskill",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "appearance",
      "subcommand": "",
      "handler": 246,
      "required_status": 200,
      "handler_symbol": "COMMAND_APPEARANCE",
      "implementation_status": "implemented"
    },
    {
      "command": "appearance",
      "subcommand": "list",
      "handler": 247,
      "required_status": 200,
      "handler_symbol": "COMMAND_APPEARANCE_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "apply_verb",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "aquaman",
      "subcommand": "",
      "handler": 305,
      "required_status": 200,
      "handler_symbol": "COMMAND_AQUAMAN",
      "implementation_status": "implemented"
    },
    {
      "command": "arena",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "asay",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "assist",
      "subcommand": "",
      "handler": 535,
      "required_status": 0,
      "handler_symbol": "COMMAND_ASSIST",
      "implementation_status": "implemented"
    },
    {
      "command": "attack",
      "subcommand": "",
      "handler": 74,
      "required_status": 0,
      "handler_symbol": "COMMAND_ATTACK",
      "implementation_status": "implemented"
    },
    {
      "command": "attune_equip",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "attune_inv",
      "subcommand": "",
      "handler": 306,
      "required_status": 0,
      "handler_symbol": "COMMAND_ATTUNE_INV",
      "implementation_status": "implemented"
    },
    {
      "command": "auction",
      "subcommand": "",
      "handler": 11,
      "required_status": 0,
      "handler_symbol": "COMMAND_AUCTION",
      "implementation_status": "implemented"
    },
    {
      "command": "auction_cancel",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "auction_coin",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "auction_item",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "autoattack",
      "subcommand": "",
      "handler": 37,
      "required_status": 0,
      "handler_symbol": "COMMAND_AUTO_ATTACK",
      "implementation_status": "implemented"
    },
    {
      "command": "back_aa",
      "subcommand": "",
      "handler": 754,
      "required_status": 200,
      "handler_symbol": "BACK_AA",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "ban",
      "subcommand": "",
      "handler": 23,
      "required_status": 10,
      "handler_symbol": "COMMAND_BAN",
      "implementation_status": "implemented"
    },
    {
      "command": "bank",
      "subcommand": "",
      "handler": 70,
      "required_status": 0,
      "handler_symbol": "COMMAND_BANK",
      "implementation_status": "implemented"
    },
    {
      "command": "bank_deposit",
      "subcommand": "",
      "handler": 71,
      "required_status": 0,
      "handler_symbol": "COMMAND_BANK_DEPOSIT",
      "implementation_status": "implemented"
    },
    {
      "command": "bank_withdraw",
      "subcommand": "",
      "handler": 72,
      "required_status": 0,
      "handler_symbol": "COMMAND_BANK_WITHDRAWAL",
      "implementation_status": "implemented"
    },
    {
      "command": "battleground",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "begin_aa_profile",
      "subcommand": "",
      "handler": 753,
      "required_status": 200,
      "handler_symbol": "BEGIN_AA_PROFILE",
      "implementation_status": "implemented"
    },
    {
      "command": "beta",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "book",
      "subcommand": "",
      "handler": 463,
      "required_status": 0,
      "handler_symbol": "COMMAND_READ",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "",
      "handler": 500,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "create",
      "handler": 501,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_CREATE",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "customize",
      "handler": 502,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_CUSTOMIZE",
      "implementation_status": "disabled"
    },
    {
      "command": "bot",
      "subcommand": "help",
      "handler": 507,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_HELP",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "inv",
      "handler": 505,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_INV",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "list",
      "handler": 504,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "settings",
      "handler": 506,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_SETTINGS",
      "implementation_status": "implemented"
    },
    {
      "command": "bot",
      "subcommand": "spawn",
      "handler": 503,
      "required_status": 200,
      "handler_symbol": "COMMAND_BOT_SPAWN",
      "implementation_status": "implemented"
    },
    {
      "command": "broadcast",
      "subcommand": "",
      "handler": 145,
      "required_status": 10,
      "handler_symbol": "COMMAND_BROADCAST",
      "implementation_status": "implemented"
    },
    {
      "command": "buyback_from_merchant",
      "subcommand": "",
      "handler": 91,
      "required_status": 0,
      "handler_symbol": "COMMAND_BUYBACK",
      "implementation_status": "implemented"
    },
    {
      "command": "buy_from_broker",
      "subcommand": "",
      "handler": 95,
      "required_status": 0,
      "handler_symbol": "COMMAND_BUY_FROM_BROKER",
      "implementation_status": "implemented"
    },
    {
      "command": "buy_from_merchant",
      "subcommand": "",
      "handler": 87,
      "required_status": 0,
      "handler_symbol": "COMMAND_MERCHANT_BUY",
      "implementation_status": "implemented"
    },
    {
      "command": "buy_from_vendor",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "buy_house",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "cancel_aa_profile",
      "subcommand": "",
      "handler": 757,
      "required_status": 200,
      "handler_symbol": "CANCEL_AA_PROFILE",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_bank",
      "subcommand": "",
      "handler": 73,
      "required_status": 0,
      "handler_symbol": "COMMAND_BANK_CANCEL",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_broker",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "cancel_browse_market",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "cancel_effect",
      "subcommand": "",
      "handler": 530,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_EFFECT",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_mail",
      "subcommand": "",
      "handler": 123,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_MAIL",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_maintained",
      "subcommand": "",
      "handler": 276,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_MAINTAINED",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_merchant",
      "subcommand": "",
      "handler": 89,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_MERCHANT",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_send_mail",
      "subcommand": "",
      "handler": 129,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_SEND_MAIL",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_store",
      "subcommand": "",
      "handler": 810,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_STORE",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_trade",
      "subcommand": "",
      "handler": 175,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANCEL_TRADE",
      "implementation_status": "implemented"
    },
    {
      "command": "cancel_work",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "cannedemote",
      "subcommand": "",
      "handler": 144,
      "required_status": 0,
      "handler_symbol": "COMMAND_CANNEDEMOTE",
      "implementation_status": "implemented"
    },
    {
      "command": "castspell",
      "subcommand": null,
      "handler": 509,
      "required_status": 200,
      "handler_symbol": "COMMAND_CASTSPELL",
      "implementation_status": "implemented"
    },
    {
      "command": "castspell",
      "subcommand": "",
      "handler": 509,
      "required_status": 200,
      "handler_symbol": "COMMAND_CASTSPELL",
      "implementation_status": "implemented"
    },
    {
      "command": "cast_guild_leader_vote",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "champion_respawn",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "chatleave",
      "subcommand": "",
      "handler": 297,
      "required_status": 0,
      "handler_symbol": "COMMAND_LEAVE_CHANNEL",
      "implementation_status": "implemented"
    },
    {
      "command": "chatwho",
      "subcommand": "",
      "handler": 298,
      "required_status": 0,
      "handler_symbol": "COMMAND_WHO_CHANNEL",
      "implementation_status": "implemented"
    },
    {
      "command": "claim",
      "subcommand": "",
      "handler": 18,
      "required_status": 0,
      "handler_symbol": "COMMAND_CLAIM",
      "implementation_status": "implemented"
    },
    {
      "command": "class",
      "subcommand": "",
      "handler": 4,
      "required_status": 10,
      "handler_symbol": "COMMAND_CLASS",
      "implementation_status": "implemented"
    },
    {
      "command": "clearallqueuedabilities",
      "subcommand": "",
      "handler": 265,
      "required_status": 0,
      "handler_symbol": "COMMAND_CLEAR_ALL_QUEUED",
      "implementation_status": "implemented"
    },
    {
      "command": "clear_mailbox",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "close_store_keep_selling",
      "subcommand": "",
      "handler": 809,
      "required_status": 0,
      "handler_symbol": "COMMAND_CLOSE_STORE_KEEP_SELLING",
      "implementation_status": "implemented"
    },
    {
      "command": "collection_additem",
      "subcommand": "",
      "handler": 30,
      "required_status": 0,
      "handler_symbol": "COMMAND_COLLECTION_ADDITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "collection_filter_matchitem",
      "subcommand": "",
      "handler": 31,
      "required_status": 0,
      "handler_symbol": "COMMAND_COLLECTION_FILTER_MATCHITEM",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "commit_aa_profile",
      "subcommand": "",
      "handler": 752,
      "required_status": 200,
      "handler_symbol": "COMMIT_AA_PROFILE",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "confirmedlastname",
      "subcommand": "",
      "handler": 29,
      "required_status": 0,
      "handler_symbol": "COMMAND_CONFIRMLASTNAME",
      "implementation_status": "implemented"
    },
    {
      "command": "confirmedrename",
      "subcommand": "",
      "handler": 141,
      "required_status": 0,
      "handler_symbol": "COMMAND_CONFIRMRENAME",
      "implementation_status": "disabled"
    },
    {
      "command": "confirm_zone",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "consume_food",
      "subcommand": "",
      "handler": 304,
      "required_status": 0,
      "handler_symbol": "COMMAND_CONSUME_FOOD",
      "implementation_status": "implemented"
    },
    {
      "command": "container",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "contest",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "craftitem",
      "subcommand": "",
      "handler": 526,
      "required_status": 100,
      "handler_symbol": "COMMAND_CRAFTITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "create",
      "subcommand": "",
      "handler": 256,
      "required_status": 0,
      "handler_symbol": "COMMAND_CREATE",
      "implementation_status": "implemented"
    },
    {
      "command": "create",
      "subcommand": "guild",
      "handler": 257,
      "required_status": 0,
      "handler_symbol": "COMMAND_CREATE_GUILD",
      "implementation_status": "implemented"
    },
    {
      "command": "createfromrecipe",
      "subcommand": "",
      "handler": 299,
      "required_status": 0,
      "handler_symbol": "COMMAND_CREATEFROMRECIPE",
      "implementation_status": "implemented"
    },
    {
      "command": "csay",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "cureplayer",
      "subcommand": "",
      "handler": 531,
      "required_status": 0,
      "handler_symbol": "COMMAND_CUREPLAYER",
      "implementation_status": "implemented"
    },
    {
      "command": "currency",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "current_drink",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "current_food",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "declineinvite",
      "subcommand": "",
      "handler": 97,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUP_DECLINE_INVITE",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_duels",
      "subcommand": "",
      "handler": 160,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_DUELS",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_groups",
      "subcommand": "",
      "handler": 163,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_GROUPS",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_guilds",
      "subcommand": "",
      "handler": 162,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_GUILDS",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_lon",
      "subcommand": "",
      "handler": 165,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_LON",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_raids",
      "subcommand": "",
      "handler": 164,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_RAIDS",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_resurrection",
      "subcommand": "",
      "handler": 313,
      "required_status": 0,
      "handler_symbol": "COMMAND_DECLINE_RESURRECTION",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_trades",
      "subcommand": "",
      "handler": 161,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_TRADES",
      "implementation_status": "implemented"
    },
    {
      "command": "decline_vcinvite",
      "subcommand": "",
      "handler": 171,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_VCINVITE",
      "implementation_status": "implemented"
    },
    {
      "command": "deity_buy_reward",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deity_buy_reward_confirm",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deity_change_confirm",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deity_item_off_altar",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deity_offer",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deity_offer_confirm",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deity_sac_info",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "deletemailmessage",
      "subcommand": "",
      "handler": 134,
      "required_status": 0,
      "handler_symbol": "COMMAND_DELETE_MAIL_MESSAGE",
      "implementation_status": "implemented"
    },
    {
      "command": "deletequest",
      "subcommand": "",
      "handler": 78,
      "required_status": 0,
      "handler_symbol": "COMMAND_DELETE_QUEST",
      "implementation_status": "implemented"
    },
    {
      "command": "delete_house_item",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "depop",
      "subcommand": "",
      "handler": 81,
      "required_status": 100,
      "handler_symbol": "COMMAND_DEPOP",
      "implementation_status": "implemented"
    },
    {
      "command": "despam",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "destroy_coin",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "disable_char_bonus_exp",
      "subcommand": "",
      "handler": 189,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_BONUS_EXP",
      "implementation_status": "implemented"
    },
    {
      "command": "disable_combat_exp",
      "subcommand": "",
      "handler": 187,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_COMBAT_EXP",
      "implementation_status": "implemented"
    },
    {
      "command": "disable_quest_exp",
      "subcommand": "",
      "handler": 188,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_QUEST_EXP",
      "implementation_status": "implemented"
    },
    {
      "command": "disband",
      "subcommand": "",
      "handler": 16,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUPDISBAND",
      "implementation_status": "implemented"
    },
    {
      "command": "dismiss_vendor",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "display_case",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "distance",
      "subcommand": "",
      "handler": 249,
      "required_status": 200,
      "handler_symbol": "COMMAND_DISTANCE",
      "implementation_status": "implemented"
    },
    {
      "command": "dmgstatus",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "dmnotready",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "dmready",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "dmselectavatar",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "drink_alcohol",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "duel",
      "subcommand": "",
      "handler": 200,
      "required_status": 0,
      "handler_symbol": "COMMAND_DUEL",
      "implementation_status": "disabled"
    },
    {
      "command": "duelbet",
      "subcommand": "",
      "handler": 201,
      "required_status": 0,
      "handler_symbol": "COMMAND_DUELBET",
      "implementation_status": "disabled"
    },
    {
      "command": "duel_accept",
      "subcommand": "",
      "handler": 202,
      "required_status": 0,
      "handler_symbol": "COMMAND_DUEL_ACCEPT",
      "implementation_status": "disabled"
    },
    {
      "command": "duel_decline",
      "subcommand": "",
      "handler": 203,
      "required_status": 0,
      "handler_symbol": "COMMAND_DUEL_DECLINE",
      "implementation_status": "disabled"
    },
    {
      "command": "duel_surrender",
      "subcommand": "",
      "handler": 204,
      "required_status": 0,
      "handler_symbol": "COMMAND_DUEL_SURRENDER",
      "implementation_status": "disabled"
    },
    {
      "command": "duel_toggle",
      "subcommand": "",
      "handler": 205,
      "required_status": 0,
      "handler_symbol": "COMMAND_DUEL_TOGGLE",
      "implementation_status": "disabled"
    },
    {
      "command": "editor",
      "subcommand": "",
      "handler": 311,
      "required_status": 100,
      "handler_symbol": "COMMAND_EDITOR",
      "implementation_status": "implemented"
    },
    {
      "command": "emote",
      "subcommand": "",
      "handler": 13,
      "required_status": 0,
      "handler_symbol": "COMMAND_EMOTE",
      "implementation_status": "implemented"
    },
    {
      "command": "enablequeuedabilities",
      "subcommand": "",
      "handler": 35,
      "required_status": 0,
      "handler_symbol": "COMMAND_ENABLE_ABILITY_QUE",
      "implementation_status": "implemented"
    },
    {
      "command": "end_altar",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "entity_command",
      "subcommand": "",
      "handler": 241,
      "required_status": 200,
      "handler_symbol": "COMMAND_ENTITYCOMMAND",
      "implementation_status": "implemented"
    },
    {
      "command": "entity_command",
      "subcommand": "list",
      "handler": 242,
      "required_status": 200,
      "handler_symbol": "COMMAND_ENTITYCOMMAND_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "equip",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "facebook",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "facial_anim_receiver",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "faction",
      "subcommand": "",
      "handler": 1012,
      "required_status": 200,
      "handler_symbol": "COMMAND_FACTION",
      "implementation_status": "implemented"
    },
    {
      "command": "finditem",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "findnpc",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "findspawn",
      "subcommand": "",
      "handler": 521,
      "required_status": 200,
      "handler_symbol": "COMMAND_FINDSPAWN",
      "implementation_status": "implemented"
    },
    {
      "command": "flag",
      "subcommand": "",
      "handler": 21,
      "required_status": 10,
      "handler_symbol": "COMMAND_ADMINFLAG",
      "implementation_status": "implemented"
    },
    {
      "command": "flymode",
      "subcommand": "",
      "handler": 57,
      "required_status": 200,
      "handler_symbol": "COMMAND_FLYMODE",
      "implementation_status": "implemented"
    },
    {
      "command": "follow",
      "subcommand": "",
      "handler": 26,
      "required_status": 0,
      "handler_symbol": "COMMAND_FOLLOW",
      "implementation_status": "implemented"
    },
    {
      "command": "friends",
      "subcommand": "",
      "handler": 110,
      "required_status": 0,
      "handler_symbol": "COMMAND_FRIENDS",
      "implementation_status": "no_op"
    },
    {
      "command": "friend_add",
      "subcommand": "",
      "handler": 108,
      "required_status": 0,
      "handler_symbol": "COMMAND_FRIEND_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "friend_remove",
      "subcommand": "",
      "handler": 109,
      "required_status": 0,
      "handler_symbol": "COMMAND_FRIEND_REMOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "frombroker",
      "subcommand": "",
      "handler": 527,
      "required_status": 0,
      "handler_symbol": "COMMAND_FROMBROKER",
      "implementation_status": "implemented"
    },
    {
      "command": "frommerchant",
      "subcommand": "",
      "handler": 86,
      "required_status": 0,
      "handler_symbol": "COMMAND_FROM_MERCHANT",
      "implementation_status": "implemented"
    },
    {
      "command": "gather",
      "subcommand": "",
      "handler": 92,
      "required_status": 0,
      "handler_symbol": "COMMAND_SEARCH_STORES",
      "implementation_status": "implemented"
    },
    {
      "command": "gethotzones",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "getinput",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "getmailheaders",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "getmailmessage",
      "subcommand": "",
      "handler": 120,
      "required_status": 0,
      "handler_symbol": "COMMAND_GET_MAIL_MESSAGE",
      "implementation_status": "implemented"
    },
    {
      "command": "get_aa_xml",
      "subcommand": "",
      "handler": 750,
      "required_status": 200,
      "handler_symbol": "GET_AA_XML",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "get_coins",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "get_search_stores_page",
      "subcommand": "",
      "handler": 94,
      "required_status": 0,
      "handler_symbol": "COMMAND_SEARCH_STORES_PAGE",
      "implementation_status": "implemented"
    },
    {
      "command": "giveitem",
      "subcommand": "",
      "handler": 101,
      "required_status": 10,
      "handler_symbol": "COMMAND_GIVEITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "gm",
      "subcommand": "",
      "handler": 513,
      "required_status": 200,
      "handler_symbol": "COMMAND_GM",
      "implementation_status": "implemented"
    },
    {
      "command": "gm_hide",
      "subcommand": "",
      "handler": 167,
      "required_status": 10,
      "handler_symbol": "COMMAND_TOGGLE_GM_HIDE",
      "implementation_status": "implemented"
    },
    {
      "command": "gm_invisible",
      "subcommand": "",
      "handler": 1014,
      "required_status": 10,
      "handler_symbol": "COMMAND_GM_INVISIBLE",
      "implementation_status": "implemented"
    },
    {
      "command": "gm_vanish",
      "subcommand": "",
      "handler": 168,
      "required_status": 10,
      "handler_symbol": "COMMAND_TOGGLE_GM_VANISH",
      "implementation_status": "implemented"
    },
    {
      "command": "goto",
      "subcommand": "",
      "handler": 56,
      "required_status": 10,
      "handler_symbol": "COMMAND_GOTO",
      "implementation_status": "implemented"
    },
    {
      "command": "grid",
      "subcommand": "",
      "handler": 271,
      "required_status": 200,
      "handler_symbol": "COMMAND_GRID",
      "implementation_status": "implemented"
    },
    {
      "command": "groupoptions",
      "subcommand": "",
      "handler": 17,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUP",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "gsay",
      "subcommand": "",
      "handler": 14,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUPSAY",
      "implementation_status": "implemented"
    },
    {
      "command": "gu",
      "subcommand": "",
      "handler": 250,
      "required_status": 0,
      "handler_symbol": "COMMAND_GUILDSAY",
      "implementation_status": "implemented"
    },
    {
      "command": "guild",
      "subcommand": "",
      "handler": 252,
      "required_status": 0,
      "handler_symbol": "COMMAND_GUILD",
      "implementation_status": "implemented"
    },
    {
      "command": "guildbank",
      "subcommand": "",
      "handler": 282,
      "required_status": 0,
      "handler_symbol": "COMMAND_GUILD_BANK",
      "implementation_status": "disabled"
    },
    {
      "command": "guildbetaapply",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "guilds",
      "subcommand": "",
      "handler": 258,
      "required_status": 0,
      "handler_symbol": "COMMAND_GUILDS",
      "implementation_status": "implemented"
    },
    {
      "command": "guilds",
      "subcommand": "add",
      "handler": 261,
      "required_status": 10,
      "handler_symbol": "COMMAND_GUILDS_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "guilds",
      "subcommand": "create",
      "handler": 259,
      "required_status": 0,
      "handler_symbol": "COMMAND_GUILDS_CREATE",
      "implementation_status": "implemented"
    },
    {
      "command": "guilds",
      "subcommand": "delete",
      "handler": 260,
      "required_status": 10,
      "handler_symbol": "COMMAND_GUILDS_DELETE",
      "implementation_status": "implemented"
    },
    {
      "command": "guilds",
      "subcommand": "list",
      "handler": 263,
      "required_status": 200,
      "handler_symbol": "COMMAND_GUILDS_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "guilds",
      "subcommand": "remove",
      "handler": 262,
      "required_status": 10,
      "handler_symbol": "COMMAND_GUILDS_REMOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "guildsay",
      "subcommand": "",
      "handler": 250,
      "required_status": 0,
      "handler_symbol": "COMMAND_GUILDSAY",
      "implementation_status": "implemented"
    },
    {
      "command": "guild_confirmedrename",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "guild_rename",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "guild_rename_cancel",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "hail",
      "subcommand": "",
      "handler": 19,
      "required_status": 0,
      "handler_symbol": "COMMAND_HAIL",
      "implementation_status": "implemented"
    },
    {
      "command": "hide_achievements",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "hide_illusions",
      "subcommand": "",
      "handler": 158,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_ILLUSIONS",
      "implementation_status": "implemented"
    },
    {
      "command": "hirelingoptions",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house",
      "subcommand": "",
      "handler": 515,
      "required_status": 0,
      "handler_symbol": "COMMAND_HOUSE",
      "implementation_status": "implemented"
    },
    {
      "command": "house_amenity",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house_deposit",
      "subcommand": "",
      "handler": 518,
      "required_status": 0,
      "handler_symbol": "COMMAND_HOUSE_DEPOSIT",
      "implementation_status": "implemented"
    },
    {
      "command": "house_display",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house_edit",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house_kick",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house_own_all",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house_portal_obj",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "house_ui",
      "subcommand": "",
      "handler": 514,
      "required_status": 0,
      "handler_symbol": "COMMAND_HOUSE_UI",
      "implementation_status": "implemented"
    },
    {
      "command": "house_zone",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "ignores",
      "subcommand": "",
      "handler": 113,
      "required_status": 0,
      "handler_symbol": "COMMAND_IGNORES",
      "implementation_status": "no_op"
    },
    {
      "command": "ignore_add",
      "subcommand": "",
      "handler": 111,
      "required_status": 0,
      "handler_symbol": "COMMAND_IGNORE_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "ignore_remove",
      "subcommand": "",
      "handler": 112,
      "required_status": 0,
      "handler_symbol": "COMMAND_IGNORE_REMOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "info",
      "subcommand": "",
      "handler": 33,
      "required_status": 0,
      "handler_symbol": "COMMAND_INFO",
      "implementation_status": "implemented"
    },
    {
      "command": "inspectpc",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "inspect_player",
      "subcommand": "",
      "handler": 136,
      "required_status": 0,
      "handler_symbol": "COMMAND_INSPECT_PLAYER",
      "implementation_status": "implemented"
    },
    {
      "command": "install_vendor",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "inventory",
      "subcommand": "",
      "handler": 24,
      "required_status": 0,
      "handler_symbol": "COMMAND_INVENTORY",
      "implementation_status": "implemented"
    },
    {
      "command": "invite",
      "subcommand": "",
      "handler": 15,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUPINVITE",
      "implementation_status": "implemented"
    },
    {
      "command": "invulnerable",
      "subcommand": "",
      "handler": 93,
      "required_status": 10,
      "handler_symbol": "COMMAND_INVULNERABLE",
      "implementation_status": "implemented"
    },
    {
      "command": "irc",
      "subcommand": "",
      "handler": 292,
      "required_status": 200,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "itemsearch",
      "subcommand": "",
      "handler": 212,
      "required_status": 200,
      "handler_symbol": "COMMAND_ITEMSEARCH",
      "implementation_status": "implemented"
    },
    {
      "command": "joinchannel",
      "subcommand": "",
      "handler": 294,
      "required_status": 0,
      "handler_symbol": "COMMAND_JOIN_CHANNEL",
      "implementation_status": "implemented"
    },
    {
      "command": "joinchannelfromload",
      "subcommand": "",
      "handler": 295,
      "required_status": 0,
      "handler_symbol": "COMMAND_JOIN_CHANNEL_FROM_LOAD",
      "implementation_status": "implemented"
    },
    {
      "command": "kick",
      "subcommand": "",
      "handler": 22,
      "required_status": 100,
      "handler_symbol": "COMMAND_KICK",
      "implementation_status": "implemented"
    },
    {
      "command": "kickfromgroup",
      "subcommand": "",
      "handler": 543,
      "required_status": 0,
      "handler_symbol": "COMMAND_KICKFROMGROUP",
      "implementation_status": "implemented"
    },
    {
      "command": "kickfromraid",
      "subcommand": "",
      "handler": 544,
      "required_status": 0,
      "handler_symbol": "COMMAND_KICKFROMRAID",
      "implementation_status": "implemented"
    },
    {
      "command": "kickgroupfromraid",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "kill",
      "subcommand": "",
      "handler": 54,
      "required_status": 10,
      "handler_symbol": "COMMAND_KILL",
      "implementation_status": "implemented"
    },
    {
      "command": "knowledgewindow_insertblanks",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "knowledgewindow_sort",
      "subcommand": "",
      "handler": 511,
      "required_status": 0,
      "handler_symbol": "COMMAND_KNOWLEDGEWINDOWSORT",
      "implementation_status": "implemented"
    },
    {
      "command": "knowledgewindow_swap",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "label_bag",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "languages",
      "subcommand": "",
      "handler": 290,
      "required_status": 0,
      "handler_symbol": "COMMAND_LANGUAGES",
      "implementation_status": "implemented"
    },
    {
      "command": "lastname",
      "subcommand": "",
      "handler": 28,
      "required_status": 0,
      "handler_symbol": "COMMAND_LASTNAME",
      "implementation_status": "implemented"
    },
    {
      "command": "leavegroup",
      "subcommand": "",
      "handler": 105,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUP_LEAVE",
      "implementation_status": "implemented"
    },
    {
      "command": "leavelonshowroom",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "leaveraid",
      "subcommand": "",
      "handler": 545,
      "required_status": 0,
      "handler_symbol": "COMMAND_LEAVERAID",
      "implementation_status": "implemented"
    },
    {
      "command": "level",
      "subcommand": "",
      "handler": 3,
      "required_status": 200,
      "handler_symbol": "COMMAND_LEVEL",
      "implementation_status": "implemented"
    },
    {
      "command": "lfg",
      "subcommand": "",
      "handler": 150,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_LFG",
      "implementation_status": "implemented"
    },
    {
      "command": "lfw",
      "subcommand": "",
      "handler": 149,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_LFW",
      "implementation_status": "implemented"
    },
    {
      "command": "loadbeastlordability",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "location",
      "subcommand": "",
      "handler": 268,
      "required_status": 200,
      "handler_symbol": "COMMAND_LOCATION",
      "implementation_status": "implemented"
    },
    {
      "command": "location",
      "subcommand": "add",
      "handler": 270,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOCATION_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "location",
      "subcommand": "create",
      "handler": 269,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOCATION_CREATE",
      "implementation_status": "implemented"
    },
    {
      "command": "location",
      "subcommand": "delete",
      "handler": 273,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOCATION_DELETE",
      "implementation_status": "implemented"
    },
    {
      "command": "location",
      "subcommand": "list",
      "handler": 274,
      "required_status": 200,
      "handler_symbol": "COMMAND_LOCATION_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "location",
      "subcommand": "remove",
      "handler": 272,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOCATION_REMOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "lock",
      "subcommand": "",
      "handler": 100,
      "required_status": 10,
      "handler_symbol": "COMMAND_LOCK",
      "implementation_status": "implemented"
    },
    {
      "command": "lonshowroom",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "loot",
      "subcommand": "",
      "handler": 60,
      "required_status": 0,
      "handler_symbol": "COMMAND_LOOT",
      "implementation_status": "implemented"
    },
    {
      "command": "loot",
      "subcommand": "additem",
      "handler": 68,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOOT_ADDITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "loot",
      "subcommand": "list",
      "handler": 66,
      "required_status": 200,
      "handler_symbol": "COMMAND_LOOT_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "loot",
      "subcommand": "removeitem",
      "handler": 69,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOOT_REMOVEITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "loot",
      "subcommand": "setcoin",
      "handler": 67,
      "required_status": 100,
      "handler_symbol": "COMMAND_LOOT_SETCOIN",
      "implementation_status": "implemented"
    },
    {
      "command": "lootcorpse",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "loot_confirmation",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "lotto",
      "subcommand": "",
      "handler": 264,
      "required_status": 0,
      "handler_symbol": "COMMAND_LOTTO",
      "implementation_status": "implemented"
    },
    {
      "command": "luadebug",
      "subcommand": "",
      "handler": 83,
      "required_status": 10,
      "handler_symbol": "COMMAND_LUADEBUG",
      "implementation_status": "implemented"
    },
    {
      "command": "makeleader",
      "subcommand": "",
      "handler": 106,
      "required_status": 0,
      "handler_symbol": "COMMAND_GROUP_MAKE_LEADER",
      "implementation_status": "implemented"
    },
    {
      "command": "mender_repair",
      "subcommand": "",
      "handler": 114,
      "required_status": 0,
      "handler_symbol": "COMMAND_MENDER_REPAIR",
      "implementation_status": "implemented"
    },
    {
      "command": "mender_repair_all",
      "subcommand": "",
      "handler": 115,
      "required_status": 0,
      "handler_symbol": "COMMAND_MENDER_REPAIR_ALL",
      "implementation_status": "implemented"
    },
    {
      "command": "mentor",
      "subcommand": "",
      "handler": 528,
      "required_status": 0,
      "handler_symbol": "COMMAND_MENTOR",
      "implementation_status": "implemented"
    },
    {
      "command": "mercenary",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "merchant",
      "subcommand": "",
      "handler": 244,
      "required_status": 200,
      "handler_symbol": "COMMAND_MERCHANT",
      "implementation_status": "implemented"
    },
    {
      "command": "merchant",
      "subcommand": "list",
      "handler": 245,
      "required_status": 200,
      "handler_symbol": "COMMAND_MERCHANT_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "mercname",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "modify",
      "subcommand": "",
      "handler": 1000,
      "required_status": 200,
      "handler_symbol": "COMMAND_MODIFY",
      "implementation_status": "implemented"
    },
    {
      "command": "modify",
      "subcommand": "alignment",
      "handler": 1013,
      "required_status": 200,
      "handler_symbol": "COMMAND_ALIGNMENT",
      "implementation_status": "implemented"
    },
    {
      "command": "modify",
      "subcommand": "character",
      "handler": 1001,
      "required_status": 100,
      "handler_symbol": "COMMAND_MODIFY_CHARACTER",
      "implementation_status": "implemented"
    },
    {
      "command": "modify",
      "subcommand": "faction",
      "handler": 1002,
      "required_status": 200,
      "handler_symbol": "COMMAND_MODIFY_FACTION",
      "implementation_status": "implemented"
    },
    {
      "command": "modify",
      "subcommand": "quest",
      "handler": 1005,
      "required_status": 100,
      "handler_symbol": "COMMAND_MODIFY_QUEST",
      "implementation_status": "implemented"
    },
    {
      "command": "modify",
      "subcommand": "skill",
      "handler": 1006,
      "required_status": 100,
      "handler_symbol": "COMMAND_MODIFY_SKILL",
      "implementation_status": "implemented"
    },
    {
      "command": "modify",
      "subcommand": "spawn",
      "handler": 1007,
      "required_status": 100,
      "handler_symbol": "COMMAND_MODIFY_SPAWN",
      "implementation_status": "implemented"
    },
    {
      "command": "mood",
      "subcommand": "",
      "handler": 800,
      "required_status": 0,
      "handler_symbol": "COMMAND_MOOD",
      "implementation_status": "implemented"
    },
    {
      "command": "motd",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "move",
      "subcommand": "",
      "handler": 32,
      "required_status": 100,
      "handler_symbol": "COMMAND_MOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "movecharacter",
      "subcommand": "",
      "handler": 525,
      "required_status": 200,
      "handler_symbol": "COMMAND_MOVECHARACTER",
      "implementation_status": "implemented"
    },
    {
      "command": "movelog",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "moveraidmember",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "move_house_items",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "move_item",
      "subcommand": "",
      "handler": 516,
      "required_status": 0,
      "handler_symbol": "COMMAND_MOVE_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "msg",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "name",
      "subcommand": "",
      "handler": 6,
      "required_status": 200,
      "handler_symbol": "COMMAND_NAME",
      "implementation_status": "implemented"
    },
    {
      "command": "name_pet",
      "subcommand": "",
      "handler": 139,
      "required_status": 0,
      "handler_symbol": "COMMAND_NAME_PET",
      "implementation_status": "implemented"
    },
    {
      "command": "officersay",
      "subcommand": "",
      "handler": 251,
      "required_status": 0,
      "handler_symbol": "COMMAND_OFFICERSAY",
      "implementation_status": "implemented"
    },
    {
      "command": "ooc",
      "subcommand": "",
      "handler": 12,
      "required_status": 0,
      "handler_symbol": "COMMAND_OOC",
      "implementation_status": "implemented"
    },
    {
      "command": "os",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "packhouse",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "pet",
      "subcommand": "",
      "handler": 137,
      "required_status": 0,
      "handler_symbol": "COMMAND_PET",
      "implementation_status": "implemented"
    },
    {
      "command": "petname",
      "subcommand": "",
      "handler": 138,
      "required_status": 0,
      "handler_symbol": "COMMAND_PETNAME",
      "implementation_status": "implemented"
    },
    {
      "command": "petoptions",
      "subcommand": "",
      "handler": 142,
      "required_status": 0,
      "handler_symbol": "COMMAND_PETOPTIONS",
      "implementation_status": "implemented"
    },
    {
      "command": "pickup",
      "subcommand": "",
      "handler": 517,
      "required_status": 0,
      "handler_symbol": "COMMAND_PICKUP",
      "implementation_status": "implemented"
    },
    {
      "command": "pickup_vendor",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "place_house_item",
      "subcommand": "",
      "handler": 512,
      "required_status": 0,
      "handler_symbol": "COMMAND_PLACE_HOUSE_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "place_vendor",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "played",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "player",
      "subcommand": "",
      "handler": 307,
      "required_status": 10,
      "handler_symbol": "COMMAND_PLAYER",
      "implementation_status": "implemented"
    },
    {
      "command": "player",
      "subcommand": "coins",
      "handler": 308,
      "required_status": 10,
      "handler_symbol": "COMMAND_PLAYER_COINS",
      "implementation_status": "implemented"
    },
    {
      "command": "porttofriend",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "publish_house",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "questionnaire",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "q_accept_pending_quest",
      "subcommand": "",
      "handler": 76,
      "required_status": 0,
      "handler_symbol": "COMMAND_ACCEPT_QUEST",
      "implementation_status": "implemented"
    },
    {
      "command": "q_deny_pending_quest",
      "subcommand": "",
      "handler": 77,
      "required_status": 0,
      "handler_symbol": "COMMAND_DECLINE_QUEST",
      "implementation_status": "implemented"
    },
    {
      "command": "q_list_pending_quests",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "q_quest_quota",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "race",
      "subcommand": "",
      "handler": 2,
      "required_status": 10,
      "handler_symbol": "COMMAND_RACE",
      "implementation_status": "implemented"
    },
    {
      "command": "raidinvite",
      "subcommand": "",
      "handler": 541,
      "required_status": 0,
      "handler_symbol": "COMMAND_RAIDINVITE",
      "implementation_status": "implemented"
    },
    {
      "command": "raidsay",
      "subcommand": "",
      "handler": 547,
      "required_status": 0,
      "handler_symbol": "COMMAND_RAIDSAY",
      "implementation_status": "implemented"
    },
    {
      "command": "raid_looter",
      "subcommand": "",
      "handler": 542,
      "required_status": 0,
      "handler_symbol": "COMMAND_RAID_LOOTER",
      "implementation_status": "implemented"
    },
    {
      "command": "rain",
      "subcommand": "",
      "handler": 300,
      "required_status": 200,
      "handler_symbol": "COMMAND_RAIN",
      "implementation_status": "implemented"
    },
    {
      "command": "random",
      "subcommand": "",
      "handler": 279,
      "required_status": 0,
      "handler_symbol": "COMMAND_RANDOM",
      "implementation_status": "implemented"
    },
    {
      "command": "randomize",
      "subcommand": "",
      "handler": 239,
      "required_status": 100,
      "handler_symbol": "COMMAND_RANDOMIZE",
      "implementation_status": "implemented"
    },
    {
      "command": "rate_house",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "read",
      "subcommand": "",
      "handler": 463,
      "required_status": 0,
      "handler_symbol": "COMMAND_READ",
      "implementation_status": "implemented"
    },
    {
      "command": "readycheck",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "redeem",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "reforge_item",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "reforge_restore",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "refreshuidata",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "reject_trade",
      "subcommand": "",
      "handler": 174,
      "required_status": 0,
      "handler_symbol": "COMMAND_REJECT_TRADE",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "",
      "handler": 65,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "entity_commands",
      "handler": 240,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_ENTITYCOMMANDS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "factions",
      "handler": 243,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_FACTIONS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "groundspawn_items",
      "handler": 98,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_GROUNDSPAWNS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "guilds",
      "handler": 255,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_GUILDS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "items",
      "handler": 36,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_ITEMS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "locations",
      "handler": 267,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_LOCATIONS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "luasystem",
      "handler": 63,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOADLUASYSTEM",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "mail",
      "handler": 248,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_MAIL",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "playerscripts",
      "handler": 801,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_PLAYERSCRIPTS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "quests",
      "handler": 79,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_QUESTS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "recipes",
      "handler": 1011,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_RECIPES",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "regionscripts",
      "handler": 524,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOADREGIONSCRIPTS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "rules",
      "handler": 519,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_RULES",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "spawns",
      "handler": 99,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_SPAWNS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "spawnscripts",
      "handler": 62,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOADSPAWNSCRIPTS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "spells",
      "handler": 59,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_SPELLS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "startabilities",
      "handler": 522,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_STARTABILITIES",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "structs",
      "handler": 64,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOADSTRUCTS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "transporters",
      "handler": 520,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_TRANSPORTERS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "voiceovers",
      "handler": 532,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_VOICEOVERS",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "zoneinfo",
      "handler": 1010,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_ZONEINFO",
      "implementation_status": "implemented"
    },
    {
      "command": "reload",
      "subcommand": "zones",
      "handler": 193,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_ZONES",
      "implementation_status": "unhandled"
    },
    {
      "command": "reload",
      "subcommand": "zonescripts",
      "handler": 104,
      "required_status": 100,
      "handler_symbol": "COMMAND_RELOAD_ZONESCRIPTS",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_aa",
      "subcommand": "",
      "handler": 755,
      "required_status": 200,
      "handler_symbol": "REMOVE_AA",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "remove_mail_copper",
      "subcommand": "",
      "handler": 133,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_MAIL_COPPER",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_mail_gold",
      "subcommand": "",
      "handler": 131,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_MAIL_GOLD",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_mail_plat",
      "subcommand": "",
      "handler": 130,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_MAIL_PLAT",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_mail_silver",
      "subcommand": "",
      "handler": 132,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_MAIL_SILVER",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_trade_copper",
      "subcommand": "",
      "handler": 181,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_TRADE_COPPER",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_trade_gold",
      "subcommand": "",
      "handler": 183,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_TRADE_GOLD",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_trade_item",
      "subcommand": "",
      "handler": 186,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_TRADE_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_trade_plat",
      "subcommand": "",
      "handler": 184,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_TRADE_PLAT",
      "implementation_status": "implemented"
    },
    {
      "command": "remove_trade_silver",
      "subcommand": "",
      "handler": 182,
      "required_status": 0,
      "handler_symbol": "COMMAND_REMOVE_TRADE_SILVER",
      "implementation_status": "implemented"
    },
    {
      "command": "rename",
      "subcommand": "",
      "handler": 140,
      "required_status": 0,
      "handler_symbol": "COMMAND_RENAME",
      "implementation_status": "implemented"
    },
    {
      "command": "rename_cancel",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "repair",
      "subcommand": "",
      "handler": 116,
      "required_status": 0,
      "handler_symbol": "COMMAND_REPAIR",
      "implementation_status": "implemented"
    },
    {
      "command": "repop",
      "subcommand": "",
      "handler": 82,
      "required_status": 10,
      "handler_symbol": "COMMAND_REPOP",
      "implementation_status": "implemented"
    },
    {
      "command": "reportspam",
      "subcommand": "",
      "handler": 122,
      "required_status": 0,
      "handler_symbol": "COMMAND_REPORT_SPAM",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "report_abuse",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "report_bug",
      "subcommand": "",
      "handler": 75,
      "required_status": 0,
      "handler_symbol": "COMMAND_REPORT_BUG",
      "implementation_status": "implemented"
    },
    {
      "command": "report_feedback",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "report_typo",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "republish_house",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "research",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "reset_zone_timer",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "respec",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "restore_lost_shared",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "resurrect_self",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "return_house_item",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "role",
      "subcommand": "",
      "handler": 170,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_ROLEPLAYING",
      "implementation_status": "implemented"
    },
    {
      "command": "save_aa_profile",
      "subcommand": "",
      "handler": 758,
      "required_status": 200,
      "handler_symbol": "SAVE_AA_PROFILE",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "say",
      "subcommand": "",
      "handler": 7,
      "required_status": 0,
      "handler_symbol": "COMMAND_SAY",
      "implementation_status": "implemented"
    },
    {
      "command": "scribe_scroll_item",
      "subcommand": "",
      "handler": 266,
      "required_status": 0,
      "handler_symbol": "COMMAND_SCRIBE_SCROLL_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "search_stores",
      "subcommand": "",
      "handler": 92,
      "required_status": 0,
      "handler_symbol": "COMMAND_SEARCH_STORES",
      "implementation_status": "implemented"
    },
    {
      "command": "select",
      "subcommand": "",
      "handler": 302,
      "required_status": 0,
      "handler_symbol": "COMMAND_SELECT",
      "implementation_status": "implemented"
    },
    {
      "command": "select_junction",
      "subcommand": "",
      "handler": 53,
      "required_status": 0,
      "handler_symbol": "COMMAND_SELECT_JUNCTION",
      "implementation_status": "implemented"
    },
    {
      "command": "sell_to_merchant",
      "subcommand": "",
      "handler": 88,
      "required_status": 0,
      "handler_symbol": "COMMAND_MERCHANT_SELL",
      "implementation_status": "implemented"
    },
    {
      "command": "setautoattackmode",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "setautolootmode",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "setclientpetkey",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "setplayerrace",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "setsocial",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "settime",
      "subcommand": "",
      "handler": 58,
      "required_status": 10,
      "handler_symbol": "COMMAND_SETTIME",
      "implementation_status": "implemented"
    },
    {
      "command": "set_auction_item",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "set_auto_consume",
      "subcommand": "",
      "handler": 152,
      "required_status": 0,
      "handler_symbol": "COMMAND_TOGGLE_AUTOCONSUME",
      "implementation_status": "implemented"
    },
    {
      "command": "set_combat_voice",
      "subcommand": "",
      "handler": 102,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_COMBAT_VOICE",
      "implementation_status": "implemented"
    },
    {
      "command": "set_consume_food",
      "subcommand": "",
      "handler": 538,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_CONSUME_FOOD",
      "implementation_status": "implemented"
    },
    {
      "command": "set_emote_voice",
      "subcommand": "",
      "handler": 103,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_EMOTE_VOICE",
      "implementation_status": "implemented"
    },
    {
      "command": "set_guild_member_note",
      "subcommand": "",
      "handler": 253,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_GUILD_MEMBER_NOTE",
      "implementation_status": "implemented"
    },
    {
      "command": "set_guild_officer_note",
      "subcommand": "",
      "handler": 254,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_GUILD_OFFICER_NOTE",
      "implementation_status": "implemented"
    },
    {
      "command": "set_language",
      "subcommand": "",
      "handler": 291,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_LANGUAGE",
      "implementation_status": "implemented"
    },
    {
      "command": "set_mail_item",
      "subcommand": "",
      "handler": 128,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_MAIL_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "set_payment_coin",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "set_trade_coin",
      "subcommand": "",
      "handler": 176,
      "required_status": 0,
      "handler_symbol": "COMMAND_SET_TRADE_COIN",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "share",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "shared_deposit",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "shared_withdraw",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "share_quest",
      "subcommand": "",
      "handler": 533,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHARE_QUEST",
      "implementation_status": "implemented"
    },
    {
      "command": "shout",
      "subcommand": "",
      "handler": 10,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHOUT",
      "implementation_status": "implemented"
    },
    {
      "command": "showbackapp",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "showcloak",
      "subcommand": "",
      "handler": 155,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHOW_CLOAK",
      "implementation_status": "implemented"
    },
    {
      "command": "showconcentration",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "showdeathdialog",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "showhelm",
      "subcommand": "",
      "handler": 153,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHOW_HELM",
      "implementation_status": "implemented"
    },
    {
      "command": "showhood",
      "subcommand": "",
      "handler": 159,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHOW_HOOD",
      "implementation_status": "implemented"
    },
    {
      "command": "showhoodorhelm",
      "subcommand": "",
      "handler": 154,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHOW_HOOD_OR_HELM",
      "implementation_status": "implemented"
    },
    {
      "command": "showranged",
      "subcommand": "",
      "handler": 151,
      "required_status": 0,
      "handler_symbol": "COMMAND_SHOW_RANGED",
      "implementation_status": "implemented"
    },
    {
      "command": "show_available_achievement_trees",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "sit",
      "subcommand": "",
      "handler": 48,
      "required_status": 0,
      "handler_symbol": "COMMAND_SIT",
      "implementation_status": "implemented"
    },
    {
      "command": "skill",
      "subcommand": "",
      "handler": 236,
      "required_status": 200,
      "handler_symbol": "COMMAND_SKILL",
      "implementation_status": "implemented"
    },
    {
      "command": "skill",
      "subcommand": "add",
      "handler": 233,
      "required_status": 200,
      "handler_symbol": "COMMAND_SKILL_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "skill",
      "subcommand": "list",
      "handler": 235,
      "required_status": 200,
      "handler_symbol": "COMMAND_SKILL_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "skill",
      "subcommand": "remove",
      "handler": 234,
      "required_status": 200,
      "handler_symbol": "COMMAND_SKILL_REMOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "sle",
      "subcommand": "",
      "handler": 802,
      "required_status": 200,
      "handler_symbol": "COMMAND_SLE",
      "implementation_status": "implemented"
    },
    {
      "command": "smp",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "socialmedia",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "soloautolock",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "sort_search_stores",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "spawn",
      "subcommand": "",
      "handler": 1,
      "required_status": 200,
      "handler_symbol": "COMMAND_SPAWN",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "add",
      "handler": 43,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_ADD",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "combine",
      "handler": 80,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_COMBINE",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "create",
      "handler": 44,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_CREATE",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "details",
      "handler": 52,
      "required_status": 200,
      "handler_symbol": "COMMAND_SPAWN_DETAILS",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "equipment",
      "handler": 51,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_EQUIPMENT",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "group",
      "handler": 169,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_GROUP",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "list",
      "handler": 47,
      "required_status": 200,
      "handler_symbol": "COMMAND_SPAWN_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "move",
      "handler": 40,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_MOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "remove",
      "handler": 46,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_REMOVE",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "set",
      "handler": 45,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_SET",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "target",
      "handler": 50,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_TARGET",
      "implementation_status": "implemented"
    },
    {
      "command": "spawn",
      "subcommand": "template",
      "handler": 143,
      "required_status": 100,
      "handler_symbol": "COMMAND_SPAWN_TEMPLATE",
      "implementation_status": "implemented"
    },
    {
      "command": "speed",
      "subcommand": "",
      "handler": 39,
      "required_status": 10,
      "handler_symbol": "COMMAND_SPEED",
      "implementation_status": "implemented"
    },
    {
      "command": "spell_lottery",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "spell_lottery_all",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "spiritshards",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "split",
      "subcommand": "",
      "handler": 546,
      "required_status": 0,
      "handler_symbol": "COMMAND_SPLIT",
      "implementation_status": "implemented"
    },
    {
      "command": "ss",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "stand",
      "subcommand": "",
      "handler": 49,
      "required_status": 0,
      "handler_symbol": "COMMAND_STAND",
      "implementation_status": "implemented"
    },
    {
      "command": "start_bank",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "start_house_customization",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "start_mail",
      "subcommand": "",
      "handler": 119,
      "required_status": 0,
      "handler_symbol": "COMMAND_START_MAIL",
      "implementation_status": "implemented"
    },
    {
      "command": "start_merchant",
      "subcommand": "",
      "handler": 90,
      "required_status": 0,
      "handler_symbol": "COMMAND_START_MERCHANT",
      "implementation_status": "no_op"
    },
    {
      "command": "start_trade",
      "subcommand": "",
      "handler": 172,
      "required_status": 0,
      "handler_symbol": "COMMAND_START_TRADE",
      "implementation_status": "implemented"
    },
    {
      "command": "stopcreation",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "stopdrinking",
      "subcommand": "",
      "handler": 157,
      "required_status": 0,
      "handler_symbol": "COMMAND_STOP_DRINKING",
      "implementation_status": "implemented"
    },
    {
      "command": "stopeating",
      "subcommand": "",
      "handler": 156,
      "required_status": 0,
      "handler_symbol": "COMMAND_STOP_EATING",
      "implementation_status": "implemented"
    },
    {
      "command": "stopfollow",
      "subcommand": "",
      "handler": 27,
      "required_status": 0,
      "handler_symbol": "COMMAND_STOP_FOLLOW",
      "implementation_status": "implemented"
    },
    {
      "command": "store_list_item",
      "subcommand": "",
      "handler": 803,
      "required_status": 0,
      "handler_symbol": "COMMAND_STORE_LIST_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "store_set_price",
      "subcommand": "",
      "handler": 804,
      "required_status": 0,
      "handler_symbol": "COMMAND_STORE_SET_PRICE",
      "implementation_status": "implemented"
    },
    {
      "command": "store_set_price_local",
      "subcommand": "",
      "handler": 805,
      "required_status": 0,
      "handler_symbol": "COMMAND_STORE_SET_PRICE_LOCAL",
      "implementation_status": "implemented"
    },
    {
      "command": "store_start_selling",
      "subcommand": "",
      "handler": 806,
      "required_status": 0,
      "handler_symbol": "COMMAND_STORE_START_SELLING",
      "implementation_status": "implemented"
    },
    {
      "command": "store_stop_selling",
      "subcommand": "",
      "handler": 807,
      "required_status": 0,
      "handler_symbol": "COMMAND_STORE_STOP_SELLING",
      "implementation_status": "implemented"
    },
    {
      "command": "store_unlist_item",
      "subcommand": "",
      "handler": 808,
      "required_status": 0,
      "handler_symbol": "COMMAND_STORE_UNLIST_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "summon",
      "subcommand": "",
      "handler": 55,
      "required_status": 10,
      "handler_symbol": "COMMAND_SUMMON",
      "implementation_status": "implemented"
    },
    {
      "command": "summonitem",
      "subcommand": "",
      "handler": 25,
      "required_status": 200,
      "handler_symbol": "COMMAND_SUMMONITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "summon_chest",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "summon_mount",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "surrender",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "swap_inventory",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "switch_aa_profile",
      "subcommand": "",
      "handler": 756,
      "required_status": 200,
      "handler_symbol": "SWITCH_AA_PROFILE",
      "implementation_status": "implemented"
    },
    {
      "command": "tagtarget",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "takemailattachments",
      "subcommand": "",
      "handler": 121,
      "required_status": 0,
      "handler_symbol": "COMMAND_TAKE_MAIL_ATTACHMENTS",
      "implementation_status": "implemented"
    },
    {
      "command": "target",
      "subcommand": "",
      "handler": 536,
      "required_status": 0,
      "handler_symbol": "COMMAND_TARGET",
      "implementation_status": "implemented"
    },
    {
      "command": "targetaddon",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "targetitem",
      "subcommand": "",
      "handler": 315,
      "required_status": 200,
      "handler_symbol": "COMMAND_TARGETITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "target_pet",
      "subcommand": "",
      "handler": 537,
      "required_status": 0,
      "handler_symbol": "COMMAND_TARGET_PET",
      "implementation_status": "implemented"
    },
    {
      "command": "tc",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "tell",
      "subcommand": "",
      "handler": 8,
      "required_status": 0,
      "handler_symbol": "COMMAND_TELL",
      "implementation_status": "implemented"
    },
    {
      "command": "tellchannel",
      "subcommand": "",
      "handler": 296,
      "required_status": 0,
      "handler_symbol": "COMMAND_TELL_CHANNEL",
      "implementation_status": "implemented"
    },
    {
      "command": "test",
      "subcommand": "",
      "handler": 84,
      "required_status": 10,
      "handler_symbol": "COMMAND_TEST",
      "implementation_status": "implemented"
    },
    {
      "command": "testcopy",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "title",
      "subcommand": "",
      "handler": 281,
      "required_status": 0,
      "handler_symbol": "COMMAND_TITLE",
      "implementation_status": "implemented"
    },
    {
      "command": "title",
      "subcommand": "fix",
      "handler": 289,
      "required_status": 0,
      "handler_symbol": "COMMAND_TITLE_FIX",
      "implementation_status": "diagnostic_only"
    },
    {
      "command": "title",
      "subcommand": "list",
      "handler": 286,
      "required_status": 0,
      "handler_symbol": "COMMAND_TITLE_LIST",
      "implementation_status": "implemented"
    },
    {
      "command": "title",
      "subcommand": "setprefix",
      "handler": 287,
      "required_status": 0,
      "handler_symbol": "COMMAND_TITLE_SETPREFIX",
      "implementation_status": "implemented"
    },
    {
      "command": "title",
      "subcommand": "setsuffix",
      "handler": 288,
      "required_status": 0,
      "handler_symbol": "COMMAND_TITLE_SETSUFFIX",
      "implementation_status": "implemented"
    },
    {
      "command": "toggle_bonus_exp",
      "subcommand": "",
      "handler": 166,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "toggle_work_side_product",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "tomerchant",
      "subcommand": "",
      "handler": 301,
      "required_status": 0,
      "handler_symbol": "COMMAND_TO_MERCHANT",
      "implementation_status": "implemented"
    },
    {
      "command": "track",
      "subcommand": "",
      "handler": 135,
      "required_status": 0,
      "handler_symbol": "COMMAND_TRACK",
      "implementation_status": "implemented"
    },
    {
      "command": "transfer_character",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "transfer_character_free",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "try_on",
      "subcommand": "",
      "handler": 280,
      "required_status": 0,
      "handler_symbol": "COMMAND_TRY_ON",
      "implementation_status": "implemented"
    },
    {
      "command": "ts_research",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "tweet",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "twitter",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "unattune_all",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "unequip",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "unequip_appearance",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "uninstall_vendor",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "unmentor",
      "subcommand": "",
      "handler": 529,
      "required_status": 0,
      "handler_symbol": "COMMAND_UNMENTOR",
      "implementation_status": "implemented"
    },
    {
      "command": "use",
      "subcommand": "",
      "handler": 61,
      "required_status": 0,
      "handler_symbol": "COMMAND_USE",
      "implementation_status": "implemented"
    },
    {
      "command": "useability",
      "subcommand": "",
      "handler": 34,
      "required_status": 0,
      "handler_symbol": "COMMAND_USEABILITY",
      "implementation_status": "implemented"
    },
    {
      "command": "useabilityonplayer",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "use_available_spell",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "use_equipped_item",
      "subcommand": "",
      "handler": 275,
      "required_status": 0,
      "handler_symbol": "COMMAND_USE_EQUIPPED_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "use_item",
      "subcommand": "",
      "handler": 117,
      "required_status": 0,
      "handler_symbol": "COMMAND_USE_ITEM",
      "implementation_status": "implemented"
    },
    {
      "command": "use_unlocker",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_add_inventory",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_add_krono",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_list_inventory",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_remove_inventory",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_set_price",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_take_coin",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vendor_unlist_inventory",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "ventsay",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "version",
      "subcommand": "",
      "handler": 42,
      "required_status": 0,
      "handler_symbol": "COMMAND_VERSION",
      "implementation_status": "implemented"
    },
    {
      "command": "vote_kick",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "vote_options",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "waypoint",
      "subcommand": "",
      "handler": 523,
      "required_status": 0,
      "handler_symbol": "COMMAND_WAYPOINT",
      "implementation_status": "implemented"
    },
    {
      "command": "waypoint_from_entity_id",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "weaponstats",
      "subcommand": "",
      "handler": 118,
      "required_status": 200,
      "handler_symbol": "COMMAND_WEAPONSTATS",
      "implementation_status": "implemented"
    },
    {
      "command": "weather",
      "subcommand": "",
      "handler": 38,
      "required_status": 10,
      "handler_symbol": "COMMAND_WEATHER",
      "implementation_status": "implemented"
    },
    {
      "command": "welcome_info",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "who",
      "subcommand": "",
      "handler": 41,
      "required_status": 0,
      "handler_symbol": "COMMAND_WHO",
      "implementation_status": "implemented"
    },
    {
      "command": "whogroup",
      "subcommand": "",
      "handler": 539,
      "required_status": 0,
      "handler_symbol": "COMMAND_WHOGROUP",
      "implementation_status": "implemented"
    },
    {
      "command": "wind",
      "subcommand": "",
      "handler": 314,
      "required_status": 200,
      "handler_symbol": "COMMAND_WIND",
      "implementation_status": "implemented"
    },
    {
      "command": "write_sign",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "yell",
      "subcommand": "",
      "handler": 9,
      "required_status": 0,
      "handler_symbol": "COMMAND_YELL",
      "implementation_status": "implemented"
    },
    {
      "command": "zone",
      "subcommand": "",
      "handler": 20,
      "required_status": 200,
      "handler_symbol": "COMMAND_ZONE",
      "implementation_status": "implemented"
    },
    {
      "command": "zone",
      "subcommand": "details",
      "handler": 238,
      "required_status": 200,
      "handler_symbol": "COMMAND_ZONE_DETAILS",
      "implementation_status": "implemented"
    },
    {
      "command": "zone",
      "subcommand": "revive",
      "handler": 192,
      "required_status": 100,
      "handler_symbol": "COMMAND_ZONE_REVIVE",
      "implementation_status": "unhandled"
    },
    {
      "command": "zone",
      "subcommand": "safe",
      "handler": 191,
      "required_status": 100,
      "handler_symbol": "COMMAND_ZONE_SAFE",
      "implementation_status": "implemented"
    },
    {
      "command": "zone",
      "subcommand": "set",
      "handler": 237,
      "required_status": 100,
      "handler_symbol": "COMMAND_ZONE_SET",
      "implementation_status": "implemented"
    },
    {
      "command": "zone",
      "subcommand": "shutdown",
      "handler": 190,
      "required_status": 100,
      "handler_symbol": "COMMAND_ZONE_SHUTDOWN",
      "implementation_status": "unhandled"
    },
    {
      "command": "zonetofriend",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    },
    {
      "command": "zone_to_group_member_zone",
      "subcommand": "",
      "handler": 999,
      "required_status": 0,
      "handler_symbol": null,
      "implementation_status": "unhandled"
    }
  ],
  "dispatch": {
    "file": "WorldServer/Commands/Commands.cpp",
    "line": 2280,
    "default_line": 6452,
    "default_body": "{\n\t\t\tLogWrite(COMMAND__WARNING, 0, \"Command\", \"Unhandled command: %s\", command->command.data.c_str());\n\t\t\tbreak;\n\t\t}"
  }
}
