На VeCo ми е повече функционален, а и най-вече го използвам заради по-бързото прераждане на играчите, при настройка на cvar-а на 0.1. Та да говорим по темата само, моля..
Edit: Крашовете продължават! Искам да кажа само, че при 4vendeta никога съм нямал такива проблеми с крашове след смяна на картата, а при gs имам, а примерно ако там сложа същите плъгини, които съм сложил в момента на gs не крашва (пробвал съм), а при gameservers крашва.. някакви идеи какво мога да направя или нещо.. аз лично съм убеден, че не е от плъгин..
@RideeR ;]
Добавил съм му само cromchat и съответно съобщенията съм редактирал..
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <cromchat>
#define PLUGIN "BhopHack Detector"
#define VERSION "0.1"
#define AUTHOR "Mistrick"
#pragma semicolon 1
#define LOGFILE "bhopdetector.log"
enum _:PLAYER_DATA
{
m_GroundFrames,
m_OldGroundFrames,
m_PreJumpGroundFrames,
m_OldPreJumpGroundFrames,
m_AirFrames,//useless
m_JumpHoldFrames,
m_JumpPressCount,
m_DuckHoldFrames,
Float:m_Velocity//useless
};
enum _:WARNINGS_DATA
{
m_WarnEqualFrames,
m_WarnGroundEqualFrames,
m_WarnJumpSpam
}
#define MAX_JUMPCOUNT 16
#define MAX_GROUND_FRAME_COINCIDENCE 16
#define MAX_JUMP_SPAM 8
new g_ePlayerInfo[33][PLAYER_DATA];
new g_ePlayerWarn[33][WARNINGS_DATA];
new g_ePlayerWarnMax[33][WARNINGS_DATA];
new g_szLogFile[128];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Pre", false);
CC_SetPrefix("^x03[^x04Extreme KnifeArena AutoBhop Detector^x03]");
}
public plugin_cfg()
{
get_localinfo("amxx_logs", g_szLogFile, charsmax(g_szLogFile));
format(g_szLogFile, charsmax(g_szLogFile), "/%s/%s", g_szLogFile, LOGFILE);
}
public client_putinserver(id)
{
g_ePlayerWarn[id][m_WarnEqualFrames] = 0;
g_ePlayerWarn[id][m_WarnGroundEqualFrames] = 0;
g_ePlayerWarn[id][m_WarnJumpSpam] = 0;
}
public client_disconnect(id)
{
UTIL_LogUser(id, "onground %d, equaljump %d, jumpspam %d", g_ePlayerWarnMax[id][m_WarnGroundEqualFrames], g_ePlayerWarnMax[id][m_WarnEqualFrames], g_ePlayerWarnMax[id][m_WarnJumpSpam]);
g_ePlayerWarnMax[id][m_WarnEqualFrames] = 0;
g_ePlayerWarnMax[id][m_WarnGroundEqualFrames] = 0;
g_ePlayerWarnMax[id][m_WarnJumpSpam] = 0;
}
public FM_PlayerPreThink_Pre(id)
{
if(!is_user_alive(id)) return FMRES_IGNORED;
new buttons = pev(id, pev_button);
new oldbuttons = pev(id, pev_oldbuttons);
if(buttons & IN_JUMP)
{
g_ePlayerInfo[id][m_JumpHoldFrames]++;
}
if(buttons & IN_JUMP && ~oldbuttons & IN_JUMP)
{
g_ePlayerInfo[id][m_JumpPressCount]++;
}
if(~buttons & IN_JUMP && oldbuttons & IN_JUMP)
{
///**************************************
}
if(buttons & IN_DUCK)
{
g_ePlayerInfo[id][m_DuckHoldFrames]++;
}
new on_ground = bool:(pev(id, pev_flags) & FL_ONGROUND);
if(on_ground)
{
g_ePlayerInfo[id][m_GroundFrames]++;
}
else
{
if(g_ePlayerInfo[id][m_GroundFrames])
{
new Float:velocity[3]; pev(id, pev_velocity, velocity); velocity[2] = 0.0;
g_ePlayerInfo[id][m_Velocity] = _:vector_length(velocity);
g_ePlayerInfo[id][m_PreJumpGroundFrames] = g_ePlayerInfo[id][m_GroundFrames];
}
g_ePlayerInfo[id][m_GroundFrames] = 0;
g_ePlayerInfo[id][m_AirFrames]++;
}
if(g_ePlayerInfo[id][m_OldGroundFrames] == 0 && g_ePlayerInfo[id][m_GroundFrames])
{
if(g_ePlayerInfo[id][m_JumpPressCount] == 0 && g_ePlayerInfo[id][m_JumpHoldFrames] == 0 && g_ePlayerInfo[id][m_DuckHoldFrames] == 0)
{
//console_print(id, "wtf? JumpPressCount 0, JumpHoldFrames 0, DuckHoldFrames 0");
}
if(g_ePlayerInfo[id][m_JumpPressCount] > 0)
{
/// if g_ePlayerInfo[id][m_JumpHoldFrames] == g_ePlayerInfo[id][m_JumpPressCount] cheat
/// if g_ePlayerInfo[id][m_JumpPressCount] > 16 script
//console_print(id, "ground [%d], air [%d], jumphold [%d], jumpcount [%d], velocity [%.3f]", g_ePlayerInfo[id][m_PreJumpGroundFrames], g_ePlayerInfo[id][m_AirFrames], g_ePlayerInfo[id][m_JumpHoldFrames], g_ePlayerInfo[id][m_JumpPressCount], g_ePlayerInfo[id][m_Velocity]);
/// TODO: сделать цикл
if(g_ePlayerInfo[id][m_JumpHoldFrames] == g_ePlayerInfo[id][m_JumpPressCount])
{
g_ePlayerWarn[id][m_WarnEqualFrames]++;
if(g_ePlayerWarn[id][m_WarnEqualFrames] > g_ePlayerWarnMax[id][m_WarnEqualFrames])
{
g_ePlayerWarnMax[id][m_WarnEqualFrames] = g_ePlayerWarn[id][m_WarnEqualFrames];
}
}
else if(g_ePlayerWarn[id][m_WarnEqualFrames])
{
g_ePlayerWarn[id][m_WarnEqualFrames]--;
}
if(g_ePlayerInfo[id][m_PreJumpGroundFrames] == g_ePlayerInfo[id][m_OldPreJumpGroundFrames])
{
g_ePlayerWarn[id][m_WarnGroundEqualFrames]++;
if(g_ePlayerWarn[id][m_WarnGroundEqualFrames] > g_ePlayerWarnMax[id][m_WarnGroundEqualFrames])
{
g_ePlayerWarnMax[id][m_WarnGroundEqualFrames] = g_ePlayerWarn[id][m_WarnGroundEqualFrames];
}
}
else if(g_ePlayerWarn[id][m_WarnGroundEqualFrames])
{
g_ePlayerWarn[id][m_WarnGroundEqualFrames]--;
}
if(g_ePlayerInfo[id][m_JumpPressCount] >= MAX_JUMPCOUNT)
{
g_ePlayerWarn[id][m_WarnJumpSpam]++;
if(g_ePlayerWarn[id][m_WarnJumpSpam] > g_ePlayerWarnMax[id][m_WarnJumpSpam])
{
g_ePlayerWarnMax[id][m_WarnJumpSpam] = g_ePlayerWarn[id][m_WarnJumpSpam];
}
}
else if(g_ePlayerWarn[id][m_WarnJumpSpam])
{
g_ePlayerWarn[id][m_WarnJumpSpam]--;
}
//console_print(id, "groundequal [%d], jumpequal[%d], jumpspam [%d]", g_ePlayerWarn[id][m_WarnGroundEqualFrames], g_ePlayerWarn[id][m_WarnEqualFrames], g_ePlayerWarn[id][m_WarnJumpSpam]);
if(g_ePlayerWarn[id][m_WarnGroundEqualFrames] >= MAX_GROUND_FRAME_COINCIDENCE)
{
PunishPlayer(id, "BhopHack[g]");
g_ePlayerWarn[id][m_WarnGroundEqualFrames] = 0;
}
if(g_ePlayerWarn[id][m_WarnJumpSpam] >= MAX_JUMP_SPAM)
{
PunishPlayer(id, "BhopHack[s]");
g_ePlayerWarn[id][m_WarnJumpSpam] = 0;
}
}
g_ePlayerInfo[id][m_AirFrames] = 0;
g_ePlayerInfo[id][m_JumpHoldFrames] = 0;
g_ePlayerInfo[id][m_JumpPressCount] = 0;
g_ePlayerInfo[id][m_DuckHoldFrames] = 0;
g_ePlayerInfo[id][m_OldPreJumpGroundFrames] = g_ePlayerInfo[id][m_PreJumpGroundFrames];
}
g_ePlayerInfo[id][m_OldGroundFrames] = g_ePlayerInfo[id][m_GroundFrames];
return FMRES_IGNORED;
}
PunishPlayer(id, reason[])
{
new name[32]; get_user_name(id, name, charsmax(name));
CC_SendMessage(id, "^x04%s ^x03using ^x04%s", name, reason);
server_cmd("amx_ban 10080 #%d %s", get_user_userid(id), reason);
UTIL_LogUser(id, "using %s", reason);
}
stock UTIL_LogUser(const id, const szCvar[], any:...)
{
new iFile;
if( (iFile = fopen(g_szLogFile, "a")) )
{
new szName[32], szAuthid[32], szIp[32], szTime[22];
new message[128]; vformat(message, charsmax(message), szCvar, 3);
get_user_name(id, szName, charsmax(szName));
get_user_authid(id, szAuthid, charsmax(szAuthid));
get_user_ip(id, szIp, charsmax(szIp), 1);
get_time("%m/%d/%Y - %H:%M:%S", szTime, charsmax(szTime));
fprintf(iFile, "L %s: <%s><%s><%s> %s^n", szTime, szName, szAuthid, szIp, message);
fclose(iFile);
}
}
Edit2: Ето я грешката при краш-а:
Segmentation fault (core dumped)
BFD: Warning: core is truncated: expected core file size >= 131383296, found: 2994176.
Cannot access memory at address 0xf771c8f8
Cannot access memory at address 0xf771c8f4
debug.cmds:1: Error in sourced command file:
Cannot access memory at address 0xff886b38
email debug.log to
[email protected]