improve player position tracking
This commit is contained in:
@@ -342,6 +342,7 @@ static void on_set_player_visibility(shared_ptr<ServerState>,
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Game commands used by cheat mechanisms
|
// Game commands used by cheat mechanisms
|
||||||
|
|
||||||
|
template <typename CmdT>
|
||||||
static void on_change_area(shared_ptr<ServerState>,
|
static void on_change_area(shared_ptr<ServerState>,
|
||||||
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
||||||
const void* data, size_t size) {
|
const void* data, size_t size) {
|
||||||
@@ -353,7 +354,29 @@ static void on_change_area(shared_ptr<ServerState>,
|
|||||||
forward_subcommand(l, c, command, flag, data, size);
|
forward_subcommand(l, c, command, flag, data, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
// when a player is hit by an enemy, heal them if infinite HP is enabled
|
// When a player dies, decrease their mag's synchro
|
||||||
|
static void on_player_died(shared_ptr<ServerState>,
|
||||||
|
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
||||||
|
const void* data, size_t size) {
|
||||||
|
const auto& cmd = check_size_t<G_ClientIDHeader>(data, size, 0xFFFF);
|
||||||
|
if (!l->is_game() || (cmd.client_id != c->lobby_client_id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (l->flags & Lobby::Flag::ITEM_TRACKING_ENABLED) {
|
||||||
|
try {
|
||||||
|
auto& inventory = c->game_data.player()->inventory;
|
||||||
|
size_t mag_index = inventory.find_equipped_mag();
|
||||||
|
auto& data = inventory.items[mag_index].data;
|
||||||
|
data.data2[0] = max<int8_t>(static_cast<int8_t>(data.data2[0] - 5), 0);
|
||||||
|
} catch (const out_of_range&) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
forward_subcommand(l, c, command, flag, data, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
// When a player is hit by an enemy, heal them if infinite HP is enabled
|
||||||
static void on_hit_by_enemy(shared_ptr<ServerState>,
|
static void on_hit_by_enemy(shared_ptr<ServerState>,
|
||||||
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
||||||
const void* data, size_t size) {
|
const void* data, size_t size) {
|
||||||
|
|||||||
Reference in New Issue
Block a user