#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <reapi>

const Float:jumplimit = 2.5 // space basili tutma max sure
new Float:jumpstarttime[33]
const Float:speedlimit = 250.0 // suda max hiz (space ile)

public plugin_init() {
	register_plugin("Fast Swim Detector", "1.0", "DPCS*")
	register_forward(FM_PlayerPostThink, "Player_PostThink");
	RegisterHam(Ham_Killed, "player", "Player_Spawn",1);
	for (new i = 1; i < 33; i++)
		jumpstarttime[i] = -1.0
}
public Player_Spawn(id){
	jumpstarttime[id] = -1.0
	return HAM_IGNORED;
}
public client_disconnected(id){
	jumpstarttime[id] = -1.0
}
public Player_PostThink(id)
{
	static inwater; inwater = entity_get_int(id, EV_INT_waterlevel)
	static Buttons;Buttons = pev(id, pev_button);
	static Float:veloc[3];get_user_velocity(id, veloc)
	static Float:hveloc; hveloc = vector_length(veloc)
	if(inwater == 2 && Buttons & IN_JUMP && jumpstarttime[id] < 0.0) {
		jumpstarttime[id] = get_gametime()
	}
	else if(!(Buttons & IN_JUMP) && jumpstarttime[id] > 0.0) {
		jumpstarttime[id] = -1.0
	}
	if(inwater == 2 && jumpstarttime[id] >= 0.0 && get_gametime() - jumpstarttime[id] > jumplimit && hveloc > speedlimit) {
		jumpstarttime[id] = -1.0
		set_entvar(id, var_flags, get_entvar(id, var_flags) | FL_FROZEN);
		@freeze();
	}
}
@freeze(){
	new players[MAX_PLAYERS],num;get_players_ex(players,num,
	GetPlayers_ExcludeDead|GetPlayers_ExcludeBots|GetPlayers_MatchTeam|GetPlayers_ExcludeHLTV|GetPlayers_IncludeConnecting,
	"TERRORIST");
	for(new i;i<num;i++){
		new id=players[i];
		new flag=get_entvar(id,var_flags);
		if(~flag & FL_FROZEN){
			set_entvar(id,var_flags,flag|FL_FROZEN);
		}
	}
	set_task(0.1,"@unfreeze");
}
@unfreeze(){
	new players[MAX_PLAYERS],num;get_players_ex(players,num,
	GetPlayers_ExcludeDead|GetPlayers_ExcludeBots|GetPlayers_MatchTeam|GetPlayers_ExcludeHLTV|GetPlayers_IncludeConnecting,
	"TERRORIST");
	for(new i;i<num;i++){
		new id=players[i];
		new flag=get_entvar(id,var_flags);		
		if(flag & FL_FROZEN){
			set_entvar(id,var_flags,flag&~FL_FROZEN);
		}
	}	
}