PDA

Просмотр полной версии : [Вопрос] По поводу Античита



Dima_Tushin
18.05.2015, 22:40
Привет всем пользователям pro pawn хочу задать вопрос.
Я сделал анти-чит на SetVehicleHealth и когда садишься в машину у которой 1000.0 хп проходит таймер 1 секунда и хп тачки равняется 0.

Помогите исправить ошибку мою объясните что я не так сделал.

код:

new Float:AntiCheatHealthVehicle[MAX_VEHICLES];//Проверка на хп автомобиля



stock SetVehicleHealthAC(vehicleid, Float: health)
{
if(health < 250.0) health = 250.0;
else if(health > 1000.0) health = 1000.0;
AntiCheatHealthVehicle[vehicleid] = health;
SetVehicleHealth(vehicleid, health);
return 1;
}
#if defined _ALS_SetVehicleHealth
#undef SetVehicleHealth
#else
#define _ALS_SetVehicleHealth
#endif
#define SetVehicleHealth SetVehicleHealthAC

ну и последнее таймер раз в секунду

new Float: CARHP, vehicleid = GetPlayerVehicleID(i);
GetVehicleHealth(vehicleid, CARHP);
if(_:AntiCheatHealthVehicle[vehicleid] != _:CARHP)
{
if((AntiCheatHealthVehicle[vehicleid] > CARHP && CARHP != INVALID_VEHICLE_ID))
{
AntiCheatHealthVehicle[vehicleid] = CARHP;
}
if((AntiCheatHealthVehicle[vehicleid] < CARHP && CARHP != INVALID_VEHICLE_ID))
{
new okroz[90];
format(okroz, sizeof(okroz), "<<Warning>> Игрок %s[%d]: Возможно изменяет хп тачки [Было: %.0f]:[Стало: %.0f]", Name(i), i, CARHP, AntiCheatHealthVehicle[vehicleid]);
SendAdminMessage(COLOR_ADMIN, okroz);
SetVehicleHealthAC(vehicleid, AntiCheatHealthVehicle[vehicleid]);
}
}

- - - Добавлено - - -

Может я таймер не правильно использую не знаю.

Daniel_Cortez
19.05.2015, 08:07
new Float:AntiCheatHealthVehicle[MAX_VEHICLES];//Проверка на хп автомобиля
Это не проверка, а всего лишь массив. Сама же проверка проводится в односекундном таймере.
Кстати, все значение массива по умолчанию равны 0. Кто будет их инициализировать при создании транспорта (CreateVehicle(Ex)/AddStaticVehicle(Ex))?
+ нужно обновлять их ещё и при респавне транспорта (OnVehicleSpawn).

P.S.: Это ещё что?



if((AntiCheatHealthVehicle[vehicleid] > CARHP && CARHP != INVALID_VEHICLE_ID))

Во-первых, зачем нужно сравнение ХП машины с её ID?
Во-вторых, если вы хотели сделать проверку существования машины, GetPlayerVehicleID при несуществующем транспорте возвращает 0, а не INVALID_VEHICLE.
В-третьих, по идее, невалидные значения нужно отсеивать вообще сразу, перед их использованием. Иначе можно словить выход за пределы массива и код, находящийся после места возникновения ошибки, работать не будет, а вы будете задаваться вопросом "ой, а почему у меня не срабатывает код?"
На всякий случай лучше прямо сейчас проверьте мод крашдетектом.

Dima_Tushin
19.05.2015, 13:43
Вот я убрал вот это CARHP != INVALID_VEHICLE_ID
я сделал CrashDetector как мне проверить чтобы выявить ошибку?

$continue$
19.05.2015, 16:35
Вот я убрал вот это CARHP != INVALID_VEHICLE_ID
я сделал CrashDetector как мне проверить чтобы выявить ошибку?

Cоздай в pawno, файл конфигурации (.cfg).
Название pawn.cfg, в нем пропиши - d3 и все выходы и прочая нечесть выводиться в server.log

Daniel_Cortez
19.05.2015, 16:49
Всё это уже давно расписано здесь (http://pro-pawn.ru/showthread.php?2991-Crashdetect).
Просто нужно читать содержимое всей темы, а не только то, что написано под словом "скачать" - тогда и не будет таких вопросов.