Program Listing for File player_fork.c¶
↰ Return to documentation for file (server/game_events/player_fork.c)
#include <stdio.h>
#include "utils/resizable_array.h"
#include "client/client.h"
#include "handler.h"
#include "server.h"
static constexpr const uint64_t EGG_HATCH = 600;
bool player_fork_handler(server_t *srv, const event_t *event)
{
client_state_t *cs = event_get_client(srv, event);
uint64_t interval_sec = (EGG_HATCH * MICROSEC_IN_SEC) / srv->frequency;
if (cs == nullptr)
return false;
if (!sized_struct_ensure_capacity((resizable_array_t *)&srv->eggs, 1,
sizeof *srv->eggs.buff)) {
perror("Failed to ensure capacity for eggs array\n");
return false;
}
srv->eggs.buff[srv->eggs.nmemb] = (egg_t){get_timestamp() + interval_sec,
.team_id = cs->team_id, .x = cs->x, .y = cs->y};
srv->eggs.nmemb++;
send_to_guis(srv, "enw #%zu #%hu %hhu %hhu\n",
srv->eggs.nmemb, event->client_idx, cs->x, cs->y);
append_to_output(srv, cs, "ok\n");
return true;
}