Сообщение от
OFFREAL
Что это за лютый бред?
Games, ты думаешь если телепортнуться в тачку, то OnPlayerStateChange не сработает?
Да, не сработает, если телепортнуться читом из авто в авто.
Поэтому я использую таймер!
Сообщение от
http://wiki.sa-mp.com/wiki/OnPlayerStateChange
This callback is called when a player changes state.
При тп из авто в авто положение не меняется!
Трудно было прочитать на WIKI?
А ну да, ты же профи...
Сообщение от
OFFREAL
Это вообще эпичная хуита - как можно использовать GetPlayerVehicleID до того как playerid оказался в машине???
Признаю, здесь допустил ошибку, но в ней ничего страшного не вижу.
IDVEH[playerid] = GetPlayerVehicleID(playerid); заменить на IDVEH[playerid] = vehicleid; и все будет нормально.
Сообщение от
OFFREAL
И если использовать OnPlayerEnterVehicle то можно обойтись без всяких таймеров...
Код в студию! А пока это только пустые слова!
http://pawno.su/threads/42114
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) + SetTimerEx("IsPlayerInCar",100,1,"d",playerid);
В результате:
Сообщение от
OFFREAL
moderator: Тема одобрена
Почему там не написал? + еще и одобрил тему.
Сообщение от
OFFREAL
То что ты изобрел, не работает с вероятностью 100%
Прежде чем что-то сказать - проверь!
Тп из авто в авто ловит - это было главной целью, создать античит без OnPlayerEnterVehicle.
Читать нужно было первый пост внимательнее.
Сообщение от
OFFREAL
PS: С уходом Ордена статус "профессионал" получают всякие недоскриптеры и дилетанты... Печально
Орден? И? Так что, без них весь мир рухнет?
Слишком много на себя берёте.
Из тебя ненависть так и прет, молодец, ты показал себя.
Special for OFFREAL:
А вот что можно сделать, используя public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger):
PHP код:
//by Games
#include a_samp
new IDVEH[MAX_PLAYERS];
new bool:UseEnter[MAX_PLAYERS];
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER )
{
if(IDVEH[playerid] != GetPlayerVehicleID(playerid) || !UseEnter[playerid])
{
Punish(playerid);
}
UseEnter[playerid] = false;
}
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
ResetCarInfo(playerid);
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
UseEnter[playerid] = true;
IDVEH[playerid]=vehicleid;
return 1;
}
public OnPlayerConnect(playerid)
{
ResetCarInfo(playerid);
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
ResetCarInfo(playerid);
return 1;
}
public OnFilterScriptInit()
{
SetTimer("CheckCar",1000,1);//если в мод вшивать будете, то в public OnGameModeInit()
}
forward CheckCar();
public CheckCar()
{
for(new i; i<GetMaxPlayers(); i++)
{
if(IDVEH[i] != -1 && IsPlayerConnected(i) && IsPlayerInAnyVehicle(i) && !UseEnter[i] && IDVEH[i] != GetPlayerVehicleID(i)) Punish(i);
}
return 1;
}
stock ResetCarInfo(playerid)
{
IDVEH[playerid]=-1;
UseEnter[playerid] = false;
}
stock Punish(playerid)
{
new string[MAX_PLAYER_NAME+40];
format(string,sizeof(string),"{FFFF66}%s был кикнут за тп в авто!",PlayerName(playerid));
SendClientMessageToAll(-1, string);
Kick(playerid);
/*ResetCarInfo(playerid); //если наказание не кик, но вы вытаскиваете игрока из авто, например посадите в тюрьму*/
/*IDVEH[playerid]=GetPlayerVehicleID(playerid);//если не высаживаете игрока, например только даете предупреждение */
}
//
При необходимости добавить:
PHP код:
stock PlayerName(playerid){
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
return pname;}
Все PutPlayerInVehicle(playerid, vehicleid, seatid); заменить на PutPlayerInVeh(playerid, vehicleid, seatid);
Вниз мода добавить:
PHP код:
stock PutPlayerInVeh(playerid, vehicleid, seatid)
{
UseEnter[playerid] = false;
IDVEH[playerid] = vehicleid;
PutPlayerInVehicle(playerid, vehicleid, seatid);
return 1;
}
Плюсы этого варианта:
-Ловит тп в авто (хоть пешком в авто, хоть из авто в авто)
- Ловит даже если нажать возле одного авто интер, а тп внутрь другого авто.
Минусы:
- Не ловит, если нажать возле авто интер, а потом тп читом в это же авто.