Пульсация здоровья и брони в авто (Не чит)
#1

Добрый день, столкнулся с такой проблемой, что когда игрок сидит в автомобиле на водительском месте и машина стоит на месте у игрока пульсирует здоровье и броня. Это происходит лишь с некоторыми игроками, при каких условиях не знаю. Путем поиска в гугле нашел сообщение о такой же проблеме https://github.com/kurta999/YSF/issues/24, там говорят, что это происходит, когда у автомобиля вдруг становится 2 водителя, но как такое возможно не понял. Также там описан способ исправить это, но я не до конца понял. Может кто-нибудь сталкивался с таким и знает решение?
Reply
#2

По ссылке всё написано. Эта проблема возникает когда у транспорта два водителя (баги синхронизации). И дано следующее решение: тебе нужно выбрать только одного водителя, а для другого выключать синхронизацию (return 0 в OnPlayerUpdate).

Выбрать одного водителя можно проверяя анимации, тайминги входа, тайминги паузы...
Reply
#3

Это легко с эмулировать, отжать у афк машину и выехать из зоны стрима. Лично я высаживаю предыдущего водителя. Кстати, водителей может быть более 2-х игроков.
Reply
#4

Довольно часто это происходит, чтобы выключать синхронизацию игрокам. То есть когда такое возникает, для двух игроков GetPlayerVehicleID вернет одно значение и у обоих будет PLAYER_STATE_DRIVER ?
Reply
#5

Как-то так всё и решается.
PHP код:
new W_VehicleDriver[MAX_VEHICLES] = {-1, ...};
new 
W_PlayerDrive[MAX_PLAYERS] = {-1, ...};
public 
OnPlayerConnect(playerid)
{
    
W_PlayerDrive[playerid] = -1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    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(playeridnewstateoldstate)
{
    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:xFloat:yFloat:z;
                        
GetPlayerPos(W_VehicleDriver[vehicleid], xyz);
                        
SetPlayerPos(W_VehicleDriver[vehicleid], xyz);
                    }
                }
            }
            
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:xFloat:yFloat:z;
            
GetPlayerPos(playeridxyz);
            
SetPlayerPos(playeridxyz);
            
is_ok false;
        }
    }
    return 
is_ok;

P.S. Код не проверял. Нет возможности симулировать ситуацию.
Reply
#6

Quote:
Originally Posted by White_116
Посмотреть сообщение
Это легко с эмулировать, отжать у афк машину и выехать из зоны стрима. Лично я высаживаю предыдущего водителя. Кстати, водителей может быть более 2-х игроков.
Попробовали, не сработало.
Reply
#7

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(playeridreason)
{
    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(playeridnewstateoldstate)
{
    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:xFloat:yFloat:z;
                        
GetPlayerPos(W_VehicleDriver[vehicleid], xyz);
                        
SetPlayerPos(W_VehicleDriver[vehicleid], xyz);
                    }
                }
            }
            
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:xFloat:yFloat:z;
            
GetPlayerPos(playeridxyz);
            
SetPlayerPos(playeridxyz);
            
is_ok false;
        }
    }
    return 
is_ok;

P.S. Код не проверял. Нет возможности симулировать ситуацию.
Не помогло, проблема осталась
Reply
#8

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:xFloat:yFloat:z;
            
GetPlayerPos(playeridxyz);
            
SetPlayerPos(playeridxyz);
            
is_ok false;
        }
    }
    else if(
GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
        
is_ok false;
    }
    return 
is_ok;

Reply
#9

этот баг имеит плагин YSF.so ! если его испозываете удалите его нах
Reply
#10

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:xFloat:yFloat:z;
            
GetPlayerPos(playeridxyz);
            
SetPlayerPos(playeridxyz);
            
is_ok false;
        }
    }
    else if(
GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
        
is_ok false;
    }
    return 
is_ok;

Не помогло. Еще оружие в руках появляется.
Reply
#11

а может тебя этот игрок с ником TAWER троллит немного
Reply
#12

Quote:
Originally Posted by S4D
View Post
а может тебя этот игрок с ником TAWER троллит немного
Таких игроков много и на себе замечал данную проблему. Если бы любой человек сел в этот же мотоцикл, у него также началось бы.
Reply
#13

Quote:
Originally Posted by Kolstin
View Post
Причем тут плагин? Подтверждаю что баг с синхронизацией транспорта (когда в нем может быть больше 1 водителя) может быть даже на чистом моде.
Потому что с плагином этот баг начинает очень активно проявляться. Сам сталкивался с ним в одном из заказов. Но там просто YSF был вхолостую подключён и не использовался, поэтому простое отключение исправило ситуацию.
Reply
#14

Quote:
Originally Posted by Eims
View Post
Потому что с плагином этот баг начинает очень активно проявляться. Сам сталкивался с ним в одном из заказов. Но там просто YSF был вхолостую подключён и не использовался, поэтому простое отключение исправило ситуацию.
а в SKY есть такая проблема?
Reply
#15

Quote:
Originally Posted by Tumba
View Post
а в SKY есть такая проблема?
Без понятия. Я не разбирался особо в том, из-за чего эта проблема происходит и как её решить не отключая плагин.
Reply
#16

Quote:
Originally Posted by Eims
View Post
Потому что с плагином этот баг начинает очень активно проявляться. Сам сталкивался с ним в одном из заказов. Но там просто YSF был вхолостую подключён и не использовался, поэтому простое отключение исправило ситуацию.
Да именно из-за него появляется эта херня
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)