X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=src%2Frrsolve.c;fp=src%2Frrsolve.c;h=6441e46b8fc6be2c63387d0ff4be852bea72923b;hb=128cf22e66395f3bcb9fdf7ff56024e66f7d503f;hp=5e92cbb94a5edb16cbb996e96e9ee7fbf6ed0b1d;hpb=a278d8f2b6534fc46e035d6a2a9984407c2c7aba;p=rrsolve diff --git a/src/rrsolve.c b/src/rrsolve.c index 5e92cbb..6441e46 100644 --- a/src/rrsolve.c +++ b/src/rrsolve.c @@ -39,7 +39,7 @@ #define RRS_STATE_GET_ROBOT(s, ri, x, y) { (y) = ((s) >> ((ri)<<3)) & 0xf; (x) = ((s) >> (((ri)<<3) + 4)) & 0xf; } static void -handle_events (rr_client_t *client); +handle_events (rr_client_t *client, char *name); static rrs_state_t rrs_state_get_from_board (rr_board_t *board); @@ -111,7 +111,7 @@ main (int argc, char *argv[]) return 1; } - handle_events (client); + handle_events (client, args.user); rr_client_destroy (client); } @@ -120,7 +120,7 @@ main (int argc, char *argv[]) } static void -handle_events (rr_client_t *client) +handle_events (rr_client_t *client, char *name) { int i; rr_status_t status; @@ -128,7 +128,10 @@ handle_events (rr_client_t *client) rrs_solution_t solution; rr_board_t *board; char *diagram; - struct timespec move_delay = { 1, 200000000l }; + struct timespec move_delay = { 0, 800000000l }; + rr_players_t *players; + + rr_client_players (client, &players); /* XXX: This block of code can go away when add a NOTICE BOARD for new users joining a game. */ @@ -212,23 +215,38 @@ handle_events (rr_client_t *client) } } break; + case RR_NOTICE_BID: + /* rrsolve is kind enought to offer pity points */ + if (notice->u.bid.number == solution.num_moves && + strcmp (notice->u.bid.username, name) && + rr_players_get_score (players, notice->u.bid.username) < rr_players_get_score (players, name)) + { + rr_client_revoke (client); + rr_client_bid (client, solution.num_moves); + } + break; + case RR_NOTICE_JOIN: + rr_players_add (players, notice->u.string); + break; + case RR_NOTICE_PART: + rr_players_remove (players, notice->u.string); + break; + case RR_NOTICE_SCORE: + rr_players_set_score (players, notice->u.bid.username, notice->u.bid.number); + break; case RR_NOTICE_GAMEOVER: case RR_NOTICE_GAME: case RR_NOTICE_USER: - case RR_NOTICE_JOIN: case RR_NOTICE_QUIT: case RR_NOTICE_DISPOSE: case RR_NOTICE_MESSAGE: case RR_NOTICE_WATCH: - case RR_NOTICE_PART: - case RR_NOTICE_BID: case RR_NOTICE_REVOKE: case RR_NOTICE_TIMER: case RR_NOTICE_ACTIVE: case RR_NOTICE_MOVE: case RR_NOTICE_UNDO: case RR_NOTICE_RESET: - case RR_NOTICE_SCORE: /* Ignore these notices */ break; }