|
@@ -118,7 +118,7 @@ init([GameId, TableId, Params]) ->
|
|
|
|
|
|
Players = init_players(PlayersInfo),
|
|
Players = init_players(PlayersInfo),
|
|
RelayParams = [{players, [{PlayerId, UserInfo#'PlayerInfo'.id} || {PlayerId, UserInfo, _, _} <- PlayersInfo]},
|
|
RelayParams = [{players, [{PlayerId, UserInfo#'PlayerInfo'.id} || {PlayerId, UserInfo, _, _} <- PlayersInfo]},
|
|
- {observers_allowed, true},
|
|
|
|
|
|
+ {observers_allowed, false},
|
|
{table, {?MODULE, self()}}],
|
|
{table, {?MODULE, self()}}],
|
|
{ok, Relay} = ?RELAY:start(RelayParams),
|
|
{ok, Relay} = ?RELAY:start(RelayParams),
|
|
|
|
|
|
@@ -251,7 +251,7 @@ handle_parent_message({register_player, RequestId, UserInfo, PlayerId, SeatNum},
|
|
{next_state, StateName, StateData#okey_state{players = NewPlayers}};
|
|
{next_state, StateName, StateData#okey_state{players = NewPlayers}};
|
|
|
|
|
|
handle_parent_message({replace_player, RequestId, UserInfo, PlayerId, SeatNum}, StateName,
|
|
handle_parent_message({replace_player, RequestId, UserInfo, PlayerId, SeatNum}, StateName,
|
|
- #okey_state{game_id = GameId, table_id = TableId, players = Players,
|
|
|
|
|
|
+ #okey_state{table_id = TableId, players = Players,
|
|
parent = Parent, relay = Relay} = StateData) ->
|
|
parent = Parent, relay = Relay} = StateData) ->
|
|
#'PlayerInfo'{id = UserId, robot = IsBot} = UserInfo,
|
|
#'PlayerInfo'{id = UserId, robot = IsBot} = UserInfo,
|
|
#player{id = OldPlayerId} = get_player_by_seat_num(SeatNum, Players),
|
|
#player{id = OldPlayerId} = get_player_by_seat_num(SeatNum, Players),
|
|
@@ -265,7 +265,7 @@ handle_parent_message({replace_player, RequestId, UserInfo, PlayerId, SeatNum},
|
|
{next_state, StateName, StateData#okey_state{players = NewPlayers2}};
|
|
{next_state, StateName, StateData#okey_state{players = NewPlayers2}};
|
|
|
|
|
|
handle_parent_message(start_round, StateName,
|
|
handle_parent_message(start_round, StateName,
|
|
- #okey_state{game_id = GameId, game_mode = GameMode, cur_round = CurRound,
|
|
|
|
|
|
+ #okey_state{game_mode = GameMode, cur_round = CurRound,
|
|
gosterge_finish_allowed = GostergeFinishAllowed,
|
|
gosterge_finish_allowed = GostergeFinishAllowed,
|
|
start_seat = LastStartSeat, players = Players,
|
|
start_seat = LastStartSeat, players = Players,
|
|
relay = Relay, turn_timeout = TurnTimeout,
|
|
relay = Relay, turn_timeout = TurnTimeout,
|
|
@@ -360,7 +360,7 @@ handle_parent_message(show_round_result, StateName,
|
|
|
|
|
|
%% Results = [{PlayerId, Position, Score, Status}] Status = winner | loser | eliminated | none
|
|
%% Results = [{PlayerId, Position, Score, Status}] Status = winner | loser | eliminated | none
|
|
handle_parent_message({show_series_result, Results}, StateName,
|
|
handle_parent_message({show_series_result, Results}, StateName,
|
|
- #okey_state{game_id = GameId, relay = Relay, players = Players,
|
|
|
|
|
|
+ #okey_state{relay = Relay, players = Players,
|
|
next_series_confirmation = Confirm} = StateData) ->
|
|
next_series_confirmation = Confirm} = StateData) ->
|
|
Msg = create_okey_series_ended(Results, Players, Confirm),
|
|
Msg = create_okey_series_ended(Results, Players, Confirm),
|
|
relay_publish_ge(Relay, Msg, StateData),
|
|
relay_publish_ge(Relay, Msg, StateData),
|
|
@@ -368,7 +368,7 @@ handle_parent_message({show_series_result, Results}, StateName,
|
|
|
|
|
|
%% Results = [{UserId, Position, Score, Status}] Status = active | eliminated
|
|
%% Results = [{UserId, Position, Score, Status}] Status = active | eliminated
|
|
handle_parent_message({tour_result, TourNum, Results}, StateName,
|
|
handle_parent_message({tour_result, TourNum, Results}, StateName,
|
|
- #okey_state{game_id = GameId, relay = Relay, tournament_table = TTable} = StateData) ->
|
|
|
|
|
|
+ #okey_state{relay = Relay, tournament_table = TTable} = StateData) ->
|
|
NewTTable = [{TourNum, Results} | TTable],
|
|
NewTTable = [{TourNum, Results} | TTable],
|
|
Msg = create_okey_tour_result(TourNum, Results),
|
|
Msg = create_okey_tour_result(TourNum, Results),
|
|
relay_publish_ge(Relay, Msg, StateData),
|
|
relay_publish_ge(Relay, Msg, StateData),
|
|
@@ -695,7 +695,7 @@ do_game_action(SeatNum, GameAction, From, StateName,
|
|
|
|
|
|
|
|
|
|
process_game_events(Events, #okey_state{desk_state = DeskState, players = Players,
|
|
process_game_events(Events, #okey_state{desk_state = DeskState, players = Players,
|
|
- game_id = GameId, relay = Relay, timeout_timer = OldTRef,
|
|
|
|
|
|
+ relay = Relay, timeout_timer = OldTRef,
|
|
round_timeout = RoundTimeout, round_timer = RoundTRef,
|
|
round_timeout = RoundTimeout, round_timer = RoundTRef,
|
|
turn_timeout = TurnTimeout} = StateData) ->
|
|
turn_timeout = TurnTimeout} = StateData) ->
|
|
NewDeskState = handle_desk_events(Events, DeskState, Players, Relay, StateData), %% Track the desk and send game events to clients
|
|
NewDeskState = handle_desk_events(Events, DeskState, Players, Relay, StateData), %% Track the desk and send game events to clients
|
|
@@ -846,13 +846,13 @@ handle_desk_events([Event | Events], DeskState, Players, Relay, #okey_state{} =
|
|
NewDiscarded = lists:keyreplace(SeatNum, 1, Discarded, {SeatNum, [Tash | Pile]}),
|
|
NewDiscarded = lists:keyreplace(SeatNum, 1, Discarded, {SeatNum, [Tash | Pile]}),
|
|
DeskState#desk_state{hands = NewHands, discarded = NewDiscarded, state = state_take};
|
|
DeskState#desk_state{hands = NewHands, discarded = NewDiscarded, state = state_take};
|
|
{auto_take_discard, SeatNum, Tash} -> %% Injected event
|
|
{auto_take_discard, SeatNum, Tash} -> %% Injected event
|
|
- #player{id = PlayerId} = get_player_by_seat_num(SeatNum, Players),
|
|
|
|
- Msg = create_okey_turn_timeout(Tash, Tash),
|
|
|
|
|
|
+ #player{id = PlayerId, user_id = UserId} = get_player_by_seat_num(SeatNum, Players),
|
|
|
|
+ Msg = create_okey_turn_timeout(UserId, Tash, Tash),
|
|
send_to_client_ge(Relay, PlayerId, Msg, StateData),
|
|
send_to_client_ge(Relay, PlayerId, Msg, StateData),
|
|
DeskState;
|
|
DeskState;
|
|
{auto_discard, SeatNum, Tash} -> %% Injected event
|
|
{auto_discard, SeatNum, Tash} -> %% Injected event
|
|
- #player{id = PlayerId} = get_player_by_seat_num(SeatNum, Players),
|
|
|
|
- Msg = create_okey_turn_timeout(null, Tash),
|
|
|
|
|
|
+ #player{id = PlayerId, user_id = UserId} = get_player_by_seat_num(SeatNum, Players),
|
|
|
|
+ Msg = create_okey_turn_timeout(UserId, null, Tash),
|
|
send_to_client_ge(Relay, PlayerId, Msg, StateData),
|
|
send_to_client_ge(Relay, PlayerId, Msg, StateData),
|
|
DeskState;
|
|
DeskState;
|
|
{next_player, SeatNum} ->
|
|
{next_player, SeatNum} ->
|
|
@@ -961,18 +961,21 @@ send_to_subscriber_ge(Relay, SubscrId, Msg, #okey_state{game_id = GameId} = _Sta
|
|
[Name|List] = tuple_to_list(Msg),
|
|
[Name|List] = tuple_to_list(Msg),
|
|
Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
|
|
Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
|
|
gas:info(?MODULE,"SEND SUB ~p",[Event]),
|
|
gas:info(?MODULE,"SEND SUB ~p",[Event]),
|
|
|
|
+ game_observer:log_event(Event),
|
|
?RELAY:table_message(Relay, {to_subscriber, SubscrId, Event}).
|
|
?RELAY:table_message(Relay, {to_subscriber, SubscrId, Event}).
|
|
|
|
|
|
send_to_client_ge(Relay, PlayerId, Msg, #okey_state{game_id = GameId} = _StateData) ->
|
|
send_to_client_ge(Relay, PlayerId, Msg, #okey_state{game_id = GameId} = _StateData) ->
|
|
[Name|List] = tuple_to_list(Msg),
|
|
[Name|List] = tuple_to_list(Msg),
|
|
Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
|
|
Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
|
|
gas:info(?MODULE,"SEND CLIENT ~p",[Event]),
|
|
gas:info(?MODULE,"SEND CLIENT ~p",[Event]),
|
|
|
|
+ game_observer:log_event(Event),
|
|
?RELAY:table_message(Relay, {to_client, PlayerId, Event}).
|
|
?RELAY:table_message(Relay, {to_client, PlayerId, Event}).
|
|
|
|
|
|
relay_publish_ge(Relay, Msg, #okey_state{game_id = GameId} = _StateData) ->
|
|
relay_publish_ge(Relay, Msg, #okey_state{game_id = GameId} = _StateData) ->
|
|
[Name|List] = tuple_to_list(Msg),
|
|
[Name|List] = tuple_to_list(Msg),
|
|
Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
|
|
Event = #game_event{game = GameId, event = Name, args = lists:zip(known_records:fields(Name),List) },
|
|
gas:info(?MODULE,"RELAY PUBLISH ~p",[Event]),
|
|
gas:info(?MODULE,"RELAY PUBLISH ~p",[Event]),
|
|
|
|
+ game_observer:log_event(Event),
|
|
relay_publish(Relay, Event).
|
|
relay_publish(Relay, Event).
|
|
|
|
|
|
relay_publish(Relay, Msg) ->
|
|
relay_publish(Relay, Msg) ->
|
|
@@ -1392,11 +1395,13 @@ create_okey_revealed(SeatNum, DiscardedTash, TashPlaces, Players) ->
|
|
hand = TashPlacesExt}.
|
|
hand = TashPlacesExt}.
|
|
|
|
|
|
|
|
|
|
-create_okey_turn_timeout(null, TashDiscarded) ->
|
|
|
|
- #okey_turn_timeout{tile_taken = null,
|
|
|
|
|
|
+create_okey_turn_timeout(UserId, null, TashDiscarded) ->
|
|
|
|
+ #okey_turn_timeout{player = UserId,
|
|
|
|
+ tile_taken = null,
|
|
tile_discarded = tash_to_ext(TashDiscarded)};
|
|
tile_discarded = tash_to_ext(TashDiscarded)};
|
|
-create_okey_turn_timeout(TashTaken, TashDiscarded) ->
|
|
|
|
- #okey_turn_timeout{tile_taken = tash_to_ext(TashTaken),
|
|
|
|
|
|
+create_okey_turn_timeout(UserId, TashTaken, TashDiscarded) ->
|
|
|
|
+ #okey_turn_timeout{player = UserId,
|
|
|
|
+ tile_taken = tash_to_ext(TashTaken),
|
|
tile_discarded = tash_to_ext(TashDiscarded)}.
|
|
tile_discarded = tash_to_ext(TashDiscarded)}.
|
|
|
|
|
|
create_game_paused_pause(UserId, GameId) ->
|
|
create_game_paused_pause(UserId, GameId) ->
|