SA-MP Forums Archive
Дрифт счетчик - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Дрифт счетчик (/showthread.php?tid=503790)



Дрифт счетчик - Kuroki - 31.03.2014

Здравствуйте!
Заметил нестабильность работы дрифт счетчика на сервере при онлайне от 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;




Re: Дрифт счетчик - Dragunovje - 31.03.2014

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


Re: Дрифт счетчик - Stepashka - 31.03.2014

Оптимизация:
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;
}
У тебя походу проблема с таймерами, попробуй их отследить.


Re: Дрифт счетчик - Kuroki - 31.03.2014

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


Re: Дрифт счетчик - Stepashka - 31.03.2014

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


Re: Дрифт счетчик - Kuroki - 31.03.2014

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


Re: Дрифт счетчик - Alexander_Petrov - 31.03.2014

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


Re: Дрифт счетчик - Kuroki - 31.03.2014

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


Re: Дрифт счетчик - Kuroki - 31.03.2014

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


Re: Дрифт счетчик - warlock02 - 31.03.2014

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