feat(game): add persistent bush-wall breakthroughs
This commit is contained in:
@@ -722,6 +722,20 @@ static void send_game_error(maze32_gateway_t* gateway, int socket_fd, const char
|
||||
send_error(gateway, socket_fd, request_id, maze32_game_result_name(result), message);
|
||||
}
|
||||
|
||||
static void send_breakthrough_impact(maze32_gateway_t* gateway, int socket_fd,
|
||||
const char* request_id, uint8_t hits) {
|
||||
char response[MAZE32_GATEWAY_OUTGOING_LIMIT] = "";
|
||||
int written = snprintf(response, sizeof(response),
|
||||
"{\"v\":1,\"type\":\"error\",\"seq\":%" PRIu32
|
||||
",\"requestId\":\"%s\",\"payload\":{\"code\":\"blocked\","
|
||||
"\"message\":\"Там стена. Очень убедительная\","
|
||||
"\"breakthroughHits\":%u}}",
|
||||
next_server_sequence(gateway), request_id, (unsigned int)hits);
|
||||
if (written >= 0 && (size_t)written < sizeof(response)) {
|
||||
enqueue(gateway, socket_fd, response);
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_game_command(maze32_gateway_t* gateway, const maze32_session_t* session,
|
||||
const maze32_client_message_t* message) {
|
||||
if (session->role == MAZE32_ROLE_OBSERVER) {
|
||||
@@ -753,7 +767,12 @@ static void handle_game_command(maze32_gateway_t* gateway, const maze32_session_
|
||||
if (finished_now) {
|
||||
complete_match(gateway);
|
||||
}
|
||||
send_game_error(gateway, session->connection_id, message->request_id, result);
|
||||
if (result == MAZE32_GAME_RESULT_BLOCKED && processed.breakthrough_hits > 0U) {
|
||||
send_breakthrough_impact(gateway, session->connection_id, message->request_id,
|
||||
processed.breakthrough_hits);
|
||||
} else {
|
||||
send_game_error(gateway, session->connection_id, message->request_id, result);
|
||||
}
|
||||
return;
|
||||
}
|
||||
char acknowledgement[160] = "";
|
||||
|
||||
Reference in New Issue
Block a user