Спидометр на TextDraw's (New)

Описание: Уроки по скриптингу
Модератор: SJplayer

Invi_Sasha M
Автор темы, Мл. сержант
Мл. сержант
Аватара
Invi_Sasha M
Автор темы, Мл. сержант
Мл. сержант
Сообщения: 34
Зарегистрирован: 20 мая 2013
С нами: 10 лет 10 месяцев

#1 Invi_Sasha » 22 мая 2013, 22:00

По моему мнения самым распространённым гейммодом для основы является GodFather. Я решил сделать себе спидометр на TextDraw's, немного погуглив я нашёл приличный спидометр и слегка переделал его, изменив формулу нахождения скорости авто на более реальную и добавив информацию о статусе двигателя и замка авто(открыто/закрыто). Вот решил поделиться с вами, p.s. первый раз выкладываю свои сис-мы, не заваливайте минусами .
---
Для начала объявим все переменные для текстдравов и прочего, для этого ко всем new добавляем

Код: Выделить всё

new Float:VehicleHealth// Переменная для определения хп кара 
new obnvseed[64],obnvseed1[64],obnvseed2[64],doorstatus[30];; // Переменный для обновления текстдравов 
new enstatus[30// переменная для обновления статуса двигателя(заведён/заглушён), если у вас нет системы двигателя, не нужно заводить его, то не объявляем эту переменную ака не добавляем 

new Text:TIC// TextDraw Info for Cars 
new Text:TIV// TextDraw Info for BMX 
new Text:THC[MAX_PLAYERS]; // TextDraw Health for Cars 
new Text:TFC[MAX_PLAYERS]; // TextDraw Fuel for Cars 
new Text:TSC[MAX_PLAYERS]; // TextDraw Speed for Cars & BMX 
new Text:TEC[MAX_PLAYERS]; // TextDraw Engine for Cars // если нет системы двигателя то удаляем эту строку 
new Text:TDC[MAX_PLAYERS]; // TextDraw Doors for Cars 
new Text:THV[MAX_PLAYERS]; // TextDraw Health for BMX 

В public OnGameModeInit() создаём наши текстдравы и ставим таймер для обновления 

         TIC 
TextDrawCreate(14,290,"~y~Health:~n~Fuel:~n~Speed:"); 
         
TextDrawFont(TIC,1); 
        
TextDrawBackgroundColor(TIC,COLOR_BLACK); 
        
TextDrawSetOutline(TIC,1); 
        
TextDrawSetShadow(TIC,1); 
        
TIV TextDrawCreate(14,300,"~y~Health:~n~Speed:"); 
        
TextDrawFont(TIV,1); 
        
TextDrawBackgroundColor(TIV,COLOR_BLACK); 
        
TextDrawSetOutline(TIV,1); 
        
TextDrawSetShadow(TIV,1); 
        for(new 
0MAX_PLAYERSi++) 
        { 
            
THC[i] = TextDrawCreate(80,290,"~w~0%"); 
            
TFC[i] = TextDrawCreate(60,300,"~g~0%"); 
            
TSC[i] = TextDrawCreate(75,310,"~w~0 km/h"); 
            
TEC[i] = TextDrawCreate(15,320,"~r~En"); // если у вас нет системы двигателя удаляем эту строку 
            
TDC[i] = TextDrawCreate(50,320,"~g~UnLock"); 
                
TextDrawBackgroundColor(TFC[i],COLOR_BLACK); 
                
TextDrawBackgroundColor(TSC[i],COLOR_BLACK); 
                
TextDrawBackgroundColor(THC[i],COLOR_BLACK); 
                
TextDrawBackgroundColor(TEC[i],COLOR_BLACK); // если у вас нет системы двигателя удаляем эту строку 
                
TextDrawBackgroundColor(TDC[i],COLOR_BLACK); 
                
TextDrawFont(TFC[i],1); 
                
TextDrawFont(TSC[i],1); 
                
TextDrawFont(THC[i],1); 
                
TextDrawFont(TEC[i],1); // если у вас нет системы двигателя удаляем эту строку 
                
TextDrawFont(TDC[i],1); 
                
TextDrawSetOutline(TFC[i],1); 
                
TextDrawSetOutline(TSC[i],1); 
                
TextDrawSetOutline(THC[i],1); 
                
TextDrawSetOutline(TEC[i],1); // если у вас нет системы двигателя удаляем эту строку 
                
TextDrawSetOutline(TDC[i],1); 
                
TextDrawSetShadow(TFC[i],1); 
                
TextDrawSetShadow(TSC[i],1); 
                
TextDrawSetShadow(THC[i],1); 
                
TextDrawSetShadow(TEC[i],1); // если у вас нет системы двигателя удаляем эту строку 
                
TextDrawSetShadow(TDC[i],1); 
                
THV[i] = TextDrawCreate(80,300,"~w~0%"); 
                
TextDrawBackgroundColor(THV[i],COLOR_BLACK); 
                
TextDrawFont(THV[i],1); 
                
TextDrawSetOutline(THV[i],1); 
                
TextDrawSetShadow(THV[i],1); 
        } 
        
SetTimer("SpeedUpdate",150,1); // таймер для обновления 

В public OnPlayerStateChange(playeridnewstateoldstateдобавим скрытие текстдравов если игрок покинул машину ака стал пешеходом и так-же показываем спидометр если он водитель 

        
if(newstate == PLAYER_STATE_ONFOOT// скрываем если покидает 
        

            
TextDrawHideForPlayer(playerid,TIC); 
            
TextDrawHideForPlayer(playerid,TIV); 
            
TextDrawHideForPlayer(playerid,THC[playerid]); 
            
TextDrawHideForPlayer(playerid,TFC[playerid]); 
            
TextDrawHideForPlayer(playerid,TSC[playerid]); 
            
TextDrawHideForPlayer(playerid,THV[playerid]); 
            
TextDrawHideForPlayer(playerid,TEC[playerid]); // если у вас нет системы двигателя удаляем эту строку 
            
TextDrawHideForPlayer(playerid,TDC[playerid]); 
            return 
1
         } 
        if(
newstate == PLAYER_STATE_DRIVER// показываем 
        

                    if(!
IsABMX(newcar)) // если игрок садиться в любой кар кроме велосипеда 
                    

                        
TextDrawShowForPlayer(playerid,TIC); 
                        
TextDrawShowForPlayer(playerid,THC[playerid]); 
                        
TextDrawShowForPlayer(playerid,TFC[playerid]); 
                        
TextDrawShowForPlayer(playerid,TEC[playerid]); // если у вас нет системы двигателя удаляем эту строку 
                        
TextDrawShowForPlayer(playerid,TDC[playerid]); 
                     } 
                     else 
// если игрок садиться в велосипед 
                     

                            
TextDrawShowForPlayer(playerid,TIV); 
                            
TextDrawShowForPlayer(playerid,THV[playerid]); 
                      } 
                     
TextDrawShowForPlayer(playerid,TSC[playerid]); 
                      return 
1
           } 

Теперь в конец мода добавляем сток для определения скорости(км/чи обновления текстдравов 

stock SpeedVehicle
(playerid

        new 
Float:ST[4]; 
    if(
IsPlayerInAnyVehicle(playerid)) 
    
GetVehicleVelocity(GetPlayerVehicleID(playerid),ST[0],ST[1],ST[2]); 
    else 
GetPlayerVelocity(playerid,ST[0],ST[1],ST[2]); 
    
ST[3] = floatsqroot(floatpower(floatabs(ST[0]), 2.0) + floatpower(floatabs(ST[1]), 2.0) + floatpower(floatabs(ST[2]), 2.0)) * 170.3
    return 
floatround(ST[3]); 

forward SpeedUpdate(); 
public 
SpeedUpdate() 

    for(new 
iGetMaxPlayers(); i++) 
        { 
        if(
IsPlayerInAnyVehicle(i)) 
                { 
                        new 
vehicle GetPlayerVehicleID(i); 
                        
GetVehicleHealth(GetPlayerVehicleID(i),VehicleHealth); 
                        new 
engine,lights,alarm,doors,bonnet,boot,objective
                  
GetVehicleParamsEx(vehicle,engine,lights,alarm,doors,bonnet,boot,objective); 
                                if(!
IsABMX(vehicle)) // для всех каров кроме велосипедов 
                                

                                        
format(obnvseed2,64,"~w~%.0f%",VehicleHealth/10); 
                                        if(
Gas[vehicle] > 10
                                        { 
                                                
format(obnvseed,64,"~g~%d%",Gas[vehicle]); 
                                        } 
                                        else 
                                        { 
                                        
format(obnvseed,64,"~r~%d%",Gas[vehicle]); 
                                        } 
                                        
TextDrawSetString(THC[i],obnvseed2); 
                                        
TextDrawSetString(TFC[i],obnvseed); 
                                        
TextDrawSetString(TEC[i],enstatus);  // если у вас нет 
 
системы двигателя удаляем эту строку 
                                        
if(gCarLock[vehicle] == 1) { format(doorstatus,30,"~r~Lock"); } 
                                        else { 
format(doorstatus,30,"~g~UnLock"); } 
                                } 
                                else 
// для велосипеда 
                                

                                    
format(obnvseed2,64,"~w~%.0f%",VehicleHealth/10); 
                                    
TextDrawSetString(THV[i],obnvseed2); 
                                } 
                                
format(obnvseed1,64"~w~%d km/h",SpeedVehicle(i)); 
                                
TextDrawSetString(TSC[i],obnvseed1); 
                        } 
                } 
        } 
    return 
1


Если  у вас нет распределения каров по типам(велосипедыобычные автолодкилётные т/с), то вставляем и этот паблик 
stock IsABMX
(carid

        new 
model GetVehicleModel(carid); 
        if(
model==509||model==481||model==510
        { 
                return 
1
        } 
    return 
0
}   


Автор: Неизвестен


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Уроки»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя