Дрифт счетчик
#1

Здравствуйте!
Заметил нестабильность работы дрифт счетчика на сервере при онлайне от 30 человек, он просто не засчитывает очки и текстдравы появляются и пропадают, но когда онлайн до 30 то работает нормально!
Подскажите из-за чего это может быть
Вот код:
PHP код:
ServerTimerTwo SetTimer("PlayerDrift",500,1); 
PHP код:
public PlayerDrift()
{
    for(new 
PlayerPlayer GetMaxPlayers(); Player++)
    {
        if(
IsPlayerConnected(Player) && GetPlayerState(Player) == PLAYER_STATE_DRIVER && VehicleIsCar(GetPlayerVehicleID(Player)))
        {
            new 
Float:Angle;
            
GetVehicleZAngle(GetPlayerVehicleID(Player),Angle);
            if(
floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) < 90.0 && floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) > 10.0 && VehicleSpeed(GetPlayerVehicleID(Player)) < 300 && VehicleSpeed(GetPlayerVehicleID(Player)) > 30)
            {
                if(
PlayerMoney[Player] == && PlayerScore[Player] == && PlayerCombo[Player] == 1)
                {
                    
                    
TextDrawShowForPlayer(Player,ServerTextDrawThree[Player]);
                    
TextDrawShowForPlayer(Player,ServerTextDrawFour[Player]);
                    
TextDrawShowForPlayer(Player,ServerTextDrawFive[Player]);
                    
TextDrawSetString(ServerTextDrawThree[Player]," ");
                    
TextDrawSetString(ServerTextDrawFour[Player]," ");
                    
TextDrawSetString(ServerTextDrawFive[Player]," ");
                }
                
PlayerMoney[Player] += floatround(floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) * (VehicleSpeed(GetPlayerVehicleID(Player)) * 0.1)) / 10;
                
PlayerScore[Player] += floatround(floatabs(floatsub(Angle,PlayerTheoreticAngle(Player))) * * (VehicleSpeed(GetPlayerVehicleID(Player)) * 0.1)) / 10;
                
PlayerCombo[Player] = PlayerScore[Player] / 1000;
                if(
PlayerCombo[Player] < 1PlayerCombo[Player] = 1;
                new 
String[100];
                
format(String,sizeof(String),"~r~~h~%d~g~$ ~w~+",PlayerMoney[Player]);
                
TextDrawSetString(ServerTextDrawThree[Player],String);
                
format(String,sizeof(String),"~r~~h~%d~g~ ~w~+",PlayerScore[Player]);
                
TextDrawSetString(ServerTextDrawFour[Player],String);
                
format(String,sizeof(String),"~W~~H~X%d",PlayerCombo[Player]);
                
TextDrawSetString(ServerTextDrawFive[Player],String);
                
//  KillTimer(PlayerTimerOne[Player]);
                
PlayerTimerOne[Player] = SetTimerEx("PlayerDriftEnd",3000,0,"d",Player);
            }
        }
    }
    return 
1;

И вот когда игроку засчитывают очки
PHP код:
public PlayerDriftEnd(Player)
{
    
GiveMoney(Player,PlayerMoney[Player]);
    
SetPlayerScore(Player,GetPlayerScore(Player) + PlayerScore[Player] * PlayerCombo[Player]);
    
TextDrawHideForPlayer(Player,ServerTextDrawThree[Player]);
    
TextDrawHideForPlayer(Player,ServerTextDrawFour[Player]);
    
TextDrawHideForPlayer(Player,ServerTextDrawFive[Player]);
    
TextDrawSetString(ServerTextDrawThree[Player]," ");
    
TextDrawSetString(ServerTextDrawFour[Player]," ");
    
TextDrawSetString(ServerTextDrawFive[Player]," ");
    
PlayerMoney[Player] = 0;
    
PlayerScore[Player] = 0;
    
PlayerCombo[Player] = 1;
    
KillTimer(PlayerTimerOne[Player]);
    return 
1;

Reply
#2

а при дисконекте удаляешь/скрываешь текстдравы?
Reply
#3

Оптимизация:
pawn Код:
public PlayerDrift() {
    for (new Player, PlayerVehicleID = INVALID_VEHICLE_ID; Player < GetMaxPlayers(); Player++) {
        if (IsPlayerConnected(Player) && GetPlayerState(Player) == PLAYER_STATE_DRIVER && VehicleIsCar((PlayerVehicleID = GetPlayerVehicleID(Player)))) {
            new Float:Angle,
                vehicleSpeed = VehicleSpeed(PlayerVehicleID),
                Float:playerTheoreticAngle = PlayerTheoreticAngle(Player);
            GetVehicleZAngle(PlayerVehicleID, Angle);
            Angle = floatabs(floatsub(Angle, playerTheoreticAngle));
            if (10.0 < Angle && Angle < 90.0 && 30 < vehicleSpeed && vehicleSpeed < 300) {
                if (!PlayerMoney[Player] && !PlayerScore[Player] && PlayerCombo[Player] == 1) {
                     
                    TextDrawShowForPlayer(Player, ServerTextDrawThree[Player]);
                    TextDrawShowForPlayer(Player, ServerTextDrawFour[Player]);
                    TextDrawShowForPlayer(Player, ServerTextDrawFive[Player]);
                    TextDrawSetString(ServerTextDrawThree[Player]," ");
                    TextDrawSetString(ServerTextDrawFour[Player]," ");
                    TextDrawSetString(ServerTextDrawFive[Player]," ");
                }
                PlayerMoney[Player] += floatround((Angle * (vehicleSpeed * 0.1)) / 10);
                PlayerScore[Player] += floatround((Angle * 3 * (vehicleSpeed* 0.1)) / 10);
                PlayerCombo[Player] = PlayerScore[Player] / 1000;
                if (PlayerCombo[Player] < 1) {
                    PlayerCombo[Player] = 1;
                }
                new String[100];
                format(String, sizeof(String),"~r~~h~%d~g~$ ~w~+", PlayerMoney[Player]);
                TextDrawSetString(ServerTextDrawThree[Player], String);
                format(String, sizeof(String),"~r~~h~%d~g~ ~w~+", PlayerScore[Player]);
                TextDrawSetString(ServerTextDrawFour[Player], String);
                format(String, sizeof(String),"~W~~H~X%d",PlayerCombo[Player]);
                TextDrawSetString(ServerTextDrawFive[Player], String);
                PlayerTimerOne[Player] = SetTimerEx("PlayerDriftEnd", 3000, 0, "d", Player);
            }
        }
    }
    return 1;
}
У тебя походу проблема с таймерами, попробуй их отследить.
Reply
#4

Quote:
Originally Posted by Dragunovje
Посмотреть сообщение
а при дисконекте удаляешь/скрываешь текстдравы?
Удаляю все, но тут сами очки не идут игроку по коду что-то с таймерами наверное
А как их отследить то ? по коду я не вижу ошибок удаляю правильно
Reply
#5

Quote:
Originally Posted by Kuroki
Посмотреть сообщение
Удаляю все, но тут сами очки не идут игроку по коду что-то с таймерами наверное
А как их отследить то ? по коду я не вижу ошибок удаляю правильно
debug
Reply
#6

нечего не обнаружил
Reply
#7

Ничего не обнаружил дебагом? Значит не сделал нормальный дебаг
Reply
#8

Quote:
Originally Posted by Alexander_Petrov
Посмотреть сообщение
Ничего не обнаружил дебагом? Значит не сделал нормальный дебаг
подскажите тогда как правильно
Reply
#9

Знает кто-то? в чем трабл
Reply
#10

Quote:
Originally Posted by Kuroki
Посмотреть сообщение
Знает кто-то? в чем трабл
В коде.
Не стоит благодарностей.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)