Metod log > more secure :
#define ENABLE_SYSCHAT_NOTICE
#define ENABLE_SYSLOG_NOTICE
#define ENABLE_BAN_WAITHACK
bool IS_SPEED_HACK(LPCHARACTER ch, LPCHARACTER victim, DWORD current_time)
{
if (ch->m_kAttackLog.dwVID == victim->GetVID())
{
if (current_time - ch->m_kAttackLog.dwTime < GET_ATTACK_SPEED(ch))
{
INCREASE_SPEED_HACK_COUNT(ch);
if (test_server)
{
sys_log(0, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
ch->GetName(),
current_time - ch->m_kAttackLog.dwTime,
GET_ATTACK_SPEED(ch),
ch->m_speed_hack_count);
ch->ChatPacket(CHAT_TYPE_INFO, "%s attack hack! time (delta, limit)=(%u, %u) hack_count %d",
ch->GetName(),
current_time - ch->m_kAttackLog.dwTime,
GET_ATTACK_SPEED(ch),
ch->m_speed_hack_count);
}
SET_ATTACK_TIME(ch, victim, current_time);
SET_ATTACKED_TIME(ch, victim, current_time);
return true;
}
}
SET_ATTACK_TIME(ch, victim, current_time);
if (victim->m_AttackedLog.dwPID == ch->GetPlayerID())
{
if (current_time - victim->m_AttackedLog.dwAttackedTime < GET_ATTACK_SPEED(ch))
{
INCREASE_SPEED_HACK_COUNT(ch);
if (ch->m_speed_hack_count > 100)
{
#ifdef ENABLE_SYSLOG_NOTICE
sys_log(0, "%s Attack Speed HACK! time (delta, limit)=(%u, %u), hack_count = %d",
ch->GetName(),
current_time - victim->m_AttackedLog.dwAttackedTime,
GET_ATTACK_SPEED(ch),
ch->m_speed_hack_count);
#endif
#ifdef ENABLE_SYSCHAT_NOTICE
ch->ChatPacket(CHAT_TYPE_INFO, "A hack was detected , close it!",
ch->GetName(),
current_time - victim->m_AttackedLog.dwAttackedTime,
GET_ATTACK_SPEED(ch),
ch->m_speed_hack_count);
#endif
#ifdef ENABLE_BAN_WAITHACK
DBManager::instance().Query("INSERT INTO log.wait_hack SET login='%s', nickname='%s', ip='%s', time=NOW(), map_index=%d, server='%s';",
ch->GetDesc()->GetAccountTable().login, ch->GetName(), ch->GetDesc()->GetHostName(), ch->GetMapIndex(), g_stHostname.c_str());
#endif
ch->GetDesc()->DelayedDisconnect(3);
}
SET_ATTACKED_TIME(ch, victim, current_time);
return true;
}
}
SET_ATTACKED_TIME(ch, victim, current_time);
return false;
}
Create in database log a table with name : wait_hack
/*
Navicat MySQL Data Transfer
Source Server : test
Source Server Version : 50613
Source Host :
Source Database : log
Target Server Type : MYSQL
Target Server Version : 50613
File Encoding : 65001
Date: 2015-01-02 12:54:57
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for wait_hack
-- ----------------------------
DROP TABLE IF EXISTS `wait_hack`;
CREATE TABLE `wait_hack` (
`login` varchar(50) COLLATE big5_bin DEFAULT NULL,
`nickname` varchar(50) COLLATE big5_bin DEFAULT NULL,
`ip` varchar(50) COLLATE big5_bin DEFAULT NULL,
`time` time DEFAULT NULL,
`map_index` varchar(30) COLLATE big5_bin DEFAULT NULL,
`server` varchar(30) COLLATE big5_bin DEFAULT NULL,
`playtime` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_bin;
It is more secure now .