Code:
#include <amxmodx>
#include <engine>
#include <hamsandwich>
new gSetSpawnOrigin;
#define ShouldSetSpawnOrigin(%1) (gSetSpawnOrigin & (1 << (%1 & 31)))
#define SetSpawnOrigin(%1) gSetSpawnOrigin |= (1 << (%1 & 31))
#define ClearSpawnOrigin(%1) gSetSpawnOrigin &= ~(1 << (%1 & 31))
#define MAX_PLAYERS 32
new Float:gSpawnOrigin[MAX_PLAYERS + 1][3];
public plugin_init() {
register_plugin("Respawn Position", "0.0.1", "Exolent");
RegisterHam(Ham_Killed, "player", "FwdPlayerKilled");
RegisterHam(Ham_Killed, "player", "FwdPlayerKilledPost", 1);
RegisterHam(Ham_Spawn, "player", "FwdPlayerSpawnPost", 1);
}
public client_disconnect(id) {
ClearSpawnOrigin(id);
}
public FwdPlayerKilled(victim, killer, shouldGib) {
entity_get_vector(victim, EV_VEC_origin, gSpawnOrigin[victim]);
SetSpawnOrigin(victim);
}
public FwdPlayerKilledPost(victim, killer, shouldGib) {
entity_set_int(victim, EV_INT_deadflag, DEAD_RESPAWNABLE);
entity_set_float(victim, EV_FL_nextthink, get_gametime());
}
public FwdPlayerSpawnPost(id) {
if(ShouldSetSpawnOrigin(id) && is_user_alive(id)) {
entity_set_vector(id, EV_VEC_origin, gSpawnOrigin[id]);
ClearSpawnOrigin(id);
}
}
__________________