Discord sunucumuz açılmıştır, hepinizi bekleriz

https://discord.gg/43gGDQe6tS

Derleme hatası

Eklenti sorunlarınız ve özel eklenti istekleriniz

Moderatör: Moderatörler

Kullanıcı avatarı

bilalgecer47
Mesajlar: 729
Kayıt: Çrş Ağu 22, 2018 9:20 pm

Derleme hatası

Mesaj gönderen bilalgecer47 »

Kod: Tümünü seç

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>

#define MIN_PERFECT get_pcvar_num(g_pCvar[0])
#define MIN_LASTJUMP 40
#define MIN_SCROLL 20
#define BAN_TIME get_pcvar_num(g_pCvar[1])

new g_iPerfectJumps[33];
static g_szAuthid[33][33];

static szLogFile[64];
static sz_Data[256];

new g_pCvar[3];

const TASKID_CHECK = 1337;

new const ScriptListName[] = "Cfg_Kodlari.ini";
new const CheatListName[] = "Hile_Kodlari.ini";

/*#define m_afButtonPressed 246
#define m_afButtonReleased 247*/

new g_CheckCvar[][] =
{
"gl_vsync","fps_modem","fps_override","cl_sidespeed","sv_cheats","cl_pitchspeed",
"cl_forwardspeed","cl_backspeed","cl_yawspeed","developer","cl_filterstuffcmd"
};
new g_DefaultCvar[][] =
{
"gl_vsync 0","fps_modem 0","fps_override 0","cl_sidespeed 400",
"cl_forwardspeed 400","cl_backspeed 400","cl_yawspeed 210","developer 0","cl_pitchspeed 225"
};
new g_DefaultCmd[][] =
{
"fullupdate","lastinv","menuselect","vban","specmode","VModEnable","specmode","spec_set_ad",
"vmodenable","cl_setautobuy","cl_setrebuy","byu","buyequip","weapon_knife","weapon_flashbang",
"weapon_smokegrenade","buyammo1","buyammo2","showbriefing","say","say_team","amx_cvar","amx_who","amx_vote",
"amx_heal","amx_rocket","amx_ban","amx_kick","amx_map","amx_votemap"
};

new TotalCvars;

new bool:isBanned[33];
new bool:isCommandsEnabled[33]

new Trie:BadCommands;
new Array:CheatCommands;

new Float:OldAngles[33][3];
new Float:FLastCmd[33],Float:fForwardMove[33],Float:fSideMove[33];

new WarMove[33],WarHLGuard[33],WarAngles[33],WarFps[33];
new UserFPS[33],Steps[33],NamesChangesNum[33],BadCommandsFile[1024],CheatCommandsFile[1024];

new g_Max_Fps, g_Check_Cheat, g_Check_Helper, g_Check_HLGuard, g_Check_Fps, g_Check_Bhop, g_Check_Space, g_Check_Gstrafe, g_Check_Cvars, g_Check_Bad_Cmd, g_Check_ID_LAN, g_Fix_Bug_Nick, g_Min_Name_Length, g_Fast_Name_Change, g_Show_Console_Info;

public plugin_init()
{

register_plugin("HNS Anti-Cheat","15","Proffi");
register_clcmd("say /konsol", "ClCmdShowKeys");
g_Max_Fps=register_cvar("Max_Fps", "111");
g_Check_Cheat=register_cvar("Check_Cheat", "1");
g_Check_Helper=register_cvar("Check_Helper", "1");
g_Check_HLGuard=register_cvar("Check_HLGuard", "1");
g_Check_Fps=register_cvar("Check_Fps", "1");
g_Check_Bhop=register_cvar("Check_Bhop", "1");
g_Check_Space=register_cvar("Check_Space", "1");
g_Check_Gstrafe=register_cvar("Check_Gstrafe", "1");
g_Check_Cvars=register_cvar("Check_Cvars", "1");
g_Check_Bad_Cmd=register_cvar("Check_Bad_Cmd", "1");
g_Check_ID_LAN=register_cvar("Check_ID_LAN", "1");
g_Fix_Bug_Nick=register_cvar("Fix_Bug_Nick", "1");
g_Min_Name_Length=register_cvar("Min_Name_Length", "3");
g_Fast_Name_Change=register_cvar("Fast_Name_Change", "1");
g_Show_Console_Info=register_cvar("Show_Console_Info", "1");

BadCommands = TrieCreate();
CheatCommands = ArrayCreate(32, 1);

g_pCvar[0] = register_cvar("ah_bhop_perfectcount", "6");
g_pCvar[1] = register_cvar("ah_bantime", "10080");
g_pCvar[2] = register_cvar("ah_testmode", "0");

register_forward(FM_CmdStart, "Player_CmdStart");
register_forward(FM_PlayerPreThink, "Player_PreThink");
register_forward(FM_PlayerPostThink, "Player_PostThink");
//register_forward(FM_CmdStart, "fwdCmdStart", 0);

RegisterHam(Ham_Spawn, "player", "Player_Spawn",1);
RegisterHam(Ham_Killed, "player", "Player_Spawn",1);

set_task(5.0, "Check_Cvar",0,"",0,"b");


}
public plugin_cfg()
{
if(get_pcvar_num(g_Check_Bhop))
{
get_localinfo("amxx_datadir", szLogFile, 63);
format(szLogFile, 63, "/%s/Hilecilog.txt", szLogFile);
if (!file_exists(szLogFile))
{
write_file(szLogFile, sz_Data);
}
}


static File[64];
get_configsdir(File, 63);
format(File, 63, "%s/Anti_Cheat.cfg", File);

if (!file_exists(File))
{
write_file(File, "Ban_Type ^"1^" //0-��� 1-amxban6^r")
write_file(File, "Max_Fps ^"111^" //����������� ����������^r")
write_file(File, "Check_Cheat ^"1^" //�������� ��������� ����� 1-�� 0-���^r")
write_file(File, "Check_Helper ^"1^" //�������� ����� �������� 1-�� 0-���^r")
write_file(File, "Check_HLGuard ^"1^" //�������� �� HL Protector/CSXGuard 1-�� 0-���^r")
write_file(File, "Check_Fps ^"1^" //�������� ��� 1-�� 0-���^r")
write_file(File, "Check_Bhop ^"1^" //�������� �� ���� ��� 1-�� 0-���^r")
write_file(File, "Check_Space ^"1^" //�������� �� ������� ������ 1-�� 0-���^r")
write_file(File, "Check_Gstrafe ^"1^" //�������� �� sgs/ddrun hack 1-�� 0-���^r")
write_file(File, "Check_Cvars ^"1^" //�������� �� ���������� ������� 1-�� 0-���^r")
write_file(File, "Check_Bad_Cmd ^"1^" //�������� �� ������� 1-�� 0-���^r")
write_file(File, "Check_ID_LAN ^"1^" //��� STEAM_ID_LAN/VALVE_ID_LAN/HLTV 1-�� 0-���^r")
write_file(File, "Fix_Bug_Nick ^"1^" //���������� ���� + ��� #^r")
write_file(File, "Min_Name_Length ^"3^" //�������� �� �������� ��� ������ ������ 3 ���� ���^r")
write_file(File, "Fast_Name_Change ^"1^" //�������� �� ������� ����� ���� 1-�� 0-���^r")
write_file(File, "Show_Console_Info ^"1^" //����� ��� ��� ����� � �������^r^n")

write_file(File, "//���� �������� ������� ������ � skype/steam dangerous_proffi")

server_cmd("exec %s", File); server_exec();
}
else
{	
server_cmd("exec %s", File); server_exec();
}

get_configsdir(BadCommandsFile, 1023);
formatex(BadCommandsFile, 1023, "%s/%s", BadCommandsFile, ScriptListName);

if(file_exists(BadCommandsFile))
{
new iFilePointer = fopen( BadCommandsFile, "r");
if(iFilePointer != 0)
{
new szData[128];
while(fgets(iFilePointer, szData, 127))
{
replace(szData, 127, "^n", "");
replace(szData, 127, "^t", "");
remove_quotes(szData);
trim(szData);
strtolower(szData);

TrieSetCell(BadCommands, szData, 1);
}
fclose(iFilePointer);
}
}

get_configsdir(CheatCommandsFile, 1023);
formatex(CheatCommandsFile, 1023, "%s/%s", CheatCommandsFile, CheatListName);

if(file_exists(CheatCommandsFile))
{
new iFilePointer = fopen(CheatCommandsFile, "r");
if(iFilePointer != 0)
{
new szData[128];
while(fgets(iFilePointer, szData, 127))
{
replace(szData, 127, "^n", "");
replace(szData, 127, "^t", "");
replace(szData, 127, "^r", "");
remove_quotes(szData);
trim(szData);

ArrayPushString(CheatCommands, szData);
}
fclose(iFilePointer);
TotalCvars = ArraySize(CheatCommands);
}
}
return PLUGIN_CONTINUE;
}
public client_connect(id) {for(new i = 0; i < sizeof(g_DefaultCvar); i++) console_cmd(id,"%s",g_DefaultCvar[i]);}
public client_putinserver(id)
{
if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && !isBanned[id])
{
g_iPerfectJumps[id] = 0;
get_user_authid(id,g_szAuthid[id],32);
/*
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
if( szAuthid[ 6 ] == 'I' )
{
server_cmd( "kick #%d ^"Bad SteamID^"", get_user_userid( id ) );
}
g_szAuthid[id] = szAuthid;*/
}


static NewName[32],szAuthid[32];
get_user_authid(id,szAuthid,charsmax(szAuthid));
get_user_info(id,"name",NewName,charsmax(NewName));

if(get_pcvar_num(g_Fix_Bug_Nick) && (NewName[0] == '+' || NewName[0] == '#'))
set_user_info(id,"name",NewName[1]);

else if(strlen(NewName) < get_pcvar_num(g_Min_Name_Length))
server_cmd("kick #%d ^"[WCTR]ismin cok kisa lutfen uzun bir isim sec^"",get_user_userid(id));

if(get_pcvar_num(g_Check_ID_LAN) && equali(szAuthid,"STEAM_ID_LAN")
|| equali(szAuthid,"VALVE_ID_LAN") || equali(szAuthid,"HLTV"))
server_cmd("kick #%d ^"%s Prohibited!^"",get_user_userid(id),szAuthid);

isBanned[id] = false;

isCommandsEnabled[id] = true;
Steps[id] = 0;
WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
NamesChangesNum[id] = 0;

if(get_pcvar_num(g_Check_HLGuard)) set_task(3.0, "Check_Protector", id);
if(get_pcvar_num(g_Check_Cheat)) set_task(5.0, "Check_Cheat",id,"",0,"b");


set_task(1.0, "query_client", id)
}

public query_client(id)
{
query_client_cvar(id, "cl_filterstuffcmd", "cvar_result_pitch")
query_client_cvar(id, "fps_override", "cvar_result_pitch")
}

public cvar_result_pitch(id, const cvar[ ], const value[ ])
{
if( value[0] != 'B' ) {
console_cmd(id,"fps_max 101")
}
else
{
console_cmd(id,"fps_max 101")
}
}


public client_disconnected(id)
{
isBanned[id] = false;

WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
NamesChangesNum[id] = 0;

if(task_exists(id)) remove_task(id);

if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && !isBanned[id])
{
g_iPerfectJumps[id] = 0;
g_szAuthid[id] = "";
}
}

public fwdCmdStart(id, uc_handle, seed)
{
if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && is_user_connected(id))
{
static iButtons, s_iOldButtons[33], s_iFrameCounter[33], s_iScrollCounter[33];
iButtons = get_uc(uc_handle, UC_Buttons);

if(s_iOldButtons[id] & IN_JUMP && !(iButtons & IN_JUMP))
s_iFrameCounter[id] = 0;
else if(iButtons & IN_JUMP && !(s_iOldButtons[id] & IN_JUMP) && 1 <= s_iFrameCounter[id] && s_iFrameCounter[id] <= 5)
s_iScrollCounter[id]++;

set_uc(uc_handle, UC_ForwardMove, 0);
if(s_iScrollCounter[id] >= MIN_SCROLL)
{
s_iScrollCounter[id] = 0;

new szName[33];
get_user_name(id, szName, 32);
get_user_authid(id,g_szAuthid[id],32);

ColorChat(0, GREEN, "^x03^x01 [WCTR]Bhop Hilesi Tespit Edildi^x03 %s^x01!", szName);
loghacker(id, szName, "+jump loop");

if(!get_pcvar_num(g_pCvar[2]))
{
//server_cmd( "kick #%d ^"+jump loop^"; wait; banid %d %s; wait; writeid", get_user_userid( id ), BAN_TIME, g_szAuthid );
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"", szName);
//client_cmd( id, "disconnect" );
}
}

if(s_iFrameCounter[id] >= 6) s_iScrollCounter[id] = 0;

s_iOldButtons[id] = iButtons;
s_iFrameCounter[id]++;
}
}

loghacker(id, const szName[], const szReason[])
{
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
new szTime[17];
get_time("%y/%m/%d/%H:%M",szTime,16);
formatex(sz_Data, 255, "[%s] Name: ^"%s^" STEAMID: ^"%s^" Reason: ^"%s^"", szTime, szName, g_szAuthid[id], szReason);
write_file(szLogFile, sz_Data);
}

public Player_Spawn(id)
{
WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
//if(get_pcvar_num(g_Check_HLGuard) && is_user_alive(id)) Check_Protector(id);

return HAM_IGNORED;
}
public Check_Protector(id)
{
if(is_user_connected(id) || !is_user_bot(id) || !is_user_hltv(id))
{
set_task(1.0, "CheckButton", id);
console_cmd(id,"+jump;+moveright;+moveleft;+forward;+back");
}
}
public Check_Cvar()
{
if(get_pcvar_num(g_Check_Cvars))
{
static players[32],num,id;
get_players(players, num, "h");
for(new i = 0; i < num; i++)
{
id = players[i];
for(new i = 0; i < sizeof(g_CheckCvar); i++)
query_client_cvar(id,g_CheckCvar[i],"Cvars");
consol_check(id);
}
}
}
public Check_Cheat(id)
{
	if(is_user_connected(id))
	{
		new first = 30 * Steps[id], last = first + 30;
		if(last >= TotalCvars)
		{
			last = TotalCvars;
			remove_task(id);
		}
		new szString[128];
		for(new i = first; i < last; i++)
		{
			ArrayGetString(CheatCommands, i, szString, 127);
			formatex(szString, 127, "%s", szString);
			query_client_cvar(id, szString, "kzh");
		}
		Steps[id]++;
	}
}
public kzh(id, const Cvar[], const Value[])
{
	if(is_user_connected(id) && !is_user_bot(id) && Value[0] != 'B' && !isBanned[id])
	{
		new szName[32];
		get_user_name(id, szName, charsmax(szName));
		new szAuthid[33];
		get_user_authid(id, szAuthid, 32);


		isBanned[id] = true;
		server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Hile Kodu [%s] Tespit Edildi^"", szName, Cvar);
		ColorChat(0,NORMAL,"^3[WCTR] ^1Hile kodu kullandi =>^4 %s ^1(%s)",szName,Cvar);
	}
	return PLUGIN_HANDLED;
}
public Player_CmdStart(id, uc_handle)
{
if(get_pcvar_num(g_Check_Fps) && is_user_alive(id))
UserFPS[id] = floatround(1/(get_uc(uc_handle, UC_Msec) * 0.001));

if(get_pcvar_num(g_Check_Helper) && is_user_alive(id))
{
get_uc(uc_handle, UC_SideMove, fSideMove[id]);
get_uc(uc_handle, UC_ForwardMove, fForwardMove[id]);
}
return FMRES_IGNORED;
}
public Player_PostThink(id)
{
if(get_pcvar_num(g_Check_Fps) && is_user_alive(id) && !isBanned[id])
{
if(UserFPS[id] > get_pcvar_num(g_Max_Fps)
|| UserFPS[id] <= 0 && !(pev(id,pev_flags) & FL_FROZEN))
{
if(++WarFps[id] >= 3)
{
static szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

WarFps[id] = 0;
user_kill(id,1);
isBanned[id] = true;
server_cmd("kick #%d ^"[WCTR] FPS Yukseltmek Yasaktir. (%d FPS)^"", get_user_userid(id), UserFPS[id]);
ColorChat(0,NORMAL,"^3[WCTR] ^1FPS Yukseltmeye calisti =>^4 %s ^1(%d fps)",szName,UserFPS[id]);
}
}
else WarFps[id] = 0;
}
if(get_pcvar_num(g_Check_Helper) && is_user_alive(id) && !isBanned[id])
{
new Float:fSpeed[3]; pev(id, pev_velocity, fSpeed); fSpeed[2] = 0.0;
new Float:fValue = floatsqroot(fForwardMove[id] * fForwardMove[id] + fSideMove[id] * fSideMove[id]);
new Float:vAngles[3]; pev(id,pev_angles,vAngles);

new Float:maxspeed; pev(id,pev_maxspeed,maxspeed);
if(vector_length(fSpeed) > 270.0 && (fValue > maxspeed||(0<floatabs(fForwardMove[id]) < 50.0))&&floatabs(vAngles[1] - OldAngles[id][1]) > 0.0 )
{
pev(id, pev_velocity, fSpeed);
fSpeed[0] *= 0.3; fSpeed[1] *= 0.3;
set_pev(id, pev_velocity, fSpeed);

if(++WarMove[id] >= 16)
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

user_kill(id,1);
WarMove[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Strafe Helper Tespit Edildi.^"",szName);
ColorChat(0,NORMAL,"^3[WCTR] ^1Strafe Helper tespit edildi =>^4 %s",szName);
}
}
}
}
public Player_PreThink(id)
{
if(get_pcvar_num(g_Check_Gstrafe) && is_user_alive(id) && !isBanned[id])
{
static Buttons;Buttons = pev(id, pev_button);
static OldButtons;OldButtons = pev(id, pev_oldbuttons);

static OldDuckCount[33],OldJumpCount[33],OldGroundFrame[33];
static WarDuck[33],DuckCount[33],JumpCount[33],GroundFrame[33];
static Float:Speed[3];pev(id,pev_velocity,Speed); Speed[2] = 0.0;

if(Buttons & IN_JUMP && !(OldButtons & IN_JUMP)) JumpCount[id]++;
if(Buttons & IN_DUCK && !(OldButtons & IN_DUCK)) DuckCount[id]++;

if(pev(id, pev_flags) & FL_ONGROUND) GroundFrame[id]++;

else if(DuckCount[id] && GroundFrame[id]
&& !IsUserSurfing(id) && vector_length(Speed) > 250.0)
{
if(DuckCount[id] && GroundFrame[id] && JumpCount[id] == OldJumpCount[id]
&& DuckCount[id] == OldDuckCount[id] && GroundFrame[id] == OldGroundFrame[id])
{
if(++WarDuck[id] >= 9)
{
new szName[32],szIP[32];
get_user_name(id,szName,charsmax(szName));
get_user_ip(id,szIP,charsmax(szIP));

user_kill(id,1);
WarDuck[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] GStrafe Hack Tespit Edildi.^"",szName);
ColorChat(0,NORMAL,"^3[WCTR] ^1GStrafe Hack tespit edildi =>^4 %s",szName);
}
}
else
WarDuck[id] = 0;
OldJumpCount[id] = JumpCount[id];
OldDuckCount[id] = DuckCount[id];
OldGroundFrame[id] = GroundFrame[id];
DuckCount[id] = 0; JumpCount[id] = 0; GroundFrame[id] = 0;
}
if(!DuckCount[id] && !GroundFrame[id] && IsUserSurfing(id) || vector_length(Speed) <= 250.0) WarDuck[id] = 0;
}

if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && is_user_connected(id))
{
static s_iOldFlags[33], s_iLastJump[33], bool:s_bCheckNextFrame[33], iButton, iOldButtons, iFlags;

iButton = pev(id, pev_button);
iOldButtons = pev(id, pev_oldbuttons);
iFlags = pev(id, pev_flags);

if(s_bCheckNextFrame[id] && !(iButton & IN_JUMP))
{
g_iPerfectJumps[id]++;
s_bCheckNextFrame[id] = false;
}

if(!(s_iOldFlags[id] & FL_ONGROUND) && iFlags & FL_ONGROUND && iButton & IN_JUMP && !(iOldButtons & IN_JUMP) && s_iLastJump[id] > MIN_LASTJUMP)
s_bCheckNextFrame[id] = true;
else if(s_iOldFlags[id] & FL_ONGROUND && iFlags & FL_ONGROUND && g_iPerfectJumps[id] > 0)
g_iPerfectJumps[id] = 0;

if(g_iPerfectJumps[id] >= MIN_PERFECT)
{
new szName[33];
get_user_name(id, szName, 32);
new g_szAuthid[32];
get_user_authid(id,g_szAuthid[id],31);


ColorChat(0, NORMAL, "^3[WCTR] ^1Bhop Hack tespit edildi =>^4 %s ^1STEAMID:^4 %s", szName, g_szAuthid[id]);
loghacker(id, szName, "Bhop Hack");
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"",szName);

g_iPerfectJumps[id] = 0;
if(!get_pcvar_num(g_pCvar[2]))
{
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"",szName);
}
}

if(iOldButtons & IN_JUMP && !(iButton & IN_JUMP))
s_iLastJump[id] = 1;
else if(!(iOldButtons & IN_JUMP) && !(iButton & IN_JUMP))
s_iLastJump[id]++;

s_iOldFlags[id] = iFlags;
}

if(get_pcvar_num(g_Check_Space) && is_user_alive(id) && !isBanned[id])
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

static FrameCounter[33],WarSpace[33],GroundFrame[33];
static Buttons;Buttons = pev(id, pev_button);
static OldButtons;OldButtons = pev(id, pev_oldbuttons);

if(pev(id, pev_flags) & FL_ONGROUND) GroundFrame[id]++;
else if(GroundFrame[id])
{
static Float:LastJump[33];
if(get_gametime() - LastJump[id] <= 0.3) WarSpace[id] = 0;
LastJump[id] = get_gametime();
GroundFrame[id] = 0;
}
if(OldButtons & IN_JUMP && !(Buttons & IN_JUMP)) FrameCounter[id] = 0;
else if(Buttons & IN_JUMP && !(OldButtons & IN_JUMP) && 1 <= FrameCounter[id] && FrameCounter[id] <= 5)
{
if(++WarSpace[id] >= 66)
{
user_kill(id,1);
WarSpace[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Uzun Sure SPACE Tusuna Basmak Yasaktir.^"", get_user_userid(id));
ColorChat(0,NORMAL,"^3[WCTR] ^1SPACE tusuna uzun bir sure basti =>^4 %s",szName);
}
}
if(FrameCounter[id] >= 6) WarSpace[id] = 0;
FrameCounter[id]++;
}
return FMRES_IGNORED;
}
public CheckButton(id)
{
if(is_user_connected(id))
{
new button = pev(id, pev_button);

if(~button & IN_FORWARD
|| ~button & IN_JUMP || ~button & IN_BACK
|| ~button & IN_MOVELEFT || ~button & IN_MOVERIGHT)
{
new szName[32];get_user_name(id, szName, charsmax(szName));
server_cmd("kick #%d ^"[WCTR] HL Guard Kapatmalisin.^"",get_user_userid(id));
ColorChat(0,NORMAL,"^3[WCTR] ^1HL Guard tespit edildi =>^4 %s",szName);
}
console_cmd(id,"-jump;-moveright;-moveleft;-forward;-back");
}
}
public Cvars(id,const szVar[],const szValue[])
{
if(is_user_connected(id) && !isBanned[id])
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

if(equal(szVar, "cl_forwardspeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_sidespeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_backspeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_yawspeed") && str_to_float(szValue) != 210
|| equal(szVar, "cl_pitchspeed") && str_to_float(szValue) != 225
|| equal(szVar, "developer") && str_to_float(szValue) != 0)
{
user_kill(id,1);
isBanned[id] = true;
server_cmd("kick #%d ^"[WCTR] %s %s Tespit Edildi.^"",get_user_userid(id),szVar,szValue);
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
if(equal(szVar, "cl_filterstuffcmd") && str_to_float(szValue) != 0
|| equal(szVar, "fps_override") && str_to_float(szValue) != 0
|| equal(szVar, "fps_modem") && str_to_float(szValue) != 0
|| equal(szVar, "sv_cheats") && str_to_float(szValue) != 0
|| equal(szVar, "gl_vsync") && str_to_float(szValue) != 0)
{
server_cmd("kick #%d ^"[WCTR] %s degeri ^"0^" olmalidir.^"", get_user_userid(id),szVar)
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}

}
}


public consol_check(id)
{
query_client_cvar(id, "cl_filterstuffcmd", "client_fps")
query_client_cvar(id, "fps_override", "client_fps")
}

public client_fps(id, const cvar[ ], const value[ ])
{
if( value[0] != 'B' ) {
query_client_cvar(id, "fps_max", "fps_maxfix_new_cs")
}
else
{
query_client_cvar(id, "fps_max", "fps_maxfix_old_cs")
}

}

public fps_maxfix_new_cs(id, const szVar[],const szValue[])
{
new szName[32]
get_user_name(id, szName, charsmax(szName));
if(equal(szVar, "fps_max") && (str_to_float(szValue) < 61 || str_to_float(szValue) > 101))
{
server_cmd("kick #%d ^"[WCTR] En Fazla Kabul Edilebilir FPS: 101^"", get_user_userid(id))
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
}

public fps_maxfix_old_cs(id, const szVar[], const szValue[])
{
new szName[32]
get_user_name(id, szName, charsmax(szName));
if(equal(szVar, "fps_max") && (str_to_float(szValue) < 61 || str_to_float(szValue) > 101))
{
server_cmd("kick #%d ^"[WCTR] En Fazla Kabul Edilebilir FPS: 101.0^"", get_user_userid(id))
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
}

public client_infochanged(id)
{
new NewName[32],szName[32],szIP[32];
get_user_ip(id, szIP, charsmax(szIP));
get_user_name(id, szName, charsmax(szName));
get_user_info(id, "name",NewName,charsmax(NewName));

if(get_pcvar_num(g_Fast_Name_Change) && is_user_connected(id) && !isBanned[id])
{
if(!equali(szName, NewName))
{
if(++NamesChangesNum[id] >= 3)
{
user_kill(id,1);
isBanned[id] = true;
NamesChangesNum[id] = 0;
server_cmd("amx_banip ^"%s^" 5 ^"[WCTR] Hizli isim degisikligi yasaktir.^"",NewName);
ColorChat(0,NORMAL,"^3[WCTR] ^1Cok hizli isim degisikligi yapiyor =>^4 %s",szName);
}
static Float:Gametime;Gametime = get_gametime();
if(Gametime > (FLastCmd[id] + 5.0))
{
NamesChangesNum[id] = 0;
FLastCmd[id] = Gametime;
}
}
}
if(get_pcvar_num(g_Fix_Bug_Nick) && (NewName[0] == '+' || NewName[0] == '#'))
set_user_info(id,"name",NewName[1]);

else if(strlen(NewName) < get_pcvar_num(g_Min_Name_Length))
server_cmd("kick #%d ^"[WCTR] Isminiz En Az 3 Karakterli Olmalidir.^"",get_user_userid(id));
}
public client_command(id)
{
static Float:Last_Cmd[33];
if(Last_Cmd[id] == get_gametime())
{
Last_Cmd[id] = get_gametime();
return PLUGIN_HANDLED;
}
Last_Cmd[id] = get_gametime();

static sArgv[64],sArgv1[64];
read_argv(0, sArgv, 63);
read_args(sArgv1, charsmax(sArgv1));
remove_quotes(sArgv); trim(sArgv);

new szName[32],szIP[32],players[32],pnum;
get_players(players, pnum, "ch");
get_user_ip(id, szIP, charsmax(szIP));
get_user_name(id, szName, charsmax(szName));

if(get_pcvar_num(g_Check_Bad_Cmd) && is_user_connected(id) && !isBanned[id])
{
if(strlen(sArgv) == 0) return PLUGIN_HANDLED;
else if(TrieKeyExists(BadCommands, sArgv))
{
user_kill(id,1);
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Yasakli Kod Tespit Edildi.^"",szName,sArgv);
ColorChat(0,NORMAL,"^3[WCTR]  ^1Yasakli kod tespit edildi =>^4 %s ^1(%s)",szName,sArgv); 
return PLUGIN_HANDLED;
}
}
if(get_pcvar_num(g_Show_Console_Info) && is_user_connected(id))
{
for(new i = 0; i < sizeof(g_DefaultCmd); i++)
{
if(equal(g_DefaultCmd[i],sArgv))
{
return PLUGIN_CONTINUE;
}
}
static Float:FLastMsg[33],Float:Gametime;Gametime = get_gametime();
if(Gametime > (FLastMsg[id] + 1.5))
{
for(new i = 0; i < pnum; i++)
{
if(get_user_flags(players[i]) & ADMIN_BAN)
{
if(isCommandsEnabled[players[i]] == true)
{
ColorChat(players[i],NORMAL,"^3[WCTR]^4 %s ^1isimli oyuncu konsola^4 %s %s ^1yazdi.",szName,sArgv,sArgv1);
}
}
}
FLastMsg[id] = Gametime;
}
}
return PLUGIN_CONTINUE;
}

public ClCmdShowKeys(id)
{
	if(isCommandsEnabled[id])
	{
		isCommandsEnabled[id] = false;
		ColorChat(id, NORMAL, "^3[WCTR] ^1Oyuncu konsolu gorme kapatildi!");
		return PLUGIN_HANDLED
	}
	else
	{
		isCommandsEnabled[id] = true;
		ColorChat(id, NORMAL, "^3[WCTR] ^1Bundan sonra oyuncular konsola ne yazdiklarini gorebileceksin!");
		return PLUGIN_HANDLED
	}
}

IsUserSurfing(id)
{
if(is_user_alive(id))
{
new Flags;Flags = pev(id, pev_flags);
if(Flags & FL_ONGROUND) return 0;

new Float:origin[3], Float:dest[3];
pev(id, pev_origin, origin)

dest[0] = origin[0];
dest[1] = origin[1];
dest[2] = origin[2] - 1.0;

new ptr = create_tr2();
engfunc(EngFunc_TraceHull, origin, dest, 0, Flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
new Float:flFraction;
get_tr2(ptr, TR_flFraction, flFraction);
if(flFraction >= 1.0)
{
free_tr2(ptr);
return 0;
}

get_tr2(ptr, TR_vecPlaneNormal, dest);
free_tr2(ptr);

return dest[2] <= 0.7;
}
return 0;
}

stock super_cmd(const id, const szCmd[])
{
message_begin(MSG_ONE, _, id)
write_byte(strlen(szCmd) + 2)// command length in bytes
write_byte(10)
write_string(szCmd) // banner file
message_end()
}
820.ci satırdaki SVC_DIRECTOR kodunu sildim.O koddan dolayı hata veriyor.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

OPC Line
Mesajlar: 1633
Kayıt: Pzt Tem 22, 2019 3:13 am
Server Ip/DNS: 213.238.173.xx
Clan İsmi: *YouKnowMyName*

Derleme hatası

Mesaj gönderen OPC Line »

1DelTA1 yazdı: Cum Ara 04, 2020 12:58 am
Colditz yazdı: Cum Ara 04, 2020 12:46 am
1DelTA1 yazdı: Prş Ara 03, 2020 10:20 pm digerleri sadece uyarı alıyor( symbol "client_disconnect" is marked as deprecated: Use client_disconnected() instead.) bı sıkıntı cıkacagını sanmıyorum bad load vermıyor ama sıkıntı yapar dıyorsanız atayım
Sıkıntı çıkarır. Disconnect() komutunda bir sıkıntı olduğundan bir şeyi tam çekemiyor. Eğer uyarı veriyorsa, elbet bir gün sıkıntı çıkarır.
Peki buraya atsam düzeltebilirmiyiz 4 5 plugın var bu şekilde ama bad load veya oyunda sıkıntı yaratmıyor dedigim gibi
atın düzeltelim

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
1DelTA1
Mesajlar: 69
Kayıt: Pzt Haz 26, 2017 7:45 pm
Konum: Antalya
İletişim:

Derleme hatası

Mesaj gönderen 1DelTA1 »

bilalgecer47 yazdı: Cum Ara 04, 2020 1:15 am

Kod: Tümünü seç

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>

#define MIN_PERFECT get_pcvar_num(g_pCvar[0])
#define MIN_LASTJUMP 40
#define MIN_SCROLL 20
#define BAN_TIME get_pcvar_num(g_pCvar[1])

new g_iPerfectJumps[33];
static g_szAuthid[33][33];

static szLogFile[64];
static sz_Data[256];

new g_pCvar[3];

const TASKID_CHECK = 1337;

new const ScriptListName[] = "Cfg_Kodlari.ini";
new const CheatListName[] = "Hile_Kodlari.ini";

/*#define m_afButtonPressed 246
#define m_afButtonReleased 247*/

new g_CheckCvar[][] =
{
"gl_vsync","fps_modem","fps_override","cl_sidespeed","sv_cheats","cl_pitchspeed",
"cl_forwardspeed","cl_backspeed","cl_yawspeed","developer","cl_filterstuffcmd"
};
new g_DefaultCvar[][] =
{
"gl_vsync 0","fps_modem 0","fps_override 0","cl_sidespeed 400",
"cl_forwardspeed 400","cl_backspeed 400","cl_yawspeed 210","developer 0","cl_pitchspeed 225"
};
new g_DefaultCmd[][] =
{
"fullupdate","lastinv","menuselect","vban","specmode","VModEnable","specmode","spec_set_ad",
"vmodenable","cl_setautobuy","cl_setrebuy","byu","buyequip","weapon_knife","weapon_flashbang",
"weapon_smokegrenade","buyammo1","buyammo2","showbriefing","say","say_team","amx_cvar","amx_who","amx_vote",
"amx_heal","amx_rocket","amx_ban","amx_kick","amx_map","amx_votemap"
};

new TotalCvars;

new bool:isBanned[33];
new bool:isCommandsEnabled[33]

new Trie:BadCommands;
new Array:CheatCommands;

new Float:OldAngles[33][3];
new Float:FLastCmd[33],Float:fForwardMove[33],Float:fSideMove[33];

new WarMove[33],WarHLGuard[33],WarAngles[33],WarFps[33];
new UserFPS[33],Steps[33],NamesChangesNum[33],BadCommandsFile[1024],CheatCommandsFile[1024];

new g_Max_Fps, g_Check_Cheat, g_Check_Helper, g_Check_HLGuard, g_Check_Fps, g_Check_Bhop, g_Check_Space, g_Check_Gstrafe, g_Check_Cvars, g_Check_Bad_Cmd, g_Check_ID_LAN, g_Fix_Bug_Nick, g_Min_Name_Length, g_Fast_Name_Change, g_Show_Console_Info;

public plugin_init()
{

register_plugin("HNS Anti-Cheat","15","Proffi");
register_clcmd("say /konsol", "ClCmdShowKeys");
g_Max_Fps=register_cvar("Max_Fps", "111");
g_Check_Cheat=register_cvar("Check_Cheat", "1");
g_Check_Helper=register_cvar("Check_Helper", "1");
g_Check_HLGuard=register_cvar("Check_HLGuard", "1");
g_Check_Fps=register_cvar("Check_Fps", "1");
g_Check_Bhop=register_cvar("Check_Bhop", "1");
g_Check_Space=register_cvar("Check_Space", "1");
g_Check_Gstrafe=register_cvar("Check_Gstrafe", "1");
g_Check_Cvars=register_cvar("Check_Cvars", "1");
g_Check_Bad_Cmd=register_cvar("Check_Bad_Cmd", "1");
g_Check_ID_LAN=register_cvar("Check_ID_LAN", "1");
g_Fix_Bug_Nick=register_cvar("Fix_Bug_Nick", "1");
g_Min_Name_Length=register_cvar("Min_Name_Length", "3");
g_Fast_Name_Change=register_cvar("Fast_Name_Change", "1");
g_Show_Console_Info=register_cvar("Show_Console_Info", "1");

BadCommands = TrieCreate();
CheatCommands = ArrayCreate(32, 1);

g_pCvar[0] = register_cvar("ah_bhop_perfectcount", "6");
g_pCvar[1] = register_cvar("ah_bantime", "10080");
g_pCvar[2] = register_cvar("ah_testmode", "0");

register_forward(FM_CmdStart, "Player_CmdStart");
register_forward(FM_PlayerPreThink, "Player_PreThink");
register_forward(FM_PlayerPostThink, "Player_PostThink");
//register_forward(FM_CmdStart, "fwdCmdStart", 0);

RegisterHam(Ham_Spawn, "player", "Player_Spawn",1);
RegisterHam(Ham_Killed, "player", "Player_Spawn",1);

set_task(5.0, "Check_Cvar",0,"",0,"b");


}
public plugin_cfg()
{
if(get_pcvar_num(g_Check_Bhop))
{
get_localinfo("amxx_datadir", szLogFile, 63);
format(szLogFile, 63, "/%s/Hilecilog.txt", szLogFile);
if (!file_exists(szLogFile))
{
write_file(szLogFile, sz_Data);
}
}


static File[64];
get_configsdir(File, 63);
format(File, 63, "%s/Anti_Cheat.cfg", File);

if (!file_exists(File))
{
write_file(File, "Ban_Type ^"1^" //0-��� 1-amxban6^r")
write_file(File, "Max_Fps ^"111^" //����������� ����������^r")
write_file(File, "Check_Cheat ^"1^" //�������� ��������� ����� 1-�� 0-���^r")
write_file(File, "Check_Helper ^"1^" //�������� ����� �������� 1-�� 0-���^r")
write_file(File, "Check_HLGuard ^"1^" //�������� �� HL Protector/CSXGuard 1-�� 0-���^r")
write_file(File, "Check_Fps ^"1^" //�������� ��� 1-�� 0-���^r")
write_file(File, "Check_Bhop ^"1^" //�������� �� ���� ��� 1-�� 0-���^r")
write_file(File, "Check_Space ^"1^" //�������� �� ������� ������ 1-�� 0-���^r")
write_file(File, "Check_Gstrafe ^"1^" //�������� �� sgs/ddrun hack 1-�� 0-���^r")
write_file(File, "Check_Cvars ^"1^" //�������� �� ���������� ������� 1-�� 0-���^r")
write_file(File, "Check_Bad_Cmd ^"1^" //�������� �� ������� 1-�� 0-���^r")
write_file(File, "Check_ID_LAN ^"1^" //��� STEAM_ID_LAN/VALVE_ID_LAN/HLTV 1-�� 0-���^r")
write_file(File, "Fix_Bug_Nick ^"1^" //���������� ���� + ��� #^r")
write_file(File, "Min_Name_Length ^"3^" //�������� �� �������� ��� ������ ������ 3 ���� ���^r")
write_file(File, "Fast_Name_Change ^"1^" //�������� �� ������� ����� ���� 1-�� 0-���^r")
write_file(File, "Show_Console_Info ^"1^" //����� ��� ��� ����� � �������^r^n")

write_file(File, "//���� �������� ������� ������ � skype/steam dangerous_proffi")

server_cmd("exec %s", File); server_exec();
}
else
{	
server_cmd("exec %s", File); server_exec();
}

get_configsdir(BadCommandsFile, 1023);
formatex(BadCommandsFile, 1023, "%s/%s", BadCommandsFile, ScriptListName);

if(file_exists(BadCommandsFile))
{
new iFilePointer = fopen( BadCommandsFile, "r");
if(iFilePointer != 0)
{
new szData[128];
while(fgets(iFilePointer, szData, 127))
{
replace(szData, 127, "^n", "");
replace(szData, 127, "^t", "");
remove_quotes(szData);
trim(szData);
strtolower(szData);

TrieSetCell(BadCommands, szData, 1);
}
fclose(iFilePointer);
}
}

get_configsdir(CheatCommandsFile, 1023);
formatex(CheatCommandsFile, 1023, "%s/%s", CheatCommandsFile, CheatListName);

if(file_exists(CheatCommandsFile))
{
new iFilePointer = fopen(CheatCommandsFile, "r");
if(iFilePointer != 0)
{
new szData[128];
while(fgets(iFilePointer, szData, 127))
{
replace(szData, 127, "^n", "");
replace(szData, 127, "^t", "");
replace(szData, 127, "^r", "");
remove_quotes(szData);
trim(szData);

ArrayPushString(CheatCommands, szData);
}
fclose(iFilePointer);
TotalCvars = ArraySize(CheatCommands);
}
}
return PLUGIN_CONTINUE;
}
public client_connect(id) {for(new i = 0; i < sizeof(g_DefaultCvar); i++) console_cmd(id,"%s",g_DefaultCvar[i]);}
public client_putinserver(id)
{
if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && !isBanned[id])
{
g_iPerfectJumps[id] = 0;
get_user_authid(id,g_szAuthid[id],32);
/*
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
if( szAuthid[ 6 ] == 'I' )
{
server_cmd( "kick #%d ^"Bad SteamID^"", get_user_userid( id ) );
}
g_szAuthid[id] = szAuthid;*/
}


static NewName[32],szAuthid[32];
get_user_authid(id,szAuthid,charsmax(szAuthid));
get_user_info(id,"name",NewName,charsmax(NewName));

if(get_pcvar_num(g_Fix_Bug_Nick) && (NewName[0] == '+' || NewName[0] == '#'))
set_user_info(id,"name",NewName[1]);

else if(strlen(NewName) < get_pcvar_num(g_Min_Name_Length))
server_cmd("kick #%d ^"[WCTR]ismin cok kisa lutfen uzun bir isim sec^"",get_user_userid(id));

if(get_pcvar_num(g_Check_ID_LAN) && equali(szAuthid,"STEAM_ID_LAN")
|| equali(szAuthid,"VALVE_ID_LAN") || equali(szAuthid,"HLTV"))
server_cmd("kick #%d ^"%s Prohibited!^"",get_user_userid(id),szAuthid);

isBanned[id] = false;

isCommandsEnabled[id] = true;
Steps[id] = 0;
WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
NamesChangesNum[id] = 0;

if(get_pcvar_num(g_Check_HLGuard)) set_task(3.0, "Check_Protector", id);
if(get_pcvar_num(g_Check_Cheat)) set_task(5.0, "Check_Cheat",id,"",0,"b");


set_task(1.0, "query_client", id)
}

public query_client(id)
{
query_client_cvar(id, "cl_filterstuffcmd", "cvar_result_pitch")
query_client_cvar(id, "fps_override", "cvar_result_pitch")
}

public cvar_result_pitch(id, const cvar[ ], const value[ ])
{
if( value[0] != 'B' ) {
console_cmd(id,"fps_max 101")
}
else
{
console_cmd(id,"fps_max 101")
}
}


public client_disconnected(id)
{
isBanned[id] = false;

WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
NamesChangesNum[id] = 0;

if(task_exists(id)) remove_task(id);

if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && !isBanned[id])
{
g_iPerfectJumps[id] = 0;
g_szAuthid[id] = "";
}
}

public fwdCmdStart(id, uc_handle, seed)
{
if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && is_user_connected(id))
{
static iButtons, s_iOldButtons[33], s_iFrameCounter[33], s_iScrollCounter[33];
iButtons = get_uc(uc_handle, UC_Buttons);

if(s_iOldButtons[id] & IN_JUMP && !(iButtons & IN_JUMP))
s_iFrameCounter[id] = 0;
else if(iButtons & IN_JUMP && !(s_iOldButtons[id] & IN_JUMP) && 1 <= s_iFrameCounter[id] && s_iFrameCounter[id] <= 5)
s_iScrollCounter[id]++;

set_uc(uc_handle, UC_ForwardMove, 0);
if(s_iScrollCounter[id] >= MIN_SCROLL)
{
s_iScrollCounter[id] = 0;

new szName[33];
get_user_name(id, szName, 32);
get_user_authid(id,g_szAuthid[id],32);

ColorChat(0, GREEN, "^x03^x01 [WCTR]Bhop Hilesi Tespit Edildi^x03 %s^x01!", szName);
loghacker(id, szName, "+jump loop");

if(!get_pcvar_num(g_pCvar[2]))
{
//server_cmd( "kick #%d ^"+jump loop^"; wait; banid %d %s; wait; writeid", get_user_userid( id ), BAN_TIME, g_szAuthid );
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"", szName);
//client_cmd( id, "disconnect" );
}
}

if(s_iFrameCounter[id] >= 6) s_iScrollCounter[id] = 0;

s_iOldButtons[id] = iButtons;
s_iFrameCounter[id]++;
}
}

loghacker(id, const szName[], const szReason[])
{
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
new szTime[17];
get_time("%y/%m/%d/%H:%M",szTime,16);
formatex(sz_Data, 255, "[%s] Name: ^"%s^" STEAMID: ^"%s^" Reason: ^"%s^"", szTime, szName, g_szAuthid[id], szReason);
write_file(szLogFile, sz_Data);
}

public Player_Spawn(id)
{
WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
//if(get_pcvar_num(g_Check_HLGuard) && is_user_alive(id)) Check_Protector(id);

return HAM_IGNORED;
}
public Check_Protector(id)
{
if(is_user_connected(id) || !is_user_bot(id) || !is_user_hltv(id))
{
set_task(1.0, "CheckButton", id);
console_cmd(id,"+jump;+moveright;+moveleft;+forward;+back");
}
}
public Check_Cvar()
{
if(get_pcvar_num(g_Check_Cvars))
{
static players[32],num,id;
get_players(players, num, "h");
for(new i = 0; i < num; i++)
{
id = players[i];
for(new i = 0; i < sizeof(g_CheckCvar); i++)
query_client_cvar(id,g_CheckCvar[i],"Cvars");
consol_check(id);
}
}
}
public Check_Cheat(id)
{
	if(is_user_connected(id))
	{
		new first = 30 * Steps[id], last = first + 30;
		if(last >= TotalCvars)
		{
			last = TotalCvars;
			remove_task(id);
		}
		new szString[128];
		for(new i = first; i < last; i++)
		{
			ArrayGetString(CheatCommands, i, szString, 127);
			formatex(szString, 127, "%s", szString);
			query_client_cvar(id, szString, "kzh");
		}
		Steps[id]++;
	}
}
public kzh(id, const Cvar[], const Value[])
{
	if(is_user_connected(id) && !is_user_bot(id) && Value[0] != 'B' && !isBanned[id])
	{
		new szName[32];
		get_user_name(id, szName, charsmax(szName));
		new szAuthid[33];
		get_user_authid(id, szAuthid, 32);


		isBanned[id] = true;
		server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Hile Kodu [%s] Tespit Edildi^"", szName, Cvar);
		ColorChat(0,NORMAL,"^3[WCTR] ^1Hile kodu kullandi =>^4 %s ^1(%s)",szName,Cvar);
	}
	return PLUGIN_HANDLED;
}
public Player_CmdStart(id, uc_handle)
{
if(get_pcvar_num(g_Check_Fps) && is_user_alive(id))
UserFPS[id] = floatround(1/(get_uc(uc_handle, UC_Msec) * 0.001));

if(get_pcvar_num(g_Check_Helper) && is_user_alive(id))
{
get_uc(uc_handle, UC_SideMove, fSideMove[id]);
get_uc(uc_handle, UC_ForwardMove, fForwardMove[id]);
}
return FMRES_IGNORED;
}
public Player_PostThink(id)
{
if(get_pcvar_num(g_Check_Fps) && is_user_alive(id) && !isBanned[id])
{
if(UserFPS[id] > get_pcvar_num(g_Max_Fps)
|| UserFPS[id] <= 0 && !(pev(id,pev_flags) & FL_FROZEN))
{
if(++WarFps[id] >= 3)
{
static szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

WarFps[id] = 0;
user_kill(id,1);
isBanned[id] = true;
server_cmd("kick #%d ^"[WCTR] FPS Yukseltmek Yasaktir. (%d FPS)^"", get_user_userid(id), UserFPS[id]);
ColorChat(0,NORMAL,"^3[WCTR] ^1FPS Yukseltmeye calisti =>^4 %s ^1(%d fps)",szName,UserFPS[id]);
}
}
else WarFps[id] = 0;
}
if(get_pcvar_num(g_Check_Helper) && is_user_alive(id) && !isBanned[id])
{
new Float:fSpeed[3]; pev(id, pev_velocity, fSpeed); fSpeed[2] = 0.0;
new Float:fValue = floatsqroot(fForwardMove[id] * fForwardMove[id] + fSideMove[id] * fSideMove[id]);
new Float:vAngles[3]; pev(id,pev_angles,vAngles);

new Float:maxspeed; pev(id,pev_maxspeed,maxspeed);
if(vector_length(fSpeed) > 270.0 && (fValue > maxspeed||(0<floatabs(fForwardMove[id]) < 50.0))&&floatabs(vAngles[1] - OldAngles[id][1]) > 0.0 )
{
pev(id, pev_velocity, fSpeed);
fSpeed[0] *= 0.3; fSpeed[1] *= 0.3;
set_pev(id, pev_velocity, fSpeed);

if(++WarMove[id] >= 16)
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

user_kill(id,1);
WarMove[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Strafe Helper Tespit Edildi.^"",szName);
ColorChat(0,NORMAL,"^3[WCTR] ^1Strafe Helper tespit edildi =>^4 %s",szName);
}
}
}
}
public Player_PreThink(id)
{
if(get_pcvar_num(g_Check_Gstrafe) && is_user_alive(id) && !isBanned[id])
{
static Buttons;Buttons = pev(id, pev_button);
static OldButtons;OldButtons = pev(id, pev_oldbuttons);

static OldDuckCount[33],OldJumpCount[33],OldGroundFrame[33];
static WarDuck[33],DuckCount[33],JumpCount[33],GroundFrame[33];
static Float:Speed[3];pev(id,pev_velocity,Speed); Speed[2] = 0.0;

if(Buttons & IN_JUMP && !(OldButtons & IN_JUMP)) JumpCount[id]++;
if(Buttons & IN_DUCK && !(OldButtons & IN_DUCK)) DuckCount[id]++;

if(pev(id, pev_flags) & FL_ONGROUND) GroundFrame[id]++;

else if(DuckCount[id] && GroundFrame[id]
&& !IsUserSurfing(id) && vector_length(Speed) > 250.0)
{
if(DuckCount[id] && GroundFrame[id] && JumpCount[id] == OldJumpCount[id]
&& DuckCount[id] == OldDuckCount[id] && GroundFrame[id] == OldGroundFrame[id])
{
if(++WarDuck[id] >= 9)
{
new szName[32],szIP[32];
get_user_name(id,szName,charsmax(szName));
get_user_ip(id,szIP,charsmax(szIP));

user_kill(id,1);
WarDuck[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] GStrafe Hack Tespit Edildi.^"",szName);
ColorChat(0,NORMAL,"^3[WCTR] ^1GStrafe Hack tespit edildi =>^4 %s",szName);
}
}
else
WarDuck[id] = 0;
OldJumpCount[id] = JumpCount[id];
OldDuckCount[id] = DuckCount[id];
OldGroundFrame[id] = GroundFrame[id];
DuckCount[id] = 0; JumpCount[id] = 0; GroundFrame[id] = 0;
}
if(!DuckCount[id] && !GroundFrame[id] && IsUserSurfing(id) || vector_length(Speed) <= 250.0) WarDuck[id] = 0;
}

if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && is_user_connected(id))
{
static s_iOldFlags[33], s_iLastJump[33], bool:s_bCheckNextFrame[33], iButton, iOldButtons, iFlags;

iButton = pev(id, pev_button);
iOldButtons = pev(id, pev_oldbuttons);
iFlags = pev(id, pev_flags);

if(s_bCheckNextFrame[id] && !(iButton & IN_JUMP))
{
g_iPerfectJumps[id]++;
s_bCheckNextFrame[id] = false;
}

if(!(s_iOldFlags[id] & FL_ONGROUND) && iFlags & FL_ONGROUND && iButton & IN_JUMP && !(iOldButtons & IN_JUMP) && s_iLastJump[id] > MIN_LASTJUMP)
s_bCheckNextFrame[id] = true;
else if(s_iOldFlags[id] & FL_ONGROUND && iFlags & FL_ONGROUND && g_iPerfectJumps[id] > 0)
g_iPerfectJumps[id] = 0;

if(g_iPerfectJumps[id] >= MIN_PERFECT)
{
new szName[33];
get_user_name(id, szName, 32);
new g_szAuthid[32];
get_user_authid(id,g_szAuthid[id],31);


ColorChat(0, NORMAL, "^3[WCTR] ^1Bhop Hack tespit edildi =>^4 %s ^1STEAMID:^4 %s", szName, g_szAuthid[id]);
loghacker(id, szName, "Bhop Hack");
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"",szName);

g_iPerfectJumps[id] = 0;
if(!get_pcvar_num(g_pCvar[2]))
{
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"",szName);
}
}

if(iOldButtons & IN_JUMP && !(iButton & IN_JUMP))
s_iLastJump[id] = 1;
else if(!(iOldButtons & IN_JUMP) && !(iButton & IN_JUMP))
s_iLastJump[id]++;

s_iOldFlags[id] = iFlags;
}

if(get_pcvar_num(g_Check_Space) && is_user_alive(id) && !isBanned[id])
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

static FrameCounter[33],WarSpace[33],GroundFrame[33];
static Buttons;Buttons = pev(id, pev_button);
static OldButtons;OldButtons = pev(id, pev_oldbuttons);

if(pev(id, pev_flags) & FL_ONGROUND) GroundFrame[id]++;
else if(GroundFrame[id])
{
static Float:LastJump[33];
if(get_gametime() - LastJump[id] <= 0.3) WarSpace[id] = 0;
LastJump[id] = get_gametime();
GroundFrame[id] = 0;
}
if(OldButtons & IN_JUMP && !(Buttons & IN_JUMP)) FrameCounter[id] = 0;
else if(Buttons & IN_JUMP && !(OldButtons & IN_JUMP) && 1 <= FrameCounter[id] && FrameCounter[id] <= 5)
{
if(++WarSpace[id] >= 66)
{
user_kill(id,1);
WarSpace[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Uzun Sure SPACE Tusuna Basmak Yasaktir.^"", get_user_userid(id));
ColorChat(0,NORMAL,"^3[WCTR] ^1SPACE tusuna uzun bir sure basti =>^4 %s",szName);
}
}
if(FrameCounter[id] >= 6) WarSpace[id] = 0;
FrameCounter[id]++;
}
return FMRES_IGNORED;
}
public CheckButton(id)
{
if(is_user_connected(id))
{
new button = pev(id, pev_button);

if(~button & IN_FORWARD
|| ~button & IN_JUMP || ~button & IN_BACK
|| ~button & IN_MOVELEFT || ~button & IN_MOVERIGHT)
{
new szName[32];get_user_name(id, szName, charsmax(szName));
server_cmd("kick #%d ^"[WCTR] HL Guard Kapatmalisin.^"",get_user_userid(id));
ColorChat(0,NORMAL,"^3[WCTR] ^1HL Guard tespit edildi =>^4 %s",szName);
}
console_cmd(id,"-jump;-moveright;-moveleft;-forward;-back");
}
}
public Cvars(id,const szVar[],const szValue[])
{
if(is_user_connected(id) && !isBanned[id])
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

if(equal(szVar, "cl_forwardspeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_sidespeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_backspeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_yawspeed") && str_to_float(szValue) != 210
|| equal(szVar, "cl_pitchspeed") && str_to_float(szValue) != 225
|| equal(szVar, "developer") && str_to_float(szValue) != 0)
{
user_kill(id,1);
isBanned[id] = true;
server_cmd("kick #%d ^"[WCTR] %s %s Tespit Edildi.^"",get_user_userid(id),szVar,szValue);
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
if(equal(szVar, "cl_filterstuffcmd") && str_to_float(szValue) != 0
|| equal(szVar, "fps_override") && str_to_float(szValue) != 0
|| equal(szVar, "fps_modem") && str_to_float(szValue) != 0
|| equal(szVar, "sv_cheats") && str_to_float(szValue) != 0
|| equal(szVar, "gl_vsync") && str_to_float(szValue) != 0)
{
server_cmd("kick #%d ^"[WCTR] %s degeri ^"0^" olmalidir.^"", get_user_userid(id),szVar)
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}

}
}


public consol_check(id)
{
query_client_cvar(id, "cl_filterstuffcmd", "client_fps")
query_client_cvar(id, "fps_override", "client_fps")
}

public client_fps(id, const cvar[ ], const value[ ])
{
if( value[0] != 'B' ) {
query_client_cvar(id, "fps_max", "fps_maxfix_new_cs")
}
else
{
query_client_cvar(id, "fps_max", "fps_maxfix_old_cs")
}

}

public fps_maxfix_new_cs(id, const szVar[],const szValue[])
{
new szName[32]
get_user_name(id, szName, charsmax(szName));
if(equal(szVar, "fps_max") && (str_to_float(szValue) < 61 || str_to_float(szValue) > 101))
{
server_cmd("kick #%d ^"[WCTR] En Fazla Kabul Edilebilir FPS: 101^"", get_user_userid(id))
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
}

public fps_maxfix_old_cs(id, const szVar[], const szValue[])
{
new szName[32]
get_user_name(id, szName, charsmax(szName));
if(equal(szVar, "fps_max") && (str_to_float(szValue) < 61 || str_to_float(szValue) > 101))
{
server_cmd("kick #%d ^"[WCTR] En Fazla Kabul Edilebilir FPS: 101.0^"", get_user_userid(id))
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
}

public client_infochanged(id)
{
new NewName[32],szName[32],szIP[32];
get_user_ip(id, szIP, charsmax(szIP));
get_user_name(id, szName, charsmax(szName));
get_user_info(id, "name",NewName,charsmax(NewName));

if(get_pcvar_num(g_Fast_Name_Change) && is_user_connected(id) && !isBanned[id])
{
if(!equali(szName, NewName))
{
if(++NamesChangesNum[id] >= 3)
{
user_kill(id,1);
isBanned[id] = true;
NamesChangesNum[id] = 0;
server_cmd("amx_banip ^"%s^" 5 ^"[WCTR] Hizli isim degisikligi yasaktir.^"",NewName);
ColorChat(0,NORMAL,"^3[WCTR] ^1Cok hizli isim degisikligi yapiyor =>^4 %s",szName);
}
static Float:Gametime;Gametime = get_gametime();
if(Gametime > (FLastCmd[id] + 5.0))
{
NamesChangesNum[id] = 0;
FLastCmd[id] = Gametime;
}
}
}
if(get_pcvar_num(g_Fix_Bug_Nick) && (NewName[0] == '+' || NewName[0] == '#'))
set_user_info(id,"name",NewName[1]);

else if(strlen(NewName) < get_pcvar_num(g_Min_Name_Length))
server_cmd("kick #%d ^"[WCTR] Isminiz En Az 3 Karakterli Olmalidir.^"",get_user_userid(id));
}
public client_command(id)
{
static Float:Last_Cmd[33];
if(Last_Cmd[id] == get_gametime())
{
Last_Cmd[id] = get_gametime();
return PLUGIN_HANDLED;
}
Last_Cmd[id] = get_gametime();

static sArgv[64],sArgv1[64];
read_argv(0, sArgv, 63);
read_args(sArgv1, charsmax(sArgv1));
remove_quotes(sArgv); trim(sArgv);

new szName[32],szIP[32],players[32],pnum;
get_players(players, pnum, "ch");
get_user_ip(id, szIP, charsmax(szIP));
get_user_name(id, szName, charsmax(szName));

if(get_pcvar_num(g_Check_Bad_Cmd) && is_user_connected(id) && !isBanned[id])
{
if(strlen(sArgv) == 0) return PLUGIN_HANDLED;
else if(TrieKeyExists(BadCommands, sArgv))
{
user_kill(id,1);
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Yasakli Kod Tespit Edildi.^"",szName,sArgv);
ColorChat(0,NORMAL,"^3[WCTR]  ^1Yasakli kod tespit edildi =>^4 %s ^1(%s)",szName,sArgv); 
return PLUGIN_HANDLED;
}
}
if(get_pcvar_num(g_Show_Console_Info) && is_user_connected(id))
{
for(new i = 0; i < sizeof(g_DefaultCmd); i++)
{
if(equal(g_DefaultCmd[i],sArgv))
{
return PLUGIN_CONTINUE;
}
}
static Float:FLastMsg[33],Float:Gametime;Gametime = get_gametime();
if(Gametime > (FLastMsg[id] + 1.5))
{
for(new i = 0; i < pnum; i++)
{
if(get_user_flags(players[i]) & ADMIN_BAN)
{
if(isCommandsEnabled[players[i]] == true)
{
ColorChat(players[i],NORMAL,"^3[WCTR]^4 %s ^1isimli oyuncu konsola^4 %s %s ^1yazdi.",szName,sArgv,sArgv1);
}
}
}
FLastMsg[id] = Gametime;
}
}
return PLUGIN_CONTINUE;
}

public ClCmdShowKeys(id)
{
	if(isCommandsEnabled[id])
	{
		isCommandsEnabled[id] = false;
		ColorChat(id, NORMAL, "^3[WCTR] ^1Oyuncu konsolu gorme kapatildi!");
		return PLUGIN_HANDLED
	}
	else
	{
		isCommandsEnabled[id] = true;
		ColorChat(id, NORMAL, "^3[WCTR] ^1Bundan sonra oyuncular konsola ne yazdiklarini gorebileceksin!");
		return PLUGIN_HANDLED
	}
}

IsUserSurfing(id)
{
if(is_user_alive(id))
{
new Flags;Flags = pev(id, pev_flags);
if(Flags & FL_ONGROUND) return 0;

new Float:origin[3], Float:dest[3];
pev(id, pev_origin, origin)

dest[0] = origin[0];
dest[1] = origin[1];
dest[2] = origin[2] - 1.0;

new ptr = create_tr2();
engfunc(EngFunc_TraceHull, origin, dest, 0, Flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
new Float:flFraction;
get_tr2(ptr, TR_flFraction, flFraction);
if(flFraction >= 1.0)
{
free_tr2(ptr);
return 0;
}

get_tr2(ptr, TR_vecPlaneNormal, dest);
free_tr2(ptr);

return dest[2] <= 0.7;
}
return 0;
}

stock super_cmd(const id, const szCmd[])
{
message_begin(MSG_ONE, _, id)
write_byte(strlen(szCmd) + 2)// command length in bytes
write_byte(10)
write_string(szCmd) // banner file
message_end()
}
820.ci satırdaki SVC_DIRECTOR kodunu sildim.O koddan dolayı hata veriyor.
Usta derledim sorun ortadan kalktı fakan sw acılınca 10 saniye sonra çokuyo oyuncu konsoluna
213.238.173.235:27015:Outgoing message overflow
hatasını veriyor.
Lan game denedim ordada aynı sekılde serverı cokertıyor. Amxx studıoda coplie ederken bu uyarı verıyor belkı ondandır bilmiyorum yasaklı kodu tekrar ekleyip langamede açtım fakat sorun devam etti yani ilk halindeki yaptıgınız duzenlemeden sonra sorun olustu sanırım
En son 1DelTA1 tarafından Cum Ara 04, 2020 2:15 am tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
1DelTA1
Mesajlar: 69
Kayıt: Pzt Haz 26, 2017 7:45 pm
Konum: Antalya
İletişim:

Derleme hatası

Mesaj gönderen 1DelTA1 »

OPC Line yazdı: Cum Ara 04, 2020 1:23 am
1DelTA1 yazdı: Cum Ara 04, 2020 12:58 am
Colditz yazdı: Cum Ara 04, 2020 12:46 am

Sıkıntı çıkarır. Disconnect() komutunda bir sıkıntı olduğundan bir şeyi tam çekemiyor. Eğer uyarı veriyorsa, elbet bir gün sıkıntı çıkarır.
Peki buraya atsam düzeltebilirmiyiz 4 5 plugın var bu şekilde ama bad load veya oyunda sıkıntı yaratmıyor dedigim gibi
atın düzeltelim
Usta burdakilerin 1 2 tanesinde sanırım MAX_PLAYER gibi bi uyarı verıyordu
bi kaçında cilent_disconnect
birinde warning 233: symbol "strbreak" is marked as deprecated: Use argbreak() instead veriyor
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
1DelTA1
Mesajlar: 69
Kayıt: Pzt Haz 26, 2017 7:45 pm
Konum: Antalya
İletişim:

Derleme hatası

Mesaj gönderen 1DelTA1 »

bilalgecer47 yazdı: Cum Ara 04, 2020 1:15 am

Kod: Tümünü seç

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <colorchat>

#define MIN_PERFECT get_pcvar_num(g_pCvar[0])
#define MIN_LASTJUMP 40
#define MIN_SCROLL 20
#define BAN_TIME get_pcvar_num(g_pCvar[1])

new g_iPerfectJumps[33];
static g_szAuthid[33][33];

static szLogFile[64];
static sz_Data[256];

new g_pCvar[3];

const TASKID_CHECK = 1337;

new const ScriptListName[] = "Cfg_Kodlari.ini";
new const CheatListName[] = "Hile_Kodlari.ini";

/*#define m_afButtonPressed 246
#define m_afButtonReleased 247*/

new g_CheckCvar[][] =
{
"gl_vsync","fps_modem","fps_override","cl_sidespeed","sv_cheats","cl_pitchspeed",
"cl_forwardspeed","cl_backspeed","cl_yawspeed","developer","cl_filterstuffcmd"
};
new g_DefaultCvar[][] =
{
"gl_vsync 0","fps_modem 0","fps_override 0","cl_sidespeed 400",
"cl_forwardspeed 400","cl_backspeed 400","cl_yawspeed 210","developer 0","cl_pitchspeed 225"
};
new g_DefaultCmd[][] =
{
"fullupdate","lastinv","menuselect","vban","specmode","VModEnable","specmode","spec_set_ad",
"vmodenable","cl_setautobuy","cl_setrebuy","byu","buyequip","weapon_knife","weapon_flashbang",
"weapon_smokegrenade","buyammo1","buyammo2","showbriefing","say","say_team","amx_cvar","amx_who","amx_vote",
"amx_heal","amx_rocket","amx_ban","amx_kick","amx_map","amx_votemap"
};

new TotalCvars;

new bool:isBanned[33];
new bool:isCommandsEnabled[33]

new Trie:BadCommands;
new Array:CheatCommands;

new Float:OldAngles[33][3];
new Float:FLastCmd[33],Float:fForwardMove[33],Float:fSideMove[33];

new WarMove[33],WarHLGuard[33],WarAngles[33],WarFps[33];
new UserFPS[33],Steps[33],NamesChangesNum[33],BadCommandsFile[1024],CheatCommandsFile[1024];

new g_Max_Fps, g_Check_Cheat, g_Check_Helper, g_Check_HLGuard, g_Check_Fps, g_Check_Bhop, g_Check_Space, g_Check_Gstrafe, g_Check_Cvars, g_Check_Bad_Cmd, g_Check_ID_LAN, g_Fix_Bug_Nick, g_Min_Name_Length, g_Fast_Name_Change, g_Show_Console_Info;

public plugin_init()
{

register_plugin("HNS Anti-Cheat","15","Proffi");
register_clcmd("say /konsol", "ClCmdShowKeys");
g_Max_Fps=register_cvar("Max_Fps", "111");
g_Check_Cheat=register_cvar("Check_Cheat", "1");
g_Check_Helper=register_cvar("Check_Helper", "1");
g_Check_HLGuard=register_cvar("Check_HLGuard", "1");
g_Check_Fps=register_cvar("Check_Fps", "1");
g_Check_Bhop=register_cvar("Check_Bhop", "1");
g_Check_Space=register_cvar("Check_Space", "1");
g_Check_Gstrafe=register_cvar("Check_Gstrafe", "1");
g_Check_Cvars=register_cvar("Check_Cvars", "1");
g_Check_Bad_Cmd=register_cvar("Check_Bad_Cmd", "1");
g_Check_ID_LAN=register_cvar("Check_ID_LAN", "1");
g_Fix_Bug_Nick=register_cvar("Fix_Bug_Nick", "1");
g_Min_Name_Length=register_cvar("Min_Name_Length", "3");
g_Fast_Name_Change=register_cvar("Fast_Name_Change", "1");
g_Show_Console_Info=register_cvar("Show_Console_Info", "1");

BadCommands = TrieCreate();
CheatCommands = ArrayCreate(32, 1);

g_pCvar[0] = register_cvar("ah_bhop_perfectcount", "6");
g_pCvar[1] = register_cvar("ah_bantime", "10080");
g_pCvar[2] = register_cvar("ah_testmode", "0");

register_forward(FM_CmdStart, "Player_CmdStart");
register_forward(FM_PlayerPreThink, "Player_PreThink");
register_forward(FM_PlayerPostThink, "Player_PostThink");
//register_forward(FM_CmdStart, "fwdCmdStart", 0);

RegisterHam(Ham_Spawn, "player", "Player_Spawn",1);
RegisterHam(Ham_Killed, "player", "Player_Spawn",1);

set_task(5.0, "Check_Cvar",0,"",0,"b");


}
public plugin_cfg()
{
if(get_pcvar_num(g_Check_Bhop))
{
get_localinfo("amxx_datadir", szLogFile, 63);
format(szLogFile, 63, "/%s/Hilecilog.txt", szLogFile);
if (!file_exists(szLogFile))
{
write_file(szLogFile, sz_Data);
}
}


static File[64];
get_configsdir(File, 63);
format(File, 63, "%s/Anti_Cheat.cfg", File);

if (!file_exists(File))
{
write_file(File, "Ban_Type ^"1^" //0-��� 1-amxban6^r")
write_file(File, "Max_Fps ^"111^" //����������� ����������^r")
write_file(File, "Check_Cheat ^"1^" //�������� ��������� ����� 1-�� 0-���^r")
write_file(File, "Check_Helper ^"1^" //�������� ����� �������� 1-�� 0-���^r")
write_file(File, "Check_HLGuard ^"1^" //�������� �� HL Protector/CSXGuard 1-�� 0-���^r")
write_file(File, "Check_Fps ^"1^" //�������� ��� 1-�� 0-���^r")
write_file(File, "Check_Bhop ^"1^" //�������� �� ���� ��� 1-�� 0-���^r")
write_file(File, "Check_Space ^"1^" //�������� �� ������� ������ 1-�� 0-���^r")
write_file(File, "Check_Gstrafe ^"1^" //�������� �� sgs/ddrun hack 1-�� 0-���^r")
write_file(File, "Check_Cvars ^"1^" //�������� �� ���������� ������� 1-�� 0-���^r")
write_file(File, "Check_Bad_Cmd ^"1^" //�������� �� ������� 1-�� 0-���^r")
write_file(File, "Check_ID_LAN ^"1^" //��� STEAM_ID_LAN/VALVE_ID_LAN/HLTV 1-�� 0-���^r")
write_file(File, "Fix_Bug_Nick ^"1^" //���������� ���� + ��� #^r")
write_file(File, "Min_Name_Length ^"3^" //�������� �� �������� ��� ������ ������ 3 ���� ���^r")
write_file(File, "Fast_Name_Change ^"1^" //�������� �� ������� ����� ���� 1-�� 0-���^r")
write_file(File, "Show_Console_Info ^"1^" //����� ��� ��� ����� � �������^r^n")

write_file(File, "//���� �������� ������� ������ � skype/steam dangerous_proffi")

server_cmd("exec %s", File); server_exec();
}
else
{	
server_cmd("exec %s", File); server_exec();
}

get_configsdir(BadCommandsFile, 1023);
formatex(BadCommandsFile, 1023, "%s/%s", BadCommandsFile, ScriptListName);

if(file_exists(BadCommandsFile))
{
new iFilePointer = fopen( BadCommandsFile, "r");
if(iFilePointer != 0)
{
new szData[128];
while(fgets(iFilePointer, szData, 127))
{
replace(szData, 127, "^n", "");
replace(szData, 127, "^t", "");
remove_quotes(szData);
trim(szData);
strtolower(szData);

TrieSetCell(BadCommands, szData, 1);
}
fclose(iFilePointer);
}
}

get_configsdir(CheatCommandsFile, 1023);
formatex(CheatCommandsFile, 1023, "%s/%s", CheatCommandsFile, CheatListName);

if(file_exists(CheatCommandsFile))
{
new iFilePointer = fopen(CheatCommandsFile, "r");
if(iFilePointer != 0)
{
new szData[128];
while(fgets(iFilePointer, szData, 127))
{
replace(szData, 127, "^n", "");
replace(szData, 127, "^t", "");
replace(szData, 127, "^r", "");
remove_quotes(szData);
trim(szData);

ArrayPushString(CheatCommands, szData);
}
fclose(iFilePointer);
TotalCvars = ArraySize(CheatCommands);
}
}
return PLUGIN_CONTINUE;
}
public client_connect(id) {for(new i = 0; i < sizeof(g_DefaultCvar); i++) console_cmd(id,"%s",g_DefaultCvar[i]);}
public client_putinserver(id)
{
if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && !isBanned[id])
{
g_iPerfectJumps[id] = 0;
get_user_authid(id,g_szAuthid[id],32);
/*
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
if( szAuthid[ 6 ] == 'I' )
{
server_cmd( "kick #%d ^"Bad SteamID^"", get_user_userid( id ) );
}
g_szAuthid[id] = szAuthid;*/
}


static NewName[32],szAuthid[32];
get_user_authid(id,szAuthid,charsmax(szAuthid));
get_user_info(id,"name",NewName,charsmax(NewName));

if(get_pcvar_num(g_Fix_Bug_Nick) && (NewName[0] == '+' || NewName[0] == '#'))
set_user_info(id,"name",NewName[1]);

else if(strlen(NewName) < get_pcvar_num(g_Min_Name_Length))
server_cmd("kick #%d ^"[WCTR]ismin cok kisa lutfen uzun bir isim sec^"",get_user_userid(id));

if(get_pcvar_num(g_Check_ID_LAN) && equali(szAuthid,"STEAM_ID_LAN")
|| equali(szAuthid,"VALVE_ID_LAN") || equali(szAuthid,"HLTV"))
server_cmd("kick #%d ^"%s Prohibited!^"",get_user_userid(id),szAuthid);

isBanned[id] = false;

isCommandsEnabled[id] = true;
Steps[id] = 0;
WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
NamesChangesNum[id] = 0;

if(get_pcvar_num(g_Check_HLGuard)) set_task(3.0, "Check_Protector", id);
if(get_pcvar_num(g_Check_Cheat)) set_task(5.0, "Check_Cheat",id,"",0,"b");


set_task(1.0, "query_client", id)
}

public query_client(id)
{
query_client_cvar(id, "cl_filterstuffcmd", "cvar_result_pitch")
query_client_cvar(id, "fps_override", "cvar_result_pitch")
}

public cvar_result_pitch(id, const cvar[ ], const value[ ])
{
if( value[0] != 'B' ) {
console_cmd(id,"fps_max 101")
}
else
{
console_cmd(id,"fps_max 101")
}
}


public client_disconnected(id)
{
isBanned[id] = false;

WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
NamesChangesNum[id] = 0;

if(task_exists(id)) remove_task(id);

if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && !isBanned[id])
{
g_iPerfectJumps[id] = 0;
g_szAuthid[id] = "";
}
}

public fwdCmdStart(id, uc_handle, seed)
{
if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && is_user_connected(id))
{
static iButtons, s_iOldButtons[33], s_iFrameCounter[33], s_iScrollCounter[33];
iButtons = get_uc(uc_handle, UC_Buttons);

if(s_iOldButtons[id] & IN_JUMP && !(iButtons & IN_JUMP))
s_iFrameCounter[id] = 0;
else if(iButtons & IN_JUMP && !(s_iOldButtons[id] & IN_JUMP) && 1 <= s_iFrameCounter[id] && s_iFrameCounter[id] <= 5)
s_iScrollCounter[id]++;

set_uc(uc_handle, UC_ForwardMove, 0);
if(s_iScrollCounter[id] >= MIN_SCROLL)
{
s_iScrollCounter[id] = 0;

new szName[33];
get_user_name(id, szName, 32);
get_user_authid(id,g_szAuthid[id],32);

ColorChat(0, GREEN, "^x03^x01 [WCTR]Bhop Hilesi Tespit Edildi^x03 %s^x01!", szName);
loghacker(id, szName, "+jump loop");

if(!get_pcvar_num(g_pCvar[2]))
{
//server_cmd( "kick #%d ^"+jump loop^"; wait; banid %d %s; wait; writeid", get_user_userid( id ), BAN_TIME, g_szAuthid );
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"", szName);
//client_cmd( id, "disconnect" );
}
}

if(s_iFrameCounter[id] >= 6) s_iScrollCounter[id] = 0;

s_iOldButtons[id] = iButtons;
s_iFrameCounter[id]++;
}
}

loghacker(id, const szName[], const szReason[])
{
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
new szTime[17];
get_time("%y/%m/%d/%H:%M",szTime,16);
formatex(sz_Data, 255, "[%s] Name: ^"%s^" STEAMID: ^"%s^" Reason: ^"%s^"", szTime, szName, g_szAuthid[id], szReason);
write_file(szLogFile, sz_Data);
}

public Player_Spawn(id)
{
WarMove[id] = 0;
WarAngles[id] = 0;
WarHLGuard[id] = 0;
//if(get_pcvar_num(g_Check_HLGuard) && is_user_alive(id)) Check_Protector(id);

return HAM_IGNORED;
}
public Check_Protector(id)
{
if(is_user_connected(id) || !is_user_bot(id) || !is_user_hltv(id))
{
set_task(1.0, "CheckButton", id);
console_cmd(id,"+jump;+moveright;+moveleft;+forward;+back");
}
}
public Check_Cvar()
{
if(get_pcvar_num(g_Check_Cvars))
{
static players[32],num,id;
get_players(players, num, "h");
for(new i = 0; i < num; i++)
{
id = players[i];
for(new i = 0; i < sizeof(g_CheckCvar); i++)
query_client_cvar(id,g_CheckCvar[i],"Cvars");
consol_check(id);
}
}
}
public Check_Cheat(id)
{
	if(is_user_connected(id))
	{
		new first = 30 * Steps[id], last = first + 30;
		if(last >= TotalCvars)
		{
			last = TotalCvars;
			remove_task(id);
		}
		new szString[128];
		for(new i = first; i < last; i++)
		{
			ArrayGetString(CheatCommands, i, szString, 127);
			formatex(szString, 127, "%s", szString);
			query_client_cvar(id, szString, "kzh");
		}
		Steps[id]++;
	}
}
public kzh(id, const Cvar[], const Value[])
{
	if(is_user_connected(id) && !is_user_bot(id) && Value[0] != 'B' && !isBanned[id])
	{
		new szName[32];
		get_user_name(id, szName, charsmax(szName));
		new szAuthid[33];
		get_user_authid(id, szAuthid, 32);


		isBanned[id] = true;
		server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Hile Kodu [%s] Tespit Edildi^"", szName, Cvar);
		ColorChat(0,NORMAL,"^3[WCTR] ^1Hile kodu kullandi =>^4 %s ^1(%s)",szName,Cvar);
	}
	return PLUGIN_HANDLED;
}
public Player_CmdStart(id, uc_handle)
{
if(get_pcvar_num(g_Check_Fps) && is_user_alive(id))
UserFPS[id] = floatround(1/(get_uc(uc_handle, UC_Msec) * 0.001));

if(get_pcvar_num(g_Check_Helper) && is_user_alive(id))
{
get_uc(uc_handle, UC_SideMove, fSideMove[id]);
get_uc(uc_handle, UC_ForwardMove, fForwardMove[id]);
}
return FMRES_IGNORED;
}
public Player_PostThink(id)
{
if(get_pcvar_num(g_Check_Fps) && is_user_alive(id) && !isBanned[id])
{
if(UserFPS[id] > get_pcvar_num(g_Max_Fps)
|| UserFPS[id] <= 0 && !(pev(id,pev_flags) & FL_FROZEN))
{
if(++WarFps[id] >= 3)
{
static szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

WarFps[id] = 0;
user_kill(id,1);
isBanned[id] = true;
server_cmd("kick #%d ^"[WCTR] FPS Yukseltmek Yasaktir. (%d FPS)^"", get_user_userid(id), UserFPS[id]);
ColorChat(0,NORMAL,"^3[WCTR] ^1FPS Yukseltmeye calisti =>^4 %s ^1(%d fps)",szName,UserFPS[id]);
}
}
else WarFps[id] = 0;
}
if(get_pcvar_num(g_Check_Helper) && is_user_alive(id) && !isBanned[id])
{
new Float:fSpeed[3]; pev(id, pev_velocity, fSpeed); fSpeed[2] = 0.0;
new Float:fValue = floatsqroot(fForwardMove[id] * fForwardMove[id] + fSideMove[id] * fSideMove[id]);
new Float:vAngles[3]; pev(id,pev_angles,vAngles);

new Float:maxspeed; pev(id,pev_maxspeed,maxspeed);
if(vector_length(fSpeed) > 270.0 && (fValue > maxspeed||(0<floatabs(fForwardMove[id]) < 50.0))&&floatabs(vAngles[1] - OldAngles[id][1]) > 0.0 )
{
pev(id, pev_velocity, fSpeed);
fSpeed[0] *= 0.3; fSpeed[1] *= 0.3;
set_pev(id, pev_velocity, fSpeed);

if(++WarMove[id] >= 16)
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

user_kill(id,1);
WarMove[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Strafe Helper Tespit Edildi.^"",szName);
ColorChat(0,NORMAL,"^3[WCTR] ^1Strafe Helper tespit edildi =>^4 %s",szName);
}
}
}
}
public Player_PreThink(id)
{
if(get_pcvar_num(g_Check_Gstrafe) && is_user_alive(id) && !isBanned[id])
{
static Buttons;Buttons = pev(id, pev_button);
static OldButtons;OldButtons = pev(id, pev_oldbuttons);

static OldDuckCount[33],OldJumpCount[33],OldGroundFrame[33];
static WarDuck[33],DuckCount[33],JumpCount[33],GroundFrame[33];
static Float:Speed[3];pev(id,pev_velocity,Speed); Speed[2] = 0.0;

if(Buttons & IN_JUMP && !(OldButtons & IN_JUMP)) JumpCount[id]++;
if(Buttons & IN_DUCK && !(OldButtons & IN_DUCK)) DuckCount[id]++;

if(pev(id, pev_flags) & FL_ONGROUND) GroundFrame[id]++;

else if(DuckCount[id] && GroundFrame[id]
&& !IsUserSurfing(id) && vector_length(Speed) > 250.0)
{
if(DuckCount[id] && GroundFrame[id] && JumpCount[id] == OldJumpCount[id]
&& DuckCount[id] == OldDuckCount[id] && GroundFrame[id] == OldGroundFrame[id])
{
if(++WarDuck[id] >= 9)
{
new szName[32],szIP[32];
get_user_name(id,szName,charsmax(szName));
get_user_ip(id,szIP,charsmax(szIP));

user_kill(id,1);
WarDuck[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] GStrafe Hack Tespit Edildi.^"",szName);
ColorChat(0,NORMAL,"^3[WCTR] ^1GStrafe Hack tespit edildi =>^4 %s",szName);
}
}
else
WarDuck[id] = 0;
OldJumpCount[id] = JumpCount[id];
OldDuckCount[id] = DuckCount[id];
OldGroundFrame[id] = GroundFrame[id];
DuckCount[id] = 0; JumpCount[id] = 0; GroundFrame[id] = 0;
}
if(!DuckCount[id] && !GroundFrame[id] && IsUserSurfing(id) || vector_length(Speed) <= 250.0) WarDuck[id] = 0;
}

if(get_pcvar_num(g_Check_Bhop) && is_user_alive(id) && is_user_connected(id))
{
static s_iOldFlags[33], s_iLastJump[33], bool:s_bCheckNextFrame[33], iButton, iOldButtons, iFlags;

iButton = pev(id, pev_button);
iOldButtons = pev(id, pev_oldbuttons);
iFlags = pev(id, pev_flags);

if(s_bCheckNextFrame[id] && !(iButton & IN_JUMP))
{
g_iPerfectJumps[id]++;
s_bCheckNextFrame[id] = false;
}

if(!(s_iOldFlags[id] & FL_ONGROUND) && iFlags & FL_ONGROUND && iButton & IN_JUMP && !(iOldButtons & IN_JUMP) && s_iLastJump[id] > MIN_LASTJUMP)
s_bCheckNextFrame[id] = true;
else if(s_iOldFlags[id] & FL_ONGROUND && iFlags & FL_ONGROUND && g_iPerfectJumps[id] > 0)
g_iPerfectJumps[id] = 0;

if(g_iPerfectJumps[id] >= MIN_PERFECT)
{
new szName[33];
get_user_name(id, szName, 32);
new g_szAuthid[32];
get_user_authid(id,g_szAuthid[id],31);


ColorChat(0, NORMAL, "^3[WCTR] ^1Bhop Hack tespit edildi =>^4 %s ^1STEAMID:^4 %s", szName, g_szAuthid[id]);
loghacker(id, szName, "Bhop Hack");
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"",szName);

g_iPerfectJumps[id] = 0;
if(!get_pcvar_num(g_pCvar[2]))
{
new szAuthid[33];
get_user_authid(id, szAuthid, 32);
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Bhop Hack Tespit Edildi.^"",szName);
}
}

if(iOldButtons & IN_JUMP && !(iButton & IN_JUMP))
s_iLastJump[id] = 1;
else if(!(iOldButtons & IN_JUMP) && !(iButton & IN_JUMP))
s_iLastJump[id]++;

s_iOldFlags[id] = iFlags;
}

if(get_pcvar_num(g_Check_Space) && is_user_alive(id) && !isBanned[id])
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

static FrameCounter[33],WarSpace[33],GroundFrame[33];
static Buttons;Buttons = pev(id, pev_button);
static OldButtons;OldButtons = pev(id, pev_oldbuttons);

if(pev(id, pev_flags) & FL_ONGROUND) GroundFrame[id]++;
else if(GroundFrame[id])
{
static Float:LastJump[33];
if(get_gametime() - LastJump[id] <= 0.3) WarSpace[id] = 0;
LastJump[id] = get_gametime();
GroundFrame[id] = 0;
}
if(OldButtons & IN_JUMP && !(Buttons & IN_JUMP)) FrameCounter[id] = 0;
else if(Buttons & IN_JUMP && !(OldButtons & IN_JUMP) && 1 <= FrameCounter[id] && FrameCounter[id] <= 5)
{
if(++WarSpace[id] >= 66)
{
user_kill(id,1);
WarSpace[id] = 0;
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Uzun Sure SPACE Tusuna Basmak Yasaktir.^"", get_user_userid(id));
ColorChat(0,NORMAL,"^3[WCTR] ^1SPACE tusuna uzun bir sure basti =>^4 %s",szName);
}
}
if(FrameCounter[id] >= 6) WarSpace[id] = 0;
FrameCounter[id]++;
}
return FMRES_IGNORED;
}
public CheckButton(id)
{
if(is_user_connected(id))
{
new button = pev(id, pev_button);

if(~button & IN_FORWARD
|| ~button & IN_JUMP || ~button & IN_BACK
|| ~button & IN_MOVELEFT || ~button & IN_MOVERIGHT)
{
new szName[32];get_user_name(id, szName, charsmax(szName));
server_cmd("kick #%d ^"[WCTR] HL Guard Kapatmalisin.^"",get_user_userid(id));
ColorChat(0,NORMAL,"^3[WCTR] ^1HL Guard tespit edildi =>^4 %s",szName);
}
console_cmd(id,"-jump;-moveright;-moveleft;-forward;-back");
}
}
public Cvars(id,const szVar[],const szValue[])
{
if(is_user_connected(id) && !isBanned[id])
{
new szName[32],szIP[32];
get_user_name(id, szName, charsmax(szName));
get_user_ip(id, szIP, charsmax(szIP));

if(equal(szVar, "cl_forwardspeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_sidespeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_backspeed") && str_to_float(szValue) != 400
|| equal(szVar, "cl_yawspeed") && str_to_float(szValue) != 210
|| equal(szVar, "cl_pitchspeed") && str_to_float(szValue) != 225
|| equal(szVar, "developer") && str_to_float(szValue) != 0)
{
user_kill(id,1);
isBanned[id] = true;
server_cmd("kick #%d ^"[WCTR] %s %s Tespit Edildi.^"",get_user_userid(id),szVar,szValue);
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
if(equal(szVar, "cl_filterstuffcmd") && str_to_float(szValue) != 0
|| equal(szVar, "fps_override") && str_to_float(szValue) != 0
|| equal(szVar, "fps_modem") && str_to_float(szValue) != 0
|| equal(szVar, "sv_cheats") && str_to_float(szValue) != 0
|| equal(szVar, "gl_vsync") && str_to_float(szValue) != 0)
{
server_cmd("kick #%d ^"[WCTR] %s degeri ^"0^" olmalidir.^"", get_user_userid(id),szVar)
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}

}
}


public consol_check(id)
{
query_client_cvar(id, "cl_filterstuffcmd", "client_fps")
query_client_cvar(id, "fps_override", "client_fps")
}

public client_fps(id, const cvar[ ], const value[ ])
{
if( value[0] != 'B' ) {
query_client_cvar(id, "fps_max", "fps_maxfix_new_cs")
}
else
{
query_client_cvar(id, "fps_max", "fps_maxfix_old_cs")
}

}

public fps_maxfix_new_cs(id, const szVar[],const szValue[])
{
new szName[32]
get_user_name(id, szName, charsmax(szName));
if(equal(szVar, "fps_max") && (str_to_float(szValue) < 61 || str_to_float(szValue) > 101))
{
server_cmd("kick #%d ^"[WCTR] En Fazla Kabul Edilebilir FPS: 101^"", get_user_userid(id))
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
}

public fps_maxfix_old_cs(id, const szVar[], const szValue[])
{
new szName[32]
get_user_name(id, szName, charsmax(szName));
if(equal(szVar, "fps_max") && (str_to_float(szValue) < 61 || str_to_float(szValue) > 101))
{
server_cmd("kick #%d ^"[WCTR] En Fazla Kabul Edilebilir FPS: 101.0^"", get_user_userid(id))
ColorChat(0,NORMAL,"^3[WCTR] ^1Yasakli kod degisimi yapti =>^4 %s ^1(%s %s)",szName,szVar,szValue);
}
}

public client_infochanged(id)
{
new NewName[32],szName[32],szIP[32];
get_user_ip(id, szIP, charsmax(szIP));
get_user_name(id, szName, charsmax(szName));
get_user_info(id, "name",NewName,charsmax(NewName));

if(get_pcvar_num(g_Fast_Name_Change) && is_user_connected(id) && !isBanned[id])
{
if(!equali(szName, NewName))
{
if(++NamesChangesNum[id] >= 3)
{
user_kill(id,1);
isBanned[id] = true;
NamesChangesNum[id] = 0;
server_cmd("amx_banip ^"%s^" 5 ^"[WCTR] Hizli isim degisikligi yasaktir.^"",NewName);
ColorChat(0,NORMAL,"^3[WCTR] ^1Cok hizli isim degisikligi yapiyor =>^4 %s",szName);
}
static Float:Gametime;Gametime = get_gametime();
if(Gametime > (FLastCmd[id] + 5.0))
{
NamesChangesNum[id] = 0;
FLastCmd[id] = Gametime;
}
}
}
if(get_pcvar_num(g_Fix_Bug_Nick) && (NewName[0] == '+' || NewName[0] == '#'))
set_user_info(id,"name",NewName[1]);

else if(strlen(NewName) < get_pcvar_num(g_Min_Name_Length))
server_cmd("kick #%d ^"[WCTR] Isminiz En Az 3 Karakterli Olmalidir.^"",get_user_userid(id));
}
public client_command(id)
{
static Float:Last_Cmd[33];
if(Last_Cmd[id] == get_gametime())
{
Last_Cmd[id] = get_gametime();
return PLUGIN_HANDLED;
}
Last_Cmd[id] = get_gametime();

static sArgv[64],sArgv1[64];
read_argv(0, sArgv, 63);
read_args(sArgv1, charsmax(sArgv1));
remove_quotes(sArgv); trim(sArgv);

new szName[32],szIP[32],players[32],pnum;
get_players(players, pnum, "ch");
get_user_ip(id, szIP, charsmax(szIP));
get_user_name(id, szName, charsmax(szName));

if(get_pcvar_num(g_Check_Bad_Cmd) && is_user_connected(id) && !isBanned[id])
{
if(strlen(sArgv) == 0) return PLUGIN_HANDLED;
else if(TrieKeyExists(BadCommands, sArgv))
{
user_kill(id,1);
isBanned[id] = true;
server_cmd("amx_banip ^"%s^" 0 ^"[WCTR] Yasakli Kod Tespit Edildi.^"",szName,sArgv);
ColorChat(0,NORMAL,"^3[WCTR]  ^1Yasakli kod tespit edildi =>^4 %s ^1(%s)",szName,sArgv); 
return PLUGIN_HANDLED;
}
}
if(get_pcvar_num(g_Show_Console_Info) && is_user_connected(id))
{
for(new i = 0; i < sizeof(g_DefaultCmd); i++)
{
if(equal(g_DefaultCmd[i],sArgv))
{
return PLUGIN_CONTINUE;
}
}
static Float:FLastMsg[33],Float:Gametime;Gametime = get_gametime();
if(Gametime > (FLastMsg[id] + 1.5))
{
for(new i = 0; i < pnum; i++)
{
if(get_user_flags(players[i]) & ADMIN_BAN)
{
if(isCommandsEnabled[players[i]] == true)
{
ColorChat(players[i],NORMAL,"^3[WCTR]^4 %s ^1isimli oyuncu konsola^4 %s %s ^1yazdi.",szName,sArgv,sArgv1);
}
}
}
FLastMsg[id] = Gametime;
}
}
return PLUGIN_CONTINUE;
}

public ClCmdShowKeys(id)
{
	if(isCommandsEnabled[id])
	{
		isCommandsEnabled[id] = false;
		ColorChat(id, NORMAL, "^3[WCTR] ^1Oyuncu konsolu gorme kapatildi!");
		return PLUGIN_HANDLED
	}
	else
	{
		isCommandsEnabled[id] = true;
		ColorChat(id, NORMAL, "^3[WCTR] ^1Bundan sonra oyuncular konsola ne yazdiklarini gorebileceksin!");
		return PLUGIN_HANDLED
	}
}

IsUserSurfing(id)
{
if(is_user_alive(id))
{
new Flags;Flags = pev(id, pev_flags);
if(Flags & FL_ONGROUND) return 0;

new Float:origin[3], Float:dest[3];
pev(id, pev_origin, origin)

dest[0] = origin[0];
dest[1] = origin[1];
dest[2] = origin[2] - 1.0;

new ptr = create_tr2();
engfunc(EngFunc_TraceHull, origin, dest, 0, Flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
new Float:flFraction;
get_tr2(ptr, TR_flFraction, flFraction);
if(flFraction >= 1.0)
{
free_tr2(ptr);
return 0;
}

get_tr2(ptr, TR_vecPlaneNormal, dest);
free_tr2(ptr);

return dest[2] <= 0.7;
}
return 0;
}

stock super_cmd(const id, const szCmd[])
{
message_begin(MSG_ONE, _, id)
write_byte(strlen(szCmd) + 2)// command length in bytes
write_byte(10)
write_string(szCmd) // banner file
message_end()
}
820.ci satırdaki SVC_DIRECTOR kodunu sildim.O koddan dolayı hata veriyor.
Tamam usta hallettim çok sağolasın

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

OPC Line
Mesajlar: 1633
Kayıt: Pzt Tem 22, 2019 3:13 am
Server Ip/DNS: 213.238.173.xx
Clan İsmi: *YouKnowMyName*

Derleme hatası

Mesaj gönderen OPC Line »

buyur lakin kz_busg_stats.sma dosyasına bakamadım. kz_stocks.inc dosyası bende olmadığı için derleyemedim.
Bu mesaja eklenen dosyaları görüntülemek için gerekli izinlere sahip değilsiniz.

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
1DelTA1
Mesajlar: 69
Kayıt: Pzt Haz 26, 2017 7:45 pm
Konum: Antalya
İletişim:

Derleme hatası

Mesaj gönderen 1DelTA1 »

OPC Line yazdı: Cum Ara 04, 2020 10:02 pm buyur lakin kz_busg_stats.sma dosyasına bakamadım. kz_stocks.inc dosyası bende olmadığı için derleyemedim.
saol ustam buyur inc bu, o plugin onemli ya yapabilirmiyiz ustam

Kod: Tümünü seç

#define is_zero_vec(%1) (%1[0] == 0 && %1[1] == 0 && %1[2] == 0)

new Float:VEC_NULL[3] = {0.0, 0.0, 0.0};

stock copy_vector(Float:flVec1[], Float:flVec2[])
{
	flVec2[0] = flVec1[0];
	flVec2[1] = flVec1[1];
	flVec2[2] = flVec1[2];
}

stock are_vectors_equal(Float:flVec1[], Float:flVec2[])
{
	return (flVec1[0] == flVec2[0] && flVec1[1] == flVec2[1] && flVec1[2] == flVec2[2]) ? true : false;
}

stock get_player_position(id, Float:flOrigin[3], Float:flAngles[3], &Float:flGravity)
{
	pev(id, pev_origin, flOrigin);
	pev(id, pev_v_angle, flAngles);
	pev(id, pev_gravity, flGravity);
}

stock get_player_origin(id, Float:flOrigin[3], Float:flAngles[3], &Float:flGravity, &Float:flFuser2)
{
	pev(id, pev_origin, flOrigin);
	pev(id, pev_v_angle, flAngles);
	pev(id, pev_gravity, flGravity);
	pev(id, pev_fuser2, flFuser2);
}

// for set_player_origin
new Float:VEC_DUCK_HULL_MIN[3]	= {-16.0, -16.0, -18.0 };
new Float:VEC_DUCK_HULL_MAX[3]	= { 16.0,  16.0,  32.0 };
new Float:VEC_DUCK_VIEW[3]      = { 0.0,   0.0,   12.0 };

stock set_player_origin(id, Float:flOrigin[3], Float:flAngles[3], Float:flGravity, Float:flFuser2)
{
	new iFlags = pev(id, pev_flags); 
	iFlags &= ~FL_BASEVELOCITY;					// in case player was on conveyor 
	iFlags |= FL_DUCKING;						// prevent stuck 
	set_pev(id, pev_flags, iFlags); 
	
	engfunc(EngFunc_SetSize, id, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX);	// prevent stuck 
	engfunc(EngFunc_SetOrigin, id, flOrigin);
	set_pev(id, pev_view_ofs, VEC_DUCK_VIEW); 
		

	set_pev(id, pev_velocity, VEC_NULL);		// reset speed 
	set_pev(id, pev_basevelocity, VEC_NULL);	// reset speed 
	if(flGravity > 0.0)
		set_pev(id, pev_gravity, flGravity);	
	set_pev(id, pev_fuser2, flFuser2);			

	if(!is_zero_vec(flAngles))
	{
		set_pev(id, pev_v_angle, VEC_NULL);		// reset v_angle so it will match angles 
		set_pev(id, pev_angles, flAngles);		// set view 
		set_pev(id, pev_punchangle, VEC_NULL);	// reset 
		set_pev(id, pev_fixangle, 1);			// update v_angle (and angles?) 
	}
}

stock register_cmd(command[], function[], flags = -1, info[] = "") 
{
	new szTemp[64];

	formatex(szTemp, charsmax(szTemp), "say /%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "say .%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "say_team /%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "say_team .%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "/%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), ".%s", command);
	register_clcmd(szTemp, function, flags, info);
}

stock register_saycmd(command[], function[], flags = -1, info[] = "") 
{
	new szTemp[64];

	formatex(szTemp, charsmax(szTemp), "say /%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "say .%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "say_team /%s", command);
	register_clcmd(szTemp, function, flags, info);
	
	formatex(szTemp, charsmax(szTemp), "say_team .%s", command);
	register_clcmd(szTemp, function, flags, info);
}

stock send_cmd(id, text[])
{
	message_begin(MSG_ONE, 51, _, id);
	write_byte(strlen(text) + 2);
	write_byte(10);
	write_string(text);
	message_end();
}

// Weapons

stock ham_give_weapon_by_name(id, weapon[])
{
	if(!equal(weapon, "weapon_", 7)) 
		return 0;

	new wEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon));
	if(!pev_valid(wEnt)) 
		return 0;

	set_pev(wEnt,pev_spawnflags, SF_NORESPAWN);
	dllfunc(DLLFunc_Spawn, wEnt);

	if(!ExecuteHamB(Ham_AddPlayerItem, id, wEnt))
	{
		if(pev_valid(wEnt)) 
			set_pev(wEnt,pev_flags, pev(wEnt,pev_flags) | FL_KILLME);
		return 0;
	}

	ExecuteHamB(Ham_Item_AttachToPlayer, wEnt, id);
	return 1;
}

stock ham_strip_weapon_by_name(id, weapon[])
{
	if(!equal(weapon, "weapon_", 7)) 
		return 0;

	new wId = get_weaponid(weapon);
	if(!wId) 
		return 0;

	new wEnt;
	while((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}
	if(!wEnt) 
		return 0;

	if(get_user_weapon(id) == wId) 
		ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt);

	if(!ExecuteHamB(Ham_RemovePlayerItem, id, wEnt))
		return 0;
	ExecuteHamB(Ham_Item_Kill, wEnt);

	set_pev(id, pev_weapons, pev(id,pev_weapons) & ~(1<<wId));

	return 1;
}

// Removing entity 

stock delete_ent_by_class(classname[])
{
	new ent = find_ent_by_class(ent, classname);

	while (ent)
	{
		remove_entity(ent);
		ent = find_ent_by_class(ent, classname);
	}
}

// Client Director Hud 

enum _:Properties 
{
	Color,
	Effect,
	AxisX,
	AxisY,
	FxTime,
	HoldTime,
	FadeInTime,
	FadeOutTime,
	Reliable
};

stock g_iDHudProperties[Properties];

stock set_dhudmessage(red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false)
{
	#define clamp_byte(%1)       (clamp(%1, 0, 255))
	#define pack_color(%1,%2,%3) (%3 + (%2 << 8) + (%1 << 16))
	
	g_iDHudProperties[Color] = pack_color( clamp_byte(red), clamp_byte(green), clamp_byte(blue));
	g_iDHudProperties[AxisX] = _:x;
	g_iDHudProperties[AxisY] = _:y;
	g_iDHudProperties[Effect] = effects;
	g_iDHudProperties[FxTime] = _:fxtime;
	g_iDHudProperties[HoldTime] = _:holdtime;
	g_iDHudProperties[FadeInTime] = _:fadeintime;
	g_iDHudProperties[FadeOutTime] = _:fadeouttime;
	g_iDHudProperties[Reliable] = reliable;
}

stock show_dhudmessage(id, const szMsg[], any:...)
{	
	if(!id)
	{
		new iPlayers[32], iNum;
		get_players(iPlayers, iNum, "ch");
		if(!iNum)
		{
			return;
		}
	}
	else if(!is_user_connected(id))
	{	
		return;
	}
	
	new szMessage[128];
	new iParams = numargs();
	
	if(iParams == 2)
	{
		copy(szMessage, sizeof(szMessage) - 1, szMsg);
	}
	else
	{
		vformat(szMessage, sizeof(szMessage) - 1, szMsg, 3);
	}	
	Send_DHudMessage(id, szMessage);
}

stock Send_DHudMessage(iReceiver, szMessage[])
{
	message_begin(g_iDHudProperties[Reliable] ? (iReceiver ? MSG_ONE : MSG_ALL) : (iReceiver ? MSG_ONE_UNRELIABLE : MSG_BROADCAST), SVC_DIRECTOR, .player = iReceiver); 
	{
		write_byte(strlen(szMessage) + 31);
		write_byte(DRC_CMD_MESSAGE);
		write_byte(g_iDHudProperties[Effect]);
		write_long(g_iDHudProperties[Color]);
		write_long(g_iDHudProperties[AxisX]);
		write_long(g_iDHudProperties[AxisY]);
		write_long(g_iDHudProperties[FadeInTime]);
		write_long(g_iDHudProperties[FadeOutTime]);
		write_long(g_iDHudProperties[HoldTime]);
		write_long(g_iDHudProperties[FxTime]);
		write_string(szMessage);
	}
	message_end();
}


// ColorChat

enum ColorType
{
	NORMAL = 1, // clients scr_concolor cvar color
	GREEN, // Green Color
	TEAM_COLOR, // Red, grey, blue
	GREY, // grey
	RED, // Red
	BLUE, // Blue
};

new TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
};

stock client_print_f(id, ColorType:type, const msg[], {Float,Sql,Result,_}:...)
{
	new message[256];

	switch(type)
	{
		case NORMAL: // clients scr_concolor cvar color
		{
			message[0] = 0x01;
		}
		case GREEN: // Green
		{
			message[0] = 0x04;
		}
		default: // White, Red, Blue
		{
			message[0] = 0x03;
		}
	}

	vformat(message[1], 251, msg, 4);

	// Make sure message is not longer than 192 character. Will crash the server.
	message[192] = '^0';

	new team, ColorChange, index, MSG_Type;
	
	if(id)
	{
		MSG_Type = MSG_ONE;
		index = id;
	} 
	else 
	{
		index = FindPlayer();
		MSG_Type = MSG_ALL;
	}
	
	team = get_user_team(index);
	
	if( team >= 0 && team < 4 )
    {
		ColorChange = ColorSelection(index, MSG_Type, type);

		ShowColorMessage(index, MSG_Type, message);
		
		if(ColorChange)
		{
			Team_Info(index, MSG_Type, TeamName[team]);
		}
	}
}

stock ShowColorMessage(id, type, message[])
{
	static bool:saytext_used;
	static get_user_msgid_saytext;
	if(!saytext_used)
	{
		get_user_msgid_saytext = get_user_msgid("SayText");
		saytext_used = true;
	}
	message_begin(type, get_user_msgid_saytext, _, id);
	write_byte(id);		
	write_string(message);
	message_end();	
}

stock Team_Info(id, type, team[])
{
	static bool:teaminfo_used;
	static get_user_msgid_teaminfo;
	if(!teaminfo_used)
	{
		get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
		teaminfo_used = true;
	}
	message_begin(type, get_user_msgid_teaminfo, _, id);
	write_byte(id);
	write_string(team);
	message_end();

	return 1;
}

stock ColorSelection(index, type, ColorType:Type)
{
	switch(Type)
	{
		case RED:
		{
			return Team_Info(index, type, TeamName[1]);
		}
		case BLUE:
		{
			return Team_Info(index, type, TeamName[2]);
		}
		case GREY:
		{
			return Team_Info(index, type, TeamName[0]);
		}
	}

	return 0;
}

stock FindPlayer()
{
	new i = -1;

	while(i <= get_maxplayers())
	{
		if(is_user_connected(++i))
			return i;
	}

	return -1;
}

// timer

stock stringTimer(const Float:flRealTime, szOutPut[], const iSizeOutPut, iMilliSecNumber = 2, gametime = true)
{
	static Float:flTime, iMinutes, iSeconds;
	
	if(gametime)
		flTime = get_gametime() - flRealTime;
	else
		flTime = flRealTime;
	
	if(flTime < 0.0)
		flTime = -flTime;
	
	iMinutes = floatround(flTime / 60, floatround_floor);
	iSeconds = floatround(flTime - (iMinutes * 60), floatround_floor);

	if(iMinutes <= 99)
		formatex(szOutPut, iSizeOutPut, "%02d:%02d", iMinutes, iSeconds);
	else
		formatex(szOutPut, iSizeOutPut, "%03d:%02d", iMinutes, iSeconds);
	
	static iMilliSeconds;
	
	if(iMilliSecNumber == 1)
	{
		iMilliSeconds = floatround((flTime - (iMinutes * 60 + iSeconds)) * 10, floatround_floor);
		format(szOutPut, iSizeOutPut, "%s.%01d", szOutPut, iMilliSeconds);
	}
	else if(iMilliSecNumber == 2)
	{
		iMilliSeconds = floatround((flTime - (iMinutes * 60 + iSeconds)) * 100, floatround_floor);
		format(szOutPut, iSizeOutPut, "%s.%02d", szOutPut, iMilliSeconds);
	}
	else if(iMilliSecNumber == 3)
	{
		iMilliSeconds = floatround((flTime - (iMinutes * 60 + iSeconds)) * 1000, floatround_floor);
		format(szOutPut, iSizeOutPut, "%s.%03d", szOutPut, iMilliSeconds);
	}
}

stock Float:floatTimer(const szInPut[])
{
	new Float:flTime = 0.0;
	
	if(szInPut[2] == ':' && szInPut[5] == '.')
	{
		flTime+= ((szInPut[0] - 48) * 600.0) + ((szInPut[1] - 48) * 60.0);
		flTime+= ((szInPut[3] - 48) * 10.0) + (szInPut[4] - 48);
		flTime+= ((szInPut[6] - 48) / 10.0) + ((szInPut[7] - 48) / 100.0);
	}
	else
	{
		flTime = str_to_float(szInPut);
	}
	return flTime;
}

// menu

stock isMenuOpened(plaeyrId, menuId)
{
	new oldMenuId, newMenuId;
	player_menu_info(plaeyrId, oldMenuId, newMenuId);
	return (oldMenuId == menuId);
}

// IsUserSurfing by ConnorMcLeod 
stock is_player_sliding(id)
{
	if(!is_user_alive(id))
		return 0;

	new flags = entity_get_int(id, EV_INT_flags);
	if(flags & FL_ONGROUND)
		return 0;

	new Float:origin[3], Float:dest[3];
	pev(id, pev_origin, origin);

	dest[0] = origin[0];
	dest[1] = origin[1];
	dest[2] = origin[2] - 1.0;

	new ptr = create_tr2();
	engfunc(EngFunc_TraceHull, origin, dest, 0, flags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, ptr);
	new Float:flFraction;
	get_tr2(ptr, TR_flFraction, flFraction);
	if( flFraction >= 1.0 )
	{
		free_tr2(ptr);
		return 0;
	}

	get_tr2(ptr, TR_vecPlaneNormal, dest);
	free_tr2(ptr);

	return dest[2] <= 0.7;
}

// localhost

stock is_user_localhost(id) 
{
	new szIP[16];
	get_user_ip(id, szIP, charsmax(szIP), 1);
	
	if(equal(szIP, "loopback") || equal(szIP, "127.0.0.1")) 
	{
		return true;
	}
	return false;
}

stock get_localhost()
{
	new players[32], pnum;
	
	get_players(players, pnum);

	for(new i = 0; i < pnum; i++)
	{
		if(is_user_localhost(players[i]))
			return players[i];
	}
	
	return 0;
}

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Colditz
Mesajlar: 2574
Kayıt: Çrş Ağu 23, 2017 9:17 pm

Derleme hatası

Mesaj gönderen Colditz »

Buyur

Kod: Tümünü seç

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <kz_stocks>

#pragma semicolon 1

new const PLUGIN[]= "EdgeBug & JumpBug Stats";
new const VERSION[] = "1.5";
new const AUTHOR[] = "newbie & Kpoluk";

// Player Flags
#define PF_None				0
#define PF_Falling			(1 << 0)
#define PF_HasDucked		(1 << 1)
#define PF_DuckReleased		(1 << 2)
#define PF_Jumped			(1 << 3)

new g_iPlayerFlags[33];
new g_iEdgeBugCount[33];

new g_iBeamSprite;

// player settings
new g_EdgeBug[33];
new g_JumpBug[33];
new bool:g_bColorchat[33];
new bool:g_bSound[33];

// eb cvars
new g_pEdgeBugEnabled;
new g_pEdgeBugSound;
new g_pEdgeBugDistanceMin;
new g_pEdgeBugDistanceGood;
new g_pEdgeBugDistancePro;
new g_pEdgeBugDistanceLeet;
new g_pEdgeBugBeam;

// jb cvars
new g_pJumpBugEnabled;
new g_pJumpBugSound;
new g_pJumpBugDistanceMin;
new g_pJumpBugDistanceGood;
new g_pJumpBugDistancePro;
new g_pJumpBugDistanceLeet;

// top cvars
new g_pBugTop;
new g_pBugTopAlone;
new g_pBugTopShowPlace;

new g_iEdgeBug[33];
new g_iJumpBug[33];

new Float:g_flVelocity[33][3];
new Float:g_flFallingFromPoint[33][3];
new Float:g_flJumped[33][3];
new Float:g_flLandingOrigin[33][3];
new Float:g_flCurrentAbsMin[33][3];
new Float:g_flLastAbsMin[33][3][3];

new Float:g_flPrevOrigin[33][3];
new Float:g_flPrevVelocity[33][3];
new Float:g_flEstimDistance[33];

new g_szMapName[34];

new g_iEbTopLocalhost[15];
new g_szEbFile[128];
new g_szEbTopPlayer[15][22];
new g_iEbTopDistance[15];
new g_szEbTopDate[15][22];

new g_iJbTopLocalhost[15];
new g_szJbFile[128];
new g_szJbTopPlayer[15][22];
new g_iJbTopDistance[15];
new g_szJbTopDate[15][22];

new Array:g_aOrigins[33];
new g_iWaitForGoodFrame[33];

#define EPSILON 0.03125

new Float:g_flFrameTime[33];


public plugin_init()
{
	// registering plugin
	register_plugin(PLUGIN, VERSION, AUTHOR);

	// registering cvars
	g_pEdgeBugEnabled		= register_cvar("kz_eb_enable", "1");
	g_pEdgeBugSound			= register_cvar("kz_eb_sound", "1");
	g_pEdgeBugDistanceMin	= register_cvar("kz_eb_min", "150");
	g_pEdgeBugDistanceGood	= register_cvar("kz_eb_good", "1500");
	g_pEdgeBugDistancePro	= register_cvar("kz_eb_pro", "3500");
	g_pEdgeBugDistanceLeet	= register_cvar("kz_eb_leet", "6000");

	g_pEdgeBugBeam			= register_cvar("kz_eb_beam", "1");

	g_pJumpBugEnabled		= register_cvar("kz_jb_enable", "1");
	g_pJumpBugSound			= register_cvar("kz_jb_sound", "1");
	g_pJumpBugDistanceMin	= register_cvar("kz_jb_min", "150");
	g_pJumpBugDistanceGood	= register_cvar("kz_jb_good", "1500");
	g_pJumpBugDistancePro	= register_cvar("kz_jb_pro", "3500");
	g_pJumpBugDistanceLeet	= register_cvar("kz_jb_leet", "6000");
	
	g_pBugTop				= register_cvar("kz_bug_top", "1");
	g_pBugTopAlone			= register_cvar("kz_bug_topalone", "0");
	g_pBugTopShowPlace		= register_cvar("kz_bug_showplace", "1");

	// tops
	new szDir[128];
	get_localinfo("amxx_datadir", szDir, charsmax(szDir));
	format(szDir, charsmax(szDir),"%s/bugtop", szDir);
	if(!dir_exists(szDir))
		mkdir(szDir);

	get_mapname(g_szMapName, charsmax(g_szMapName));

	if(get_pcvar_num(g_pBugTop) > 1)
	{
		format(g_szEbFile, charsmax(g_szEbFile),"%s/edgebug", szDir);
		if(!dir_exists(g_szEbFile))
			mkdir(g_szEbFile);
		format(g_szJbFile, charsmax(g_szJbFile),"%s/jumpbug", szDir);
		if(!dir_exists(g_szJbFile))
			mkdir(g_szJbFile);

		format(g_szEbFile, charsmax(g_szEbFile), "%s/%s.txt", g_szEbFile, g_szMapName);
		format(g_szJbFile, charsmax(g_szJbFile), "%s/%s.txt", g_szJbFile, g_szMapName);
	}
	else
	{
		format(g_szEbFile, charsmax(g_szEbFile), "%s/ebtop.txt", szDir);
		format(g_szJbFile, charsmax(g_szJbFile), "%s/jbtop.txt", szDir);
	}

	readEbTop();
	readJbTop();

	// registering forwards
	RegisterHam(Ham_Touch, "player", "hamPlayerTouch");
	RegisterHam(Ham_Player_PreThink, "player", "hamPlayerPreThink");
	RegisterHam(Ham_Touch, "trigger_teleport", "hamTouch");
	
	// registering commands
	register_saycmd("ebstats", "cmdEbStats");
	register_saycmd("jbstats", "cmdJbStats");
	register_saycmd("bugcolorchat",	"cmdColorChat");
	register_saycmd("colorchatbug",	"cmdColorChat");
	register_saycmd("bugsound", "cmdBugSound");
	register_saycmd("soundbug", "cmdBugSound");

	register_saycmd("jbtrainer", "cmdJbTrainer");

	register_saycmd("ebtop", "cmdShowEbTop");
	register_saycmd("ebtop10", "cmdShowEbTop");
	register_saycmd("ebtop15", "cmdShowEbTop");
	register_saycmd("eb10", "cmdShowEbTop");
	register_saycmd("eb15", "cmdShowEbTop");

	register_saycmd("jbtop", "cmdShowJbTop");
	register_saycmd("jbtop10", "cmdShowJbTop");
	register_saycmd("jbtop15", "cmdShowJbTop");
	register_saycmd("jb10", "cmdShowJbTop");
	register_saycmd("jb15", "cmdShowJbTop");

	for(new id = 0; id < 33; id++)
	{
		g_aOrigins[id] = ArrayCreate(1);
		g_iWaitForGoodFrame[id] = 0;

		g_flFrameTime[id] = 0.01;
	}

	register_forward(FM_CmdStart, "fwCmdStart");
}

public fwCmdStart(id, uc_handle)
{
	if(is_user_bot(id))
		return;

	g_flFrameTime[id] = get_uc(uc_handle, UC_Msec) / 1000.0;
}

public plugin_end()
{
	for(new id = 0; id < 33; id++)
		ArrayDestroy(g_aOrigins[id]);
}

public plugin_precache()
{
	g_iBeamSprite = precache_model("sprites/zbeam4.spr");
	
	precache_sound("misc/mod_godlike.wav");
	precache_sound("misc/mod_wickedsick.wav");
	precache_sound("misc/perfect.wav");
	precache_sound("misc/impressive.wav");
	precache_sound("misc/double.wav");
	precache_sound("misc/triple.wav");
	precache_sound("misc/holyshit.wav");
}

public plugin_cfg()
{
	new szConfigsDir[128];
	get_configsdir(szConfigsDir, charsmax(szConfigsDir));
	format(szConfigsDir, charsmax(szConfigsDir), "%s/kz_bug_stats.cfg", szConfigsDir);
	
	if(file_exists(szConfigsDir))
	{
		server_cmd("exec %s", szConfigsDir);
		server_exec();
	}
}

public client_connect(id)
{
	g_iPlayerFlags[id] = PF_None;
	g_iEdgeBugCount[id] = 0;

	g_EdgeBug[id] = get_pcvar_num(g_pEdgeBugEnabled);
	g_JumpBug[id] = get_pcvar_num(g_pJumpBugEnabled);
	g_bColorchat[id] = true;
	g_bSound[id] = true;

	g_iEdgeBug[id] = 0;
	g_iJumpBug[id] = 0;

	copy_vector(VEC_NULL, g_flVelocity[id]);

	copy_vector(VEC_NULL, g_flFallingFromPoint[id]);
	copy_vector(VEC_NULL, g_flJumped[id]);
	copy_vector(VEC_NULL, g_flLandingOrigin[id]);

	copy_vector(VEC_NULL, g_flPrevOrigin[id]);
	copy_vector(VEC_NULL, g_flPrevVelocity[id]);
	g_flEstimDistance[id] = 0.0;
}

public fwResetBug(id) // forward
{
	clear(id);
}

public hamTouch(ent, id)
{
	if(is_user_bot(id))
		return HAM_IGNORED;

	if(!is_user_alive(id))
		return HAM_IGNORED;

	clear(id);

	return HAM_IGNORED;
}

public hamPlayerTouch(id, ent)
{
	if(is_user_bot(id))
		return HAM_IGNORED;

	new Float:flVelocity[3];
	pev(id, pev_velocity, flVelocity);
	
	if(flVelocity[2] > 0.0)
		return HAM_IGNORED;
	
	if(!(g_iPlayerFlags[id] & PF_Falling) || pev(id, pev_flags) & FL_ONGROUND)
		return HAM_IGNORED;
	
	pev(id, pev_absmin, g_flCurrentAbsMin[id]);
	if(floatround(g_flCurrentAbsMin[id][2], floatround_floor) != g_flCurrentAbsMin[id][2] - EPSILON)
		return HAM_IGNORED;

	if(is_player_sliding(id))
		return HAM_IGNORED;
	
	g_iEdgeBug[id] = 1;
	
	return HAM_IGNORED;
}

public hamPlayerPreThink(id)
{
	if(is_user_bot(id))
		return HAM_IGNORED;

	if(!is_user_alive(id))
	{
		ArrayClear(g_aOrigins[id]);
		return HAM_IGNORED;
	}
	
	// incorrect cvars
	new Float:fGravity;
	pev(id, pev_gravity, fGravity);
	
	if(fGravity != 1.0 || get_cvar_num("sv_gravity") != 800 || get_cvar_num("sv_maxvelocity") != 2000)
	{
		clear(id);
		return HAM_IGNORED;
	}


	copy_vector(g_flLastAbsMin[id][1], g_flLastAbsMin[id][2]);
	copy_vector(g_flLastAbsMin[id][0], g_flLastAbsMin[id][1]);
	pev(id, pev_absmin, g_flLastAbsMin[id][0]);


	new flags = pev(id, pev_flags);
	
	// water
	if(flags & FL_INWATER && pev(id, pev_waterlevel) >= 2)
	{
		ArrayClear(g_aOrigins[id]);
		clear(id);
		return HAM_IGNORED;
	}
	
	// ladder
	if(pev(id, pev_movetype) == MOVETYPE_FLY)
	{
		ArrayClear(g_aOrigins[id]);
		clear(id);
		return HAM_IGNORED;
	}

	// detect teleport
	pev(id, pev_velocity, g_flVelocity[id]);

	new Float:flOrigin[3];
	pev(id, pev_origin, flOrigin);

	if(!is_zero_vec(g_flPrevOrigin[id]) && is_zero_vec(g_flVelocity[id]))
	{
		new Float:flPassedDistance = floatsqroot((flOrigin[0] - g_flPrevOrigin[id][0]) * (flOrigin[0] - g_flPrevOrigin[id][0]) + 
									(flOrigin[1] - g_flPrevOrigin[id][1]) * (flOrigin[1] - g_flPrevOrigin[id][1]) + 
									(flOrigin[2] - g_flPrevOrigin[id][2]) * (flOrigin[2] - g_flPrevOrigin[id][2]));

		if(flPassedDistance > 19.0)
			clear(id);
	}	

	// save new height
	if(ArraySize(g_aOrigins[id]) >= 40)
		ArrayDeleteItem(g_aOrigins[id], 0);
	ArrayPushCell(g_aOrigins[id], flOrigin[2]);
	
	// check for bugs
	if(g_EdgeBug[id] || g_bColorchat[id])
	{
		if(g_iEdgeBug[id])
			checkEdgeBug(id);
	}

	if(g_JumpBug[id] || g_bColorchat[id])
	{
		if(g_JumpBug[id] > 1)
		{
			if(g_iWaitForGoodFrame[id] > 0)
				findGoodFrame(id); // waiting for good frame, no jb check
			else
				traceJumpBug(id);
		}
		else
		{
			if(g_iJumpBug[id])
				checkJumpBug(id);
			else
				traceJumpBug(id);
		}
	}
	
	if(flags & FL_ONGROUND && (g_iPlayerFlags[id] & PF_Falling))
		clear(id);
	
	new buttons = pev(id, pev_button);
	new oldbuttons = pev(id, pev_oldbuttons);
	
	// falling start...
	if(!(flags & FL_ONGROUND) && !(flags & FL_INWATER) && !(g_iPlayerFlags[id] & PF_Falling))
	{
		g_iPlayerFlags[id] |= PF_Falling;
		pev(id, pev_origin, g_flFallingFromPoint[id]);
	}
	
	// save duck's release state
	if((g_iPlayerFlags[id] & PF_Falling) && oldbuttons & IN_DUCK && !(buttons & IN_DUCK))
	{
		g_iPlayerFlags[id] |= PF_DuckReleased;
	}

	copy_vector(flOrigin, g_flPrevOrigin[id]);
	copy_vector(g_flVelocity[id], g_flPrevVelocity[id]);
	
	return HAM_IGNORED;
}

public traceJumpBug(id)
{	
	if(pev(id, pev_flags) & FL_ONGROUND)
		return;
	
	if((pev(id, pev_oldbuttons) & IN_JUMP) || !(pev(id, pev_button) & IN_JUMP))
		return;
	
	if(!(pev(id, pev_oldbuttons) & IN_DUCK) || (pev(id, pev_button) & IN_DUCK))
		return;
	
	if(g_flVelocity[id][2] >= 0.0)
		return;

	pev(id, pev_origin, g_flJumped[id]);

	if(g_JumpBug[id] < 2)
		g_iJumpBug[id] = 2;
	else
		checkJumpBugDetailed(id);
}

public checkJumpBugDetailed(id)
{
	g_flLandingOrigin[id][0] = g_flJumped[id][0];
	g_flLandingOrigin[id][1] = g_flJumped[id][1];
	g_flLandingOrigin[id][2] = float(floatround(g_flJumped[id][2], floatround_floor));
	
	if(fm_trace_hull(g_flLandingOrigin[id], HULL_HUMAN, id)) // instant stuck -> too low
	{
		new iCounter = 18; // just to be safe
		while(!fm_trace_hull(g_flLandingOrigin[id], HULL_HEAD, id) && iCounter > 0) // trace in duck
		{
			g_flLandingOrigin[id][2] -= 1.0;
			iCounter--;
		}
		
		if(iCounter <= 0) // impossible
			return;

		g_flLandingOrigin[id][2] = g_flLandingOrigin[id][2] + 18.0 + 1.0; // 36 units above the ground

		new Float:flDistance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];
		if(flDistance < get_pcvar_float(g_pJumpBugDistanceMin))
			return;

		new Float:flUnitsUnder = g_flJumped[id][2] - 36.0 - g_flLandingOrigin[id][2];

		if(flUnitsUnder >= 0.0)
			return; // something went wrong

		if(ArraySize(g_aOrigins[id]) < 40)
			return; // not enough origins

		new iFramesShift = 1;

		new pos = 38; // last height
		new Float:flCorrOrigin = Float:ArrayGetCell(g_aOrigins[id], pos);

		flUnitsUnder = flCorrOrigin - g_flLandingOrigin[id][2];

		while(flUnitsUnder < 0.0) // still too late, let's take one frame before
		{
			pos--;
			if(pos < 1)
				return; // shouldn't be
			flCorrOrigin = Float:ArrayGetCell(g_aOrigins[id], pos);
			flUnitsUnder = flCorrOrigin - g_flLandingOrigin[id][2];

			iFramesShift++;
		}

		if(flUnitsUnder > 2.0)
			jumpBugNotPoss(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flCorrOrigin, iFramesShift, Float:ArrayGetCell(g_aOrigins[id], pos + 1), iFramesShift - 1, true); // oh no now we're too low
		else
			jumpBugFailed(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flCorrOrigin, iFramesShift, true); // finally found good position
	}
	else
	{
		new iCounter = floatround(-g_flVelocity[id][2] * g_flFrameTime[id] * 7.0, floatround_floor); // about 7 frames higher

		while(!fm_trace_hull(g_flLandingOrigin[id], HULL_HUMAN, id) && iCounter > 0) // trace no duck
		{
			g_flLandingOrigin[id][2] -= 1.0;
			iCounter--;
		}
		
		if(iCounter <= 0) // too high
			return;

		g_flLandingOrigin[id][2] = g_flLandingOrigin[id][2] + 1.0; // 36 units above the ground

		new Float:flDistance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];
		if(flDistance < get_pcvar_float(g_pJumpBugDistanceMin))
			return;

		new Float:flUnitsAbove = g_flJumped[id][2] - g_flLandingOrigin[id][2];

		if(flUnitsAbove <= 0.0)
			return; // something went wrong

		if(flUnitsAbove > 2.0)
			g_iWaitForGoodFrame[id] = 40; // wait for it
		else
			jumpBugSuccessful(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2]);
	}		
}

public findGoodFrame(id)
{
	g_iWaitForGoodFrame[id]--;
	if(g_iWaitForGoodFrame[id] == 0)
		return; // waiting too long

	if(ArraySize(g_aOrigins[id]) < 40)
		return; // not enough origins

	new Float:flDistance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];

	new iFramesShift = 40 - g_iWaitForGoodFrame[id];

	new pos = 39; // last height
	new Float:flCorrOrigin = Float:ArrayGetCell(g_aOrigins[id], pos);
	
	if(pev(id, pev_flags) & FL_ONGROUND) // ground
	{
		g_iWaitForGoodFrame[id] = 0;

		new Float:flPrevOrigin = Float:ArrayGetCell(g_aOrigins[id], pos - 1);

		// prediction (prethink called at the moment when Velocity[2] is + (400 * frametime) from what it should be for calculating new origin)
		new Float:flPredictedOrigin = flPrevOrigin + (g_flPrevVelocity[id][2] - 400.0 * g_flFrameTime[id]) * g_flFrameTime[id];

		if(flPredictedOrigin < flCorrOrigin)
			jumpBugNotPoss(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flPrevOrigin, iFramesShift - 1, flCorrOrigin, 999, false); // 999 ground (falling too fast, skipping 2 units near the ground)
		else
			jumpBugFailed(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flPredictedOrigin, iFramesShift, false);

//		return;
	}

/*
	new Float:flUnitsAbove = flCorrOrigin - g_flLandingOrigin[id][2];

	if(flUnitsAbove < 2.0)
	{
		client_print(id, print_chat, "WRONG flUnitsAbove %f", flUnitsAbove);

		if(flUnitsAbove < 0.0)
			jumpBugNotPoss(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], Float:ArrayGetCell(g_aOrigins[id], pos - 1), iFramesShift - 1, flCorrOrigin, iFramesShift, false); // now we're too low (shouldn't be possible)
		else
			jumpBugFailed(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flCorrOrigin, iFramesShift, false); // finally found good position (shouldn't be possible cause teleport near the ground)

		g_iWaitForGoodFrame[id] = 0;
	}
*/
}

public jumpBugNotPoss(id, Float:flDistance, Float:flMyZ, Float:flRequiredZ, Float:flNearestZ1, iFramesShift1, Float:flNearestZ2, iFramesShift2, bool:bLater)
{
	new szMessage1[500], szMessage2[500], szMessage3[500];

	if(bLater)
		formatex(szMessage1, charsmax(szMessage1), "Impossible JumpBug^nDistance: %.2f units^nLower by: %.2f units", flDistance, flRequiredZ - flMyZ);
	else
		formatex(szMessage1, charsmax(szMessage1), "Impossible JumpBug^nDistance: %.2f units^nHigher by: %.2f units", flDistance, flMyZ - flRequiredZ);

	set_hudmessage(255, 0, 255, -1.0, 0.75, 0, 0.0, 3.0, 0.1, 0.1, 4);
	show_hudmessage(id, "%s", szMessage1);

	formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)", flMyZ, flRequiredZ);

	new szNearest1[50], szNearest2[50];

	if(bLater)
	{
		formatex(szNearest1, charsmax(szNearest1), "%d frame%s earlier", iFramesShift1, iFramesShift1 > 1 ? "s" : "");

		if(iFramesShift2 == 0)
			formatex(szNearest2, charsmax(szNearest2), "same frame");
		else
			formatex(szNearest2, charsmax(szNearest2), "%d frame%s earlier", iFramesShift2, iFramesShift2 > 1 ? "s" : "");

		formatex(szMessage3, charsmax(szMessage3), "Nearest Z1: %.6f (%s)^nNearest Z2: %.6f (%s)", flNearestZ1, szNearest1, flNearestZ2, szNearest2);
	}
	else
	{
		if(iFramesShift1 == 0)
			formatex(szNearest1, charsmax(szNearest1), "same frame");
		else
			formatex(szNearest1, charsmax(szNearest1), "%d frame%s later", iFramesShift1, iFramesShift1 > 1 ? "s" : "");

		if(iFramesShift2 == 999)
			formatex(szNearest2, charsmax(szNearest2), "ground");
		else
			formatex(szNearest2, charsmax(szNearest2), "%d frame%s later", iFramesShift2, iFramesShift2 > 1 ? "s" : "");

		formatex(szMessage3, charsmax(szMessage3), "Nearest Z1: %.6f (%s)^nNearest Z2: %.6f (%s)", flNearestZ1, szNearest1, flNearestZ2, szNearest2);
	}

	client_print(id, print_console, szMessage1);
	client_print(id, print_console, szMessage2);
	client_print(id, print_console, szMessage3);
}


public jumpBugFailed(id, Float:flDistance, Float:flMyZ, Float:flRequiredZ, Float:flPossibleZ, iFramesShift, bool:bLater)
{
	new szMessage1[500], szMessage2[500];

	if(bLater)
	{
		formatex(szMessage1, charsmax(szMessage1), "Failed JumpBug^nDistance: %.2f units^n%d frame%s later^nLower by: %.2f units", flDistance, iFramesShift, iFramesShift > 1 ? "s" : "", flRequiredZ - flMyZ);
		formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)^nPossible Z: %.6f (%d frame%s earlier)", flMyZ, flRequiredZ, flPossibleZ, iFramesShift, iFramesShift > 1 ? "s" : "");
	}
	else
	{
		formatex(szMessage1, charsmax(szMessage1), "Failed JumpBug^nDistance: %.2f units^n%d frame%s earlier^nHigher by: %.2f units", flDistance, iFramesShift, iFramesShift > 1 ? "s" : "", flMyZ - flRequiredZ);
		formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)^nPossible Z: %.6f (%d frame%s later)", flMyZ, flRequiredZ, flPossibleZ, iFramesShift, iFramesShift > 1 ? "s" : "");
	}

	set_hudmessage(255, 0, 0, -1.0, 0.75, 0, 0.0, 3.0, 0.1, 0.1, 4);
	show_hudmessage(id, "%s", szMessage1);

	client_print(id, print_console, szMessage1);
	client_print(id, print_console, szMessage2);
}

public jumpBugSuccessful(id, Float:flDistance, Float:flMyZ, Float:flRequiredZ)
{
	new szMessage1[500], szMessage2[500];

	formatex(szMessage1, charsmax(szMessage1), "JumpBug^nDistance: %.2f units^nLeft: %.2f units", flDistance, flMyZ - flRequiredZ);

	formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)", flMyZ, flRequiredZ);

	set_hudmessage(0, 255, 0, -1.0, 0.75, 0, 0.0, 3.0, 0.1, 0.1, 4);
	show_hudmessage(id, szMessage1);

	client_print(id, print_console, szMessage1);
	client_print(id, print_console, szMessage2);

	jumpBugSoundAndTop(id, flDistance);
}

public checkJumpBug(id)
{
	if(g_iJumpBug[id])
	{
		g_iJumpBug[id]--;
		if(g_iJumpBug[id])
			return;
	}

	if(g_flVelocity[id][2] <= 0.0)
		return;
	
	g_flLandingOrigin[id][0] = g_flJumped[id][0];
	g_flLandingOrigin[id][1] = g_flJumped[id][1];
	g_flLandingOrigin[id][2] = float(floatround(g_flJumped[id][2], floatround_floor));
	
	while(!fm_trace_hull(g_flLandingOrigin[id], HULL_HUMAN, id))
		g_flLandingOrigin[id][2] -= 1.0;
	
	g_flLandingOrigin[id][2] = g_flLandingOrigin[id][2] + 1.0;

	new Float:distance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];
	if(distance < get_pcvar_float(g_pJumpBugDistanceMin))
		return;

	new Float:flUnitsAbove = g_flJumped[id][2] - g_flLandingOrigin[id][2];

	jumpBugDone(id, distance, flUnitsAbove);
}

public jumpBugDone(id, Float:flDistance, Float:fUnitsLeft)
{
	new iDistance = floatround(flDistance, floatround_floor);
	
	if(g_JumpBug[id] > 0)
	{
		set_hudmessage(0, 255, 0, -1.0, 0.75, 0, 0.0, 2.0, 0.1, 0.1, 4);
		show_hudmessage(id, "JumpBug: %d units^nLeft: %.2f units^nWell done!", iDistance, fUnitsLeft);
		client_print(id, print_console, "JumpBug: %d units^nLeft: %.6f units^nWell done!", iDistance, fUnitsLeft);
	}
	
	jumpBugSoundAndTop(id, flDistance);
}

public jumpBugSoundAndTop(id, Float:flDistance)
{
	new iDistance = floatround(flDistance, floatround_floor);

	new name[33];
	get_user_name(id, name, charsmax(name));

	new players[32], num, plr;
	get_players(players, num);

	for(new i = 0; i < num; i++)
	{
		plr = players[i];

		if(g_bColorchat[plr])
		{
			if(flDistance >= get_pcvar_float(g_pJumpBugDistanceLeet))
			{
				client_print_f(plr, RED, "[KZ] %s has done %d units with JumpBug", name, iDistance);
				
				if(get_pcvar_num(g_pJumpBugSound) && g_bSound[plr])
				{
					if(id == plr)
						client_cmd(id, "speak misc/mod_wickedsick");
					else
						client_cmd(plr, "speak misc/mod_godlike");
				}
			}
			else if(flDistance >= get_pcvar_float(g_pJumpBugDistancePro))
			{
				client_print_f(plr, GREEN, "[KZ] %s has done %d units with JumpBug", name, iDistance);
				
				if(get_pcvar_num(g_pJumpBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/perfect");
			}
			else if(flDistance >= get_pcvar_float(g_pJumpBugDistanceGood))
			{
				client_print_f(plr, GREY, "[KZ] %s has done %d units with JumpBug", name, iDistance);
				
				if(get_pcvar_num(g_pJumpBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/impressive");
			}
		}
	}

	if(get_pcvar_num(g_pBugTop) && (is_user_localhost(id) || get_pcvar_num(g_pBugTopAlone) == 0))
		setJbTop(id, iDistance);
}

public checkEdgeBug(id)
{
	if(g_iEdgeBug[id])
		g_iEdgeBug[id] = 0;

	if(g_flVelocity[id][2] < 0.0 && g_flVelocity[id][2] >= -20.0)
	{		
		g_flCurrentAbsMin[id][0] += 16.0;
		g_flCurrentAbsMin[id][1] += 16.0;
		g_flCurrentAbsMin[id][2] += 0.96875;
		
		g_flLastAbsMin[id][2][0] += 16.0;
		g_flLastAbsMin[id][2][1] += 16.0;
		g_flLastAbsMin[id][2][2] += 0.96875;
		
		new Float:flEdgeOrigin[3];
		flEdgeOrigin[0] = (g_flLastAbsMin[id][2][0] + g_flCurrentAbsMin[id][0]) / 2;
		flEdgeOrigin[1] = (g_flLastAbsMin[id][2][1] + g_flCurrentAbsMin[id][1]) / 2;
		flEdgeOrigin[2] = g_flCurrentAbsMin[id][2];
				
		new Float:distance = g_flFallingFromPoint[id][2] - flEdgeOrigin[2];
		
		if(distance >= get_pcvar_float(g_pEdgeBugDistanceMin))
		{
			if(get_pcvar_num(g_pEdgeBugBeam))
			{
				fnDrawLine(id, flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], {0, 255, 0});
				fnDrawLine(id, flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], {0, 255, 0});
				fnDrawLine(id, flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], {0, 255, 0});
				fnDrawLine(id, flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], {0, 255, 0});
			}

			g_iEdgeBugCount[id]++;

			edgeBugDone(id, distance, g_iEdgeBugCount[id]);
		}
	}
}

public edgeBugDone(id, Float:flDistance, count)
{
	new name[33];
	get_user_name(id, name, charsmax(name));
	
	new iDistance = floatround(flDistance, floatround_floor);
	
	if(g_EdgeBug[id])
	{
		set_hudmessage(0, 255, 0, -1.0, 0.75, 0, 0.0, 2.0, 0.1, 0.1, 4);
		show_hudmessage(id, "Fall Distance: %d^nWell done!", iDistance);
		client_print(id, print_console, "Fall Distance: %d^nWell done!", iDistance);
	}

	new players[32], num, plr;
	get_players(players, num);

	for(new i = 0; i < num; i++)
	{
		plr = players[i];
		
		if(g_bColorchat[plr])
		{
			if(count > 3)
			{
				client_print_f(plr, BLUE, "[KZ] %s has done %d EdgeBugs in a row (%d units)", name, count, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(plr, "speak misc/holyshit");
			}
			else if(count == 3)
			{
				client_print_f(plr, BLUE, "[KZ] %s has done 3 EdgeBugs in a row (%d units)", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(plr, "speak misc/triple");
			}
			else if(count == 2)
			{
				client_print_f(plr, RED, "[KZ] %s has done 2 EdgeBugs in a row (%d units)", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(plr, "speak misc/double");
			}
			else if(flDistance >= get_pcvar_float(g_pEdgeBugDistanceLeet))
			{
				client_print_f(plr, RED, "[KZ] %s has done %d units with EdgeBug", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
				{
					if(id == plr)
						client_cmd(id, "speak misc/mod_wickedsick");
					else
						client_cmd(plr, "speak misc/mod_godlike");
				}
			}
			else if(flDistance >= get_pcvar_float(g_pEdgeBugDistancePro))
			{
				client_print_f(plr, GREEN, "[KZ] %s has done %d units with EdgeBug", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/perfect");
			}
			else if(flDistance >= get_pcvar_float(g_pEdgeBugDistanceGood))
			{
				client_print_f(plr, GREY, "[KZ] %s has done %d units with EdgeBug", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/impressive");
			}
		}
	}

	if(get_pcvar_num(g_pBugTop) && (is_user_localhost(id) || get_pcvar_num(g_pBugTopAlone) == 0))
		setEbTop(id, iDistance);
}

public cmdJbStats(id)
{
	if(g_JumpBug[id])
	{
		client_print_f(id, RED, "^x04[KZ]^x01 JumpBug Stats and Trainer have been^x03 disabled");
		g_JumpBug[id] = 0;
	}
	else
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 JumpBug Stats has been^x03 enabled^x01. To enable Trainer, say^x04 /jbtrainer");
		g_JumpBug[id] = 1;
	}
	
	return PLUGIN_HANDLED;
}

public cmdJbTrainer(id)
{
	if(g_JumpBug[id] == 2)
	{
		client_print_f(id, RED, "^x04[KZ]^x01 JumpBug Trainer has been^x03 disabled");
		g_JumpBug[id] = 1;
	}
	else if(g_JumpBug[id] == 1)
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 JumpBug Trainer has been^x03 enabled");
		g_JumpBug[id] = 2;
	}
	else
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 JumpBug Stats and Trainer have been^x03 enabled^x01");
		g_JumpBug[id] = 2;
	}
	
	return PLUGIN_HANDLED;
}

public cmdEbStats(id)
{
	if(g_EdgeBug[id])
	{
		client_print_f(id, RED, "^x04[KZ]^x01 EdgeBug Stats has been^x03 disabled");
		g_EdgeBug[id] = 0;
	}
	else
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 EdgeBug Stats has been^x03 enabled");
		g_EdgeBug[id] = 1;
	}
	
	return PLUGIN_HANDLED;
}

public cmdColorChat(id)
{
	if(g_bColorchat[id])
		client_print_f(id, RED, "^x04[KZ]^x01 Bugs Colorchat has been^x03 disabled");
	else
		client_print_f(id, BLUE, "^x04[KZ]^x01 Bugs Colorchat Stats has been^x03 enabled");

	g_bColorchat[id] = !g_bColorchat[id];
	
	return PLUGIN_HANDLED;
}

public cmdBugSound(id)
{	
	if(g_bSound[id])
		client_print_f(id, RED, "^x04[KZ]^x01 Bug Sounds have been^x03 disabled");
	else
		client_print_f(id, BLUE, "^x04[KZ]^x01 Bugs Sounds has been^x03 enabled");

	g_bSound[id] = !g_bSound[id];
	
	return PLUGIN_HANDLED;	
}

public clear(id)
{
	g_iPlayerFlags[id] = PF_None;
	g_iEdgeBugCount[id] = 0;
}

stock fnDrawLine(id, Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, g_iColor[3])
{
	message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, SVC_TEMPENTITY, _, id ? id : 0);
	write_byte(TE_BEAMPOINTS);
	write_coord(floatround(x1));
	write_coord(floatround(y1));
	write_coord(floatround(z1));
	write_coord(floatround(x2));
	write_coord(floatround(y2));
	write_coord(floatround(z2));
	write_short(g_iBeamSprite);
	write_byte(1);
	write_byte(1);
	write_byte(200);
	write_byte(5);
	write_byte(0);
	write_byte(g_iColor[0]);
	write_byte(g_iColor[1]);
	write_byte(g_iColor[2]);
	write_byte(255);
	write_byte(0);
	message_end();
}

stock bool:is_in_duck(entity)
{
	if(!pev_valid(entity))
		return false;
	
	static Float:absmin[3], Float:absmax[3];
	
	pev(entity, pev_absmin, absmin);
	pev(entity, pev_absmax, absmax);
	
	if(absmin[2] + 64.0 < absmax[2])
		return false;
	
	return true;
}

public readEbTop()
{
	if(file_exists(g_szEbFile)) 
	{
		new szData[512], handle = fopen(g_szEbFile, "rt"), szLocalhost[5], szDistance[22];	
		for(new i = 0; i < 15; i++)
		{
			fgets(handle, szData, charsmax(szData));
			trim(szData);
			if(szData[0])
			{
				parse(szData, szLocalhost, charsmax(szLocalhost), g_szEbTopPlayer[i], charsmax(g_szEbTopPlayer[]), szDistance, charsmax(szDistance), g_szEbTopDate[i], charsmax(g_szEbTopDate[]));
				g_iEbTopLocalhost[i] = str_to_num(szLocalhost);
				g_iEbTopDistance[i] = str_to_num(szDistance);
			}
			else
			{
				g_iEbTopLocalhost[i] = 0;
				g_szEbTopPlayer[i][0] = 0;
				g_iEbTopDistance[i] = 0;
				g_szEbTopDate[i][0] = 0;
			}
		}
		fclose(handle);
	}
}

public readJbTop()
{
	if(file_exists(g_szJbFile)) 
	{
		new szData[512], handle = fopen(g_szJbFile, "rt"), szLocalhost[5], szDistance[22];	
		for(new i = 0; i < 15; i++)
		{
			fgets(handle, szData, charsmax(szData));
			trim(szData);
			if(szData[0])
			{
				parse(szData, szLocalhost, charsmax(szLocalhost), g_szJbTopPlayer[i], charsmax(g_szJbTopPlayer[]), szDistance, charsmax(szDistance), g_szJbTopDate[i], charsmax(g_szJbTopDate[]));
				g_iJbTopLocalhost[i] = str_to_num(szLocalhost);
				g_iJbTopDistance[i] = str_to_num(szDistance);
			}
			else
			{
				g_iJbTopLocalhost[i] = 0;
				g_szJbTopPlayer[i][0] = 0;
				g_iJbTopDistance[i] = 0;
				g_szJbTopDate[i][0] = 0;
			}
		}
		fclose(handle);
	}
}

stock setEbTop(id, iDistance)
{
	new iPlaceInTop = 0;

	for(new i = 0; i < 15; i++)
	{
		if(g_iEbTopDistance[i] == 0 || iDistance > g_iEbTopDistance[i])
			break;
		iPlaceInTop++;
	}

	if(iPlaceInTop < 15)
	{
		new szData[512], handle = fopen(g_szEbFile, "wt");	
		for(new j = 14; j > iPlaceInTop; j--)
		{
			g_iEbTopLocalhost[j] = g_iEbTopLocalhost[j-1];
			format(g_szEbTopPlayer[j], charsmax(g_szEbTopPlayer[]), "%s", g_szEbTopPlayer[j-1]);
			g_iEbTopDistance[j] = g_iEbTopDistance[j-1];
			format(g_szEbTopDate[j], charsmax(g_szEbTopDate[]), "%s", g_szEbTopDate[j-1]);
		}

		new curr_time[22]; 
		get_time("%d/%m/%Y", curr_time, charsmax(curr_time)); 
		
		new name[22];
		get_user_name(id, name, charsmax(name));

		if(get_pcvar_num(g_pBugTopShowPlace))
			client_print_f(id, BLUE, "^x04[KZ]^x01 %s's jump is on^x03 %d place^x01 in EdgeBug Top!", name, iPlaceInTop + 1);
		
		replace_all(name, charsmax(name), "<", ""); 
		replace_all(name, charsmax(name), ">", "");
		replace_all(name, charsmax(name), "^"", ""); //"
		replace_all(name, charsmax(name), " ", "_");
		replace_all(name, charsmax(name), ";", ""); 		

		g_iEbTopLocalhost[iPlaceInTop] = is_user_localhost(id);
		formatex(g_szEbTopPlayer[iPlaceInTop], charsmax(g_szEbTopPlayer[]), "%s", name);
		g_iEbTopDistance[iPlaceInTop] = iDistance;
		formatex(g_szEbTopDate[iPlaceInTop], charsmax(g_szEbTopDate[]), "%s", curr_time);

		for(new i = 0; (i < 15 && g_iEbTopDistance[i] > 0); i++)
		{
			formatex(szData, charsmax(szData), "%d %s %d %s^n", g_iEbTopLocalhost[i], g_szEbTopPlayer[i], g_iEbTopDistance[i], g_szEbTopDate[i]);
			fputs(handle, szData);
		}

		fclose(handle);
	}
}

stock setJbTop(id, iDistance)
{
	new iPlaceInTop = 0;

	for(new i = 0; i < 15; i++)
	{
		if(g_iJbTopDistance[i] == 0 || iDistance > g_iJbTopDistance[i])
			break;
		iPlaceInTop++;
	}

	if(iPlaceInTop < 15)
	{
		new szData[512], handle = fopen(g_szJbFile, "wt");	
		for(new j = 14; j > iPlaceInTop; j--)
		{
			g_iJbTopLocalhost[j] = g_iJbTopLocalhost[j-1];
			format(g_szJbTopPlayer[j], charsmax(g_szJbTopPlayer[]), "%s", g_szJbTopPlayer[j-1]);
			g_iJbTopDistance[j] = g_iJbTopDistance[j-1];
			format(g_szJbTopDate[j], charsmax(g_szJbTopDate[]), "%s", g_szJbTopDate[j-1]);
		}

		new curr_time[22]; 
		get_time("%d/%m/%Y", curr_time, charsmax(curr_time)); 
		
		new name[22];
		get_user_name(id, name, charsmax(name));

		if(get_pcvar_num(g_pBugTopShowPlace))
			client_print_f(id, BLUE, "^x04[KZ]^x01 %s's jump is on^x03 %d place^x01 in JumpBug Top!", name, iPlaceInTop + 1);
		
		replace_all(name, charsmax(name), "<", ""); 
		replace_all(name, charsmax(name), ">", "");
		replace_all(name, charsmax(name), "^"", ""); //"
		replace_all(name, charsmax(name), " ", "_");
		replace_all(name, charsmax(name), ";", ""); 		

		g_iJbTopLocalhost[iPlaceInTop] = is_user_localhost(id);
		formatex(g_szJbTopPlayer[iPlaceInTop], charsmax(g_szJbTopPlayer[]), "%s", name);
		g_iJbTopDistance[iPlaceInTop] = iDistance;
		formatex(g_szJbTopDate[iPlaceInTop], charsmax(g_szJbTopDate[]), "%s", curr_time);

		for(new i = 0; (i < 15 && g_iJbTopDistance[i] > 0); i++)
		{
			formatex(szData, charsmax(szData), "%d %s %d %s^n", g_iJbTopLocalhost[i], g_szJbTopPlayer[i], g_iJbTopDistance[i], g_szJbTopDate[i]);
			fputs(handle, szData);
		}

		fclose(handle);
	}
}

public cmdShowEbTop(id)
{
	if(get_pcvar_num(g_pBugTop) == 0)
	{
		client_print_f(id, RED, "^x03[KZ]^x01 Bug Tops are disabled");
		return PLUGIN_HANDLED;
	}

	new buffer[15*122], szPlayerName[22];

	new len = formatex(buffer, charsmax(buffer), "<body bgcolor=#ffffff><table width=100%% cellpadding=2 cellspacing=0 border=0>");
	len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center bgcolor=#008bdb><th width=5%%> # <th width=35%%> Name <th width=30%%> Distance <th width=30%%> Date ");

	for(new i = 0; (i < 15 && g_iEbTopDistance[i] > 0); i++)
	{
		if(g_iEbTopLocalhost[i])
			formatex(szPlayerName, charsmax(szPlayerName), "<b>%s</b>", g_szEbTopPlayer[i]);
		else
			formatex(szPlayerName, charsmax(szPlayerName), "%s", g_szEbTopPlayer[i]);
		
		len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center%s><td> %d <td> %s <td> %d units <td> %s", ((i%2)==0) ? "" : " bgcolor=#e2eefa", i+1, szPlayerName, g_iEbTopDistance[i], g_szEbTopDate[i]);
	}

	show_motd(id, buffer, "EdgeBug Top");
	return PLUGIN_HANDLED;
}

public cmdShowJbTop(id)
{
	if(get_pcvar_num(g_pBugTop) == 0)
	{
		client_print_f(id, RED, "^x03[KZ]^x01 Bug Tops are disabled");
		return PLUGIN_HANDLED;
	}

	new buffer[15*122], szPlayerName[22];

	new len = formatex(buffer, charsmax(buffer), "<body bgcolor=#ffffff><table width=100%% cellpadding=2 cellspacing=0 border=0>");
	len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center bgcolor=#008bdb><th width=5%%> # <th width=35%%> Name <th width=30%%> Distance <th width=30%%> Date ");

	for(new i = 0; (i < 15 && g_iJbTopDistance[i] > 0); i++)
	{
		if(g_iJbTopLocalhost[i])
			formatex(szPlayerName, charsmax(szPlayerName), "<b>%s</b>", g_szJbTopPlayer[i]);
		else
			formatex(szPlayerName, charsmax(szPlayerName), "%s", g_szJbTopPlayer[i]);
		
		len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center%s><td> %d <td> %s <td> %d units <td> %s", ((i%2)==0) ? "" : " bgcolor=#e2eefa", i+1, szPlayerName, g_iJbTopDistance[i], g_szJbTopDate[i]);
	}

	show_motd(id, buffer, "JumpBug Top");
	return PLUGIN_HANDLED;
}

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
1DelTA1
Mesajlar: 69
Kayıt: Pzt Haz 26, 2017 7:45 pm
Konum: Antalya
İletişim:

Derleme hatası

Mesaj gönderen 1DelTA1 »

Colditz yazdı: Cum Ara 04, 2020 10:17 pm Buyur

Kod: Tümünü seç

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <kz_stocks>

#pragma semicolon 1

new const PLUGIN[]= "EdgeBug & JumpBug Stats";
new const VERSION[] = "1.5";
new const AUTHOR[] = "newbie & Kpoluk";

// Player Flags
#define PF_None				0
#define PF_Falling			(1 << 0)
#define PF_HasDucked		(1 << 1)
#define PF_DuckReleased		(1 << 2)
#define PF_Jumped			(1 << 3)

enum ColorType
{
	NORMAL = 1, // clients scr_concolor cvar color
	GREEN, // Green Color
	TEAM_COLOR, // Red, grey, blue
	GREY, // grey
	RED, // Red
	BLUE, // Blue
};

new TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
};

new g_iPlayerFlags[33];
new g_iEdgeBugCount[33];

new g_iBeamSprite;

// player settings
new g_EdgeBug[33];
new g_JumpBug[33];
new bool:g_bColorchat[33];
new bool:g_bSound[33];

// eb cvars
new g_pEdgeBugEnabled;
new g_pEdgeBugSound;
new g_pEdgeBugDistanceMin;
new g_pEdgeBugDistanceGood;
new g_pEdgeBugDistancePro;
new g_pEdgeBugDistanceLeet;
new g_pEdgeBugBeam;

// jb cvars
new g_pJumpBugEnabled;
new g_pJumpBugSound;
new g_pJumpBugDistanceMin;
new g_pJumpBugDistanceGood;
new g_pJumpBugDistancePro;
new g_pJumpBugDistanceLeet;

// top cvars
new g_pBugTop;
new g_pBugTopAlone;
new g_pBugTopShowPlace;

new g_iEdgeBug[33];
new g_iJumpBug[33];

new Float:g_flVelocity[33][3];
new Float:g_flFallingFromPoint[33][3];
new Float:g_flJumped[33][3];
new Float:g_flLandingOrigin[33][3];
new Float:g_flCurrentAbsMin[33][3];
new Float:g_flLastAbsMin[33][3][3];

new Float:g_flPrevOrigin[33][3];
new Float:g_flPrevVelocity[33][3];
new Float:g_flEstimDistance[33];

new g_szMapName[34];

new g_iEbTopLocalhost[15];
new g_szEbFile[128];
new g_szEbTopPlayer[15][22];
new g_iEbTopDistance[15];
new g_szEbTopDate[15][22];

new g_iJbTopLocalhost[15];
new g_szJbFile[128];
new g_szJbTopPlayer[15][22];
new g_iJbTopDistance[15];
new g_szJbTopDate[15][22];

new Array:g_aOrigins[33];
new g_iWaitForGoodFrame[33];

#define EPSILON 0.03125

new Float:g_flFrameTime[33];


public plugin_init()
{
	// registering plugin
	register_plugin(PLUGIN, VERSION, AUTHOR);

	// registering cvars
	g_pEdgeBugEnabled		= register_cvar("kz_eb_enable", "1");
	g_pEdgeBugSound			= register_cvar("kz_eb_sound", "1");
	g_pEdgeBugDistanceMin	= register_cvar("kz_eb_min", "150");
	g_pEdgeBugDistanceGood	= register_cvar("kz_eb_good", "1500");
	g_pEdgeBugDistancePro	= register_cvar("kz_eb_pro", "3500");
	g_pEdgeBugDistanceLeet	= register_cvar("kz_eb_leet", "6000");

	g_pEdgeBugBeam			= register_cvar("kz_eb_beam", "1");

	g_pJumpBugEnabled		= register_cvar("kz_jb_enable", "1");
	g_pJumpBugSound			= register_cvar("kz_jb_sound", "1");
	g_pJumpBugDistanceMin	= register_cvar("kz_jb_min", "150");
	g_pJumpBugDistanceGood	= register_cvar("kz_jb_good", "1500");
	g_pJumpBugDistancePro	= register_cvar("kz_jb_pro", "3500");
	g_pJumpBugDistanceLeet	= register_cvar("kz_jb_leet", "6000");
	
	g_pBugTop				= register_cvar("kz_bug_top", "1");
	g_pBugTopAlone			= register_cvar("kz_bug_topalone", "0");
	g_pBugTopShowPlace		= register_cvar("kz_bug_showplace", "1");

	// tops
	new szDir[128];
	get_localinfo("amxx_datadir", szDir, charsmax(szDir));
	format(szDir, charsmax(szDir),"%s/bugtop", szDir);
	if(!dir_exists(szDir))
		mkdir(szDir);

	get_mapname(g_szMapName, charsmax(g_szMapName));

	if(get_pcvar_num(g_pBugTop) > 1)
	{
		format(g_szEbFile, charsmax(g_szEbFile),"%s/edgebug", szDir);
		if(!dir_exists(g_szEbFile))
			mkdir(g_szEbFile);
		format(g_szJbFile, charsmax(g_szJbFile),"%s/jumpbug", szDir);
		if(!dir_exists(g_szJbFile))
			mkdir(g_szJbFile);

		format(g_szEbFile, charsmax(g_szEbFile), "%s/%s.txt", g_szEbFile, g_szMapName);
		format(g_szJbFile, charsmax(g_szJbFile), "%s/%s.txt", g_szJbFile, g_szMapName);
	}
	else
	{
		format(g_szEbFile, charsmax(g_szEbFile), "%s/ebtop.txt", szDir);
		format(g_szJbFile, charsmax(g_szJbFile), "%s/jbtop.txt", szDir);
	}

	readEbTop();
	readJbTop();

	// registering forwards
	RegisterHam(Ham_Touch, "player", "hamPlayerTouch");
	RegisterHam(Ham_Player_PreThink, "player", "hamPlayerPreThink");
	RegisterHam(Ham_Touch, "trigger_teleport", "hamTouch");
	
	// registering commands
	register_saycmd("ebstats", "cmdEbStats");
	register_saycmd("jbstats", "cmdJbStats");
	register_saycmd("bugcolorchat",	"cmdColorChat");
	register_saycmd("colorchatbug",	"cmdColorChat");
	register_saycmd("bugsound", "cmdBugSound");
	register_saycmd("soundbug", "cmdBugSound");

	register_saycmd("jbtrainer", "cmdJbTrainer");

	register_saycmd("ebtop", "cmdShowEbTop");
	register_saycmd("ebtop10", "cmdShowEbTop");
	register_saycmd("ebtop15", "cmdShowEbTop");
	register_saycmd("eb10", "cmdShowEbTop");
	register_saycmd("eb15", "cmdShowEbTop");

	register_saycmd("jbtop", "cmdShowJbTop");
	register_saycmd("jbtop10", "cmdShowJbTop");
	register_saycmd("jbtop15", "cmdShowJbTop");
	register_saycmd("jb10", "cmdShowJbTop");
	register_saycmd("jb15", "cmdShowJbTop");

	for(new id = 0; id < 33; id++)
	{
		g_aOrigins[id] = ArrayCreate(1);
		g_iWaitForGoodFrame[id] = 0;

		g_flFrameTime[id] = 0.01;
	}

	register_forward(FM_CmdStart, "fwCmdStart");
}

public fwCmdStart(id, uc_handle)
{
	if(is_user_bot(id))
		return;

	g_flFrameTime[id] = get_uc(uc_handle, UC_Msec) / 1000.0;
}

public plugin_end()
{
	for(new id = 0; id < 33; id++)
		ArrayDestroy(g_aOrigins[id]);
}

public plugin_precache()
{
	g_iBeamSprite = precache_model("sprites/zbeam4.spr");
	
	precache_sound("misc/mod_godlike.wav");
	precache_sound("misc/mod_wickedsick.wav");
	precache_sound("misc/perfect.wav");
	precache_sound("misc/impressive.wav");
	precache_sound("misc/double.wav");
	precache_sound("misc/triple.wav");
	precache_sound("misc/holyshit.wav");
}

public plugin_cfg()
{
	new szConfigsDir[128];
	get_configsdir(szConfigsDir, charsmax(szConfigsDir));
	format(szConfigsDir, charsmax(szConfigsDir), "%s/kz_bug_stats.cfg", szConfigsDir);
	
	if(file_exists(szConfigsDir))
	{
		server_cmd("exec %s", szConfigsDir);
		server_exec();
	}
}

public client_connect(id)
{
	g_iPlayerFlags[id] = PF_None;
	g_iEdgeBugCount[id] = 0;

	g_EdgeBug[id] = get_pcvar_num(g_pEdgeBugEnabled);
	g_JumpBug[id] = get_pcvar_num(g_pJumpBugEnabled);
	g_bColorchat[id] = true;
	g_bSound[id] = true;

	g_iEdgeBug[id] = 0;
	g_iJumpBug[id] = 0;

	copy_vector(VEC_NULL, g_flVelocity[id]);

	copy_vector(VEC_NULL, g_flFallingFromPoint[id]);
	copy_vector(VEC_NULL, g_flJumped[id]);
	copy_vector(VEC_NULL, g_flLandingOrigin[id]);

	copy_vector(VEC_NULL, g_flPrevOrigin[id]);
	copy_vector(VEC_NULL, g_flPrevVelocity[id]);
	g_flEstimDistance[id] = 0.0;
}

public fwResetBug(id) // forward
{
	clear(id);
}

public hamTouch(ent, id)
{
	if(is_user_bot(id))
		return HAM_IGNORED;

	if(!is_user_alive(id))
		return HAM_IGNORED;

	clear(id);

	return HAM_IGNORED;
}

public hamPlayerTouch(id, ent)
{
	if(is_user_bot(id))
		return HAM_IGNORED;

	new Float:flVelocity[3];
	pev(id, pev_velocity, flVelocity);
	
	if(flVelocity[2] > 0.0)
		return HAM_IGNORED;
	
	if(!(g_iPlayerFlags[id] & PF_Falling) || pev(id, pev_flags) & FL_ONGROUND)
		return HAM_IGNORED;
	
	pev(id, pev_absmin, g_flCurrentAbsMin[id]);
	if(floatround(g_flCurrentAbsMin[id][2], floatround_floor) != g_flCurrentAbsMin[id][2] - EPSILON)
		return HAM_IGNORED;

	if(is_player_sliding(id))
		return HAM_IGNORED;
	
	g_iEdgeBug[id] = 1;
	
	return HAM_IGNORED;
}

public hamPlayerPreThink(id)
{
	if(is_user_bot(id))
		return HAM_IGNORED;

	if(!is_user_alive(id))
	{
		ArrayClear(g_aOrigins[id]);
		return HAM_IGNORED;
	}
	
	// incorrect cvars
	new Float:fGravity;
	pev(id, pev_gravity, fGravity);
	
	if(fGravity != 1.0 || get_cvar_num("sv_gravity") != 800 || get_cvar_num("sv_maxvelocity") != 2000)
	{
		clear(id);
		return HAM_IGNORED;
	}


	copy_vector(g_flLastAbsMin[id][1], g_flLastAbsMin[id][2]);
	copy_vector(g_flLastAbsMin[id][0], g_flLastAbsMin[id][1]);
	pev(id, pev_absmin, g_flLastAbsMin[id][0]);


	new flags = pev(id, pev_flags);
	
	// water
	if(flags & FL_INWATER && pev(id, pev_waterlevel) >= 2)
	{
		ArrayClear(g_aOrigins[id]);
		clear(id);
		return HAM_IGNORED;
	}
	
	// ladder
	if(pev(id, pev_movetype) == MOVETYPE_FLY)
	{
		ArrayClear(g_aOrigins[id]);
		clear(id);
		return HAM_IGNORED;
	}

	// detect teleport
	pev(id, pev_velocity, g_flVelocity[id]);

	new Float:flOrigin[3];
	pev(id, pev_origin, flOrigin);

	if(!is_zero_vec(g_flPrevOrigin[id]) && is_zero_vec(g_flVelocity[id]))
	{
		new Float:flPassedDistance = floatsqroot((flOrigin[0] - g_flPrevOrigin[id][0]) * (flOrigin[0] - g_flPrevOrigin[id][0]) + 
									(flOrigin[1] - g_flPrevOrigin[id][1]) * (flOrigin[1] - g_flPrevOrigin[id][1]) + 
									(flOrigin[2] - g_flPrevOrigin[id][2]) * (flOrigin[2] - g_flPrevOrigin[id][2]));

		if(flPassedDistance > 19.0)
			clear(id);
	}	

	// save new height
	if(ArraySize(g_aOrigins[id]) >= 40)
		ArrayDeleteItem(g_aOrigins[id], 0);
	ArrayPushCell(g_aOrigins[id], flOrigin[2]);
	
	// check for bugs
	if(g_EdgeBug[id] || g_bColorchat[id])
	{
		if(g_iEdgeBug[id])
			checkEdgeBug(id);
	}

	if(g_JumpBug[id] || g_bColorchat[id])
	{
		if(g_JumpBug[id] > 1)
		{
			if(g_iWaitForGoodFrame[id] > 0)
				findGoodFrame(id); // waiting for good frame, no jb check
			else
				traceJumpBug(id);
		}
		else
		{
			if(g_iJumpBug[id])
				checkJumpBug(id);
			else
				traceJumpBug(id);
		}
	}
	
	if(flags & FL_ONGROUND && (g_iPlayerFlags[id] & PF_Falling))
		clear(id);
	
	new buttons = pev(id, pev_button);
	new oldbuttons = pev(id, pev_oldbuttons);
	
	// falling start...
	if(!(flags & FL_ONGROUND) && !(flags & FL_INWATER) && !(g_iPlayerFlags[id] & PF_Falling))
	{
		g_iPlayerFlags[id] |= PF_Falling;
		pev(id, pev_origin, g_flFallingFromPoint[id]);
	}
	
	// save duck's release state
	if((g_iPlayerFlags[id] & PF_Falling) && oldbuttons & IN_DUCK && !(buttons & IN_DUCK))
	{
		g_iPlayerFlags[id] |= PF_DuckReleased;
	}

	copy_vector(flOrigin, g_flPrevOrigin[id]);
	copy_vector(g_flVelocity[id], g_flPrevVelocity[id]);
	
	return HAM_IGNORED;
}

public traceJumpBug(id)
{	
	if(pev(id, pev_flags) & FL_ONGROUND)
		return;
	
	if((pev(id, pev_oldbuttons) & IN_JUMP) || !(pev(id, pev_button) & IN_JUMP))
		return;
	
	if(!(pev(id, pev_oldbuttons) & IN_DUCK) || (pev(id, pev_button) & IN_DUCK))
		return;
	
	if(g_flVelocity[id][2] >= 0.0)
		return;

	pev(id, pev_origin, g_flJumped[id]);

	if(g_JumpBug[id] < 2)
		g_iJumpBug[id] = 2;
	else
		checkJumpBugDetailed(id);
}

public checkJumpBugDetailed(id)
{
	g_flLandingOrigin[id][0] = g_flJumped[id][0];
	g_flLandingOrigin[id][1] = g_flJumped[id][1];
	g_flLandingOrigin[id][2] = float(floatround(g_flJumped[id][2], floatround_floor));
	
	if(fm_trace_hull(g_flLandingOrigin[id], HULL_HUMAN, id)) // instant stuck -> too low
	{
		new iCounter = 18; // just to be safe
		while(!fm_trace_hull(g_flLandingOrigin[id], HULL_HEAD, id) && iCounter > 0) // trace in duck
		{
			g_flLandingOrigin[id][2] -= 1.0;
			iCounter--;
		}
		
		if(iCounter <= 0) // impossible
			return;

		g_flLandingOrigin[id][2] = g_flLandingOrigin[id][2] + 18.0 + 1.0; // 36 units above the ground

		new Float:flDistance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];
		if(flDistance < get_pcvar_float(g_pJumpBugDistanceMin))
			return;

		new Float:flUnitsUnder = g_flJumped[id][2] - 36.0 - g_flLandingOrigin[id][2];

		if(flUnitsUnder >= 0.0)
			return; // something went wrong

		if(ArraySize(g_aOrigins[id]) < 40)
			return; // not enough origins

		new iFramesShift = 1;

		new pos = 38; // last height
		new Float:flCorrOrigin = Float:ArrayGetCell(g_aOrigins[id], pos);

		flUnitsUnder = flCorrOrigin - g_flLandingOrigin[id][2];

		while(flUnitsUnder < 0.0) // still too late, let's take one frame before
		{
			pos--;
			if(pos < 1)
				return; // shouldn't be
			flCorrOrigin = Float:ArrayGetCell(g_aOrigins[id], pos);
			flUnitsUnder = flCorrOrigin - g_flLandingOrigin[id][2];

			iFramesShift++;
		}

		if(flUnitsUnder > 2.0)
			jumpBugNotPoss(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flCorrOrigin, iFramesShift, Float:ArrayGetCell(g_aOrigins[id], pos + 1), iFramesShift - 1, true); // oh no now we're too low
		else
			jumpBugFailed(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flCorrOrigin, iFramesShift, true); // finally found good position
	}
	else
	{
		new iCounter = floatround(-g_flVelocity[id][2] * g_flFrameTime[id] * 7.0, floatround_floor); // about 7 frames higher

		while(!fm_trace_hull(g_flLandingOrigin[id], HULL_HUMAN, id) && iCounter > 0) // trace no duck
		{
			g_flLandingOrigin[id][2] -= 1.0;
			iCounter--;
		}
		
		if(iCounter <= 0) // too high
			return;

		g_flLandingOrigin[id][2] = g_flLandingOrigin[id][2] + 1.0; // 36 units above the ground

		new Float:flDistance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];
		if(flDistance < get_pcvar_float(g_pJumpBugDistanceMin))
			return;

		new Float:flUnitsAbove = g_flJumped[id][2] - g_flLandingOrigin[id][2];

		if(flUnitsAbove <= 0.0)
			return; // something went wrong

		if(flUnitsAbove > 2.0)
			g_iWaitForGoodFrame[id] = 40; // wait for it
		else
			jumpBugSuccessful(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2]);
	}		
}

public findGoodFrame(id)
{
	g_iWaitForGoodFrame[id]--;
	if(g_iWaitForGoodFrame[id] == 0)
		return; // waiting too long

	if(ArraySize(g_aOrigins[id]) < 40)
		return; // not enough origins

	new Float:flDistance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];

	new iFramesShift = 40 - g_iWaitForGoodFrame[id];

	new pos = 39; // last height
	new Float:flCorrOrigin = Float:ArrayGetCell(g_aOrigins[id], pos);
	
	if(pev(id, pev_flags) & FL_ONGROUND) // ground
	{
		g_iWaitForGoodFrame[id] = 0;

		new Float:flPrevOrigin = Float:ArrayGetCell(g_aOrigins[id], pos - 1);

		// prediction (prethink called at the moment when Velocity[2] is + (400 * frametime) from what it should be for calculating new origin)
		new Float:flPredictedOrigin = flPrevOrigin + (g_flPrevVelocity[id][2] - 400.0 * g_flFrameTime[id]) * g_flFrameTime[id];

		if(flPredictedOrigin < flCorrOrigin)
			jumpBugNotPoss(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flPrevOrigin, iFramesShift - 1, flCorrOrigin, 999, false); // 999 ground (falling too fast, skipping 2 units near the ground)
		else
			jumpBugFailed(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flPredictedOrigin, iFramesShift, false);

//		return;
	}

/*
	new Float:flUnitsAbove = flCorrOrigin - g_flLandingOrigin[id][2];

	if(flUnitsAbove < 2.0)
	{
		client_print(id, print_chat, "WRONG flUnitsAbove %f", flUnitsAbove);

		if(flUnitsAbove < 0.0)
			jumpBugNotPoss(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], Float:ArrayGetCell(g_aOrigins[id], pos - 1), iFramesShift - 1, flCorrOrigin, iFramesShift, false); // now we're too low (shouldn't be possible)
		else
			jumpBugFailed(id, flDistance, g_flJumped[id][2], g_flLandingOrigin[id][2], flCorrOrigin, iFramesShift, false); // finally found good position (shouldn't be possible cause teleport near the ground)

		g_iWaitForGoodFrame[id] = 0;
	}
*/
}

public jumpBugNotPoss(id, Float:flDistance, Float:flMyZ, Float:flRequiredZ, Float:flNearestZ1, iFramesShift1, Float:flNearestZ2, iFramesShift2, bool:bLater)
{
	new szMessage1[500], szMessage2[500], szMessage3[500];

	if(bLater)
		formatex(szMessage1, charsmax(szMessage1), "Impossible JumpBug^nDistance: %.2f units^nLower by: %.2f units", flDistance, flRequiredZ - flMyZ);
	else
		formatex(szMessage1, charsmax(szMessage1), "Impossible JumpBug^nDistance: %.2f units^nHigher by: %.2f units", flDistance, flMyZ - flRequiredZ);

	set_hudmessage(255, 0, 255, -1.0, 0.75, 0, 0.0, 3.0, 0.1, 0.1, 4);
	show_hudmessage(id, "%s", szMessage1);

	formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)", flMyZ, flRequiredZ);

	new szNearest1[50], szNearest2[50];

	if(bLater)
	{
		formatex(szNearest1, charsmax(szNearest1), "%d frame%s earlier", iFramesShift1, iFramesShift1 > 1 ? "s" : "");

		if(iFramesShift2 == 0)
			formatex(szNearest2, charsmax(szNearest2), "same frame");
		else
			formatex(szNearest2, charsmax(szNearest2), "%d frame%s earlier", iFramesShift2, iFramesShift2 > 1 ? "s" : "");

		formatex(szMessage3, charsmax(szMessage3), "Nearest Z1: %.6f (%s)^nNearest Z2: %.6f (%s)", flNearestZ1, szNearest1, flNearestZ2, szNearest2);
	}
	else
	{
		if(iFramesShift1 == 0)
			formatex(szNearest1, charsmax(szNearest1), "same frame");
		else
			formatex(szNearest1, charsmax(szNearest1), "%d frame%s later", iFramesShift1, iFramesShift1 > 1 ? "s" : "");

		if(iFramesShift2 == 999)
			formatex(szNearest2, charsmax(szNearest2), "ground");
		else
			formatex(szNearest2, charsmax(szNearest2), "%d frame%s later", iFramesShift2, iFramesShift2 > 1 ? "s" : "");

		formatex(szMessage3, charsmax(szMessage3), "Nearest Z1: %.6f (%s)^nNearest Z2: %.6f (%s)", flNearestZ1, szNearest1, flNearestZ2, szNearest2);
	}

	client_print(id, print_console, szMessage1);
	client_print(id, print_console, szMessage2);
	client_print(id, print_console, szMessage3);
}


public jumpBugFailed(id, Float:flDistance, Float:flMyZ, Float:flRequiredZ, Float:flPossibleZ, iFramesShift, bool:bLater)
{
	new szMessage1[500], szMessage2[500];

	if(bLater)
	{
		formatex(szMessage1, charsmax(szMessage1), "Failed JumpBug^nDistance: %.2f units^n%d frame%s later^nLower by: %.2f units", flDistance, iFramesShift, iFramesShift > 1 ? "s" : "", flRequiredZ - flMyZ);
		formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)^nPossible Z: %.6f (%d frame%s earlier)", flMyZ, flRequiredZ, flPossibleZ, iFramesShift, iFramesShift > 1 ? "s" : "");
	}
	else
	{
		formatex(szMessage1, charsmax(szMessage1), "Failed JumpBug^nDistance: %.2f units^n%d frame%s earlier^nHigher by: %.2f units", flDistance, iFramesShift, iFramesShift > 1 ? "s" : "", flMyZ - flRequiredZ);
		formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)^nPossible Z: %.6f (%d frame%s later)", flMyZ, flRequiredZ, flPossibleZ, iFramesShift, iFramesShift > 1 ? "s" : "");
	}

	set_hudmessage(255, 0, 0, -1.0, 0.75, 0, 0.0, 3.0, 0.1, 0.1, 4);
	show_hudmessage(id, "%s", szMessage1);

	client_print(id, print_console, szMessage1);
	client_print(id, print_console, szMessage2);
}

public jumpBugSuccessful(id, Float:flDistance, Float:flMyZ, Float:flRequiredZ)
{
	new szMessage1[500], szMessage2[500];

	formatex(szMessage1, charsmax(szMessage1), "JumpBug^nDistance: %.2f units^nLeft: %.2f units", flDistance, flMyZ - flRequiredZ);

	formatex(szMessage2, charsmax(szMessage2), "Your Z: %.6f^nRequired Z: %.6f (+ 2.0)", flMyZ, flRequiredZ);

	set_hudmessage(0, 255, 0, -1.0, 0.75, 0, 0.0, 3.0, 0.1, 0.1, 4);
	show_hudmessage(id, szMessage1);

	client_print(id, print_console, szMessage1);
	client_print(id, print_console, szMessage2);

	jumpBugSoundAndTop(id, flDistance);
}

public checkJumpBug(id)
{
	if(g_iJumpBug[id])
	{
		g_iJumpBug[id]--;
		if(g_iJumpBug[id])
			return;
	}

	if(g_flVelocity[id][2] <= 0.0)
		return;
	
	g_flLandingOrigin[id][0] = g_flJumped[id][0];
	g_flLandingOrigin[id][1] = g_flJumped[id][1];
	g_flLandingOrigin[id][2] = float(floatround(g_flJumped[id][2], floatround_floor));
	
	while(!fm_trace_hull(g_flLandingOrigin[id], HULL_HUMAN, id))
		g_flLandingOrigin[id][2] -= 1.0;
	
	g_flLandingOrigin[id][2] = g_flLandingOrigin[id][2] + 1.0;

	new Float:distance = g_flFallingFromPoint[id][2] - g_flLandingOrigin[id][2];
	if(distance < get_pcvar_float(g_pJumpBugDistanceMin))
		return;

	new Float:flUnitsAbove = g_flJumped[id][2] - g_flLandingOrigin[id][2];

	jumpBugDone(id, distance, flUnitsAbove);
}

public jumpBugDone(id, Float:flDistance, Float:fUnitsLeft)
{
	new iDistance = floatround(flDistance, floatround_floor);
	
	if(g_JumpBug[id] > 0)
	{
		set_hudmessage(0, 255, 0, -1.0, 0.75, 0, 0.0, 2.0, 0.1, 0.1, 4);
		show_hudmessage(id, "JumpBug: %d units^nLeft: %.2f units^nWell done!", iDistance, fUnitsLeft);
		client_print(id, print_console, "JumpBug: %d units^nLeft: %.6f units^nWell done!", iDistance, fUnitsLeft);
	}
	
	jumpBugSoundAndTop(id, flDistance);
}

public jumpBugSoundAndTop(id, Float:flDistance)
{
	new iDistance = floatround(flDistance, floatround_floor);

	new name[33];
	get_user_name(id, name, charsmax(name));

	new players[32], num, plr;
	get_players(players, num);

	for(new i = 0; i < num; i++)
	{
		plr = players[i];

		if(g_bColorchat[plr])
		{
			if(flDistance >= get_pcvar_float(g_pJumpBugDistanceLeet))
			{
				client_print_f(plr, RED, "[KZ] %s has done %d units with JumpBug", name, iDistance);
				
				if(get_pcvar_num(g_pJumpBugSound) && g_bSound[plr])
				{
					if(id == plr)
						client_cmd(id, "speak misc/mod_wickedsick");
					else
						client_cmd(plr, "speak misc/mod_godlike");
				}
			}
			else if(flDistance >= get_pcvar_float(g_pJumpBugDistancePro))
			{
				client_print_f(plr, GREEN, "[KZ] %s has done %d units with JumpBug", name, iDistance);
				
				if(get_pcvar_num(g_pJumpBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/perfect");
			}
			else if(flDistance >= get_pcvar_float(g_pJumpBugDistanceGood))
			{
				client_print_f(plr, GREY, "[KZ] %s has done %d units with JumpBug", name, iDistance);
				
				if(get_pcvar_num(g_pJumpBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/impressive");
			}
		}
	}

	if(get_pcvar_num(g_pBugTop) && (is_user_localhost(id) || get_pcvar_num(g_pBugTopAlone) == 0))
		setJbTop(id, iDistance);
}

public checkEdgeBug(id)
{
	if(g_iEdgeBug[id])
		g_iEdgeBug[id] = 0;

	if(g_flVelocity[id][2] < 0.0 && g_flVelocity[id][2] >= -20.0)
	{		
		g_flCurrentAbsMin[id][0] += 16.0;
		g_flCurrentAbsMin[id][1] += 16.0;
		g_flCurrentAbsMin[id][2] += 0.96875;
		
		g_flLastAbsMin[id][2][0] += 16.0;
		g_flLastAbsMin[id][2][1] += 16.0;
		g_flLastAbsMin[id][2][2] += 0.96875;
		
		new Float:flEdgeOrigin[3];
		flEdgeOrigin[0] = (g_flLastAbsMin[id][2][0] + g_flCurrentAbsMin[id][0]) / 2;
		flEdgeOrigin[1] = (g_flLastAbsMin[id][2][1] + g_flCurrentAbsMin[id][1]) / 2;
		flEdgeOrigin[2] = g_flCurrentAbsMin[id][2];
				
		new Float:distance = g_flFallingFromPoint[id][2] - flEdgeOrigin[2];
		
		if(distance >= get_pcvar_float(g_pEdgeBugDistanceMin))
		{
			if(get_pcvar_num(g_pEdgeBugBeam))
			{
				fnDrawLine(id, flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], {0, 255, 0});
				fnDrawLine(id, flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], {0, 255, 0});
				fnDrawLine(id, flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] - 16.0, flEdgeOrigin[2], flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], {0, 255, 0});
				fnDrawLine(id, flEdgeOrigin[0] + 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], flEdgeOrigin[0] - 16.0, flEdgeOrigin[1] + 16.0, flEdgeOrigin[2], {0, 255, 0});
			}

			g_iEdgeBugCount[id]++;

			edgeBugDone(id, distance, g_iEdgeBugCount[id]);
		}
	}
}

public edgeBugDone(id, Float:flDistance, count)
{
	new name[33];
	get_user_name(id, name, charsmax(name));
	
	new iDistance = floatround(flDistance, floatround_floor);
	
	if(g_EdgeBug[id])
	{
		set_hudmessage(0, 255, 0, -1.0, 0.75, 0, 0.0, 2.0, 0.1, 0.1, 4);
		show_hudmessage(id, "Fall Distance: %d^nWell done!", iDistance);
		client_print(id, print_console, "Fall Distance: %d^nWell done!", iDistance);
	}

	new players[32], num, plr;
	get_players(players, num);

	for(new i = 0; i < num; i++)
	{
		plr = players[i];
		
		if(g_bColorchat[plr])
		{
			if(count > 3)
			{
				client_print_f(plr, BLUE, "[KZ] %s has done %d EdgeBugs in a row (%d units)", name, count, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(plr, "speak misc/holyshit");
			}
			else if(count == 3)
			{
				client_print_f(plr, BLUE, "[KZ] %s has done 3 EdgeBugs in a row (%d units)", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(plr, "speak misc/triple");
			}
			else if(count == 2)
			{
				client_print_f(plr, RED, "[KZ] %s has done 2 EdgeBugs in a row (%d units)", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(plr, "speak misc/double");
			}
			else if(flDistance >= get_pcvar_float(g_pEdgeBugDistanceLeet))
			{
				client_print_f(plr, RED, "[KZ] %s has done %d units with EdgeBug", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
				{
					if(id == plr)
						client_cmd(id, "speak misc/mod_wickedsick");
					else
						client_cmd(plr, "speak misc/mod_godlike");
				}
			}
			else if(flDistance >= get_pcvar_float(g_pEdgeBugDistancePro))
			{
				client_print_f(plr, GREEN, "[KZ] %s has done %d units with EdgeBug", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/perfect");
			}
			else if(flDistance >= get_pcvar_float(g_pEdgeBugDistanceGood))
			{
				client_print_f(plr, GREY, "[KZ] %s has done %d units with EdgeBug", name, iDistance);
				
				if(get_pcvar_num(g_pEdgeBugSound) && g_bSound[plr])
					client_cmd(id, "speak misc/impressive");
			}
		}
	}

	if(get_pcvar_num(g_pBugTop) && (is_user_localhost(id) || get_pcvar_num(g_pBugTopAlone) == 0))
		setEbTop(id, iDistance);
}

public cmdJbStats(id)
{
	if(g_JumpBug[id])
	{
		client_print_f(id, RED, "^x04[KZ]^x01 JumpBug Stats and Trainer have been^x03 disabled");
		g_JumpBug[id] = 0;
	}
	else
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 JumpBug Stats has been^x03 enabled^x01. To enable Trainer, say^x04 /jbtrainer");
		g_JumpBug[id] = 1;
	}
	
	return PLUGIN_HANDLED;
}

public cmdJbTrainer(id)
{
	if(g_JumpBug[id] == 2)
	{
		client_print_f(id, RED, "^x04[KZ]^x01 JumpBug Trainer has been^x03 disabled");
		g_JumpBug[id] = 1;
	}
	else if(g_JumpBug[id] == 1)
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 JumpBug Trainer has been^x03 enabled");
		g_JumpBug[id] = 2;
	}
	else
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 JumpBug Stats and Trainer have been^x03 enabled^x01");
		g_JumpBug[id] = 2;
	}
	
	return PLUGIN_HANDLED;
}

public cmdEbStats(id)
{
	if(g_EdgeBug[id])
	{
		client_print_f(id, RED, "^x04[KZ]^x01 EdgeBug Stats has been^x03 disabled");
		g_EdgeBug[id] = 0;
	}
	else
	{
		client_print_f(id, BLUE, "^x04[KZ]^x01 EdgeBug Stats has been^x03 enabled");
		g_EdgeBug[id] = 1;
	}
	
	return PLUGIN_HANDLED;
}

public cmdColorChat(id)
{
	if(g_bColorchat[id])
		client_print_f(id, RED, "^x04[KZ]^x01 Bugs Colorchat has been^x03 disabled");
	else
		client_print_f(id, BLUE, "^x04[KZ]^x01 Bugs Colorchat Stats has been^x03 enabled");

	g_bColorchat[id] = !g_bColorchat[id];
	
	return PLUGIN_HANDLED;
}

public cmdBugSound(id)
{	
	if(g_bSound[id])
		client_print_f(id, RED, "^x04[KZ]^x01 Bug Sounds have been^x03 disabled");
	else
		client_print_f(id, BLUE, "^x04[KZ]^x01 Bugs Sounds has been^x03 enabled");

	g_bSound[id] = !g_bSound[id];
	
	return PLUGIN_HANDLED;	
}

public clear(id)
{
	g_iPlayerFlags[id] = PF_None;
	g_iEdgeBugCount[id] = 0;
}

stock fnDrawLine(id, Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, g_iColor[3])
{
	message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, SVC_TEMPENTITY, _, id ? id : 0);
	write_byte(TE_BEAMPOINTS);
	write_coord(floatround(x1));
	write_coord(floatround(y1));
	write_coord(floatround(z1));
	write_coord(floatround(x2));
	write_coord(floatround(y2));
	write_coord(floatround(z2));
	write_short(g_iBeamSprite);
	write_byte(1);
	write_byte(1);
	write_byte(200);
	write_byte(5);
	write_byte(0);
	write_byte(g_iColor[0]);
	write_byte(g_iColor[1]);
	write_byte(g_iColor[2]);
	write_byte(255);
	write_byte(0);
	message_end();
}

stock bool:is_in_duck(entity)
{
	if(!pev_valid(entity))
		return false;
	
	static Float:absmin[3], Float:absmax[3];
	
	pev(entity, pev_absmin, absmin);
	pev(entity, pev_absmax, absmax);
	
	if(absmin[2] + 64.0 < absmax[2])
		return false;
	
	return true;
}

public readEbTop()
{
	if(file_exists(g_szEbFile)) 
	{
		new szData[512], handle = fopen(g_szEbFile, "rt"), szLocalhost[5], szDistance[22];	
		for(new i = 0; i < 15; i++)
		{
			fgets(handle, szData, charsmax(szData));
			trim(szData);
			if(szData[0])
			{
				parse(szData, szLocalhost, charsmax(szLocalhost), g_szEbTopPlayer[i], charsmax(g_szEbTopPlayer[]), szDistance, charsmax(szDistance), g_szEbTopDate[i], charsmax(g_szEbTopDate[]));
				g_iEbTopLocalhost[i] = str_to_num(szLocalhost);
				g_iEbTopDistance[i] = str_to_num(szDistance);
			}
			else
			{
				g_iEbTopLocalhost[i] = 0;
				g_szEbTopPlayer[i][0] = 0;
				g_iEbTopDistance[i] = 0;
				g_szEbTopDate[i][0] = 0;
			}
		}
		fclose(handle);
	}
}

public readJbTop()
{
	if(file_exists(g_szJbFile)) 
	{
		new szData[512], handle = fopen(g_szJbFile, "rt"), szLocalhost[5], szDistance[22];	
		for(new i = 0; i < 15; i++)
		{
			fgets(handle, szData, charsmax(szData));
			trim(szData);
			if(szData[0])
			{
				parse(szData, szLocalhost, charsmax(szLocalhost), g_szJbTopPlayer[i], charsmax(g_szJbTopPlayer[]), szDistance, charsmax(szDistance), g_szJbTopDate[i], charsmax(g_szJbTopDate[]));
				g_iJbTopLocalhost[i] = str_to_num(szLocalhost);
				g_iJbTopDistance[i] = str_to_num(szDistance);
			}
			else
			{
				g_iJbTopLocalhost[i] = 0;
				g_szJbTopPlayer[i][0] = 0;
				g_iJbTopDistance[i] = 0;
				g_szJbTopDate[i][0] = 0;
			}
		}
		fclose(handle);
	}
}

stock setEbTop(id, iDistance)
{
	new iPlaceInTop = 0;

	for(new i = 0; i < 15; i++)
	{
		if(g_iEbTopDistance[i] == 0 || iDistance > g_iEbTopDistance[i])
			break;
		iPlaceInTop++;
	}

	if(iPlaceInTop < 15)
	{
		new szData[512], handle = fopen(g_szEbFile, "wt");	
		for(new j = 14; j > iPlaceInTop; j--)
		{
			g_iEbTopLocalhost[j] = g_iEbTopLocalhost[j-1];
			format(g_szEbTopPlayer[j], charsmax(g_szEbTopPlayer[]), "%s", g_szEbTopPlayer[j-1]);
			g_iEbTopDistance[j] = g_iEbTopDistance[j-1];
			format(g_szEbTopDate[j], charsmax(g_szEbTopDate[]), "%s", g_szEbTopDate[j-1]);
		}

		new curr_time[22]; 
		get_time("%d/%m/%Y", curr_time, charsmax(curr_time)); 
		
		new name[22];
		get_user_name(id, name, charsmax(name));

		if(get_pcvar_num(g_pBugTopShowPlace))
			client_print_f(id, BLUE, "^x04[KZ]^x01 %s's jump is on^x03 %d place^x01 in EdgeBug Top!", name, iPlaceInTop + 1);
		
		replace_all(name, charsmax(name), "<", ""); 
		replace_all(name, charsmax(name), ">", "");
		replace_all(name, charsmax(name), "^"", ""); //"
		replace_all(name, charsmax(name), " ", "_");
		replace_all(name, charsmax(name), ";", ""); 		

		g_iEbTopLocalhost[iPlaceInTop] = is_user_localhost(id);
		formatex(g_szEbTopPlayer[iPlaceInTop], charsmax(g_szEbTopPlayer[]), "%s", name);
		g_iEbTopDistance[iPlaceInTop] = iDistance;
		formatex(g_szEbTopDate[iPlaceInTop], charsmax(g_szEbTopDate[]), "%s", curr_time);

		for(new i = 0; (i < 15 && g_iEbTopDistance[i] > 0); i++)
		{
			formatex(szData, charsmax(szData), "%d %s %d %s^n", g_iEbTopLocalhost[i], g_szEbTopPlayer[i], g_iEbTopDistance[i], g_szEbTopDate[i]);
			fputs(handle, szData);
		}

		fclose(handle);
	}
}

stock setJbTop(id, iDistance)
{
	new iPlaceInTop = 0;

	for(new i = 0; i < 15; i++)
	{
		if(g_iJbTopDistance[i] == 0 || iDistance > g_iJbTopDistance[i])
			break;
		iPlaceInTop++;
	}

	if(iPlaceInTop < 15)
	{
		new szData[512], handle = fopen(g_szJbFile, "wt");	
		for(new j = 14; j > iPlaceInTop; j--)
		{
			g_iJbTopLocalhost[j] = g_iJbTopLocalhost[j-1];
			format(g_szJbTopPlayer[j], charsmax(g_szJbTopPlayer[]), "%s", g_szJbTopPlayer[j-1]);
			g_iJbTopDistance[j] = g_iJbTopDistance[j-1];
			format(g_szJbTopDate[j], charsmax(g_szJbTopDate[]), "%s", g_szJbTopDate[j-1]);
		}

		new curr_time[22]; 
		get_time("%d/%m/%Y", curr_time, charsmax(curr_time)); 
		
		new name[22];
		get_user_name(id, name, charsmax(name));

		if(get_pcvar_num(g_pBugTopShowPlace))
			client_print_f(id, BLUE, "^x04[KZ]^x01 %s's jump is on^x03 %d place^x01 in JumpBug Top!", name, iPlaceInTop + 1);
		
		replace_all(name, charsmax(name), "<", ""); 
		replace_all(name, charsmax(name), ">", "");
		replace_all(name, charsmax(name), "^"", ""); //"
		replace_all(name, charsmax(name), " ", "_");
		replace_all(name, charsmax(name), ";", ""); 		

		g_iJbTopLocalhost[iPlaceInTop] = is_user_localhost(id);
		formatex(g_szJbTopPlayer[iPlaceInTop], charsmax(g_szJbTopPlayer[]), "%s", name);
		g_iJbTopDistance[iPlaceInTop] = iDistance;
		formatex(g_szJbTopDate[iPlaceInTop], charsmax(g_szJbTopDate[]), "%s", curr_time);

		for(new i = 0; (i < 15 && g_iJbTopDistance[i] > 0); i++)
		{
			formatex(szData, charsmax(szData), "%d %s %d %s^n", g_iJbTopLocalhost[i], g_szJbTopPlayer[i], g_iJbTopDistance[i], g_szJbTopDate[i]);
			fputs(handle, szData);
		}

		fclose(handle);
	}
}

public cmdShowEbTop(id)
{
	if(get_pcvar_num(g_pBugTop) == 0)
	{
		client_print_f(id, RED, "^x03[KZ]^x01 Bug Tops are disabled");
		return PLUGIN_HANDLED;
	}

	new buffer[15*122], szPlayerName[22];

	new len = formatex(buffer, charsmax(buffer), "<body bgcolor=#ffffff><table width=100%% cellpadding=2 cellspacing=0 border=0>");
	len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center bgcolor=#008bdb><th width=5%%> # <th width=35%%> Name <th width=30%%> Distance <th width=30%%> Date ");

	for(new i = 0; (i < 15 && g_iEbTopDistance[i] > 0); i++)
	{
		if(g_iEbTopLocalhost[i])
			formatex(szPlayerName, charsmax(szPlayerName), "<b>%s</b>", g_szEbTopPlayer[i]);
		else
			formatex(szPlayerName, charsmax(szPlayerName), "%s", g_szEbTopPlayer[i]);
		
		len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center%s><td> %d <td> %s <td> %d units <td> %s", ((i%2)==0) ? "" : " bgcolor=#e2eefa", i+1, szPlayerName, g_iEbTopDistance[i], g_szEbTopDate[i]);
	}

	show_motd(id, buffer, "EdgeBug Top");
	return PLUGIN_HANDLED;
}

public cmdShowJbTop(id)
{
	if(get_pcvar_num(g_pBugTop) == 0)
	{
		client_print_f(id, RED, "^x03[KZ]^x01 Bug Tops are disabled");
		return PLUGIN_HANDLED;
	}

	new buffer[15*122], szPlayerName[22];

	new len = formatex(buffer, charsmax(buffer), "<body bgcolor=#ffffff><table width=100%% cellpadding=2 cellspacing=0 border=0>");
	len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center bgcolor=#008bdb><th width=5%%> # <th width=35%%> Name <th width=30%%> Distance <th width=30%%> Date ");

	for(new i = 0; (i < 15 && g_iJbTopDistance[i] > 0); i++)
	{
		if(g_iJbTopLocalhost[i])
			formatex(szPlayerName, charsmax(szPlayerName), "<b>%s</b>", g_szJbTopPlayer[i]);
		else
			formatex(szPlayerName, charsmax(szPlayerName), "%s", g_szJbTopPlayer[i]);
		
		len += formatex(buffer[len], charsmax(buffer)-len, "<tr align=center%s><td> %d <td> %s <td> %d units <td> %s", ((i%2)==0) ? "" : " bgcolor=#e2eefa", i+1, szPlayerName, g_iJbTopDistance[i], g_szJbTopDate[i]);
	}

	show_motd(id, buffer, "JumpBug Top");
	return PLUGIN_HANDLED;
}

Kod: Tümünü seç

include/kz_stocks.inc(194) : error 021: symbol already defined: "set_dhudmessage"
include/kz_stocks.inc(199) : error 010: invalid function or declaration
include/kz_stocks.inc(210) : error 021: symbol already defined: "show_dhudmessage"
include/kz_stocks.inc(212) : error 010: invalid function or declaration
include/kz_stocks.inc(215) : error 021: symbol already defined: "get_players"
include/kz_stocks.inc(216) : error 010: invalid function or declaration

hatasi aldim haci ya

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Colditz
Mesajlar: 2574
Kayıt: Çrş Ağu 23, 2017 9:17 pm

Derleme hatası

Mesaj gönderen Colditz »

ks_stocks kütüphanesinin içinden dhudmessage ile alakalı her şeyi silin.

Link:
Linklerini gizle
Linki Kopyala
Cevapla