Browse Source

I saw okey enabling

Maxim Sokhatsky 11 years ago
parent
commit
46c7c9115f

+ 3 - 2
apps/server/include/game_okey.hrl

@@ -158,9 +158,10 @@
           can_challenge = false :: boolean()
           can_challenge = false :: boolean()
           }).
           }).
 
 
--record(okey_disable_okey, {
+-record(okey_enable, {
           player :: 'PlayerId'(),
           player :: 'PlayerId'(),
-          who_disabled :: list('PlayerId'())
+          enabled,
+          who :: list('PlayerId'())
          }).
          }).
 
 
 -record(okey_tile_taken, {
 -record(okey_tile_taken, {

+ 1 - 1
apps/server/src/lib/known_records.erl

@@ -53,7 +53,7 @@ fields(okey_player_has_gosterge) ->record_info(fields, okey_player_has_gosterge)
 fields(okey_player_has_8_tashes) ->record_info(fields, okey_player_has_8_tashes);
 fields(okey_player_has_8_tashes) ->record_info(fields, okey_player_has_8_tashes);
 fields(okey_next_turn) ->          record_info(fields, okey_next_turn);
 fields(okey_next_turn) ->          record_info(fields, okey_next_turn);
 fields(okey_tile_taken) ->         record_info(fields, okey_tile_taken);
 fields(okey_tile_taken) ->         record_info(fields, okey_tile_taken);
-fields(okey_disable_okey) ->       record_info(fields, okey_disable_okey);
+fields(okey_enable) ->             record_info(fields, okey_enable);
 fields(okey_turn_timeout) ->       record_info(fields, okey_turn_timeout);
 fields(okey_turn_timeout) ->       record_info(fields, okey_turn_timeout);
 fields(okey_tile_discarded) ->     record_info(fields, okey_tile_discarded);
 fields(okey_tile_discarded) ->     record_info(fields, okey_tile_discarded);
 fields(okey_revealed) ->           record_info(fields, okey_revealed);
 fields(okey_revealed) ->           record_info(fields, okey_revealed);

+ 1 - 1
apps/server/src/okey/okey_bot.erl

@@ -209,7 +209,7 @@ okey_client_loop(State) ->
             Delay = get_delay(fast),
             Delay = get_delay(fast),
             ST = #'OkeySetState'{round_cur = 1, round_max = RM, set_cur = SC, set_max = SM},
             ST = #'OkeySetState'{round_cur = 1, round_max = RM, set_cur = SC, set_max = SM},
             okey_client_loop(State#state{set_state = ST, delay = Delay, mode = Mode});
             okey_client_loop(State#state{set_state = ST, delay = Delay, mode = Mode});
-        #game_event{event = okey_disable_okey, args = Args} = Msg ->
+        #game_event{event = okey_enable, args = Args} = Msg ->
             gas:info(?MODULE,"OKEY_BOT <~p> : Received message: ~p", [Id, Msg]),
             gas:info(?MODULE,"OKEY_BOT <~p> : Received message: ~p", [Id, Msg]),
             okey_client_loop(State#state{okey_disable = true});
             okey_client_loop(State#state{okey_disable = true});
         #game_event{event = okey_game_started, args = Args} = Msg ->
         #game_event{event = okey_game_started, args = Args} = Msg ->

+ 9 - 1
apps/server/src/okey/okey_desk.erl

@@ -354,6 +354,7 @@ handle_player_action(PlayerId, take_from_table, ?STATE_TAKE,
 handle_player_action(PlayerId, {discard, Tash}, StateName,
 handle_player_action(PlayerId, {discard, Tash}, StateName,
                      #state{cur_player = CurPlayerId,
                      #state{cur_player = CurPlayerId,
                             players = Players,
                             players = Players,
+                            okey = Okey,
                             deck = Deck} = StateData) when
                             deck = Deck} = StateData) when
     StateName == ?STATE_DISCARD ->
     StateName == ?STATE_DISCARD ->
 
 
@@ -372,7 +373,14 @@ handle_player_action(PlayerId, {discard, Tash}, StateName,
                             StateData#state{players = NewPlayers}};
                             StateData#state{players = NewPlayers}};
                        _ ->
                        _ ->
                            NextPlayerId = next_id(CurPlayerId),
                            NextPlayerId = next_id(CurPlayerId),
-                           Events = [{next_player, NextPlayerId} | Events1],
+
+        #player{discarded = Discarded} = get_player(CurPlayerId, Players),
+        wf:info(?MODULE,"Looking for Okey in Discarded Tower for Player ~p",[Discarded]),
+
+        EnableOkey = if Discarded /= [] ->
+            case deck:get(1, Discarded) of {Okey, _} -> true; _ -> false end; true -> false end,
+
+                           Events = [{next_player,NextPlayerId,EnableOkey} | Events1],
                            {ok, Events, ?STATE_TAKE,
                            {ok, Events, ?STATE_TAKE,
                             StateData#state{players = NewPlayers, cur_player = NextPlayerId}}
                             StateData#state{players = NewPlayers, cur_player = NextPlayerId}}
                    end
                    end

+ 18 - 4
apps/server/src/okey/okey_table.erl

@@ -853,7 +853,14 @@ handle_desk_events([Event | Events], DeskState, Players, Relay, #okey_state{} =
                 Msg = create_okey_turn_timeout(UserId, null, Tash),
                 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, EnableOkey} ->
+                #player{id = PlayerId, user_id = UserId} = get_player_by_seat_num(SeatNum, Players),
+                case not EnableOkey of
+                    true -> 
+                        MsgOkey = create_okey_enabled(SeatNum, CurSeatNum, Players),
+                        send_to_client_ge(Relay, PlayerId, MsgOkey, StateData);
+                    false -> skip
+                end,
                 Msg = create_okey_next_turn(SeatNum, Players),
                 Msg = create_okey_next_turn(SeatNum, Players),
                 relay_publish_ge(Relay, Msg, StateData),
                 relay_publish_ge(Relay, Msg, StateData),
                 DeskState#desk_state{cur_seat = SeatNum, state = state_take};
                 DeskState#desk_state{cur_seat = SeatNum, state = state_take};
@@ -1259,12 +1266,19 @@ create_okey_player_has_8_tashes(SeatNum, Value, Players) ->
     #okey_player_has_8_tashes{player = UserId,
     #okey_player_has_8_tashes{player = UserId,
                               value = Value}.
                               value = Value}.
 
 
-create_okey_disable_okey(SeatNum, CurSeatNum, Players) ->
+create_okey_enabled(SeatNum, CurSeatNum, Players) ->
     #player{user_id = Who} = get_player_by_seat_num(SeatNum, Players),
     #player{user_id = Who} = get_player_by_seat_num(SeatNum, Players),
     #player{user_id = Whom} = get_player_by_seat_num(CurSeatNum, Players),
     #player{user_id = Whom} = get_player_by_seat_num(CurSeatNum, Players),
-    #okey_disable_okey{player = Whom,
-                       who_disabled = Who}.
+    #okey_enable{player = Whom,
+                 enabled = true,
+                 who = Who}.
 
 
+create_okey_disable_okey(SeatNum, CurSeatNum, Players) ->
+    #player{user_id = Who} = get_player_by_seat_num(SeatNum, Players),
+    #player{user_id = Whom} = get_player_by_seat_num(CurSeatNum, Players),
+    #okey_enable{player = Whom,
+                 enabled = false,
+                 who = Who}.
 
 
 create_okey_tile_taken_discarded(SeatNum, Tash, PileHeight, Players) ->
 create_okey_tile_taken_discarded(SeatNum, Tash, PileHeight, Players) ->
     #player{user_id = UserId} = get_player_by_seat_num(SeatNum, Players),
     #player{user_id = UserId} = get_player_by_seat_num(SeatNum, Players),

+ 9 - 0
apps/web/priv/static/app/js/bootloader.js

@@ -169,9 +169,18 @@ function translateScene(e)
     $("#Center-Card-Selection").hide();
     $("#Center-Card-Selection").hide();
     $("#You-Discard-Shape").hide();
     $("#You-Discard-Shape").hide();
     
     
+    $("#Okey").hide();
+    $("#Okey").on("click", sendSawOkey);
+    $("#Have-8-Tashes").hide();
 
 
 }
 }
 
 
+function sendSawOkey()
+{
+    ws.send(enc(tuple(atom('client'),tuple(atom('game_action'),scope.gameId,
+        atom('okey_i_saw_okey'),[]))));
+}
+
 function initChatSample() {
 function initChatSample() {
     chatMessage("Chat","0","Maxim","Kakaranet:\n"+i18n("GameChat"));
     chatMessage("Chat","0","Maxim","Kakaranet:\n"+i18n("GameChat"));
     barHover();
     barHover();

+ 6 - 0
apps/web/priv/static/app/js/okey/okey.js

@@ -230,6 +230,12 @@ function PostLoad()
         denyWrongReveal();
         denyWrongReveal();
     });
     });
 
 
+    scope.apiProvider.on("okey_enable", function(x) {
+        var e = {detail: x.detail.json, raw: x.detail.bert};
+        var enabled = dec(e.raw).value[0][3][1].value[0][1].value;
+        if (enabled) $("#Okey").show();
+    });
+
     scope.apiProvider.on("okey_round_ended", function(x) {
     scope.apiProvider.on("okey_round_ended", function(x) {
         var e = {detail: x.detail.json, raw: x.detail.bert};
         var e = {detail: x.detail.json, raw: x.detail.bert};
         showRoundEnd(e);
         showRoundEnd(e);

+ 1 - 0
apps/web/priv/static/app/js/okey/okey_protocol.js

@@ -34,6 +34,7 @@ function OkeyApiProviderScope(scope) {
         "okey_game_started",
         "okey_game_started",
         "okey_game_player_state",
         "okey_game_player_state",
         "okey_next_turn",
         "okey_next_turn",
+        "okey_enable",
         "wrong_reveal",
         "wrong_reveal",
         "okey_tile_discarded",
         "okey_tile_discarded",
         "okey_tile_taken",
         "okey_tile_taken",