Code:
public client_putinserver(id) {
set_task(5.0, "Auto_Unstuck", id+2000, _, _, "b")
}
public Auto_Unstuck(taskid)
{
new id = taskid - TASK_AUTO_UNSTUCK
new button = get_user_button(id)
if(g_isalive[id] && is_player_stuck(id) && !(button & IN_USE))
{
ExecuteForward(g_forwards[UNSTUCK_PRE], g_fwDummyResult, id);
if(g_fwDummyResult >= ZP_PLUGIN_HANDLED) // The game mode didn't accept some conditions
return
// Move to an initial spawn
do_random_spawn(id, 1) // regular spawn
client_print(id, print_chat, "You should be un-stucked now!")
}
}
stock is_player_stuck(id) {
if(!is_user_alive(id)) return false;
static Float:originF[3]; pev(id, pev_origin, originF)
engfunc(EngFunc_TraceHull, originF, originF, 0, (pev(id, pev_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0)
if(get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
return true;
return false;
}