Пульсация здоровья и брони в авто (Не чит) -
Tumba - 13.06.2017
Добрый день, столкнулся с такой проблемой, что когда игрок сидит в автомобиле на водительском месте и машина стоит на месте у игрока пульсирует здоровье и броня. Это происходит лишь с некоторыми игроками, при каких условиях не знаю. Путем поиска в гугле нашел сообщение о такой же проблеме
https://github.com/kurta999/YSF/issues/24, там говорят, что это происходит, когда у автомобиля вдруг становится 2 водителя, но как такое возможно не понял. Также там описан способ исправить это, но я не до конца понял. Может кто-нибудь сталкивался с таким и знает решение?
Re: Пульсация здоровья и брони в авто (Не чит) -
ZiGGi - 13.06.2017
По ссылке всё написано. Эта проблема возникает когда у транспорта два водителя (баги синхронизации). И дано следующее решение: тебе нужно выбрать только одного водителя, а для другого выключать синхронизацию (return 0 в OnPlayerUpdate).
Выбрать одного водителя можно проверяя анимации, тайминги входа, тайминги паузы...
Re: Пульсация здоровья и брони в авто (Не чит) -
White_116 - 13.06.2017
Это легко с эмулировать, отжать у афк машину и выехать из зоны стрима. Лично я высаживаю предыдущего водителя. Кстати, водителей может быть более 2-х игроков.
Re: Пульсация здоровья и брони в авто (Не чит) -
Tumba - 13.06.2017
Довольно часто это происходит, чтобы выключать синхронизацию игрокам. То есть когда такое возникает, для двух игроков GetPlayerVehicleID вернет одно значение и у обоих будет PLAYER_STATE_DRIVER ?
Re: Пульсация здоровья и брони в авто (Не чит) -
White_116 - 13.06.2017
Как-то так всё и решается.
PHP код:
new W_VehicleDriver[MAX_VEHICLES] = {-1, ...};
new W_PlayerDrive[MAX_PLAYERS] = {-1, ...};
public OnPlayerConnect(playerid)
{
W_PlayerDrive[playerid] = -1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(W_PlayerDrive[playerid] != -1)
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] == playerid)
{
W_VehicleDriver[W_PlayerDrive[playerid]] = -1;
}
W_PlayerDrive[playerid] = -1;
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid > 0)
{
//if(GetVehicleModel(vehicleid) == 0) //WTF???
if(W_PlayerDrive[playerid] != -1)//WTF???
{
W_VehicleDriver[W_PlayerDrive[playerid]] = -1;
}
if(W_VehicleDriver[vehicleid] != playerid)
{
if(IsPlayerConnected(W_VehicleDriver[vehicleid]))
{
if(GetPlayerVehicleID(W_VehicleDriver[vehicleid]) == vehicleid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(W_VehicleDriver[vehicleid], x, y, z);
SetPlayerPos(W_VehicleDriver[vehicleid], x, y, z);
}
}
}
W_PlayerDrive[playerid] = vehicleid;
W_VehicleDriver[vehicleid] = playerid;
}
}
else if(oldstate == PLAYER_STATE_DRIVER)
{
if(W_PlayerDrive[playerid] != -1)//WTF???
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] == playerid)
{
W_VehicleDriver[W_PlayerDrive[playerid]] = -1;
}
W_PlayerDrive[playerid] = -1;
}
}
return 1;
}
public OnPlayerUpdate(playerid)
{
new bool:is_ok = true;
if(W_PlayerDrive[playerid] != -1)
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] != playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z);
is_ok = false;
}
}
return is_ok;
}
P.S. Код не проверял. Нет возможности симулировать ситуацию.
Re: Пульсация здоровья и брони в авто (Не чит) -
Tumba - 13.06.2017
Quote:
Originally Posted by White_116
Это легко с эмулировать, отжать у афк машину и выехать из зоны стрима. Лично я высаживаю предыдущего водителя. Кстати, водителей может быть более 2-х игроков.
|
Попробовали, не сработало.
Re: Пульсация здоровья и брони в авто (Не чит) -
Tumba - 15.06.2017
Quote:
Originally Posted by White_116
Как-то так всё и решается.
PHP код:
new W_VehicleDriver[MAX_VEHICLES] = {-1, ...};
new W_PlayerDrive[MAX_PLAYERS] = {-1, ...};
public OnPlayerConnect(playerid)
{
W_PlayerDrive[playerid] = -1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(W_PlayerDrive[playerid] != -1)
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] == playerid)
{
W_VehicleDriver[W_PlayerDrive[playerid]] = -1;
}
W_PlayerDrive[playerid] = -1;
}
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid > 0)
{
//if(GetVehicleModel(vehicleid) == 0) //WTF???
if(W_PlayerDrive[playerid] != -1)//WTF???
{
W_VehicleDriver[W_PlayerDrive[playerid]] = -1;
}
if(W_VehicleDriver[vehicleid] != playerid)
{
if(IsPlayerConnected(W_VehicleDriver[vehicleid]))
{
if(GetPlayerVehicleID(W_VehicleDriver[vehicleid]) == vehicleid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(W_VehicleDriver[vehicleid], x, y, z);
SetPlayerPos(W_VehicleDriver[vehicleid], x, y, z);
}
}
}
W_PlayerDrive[playerid] = vehicleid;
W_VehicleDriver[vehicleid] = playerid;
}
}
else if(oldstate == PLAYER_STATE_DRIVER)
{
if(W_PlayerDrive[playerid] != -1)//WTF???
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] == playerid)
{
W_VehicleDriver[W_PlayerDrive[playerid]] = -1;
}
W_PlayerDrive[playerid] = -1;
}
}
return 1;
}
public OnPlayerUpdate(playerid)
{
new bool:is_ok = true;
if(W_PlayerDrive[playerid] != -1)
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] != playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z);
is_ok = false;
}
}
return is_ok;
}
P.S. Код не проверял. Нет возможности симулировать ситуацию.
|
Не помогло, проблема осталась
Re: Пульсация здоровья и брони в авто (Не чит) -
White_116 - 15.06.2017
Quote:
Originally Posted by Tumba
Не помогло, проблема осталась
|
Попробуй так...
PHP код:
public OnPlayerUpdate(playerid)
{
new bool:is_ok = true;
if(W_PlayerDrive[playerid] != -1)
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] != playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z);
is_ok = false;
}
}
else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
is_ok = false;
}
return is_ok;
}
Re: Пульсация здоровья и брони в авто (Не чит) -
DimaShift - 16.06.2017
этот баг имеит плагин YSF.so ! если его испозываете удалите его нах
Re: Пульсация здоровья и брони в авто (Не чит) -
Tumba - 16.06.2017
Quote:
Originally Posted by White_116
Попробуй так...
PHP код:
public OnPlayerUpdate(playerid)
{
new bool:is_ok = true;
if(W_PlayerDrive[playerid] != -1)
{
if(W_VehicleDriver[W_PlayerDrive[playerid]] != playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z);
is_ok = false;
}
}
else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
is_ok = false;
}
return is_ok;
}
|
Не помогло. Еще оружие в руках появляется.
Re: Пульсация здоровья и брони в авто (Не чит) -
S4D - 17.06.2017
а может тебя этот игрок с ником TAWER троллит немного
Re: Пульсация здоровья и брони в авто (Не чит) -
Tumba - 17.06.2017
Quote:
Originally Posted by S4D
а может тебя этот игрок с ником TAWER троллит немного
|
Таких игроков много и на себе замечал данную проблему. Если бы любой человек сел в этот же мотоцикл, у него также началось бы.
Re: Пульсация здоровья и брони в авто (Не чит) -
Eims - 17.06.2017
Quote:
Originally Posted by Kolstin
Причем тут плагин? Подтверждаю что баг с синхронизацией транспорта (когда в нем может быть больше 1 водителя) может быть даже на чистом моде.
|
Потому что с плагином этот баг начинает очень активно проявляться. Сам сталкивался с ним в одном из заказов. Но там просто YSF был вхолостую подключён и не использовался, поэтому простое отключение исправило ситуацию.
Re: Пульсация здоровья и брони в авто (Не чит) -
Tumba - 17.06.2017
Quote:
Originally Posted by Eims
Потому что с плагином этот баг начинает очень активно проявляться. Сам сталкивался с ним в одном из заказов. Но там просто YSF был вхолостую подключён и не использовался, поэтому простое отключение исправило ситуацию.
|
а в SKY есть такая проблема?
Re: Пульсация здоровья и брони в авто (Не чит) -
Eims - 17.06.2017
Quote:
Originally Posted by Tumba
а в SKY есть такая проблема?
|
Без понятия. Я не разбирался особо в том, из-за чего эта проблема происходит и как её решить не отключая плагин.
Re: Пульсация здоровья и брони в авто (Не чит) -
PavelKZ - 02.07.2017
Quote:
Originally Posted by Eims
Потому что с плагином этот баг начинает очень активно проявляться. Сам сталкивался с ним в одном из заказов. Но там просто YSF был вхолостую подключён и не использовался, поэтому простое отключение исправило ситуацию.
|
Да именно из-за него появляется эта херня