From 9807ceda467cccc6c59fab5003a908e4cacca31f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 8 Jun 2010 17:21:25 +0200 Subject: [PATCH] game: Separate character loading from room loading. --- src/egs_game.erl | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/src/egs_game.erl b/src/egs_game.erl index 4047dd5..c23c858 100644 --- a/src/egs_game.erl +++ b/src/egs_game.erl @@ -164,6 +164,20 @@ char_select_handle(Command, CSocket, GID, Version, _) -> log(GID, "(char_select) dismissed packet ~4.16.0b", [Command]), ?MODULE:char_select(CSocket, GID, Version). +%% @doc Load the selected character in the start lobby and start the main game's loop. + +char_select_load(CSocket, GID, Version, Number) -> + User = egs_db:users_select(GID), + [{status, 1}, {char, Char}, {options, Options}] = data_load(User#users.folder, Number), + << Name:512/bits, _/bits >> = Char, + NewRow = User#users{charnumber=Number, charname=Name}, + egs_db:users_insert(NewRow), + char_load(CSocket, GID, Char, Options, Number), + send_packet_021b(CSocket, GID), + lobby_load(CSocket, GID, 1100000, 0, 1, 1), + ssl:setopts(CSocket, [{active, true}]), + ?MODULE:loop(CSocket, GID, Version). + %% @doc Load the given character's data. data_load(Folder, Number) -> @@ -176,14 +190,9 @@ data_load(Folder, Number) -> [{status, 0}, {char, << 0:2208 >>}] end. -%% @doc Load the selected character in the start lobby and start the main game's loop. +%% @doc Load and send the character information to the client. -char_select_load(CSocket, GID, Version, Number) -> - User = egs_db:users_select(GID), - [{status, 1}, {char, Char}, {options, Options}] = data_load(User#users.folder, Number), - << Name:512/bits, _/bits >> = Char, - NewRow = User#users{charnumber=Number, charname=Name}, - egs_db:users_insert(NewRow), +char_load(CSocket, GID, Char, Options, Number) -> egs_proto:send_character_selected(CSocket, GID, Char, Options), % 0246 send_packet_0a0a(CSocket, GID), @@ -196,11 +205,7 @@ char_select_load(CSocket, GID, Version, Number) -> send_packet_1501(CSocket, GID), send_packet_1512(CSocket, GID), % 0303 - egs_proto:send_npc_info(CSocket, GID), - send_packet_021b(CSocket, GID), - lobby_load(CSocket, GID, 1100000, 0, 1, 1), - ssl:setopts(CSocket, [{active, true}]), - ?MODULE:loop(CSocket, GID, Version). + egs_proto:send_npc_info(CSocket, GID). %% @doc Load the given map as a mission counter. @@ -346,15 +351,8 @@ myroom_load(CSocket, GID, QuestID, ZoneID, MapID, EntryID) -> % broadcast spawn and unspawn to other people lists:foreach(fun(Other) -> Other#users.pid ! {psu_player_unspawn, User} end, egs_db:users_select_others_in_area(OldUser)), lists:foreach(fun(Other) -> Other#users.pid ! {psu_player_spawn, User} end, egs_db:users_select_others_in_area(User)), - % load lobby and character - egs_proto:send_character_selected(CSocket, GID, Char, Options), - % 0246 0a0a 1006 - send_packet_1005(CSocket, GID, Char), - % 1006 0210 - egs_proto:send_universe_info(CSocket, GID), - egs_proto:send_player_card(CSocket, GID, Char, User#users.charnumber), - % 1501 1512 0303 - egs_proto:send_npc_info(CSocket, GID), + % always reload the character when entering a room + char_load(CSocket, GID, Char, Options, User#users.charnumber), egs_proto:send_init_quest(CSocket, GID, QuestID), egs_proto:send_quest(CSocket, QuestFile), send_packet_0a05(CSocket, GID),