rewrite subcommand list, add some comments

This commit is contained in:
Martin Michelsen
2022-03-26 23:59:58 -07:00
parent 0bcd76d909
commit 3aeb121b00
+256 -272
View File
@@ -917,278 +917,262 @@ typedef void (*subcommand_handler_t)(shared_ptr<ServerState> s,
const PSOSubcommand* p, size_t count); const PSOSubcommand* p, size_t count);
subcommand_handler_t subcommand_handlers[0x100] = { subcommand_handler_t subcommand_handlers[0x100] = {
// 00 /* 00 */ process_subcommand_invalid,
process_subcommand_invalid, /* 01 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 02 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 03 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 04 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 05 */ process_subcommand_forward_check_size_game, // Switch flipped (door lock / lights / poison gas)
process_subcommand_forward_check_size_game, /* 06 */ process_subcommand_send_guild_card,
process_subcommand_send_guild_card, /* 07 */ process_subcommand_symbol_chat,
process_subcommand_symbol_chat, /* 08 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 09 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 0A */ process_subcommand_monster_hit,
process_subcommand_monster_hit, /* 0B */ process_subcommand_forward_check_size_game, // Box destroyed
process_subcommand_forward_check_size_game, /* 0C */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 0D */ process_subcommand_forward_check_size,
process_subcommand_forward_check_size, /* 0E */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 0F */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 10 */ process_subcommand_unimplemented,
// 10 /* 11 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 12 */ process_subcommand_forward_check_size_game,
process_subcommand_unimplemented, /* 13 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 14 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 15 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 16 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 17 */ process_subcommand_forward_check_size_game,
process_subcommand_unimplemented, /* 18 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 19 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 1A */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 1B */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 1C */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 1D */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 1E */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 1F */ process_subcommand_forward_check_size,
process_subcommand_unimplemented, /* 20 */ process_subcommand_forward_check_size,
process_subcommand_forward_check_size, /* 21 */ process_subcommand_change_area, // Inter-level warp
// 20 /* 22 */ process_subcommand_forward_check_size_client, // Set player visibility
process_subcommand_forward_check_size, /* 23 */ process_subcommand_forward_check_size_client, // Set player visibility
process_subcommand_change_area, // Inter-level warp /* 24 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_client, /* 25 */ process_subcommand_equip_unequip_item, // Equip item
process_subcommand_forward_check_size_client, /* 26 */ process_subcommand_equip_unequip_item, // Unequip item
process_subcommand_forward_check_size_game, /* 27 */ process_subcommand_use_item,
process_subcommand_equip_unequip_item, // Equip item /* 28 */ process_subcommand_forward_check_size_game, // Feed MAG
process_subcommand_equip_unequip_item, // Unequip item /* 29 */ process_subcommand_forward_check_size_game, // Delete item (via bank deposit / sale / feeding MAG)
process_subcommand_use_item, /* 2A */ process_subcommand_drop_item,
process_subcommand_forward_check_size_game, // Feed MAG /* 2B */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 2C */ process_subcommand_forward_check_size, // Talk to NPC
process_subcommand_drop_item, /* 2D */ process_subcommand_forward_check_size, // Done talking to NPC
process_subcommand_forward_check_size_game, /* 2E */ process_subcommand_unimplemented,
process_subcommand_forward_check_size, // Talk to NPC /* 2F */ process_subcommand_hit_by_monster,
process_subcommand_forward_check_size, // Done talking to NPC /* 30 */ process_subcommand_forward_check_size_game, // Level up
process_subcommand_unimplemented, /* 31 */ process_subcommand_forward_check_size_game, // Medical center
process_subcommand_hit_by_monster, /* 32 */ process_subcommand_forward_check_size_game, // Medical center
// 30 /* 33 */ process_subcommand_forward_check_size_game, // Revive player (only confirmed with moon atomizer)
process_subcommand_forward_check_size_game, // level-up /* 34 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 35 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 36 */ process_subcommand_forward_check_game,
process_subcommand_forward_check_size_game, // revive player, only confirmed with moon atomizer /* 37 */ process_subcommand_forward_check_size_game, // Photon blast
process_subcommand_unimplemented, /* 38 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 39 */ process_subcommand_forward_check_size_game, // Photon blast ready
process_subcommand_forward_check_game, /* 3A */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, // photon blast /* 3B */ process_subcommand_forward_check_size,
process_subcommand_unimplemented, /* 3C */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, // photon blast ready /* 3D */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 3E */ process_subcommand_forward_check_size, // Stop moving
process_subcommand_forward_check_size, /* 3F */ process_subcommand_forward_check_size,
process_subcommand_unimplemented, /* 40 */ process_subcommand_forward_check_size, // Walk
process_subcommand_unimplemented, /* 41 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size, // Stop moving /* 42 */ process_subcommand_forward_check_size, // Run
process_subcommand_forward_check_size, /* 43 */ process_subcommand_forward_check_size_client,
// 40 /* 44 */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size, // Walk /* 45 */ process_subcommand_forward_check_size_client,
process_subcommand_unimplemented, /* 46 */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size, // Run /* 47 */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size_client, /* 48 */ process_subcommand_use_technique,
process_subcommand_forward_check_size_client, /* 49 */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size_client, /* 4A */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size_client, /* 4B */ process_subcommand_hit_by_monster,
process_subcommand_forward_check_size_client, /* 4C */ process_subcommand_hit_by_monster,
process_subcommand_use_technique, /* 4D */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size_client, /* 4E */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size_client, /* 4F */ process_subcommand_forward_check_size_client,
process_subcommand_hit_by_monster, /* 50 */ process_subcommand_forward_check_size_client,
process_subcommand_hit_by_monster, /* 51 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_client, /* 52 */ process_subcommand_forward_check_size, // Toggle shop/bank interaction
process_subcommand_forward_check_size_client, /* 53 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_client, /* 54 */ process_subcommand_unimplemented,
// 50 /* 55 */ process_subcommand_forward_check_size_client, // Intra-map warp
process_subcommand_forward_check_size_client, /* 56 */ process_subcommand_forward_check_size_client,
process_subcommand_unimplemented, /* 57 */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size, // Toggle shop/bank interaction /* 58 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 59 */ process_subcommand_forward_check_size_game, // Item picked up
process_subcommand_unimplemented, /* 5A */ process_subcommand_pick_up_item, // Request to pick up item
process_subcommand_forward_check_size_client, // Intra-map warp /* 5B */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_client, /* 5C */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_client, /* 5D */ process_subcommand_forward_check_size_game, // Drop meseta or stacked item
process_subcommand_forward_check_size_game, /* 5E */ process_subcommand_forward_check_size_game, // Buy item at shop
process_subcommand_forward_check_size_game, /* 5F */ process_subcommand_forward_check_size_game, // Drop item from box/monster
process_subcommand_pick_up_item, /* 60 */ process_subcommand_enemy_drop_item, // Request for item drop (handled by the server on BB)
process_subcommand_unimplemented, /* 61 */ process_subcommand_forward_check_size_game, // Feed mag
process_subcommand_unimplemented, /* 62 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, // drop meseta /* 63 */ process_subcommand_destroy_item, // Destroy an item on the ground (used when too many items have been dropped)
process_subcommand_forward_check_size_game, /* 64 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 65 */ process_subcommand_unimplemented,
// 60 /* 66 */ process_subcommand_unimplemented,
process_subcommand_enemy_drop_item, /* 67 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, // feed mag /* 68 */ process_subcommand_forward_check_size_game, // Telepipe/Ryuker
process_subcommand_unimplemented, /* 69 */ process_subcommand_unimplemented,
process_subcommand_destroy_item, /* 6A */ process_subcommand_forward_check_size_game,
process_subcommand_unimplemented, /* 6B */ process_subcommand_forward_check_game_loading,
process_subcommand_unimplemented, /* 6C */ process_subcommand_forward_check_game_loading,
process_subcommand_unimplemented, /* 6D */ process_subcommand_forward_check_game_loading,
process_subcommand_forward_check_size_game, /* 6E */ process_subcommand_forward_check_game_loading,
process_subcommand_forward_check_size_game, /* 6F */ process_subcommand_forward_check_game_loading,
process_subcommand_unimplemented, /* 70 */ process_subcommand_forward_check_game_loading,
process_subcommand_forward_check_size_game, /* 71 */ process_subcommand_forward_check_game_loading,
process_subcommand_forward_check_game_loading, /* 72 */ process_subcommand_forward_check_game_loading,
process_subcommand_forward_check_game_loading, /* 73 */ process_subcommand_invalid,
process_subcommand_forward_check_game_loading, /* 74 */ process_subcommand_word_select,
process_subcommand_forward_check_game_loading, /* 75 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_game_loading, /* 76 */ process_subcommand_forward_check_size_game, // Monster killed
// 70 /* 77 */ process_subcommand_forward_check_size_game, // Sync quest data
process_subcommand_forward_check_game_loading, /* 78 */ process_subcommand_unimplemented,
process_subcommand_forward_check_game_loading, /* 79 */ process_subcommand_forward_check_size, // Lobby 14/15 soccer game
process_subcommand_forward_check_game_loading, /* 7A */ process_subcommand_unimplemented,
process_subcommand_invalid, /* 7B */ process_subcommand_unimplemented,
process_subcommand_word_select, /* 7C */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 7D */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 7E */ process_subcommand_unimplemented,
process_subcommand_forward_check_size, /* 7F */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 80 */ process_subcommand_forward_check_size_game, // trigger trap
process_subcommand_forward_check_size, /* 81 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 82 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 83 */ process_subcommand_forward_check_size_game, // place trap
process_subcommand_unimplemented, /* 84 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 85 */ process_subcommand_forward_check_size_game,
process_subcommand_unimplemented, /* 86 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 87 */ process_subcommand_unimplemented,
// 80 /* 88 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, // trigger trap /* 89 */ process_subcommand_forward_check_size_game,
process_subcommand_unimplemented, /* 8A */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 8B */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, // place trap /* 8C */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 8D */ process_subcommand_forward_check_size_client,
process_subcommand_forward_check_size_game, /* 8E */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 8F */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 90 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* 91 */ process_subcommand_forward_check_size_game,
process_subcommand_forward_check_size_game, /* 92 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 93 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 94 */ process_subcommand_forward_check_size_game, // Warp (the $warp chat command is implemented using this)
process_subcommand_unimplemented, /* 95 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_client, /* 96 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 97 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 98 */ process_subcommand_unimplemented,
// 90 /* 99 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 9A */ process_subcommand_forward_check_size_game, // Update player stat ($infhp/$inftp are implemented using this command)
process_subcommand_forward_check_size_game, /* 9B */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 9C */ process_subcommand_forward_check_size_game,
process_subcommand_unimplemented, /* 9D */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 9E */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* 9F */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A0 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A1 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A2 */ process_subcommand_box_drop_item, // Request for item drop from box (handled by server on BB)
process_subcommand_unimplemented, /* A3 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A4 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A5 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* A6 */ process_subcommand_forward_check_size, // trade proposal
process_subcommand_unimplemented, /* A7 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A8 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* A9 */ process_subcommand_unimplemented,
// A0 /* AA */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* AB */ process_subcommand_forward_check_size_client, // Create lobby chair
process_subcommand_unimplemented, /* AC */ process_subcommand_unimplemented,
process_subcommand_box_drop_item, /* AD */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* AE */ process_subcommand_forward_check_size_client,
process_subcommand_unimplemented, /* AF */ process_subcommand_forward_check_size_client, // Turn in lobby chair
process_subcommand_unimplemented, /* B0 */ process_subcommand_forward_check_size_client, // Move in lobby chair
process_subcommand_forward_check_size, // trade proposal /* B1 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* B2 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* B3 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* B4 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* B5 */ process_subcommand_open_shop_or_ep3_unknown, // BB shop request
process_subcommand_forward_check_size_client, /* B6 */ process_subcommand_unimplemented, // BB shop contents (server->client only)
process_subcommand_unimplemented, /* B7 */ process_subcommand_unimplemented, // TODO: BB buy shop item
process_subcommand_unimplemented, /* B8 */ process_subcommand_identify_item, // Accept tekker result
process_subcommand_forward_check_size_client, /* B9 */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_client, /* BA */ process_subcommand_unimplemented,
// B0 /* BB */ process_subcommand_open_bank, // BB Bank request
process_subcommand_forward_check_size_client, /* BC */ process_subcommand_unimplemented, // BB bank contents (server->client only)
process_subcommand_unimplemented, /* BD */ process_subcommand_bank_action,
process_subcommand_unimplemented, /* BE */ process_subcommand_unimplemented, // BB create inventory item (server->client only)
process_subcommand_unimplemented, /* BF */ process_subcommand_forward_check_size_ep3_lobby, // Ep3 change music, also BB give EXP (BB usage is server->client only)
process_subcommand_unimplemented, /* C0 */ process_subcommand_unimplemented,
process_subcommand_open_shop_or_ep3_unknown, /* C1 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* C2 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* C3 */ process_subcommand_drop_stacked_item, // Split stacked item - not sent if entire stack is dropped
process_subcommand_identify_item, /* C4 */ process_subcommand_sort_inventory,
process_subcommand_unimplemented, /* C5 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* C6 */ process_subcommand_unimplemented,
process_subcommand_open_bank, /* C7 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* C8 */ process_subcommand_monster_killed,
process_subcommand_bank_action, /* C9 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* CA */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_ep3_lobby, /* CB */ process_subcommand_unimplemented,
// C0 /* CC */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* CD */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* CE */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* CF */ process_subcommand_forward_check_size_game,
process_subcommand_drop_stacked_item, /* D0 */ process_subcommand_unimplemented,
process_subcommand_sort_inventory, /* D1 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D2 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D3 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D4 */ process_subcommand_unimplemented,
process_subcommand_monster_killed, /* D5 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D6 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D7 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D8 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* D9 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* DA */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* DB */ process_subcommand_unimplemented,
process_subcommand_forward_check_size_game, /* DC */ process_subcommand_unimplemented,
// D0 /* DD */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* DE */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* DF */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E0 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E1 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E2 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E3 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E4 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E5 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E6 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E7 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E8 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* E9 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* EA */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* EB */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* EC */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* ED */ process_subcommand_unimplemented,
// E0 /* EE */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* EF */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F0 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F1 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F2 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F3 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F4 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F5 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F6 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F7 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F8 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* F9 */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* FA */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* FB */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* FC */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* FD */ process_subcommand_unimplemented,
process_subcommand_unimplemented, /* FE */ process_subcommand_unimplemented,
// F0 /* FF */ process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
process_subcommand_unimplemented,
}; };
void process_subcommand(shared_ptr<ServerState> s, shared_ptr<Lobby> l, void process_subcommand(shared_ptr<ServerState> s, shared_ptr<Lobby> l,