.. _program_listing_file_server_game_events_player_life.c: Program Listing for File player_life.c ====================================== |exhale_lsh| :ref:`Return to documentation for file ` (``server/game_events/player_life.c``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include #include #include #include "client/client.h" #include "handler.h" #include "names.h" #include "server.h" static constexpr const size_t FOOD_SURVIVAL = 126; static bool death_rescedule(server_t *srv, const event_t *event) { uint64_t interval = (FOOD_SURVIVAL * MICROSEC_IN_SEC) / srv->frequency; client_state_t *cs = event_get_client(srv, event); event_t new = { .timestamp = get_timestamp() + interval, .client_idx = event->client_idx, .client_id = event->client_id, .command = { PLAYER_DEATH } }; if (cs == nullptr) return false; cs->inv.food--; gui_player_get_inventory_handler(srv, event); if (!event_heap_push(&srv->events, &new)) { perror("Failed to reschedule death event"); return false; } return true; } bool player_death_handler(server_t *srv, const event_t *event) { client_state_t *cs = event_get_client(srv, event); if (cs == nullptr) return false; if (cs->inv.food > 0) return death_rescedule(srv, event); append_to_output(srv, cs, "dead\n"); write_client(srv, event->client_idx); remove_client(srv, event->client_idx); return true; }