Выносливость

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

Aleksandr M
Автор темы, Модератор
Модератор
Аватара
Aleksandr M
Автор темы, Модератор
Модератор
Сообщения: 55
Зарегистрирован: 4 июня 2013
С нами: 10 лет 9 месяцев

#1 Aleksandr » 22 июля 2013, 19:23

Выносливость
Автор <BaRReT[T]>

  • При ходьбе/беге увеличивается усталось и растет выносливость
  • Скорость усталости зависит от того как вы бегаете/ходите
  • Если усталость заполнена, то активируется анимка усталости и игрока замораживает пока он не отдохнет

Ко всем переменным:

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

new Float:Vin[MAX_PLAYERS];
new 
Float:MaxVin[MAX_PLAYERS];
new 
VinTimer;
new 
Text:Textdraw0[MAX_PLAYERS];
new 
Text:Textdraw1[MAX_PLAYERS]; 


К форвардам:

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

forward Vint(); 


В OnPlayerConnect:

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

    Vin[playerid] = 100.0;
    
MaxVin[playerid] = 100.0;
    
Textdraw0[playerid] = TextDrawCreate(611.000000104.000000"1");
    
TextDrawBackgroundColor(Textdraw0[playerid], 255);
    
TextDrawFont(Textdraw0[playerid], 1);
    
TextDrawLetterSize(Textdraw0[playerid], 0.0000000.599999);
    
TextDrawColor(Textdraw0[playerid], -1);
    
TextDrawSetOutline(Textdraw0[playerid], 0);
    
TextDrawSetProportional(Textdraw0[playerid], 1);
    
TextDrawSetShadow(Textdraw0[playerid], 1);
    
TextDrawUseBox(Textdraw0[playerid], 1);
    
TextDrawBoxColor(Textdraw0[playerid], 255);
    
TextDrawTextSize(Textdraw0[playerid], 494.0000000.000000);

    
Textdraw1[playerid] = TextDrawCreate(609.000000107.000000"1");
    
TextDrawBackgroundColor(Textdraw1[playerid], 255);
    
TextDrawFont(Textdraw1[playerid], 1);
    
TextDrawLetterSize(Textdraw1[playerid], 0.000000, -0.000000);
    
TextDrawColor(Textdraw1[playerid], -1);
    
TextDrawSetOutline(Textdraw1[playerid], 0);
    
TextDrawSetProportional(Textdraw1[playerid], 1);
    
TextDrawSetShadow(Textdraw1[playerid], 1);
    
TextDrawUseBox(Textdraw1[playerid], 1);
    
TextDrawBoxColor(Textdraw1[playerid], 1263225855);
    
TextDrawTextSize(Textdraw1[playerid], 496.000000, -2.000000);
    
TextDrawHideForPlayer(playerid,Textdraw0[playerid]);
    
TextDrawHideForPlayer(playerid,Textdraw1[playerid]); 


В OnPlayerSpawn:

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

    TextDrawShowForPlayer(playerid,Textdraw0[playerid]);
    
TextDrawShowForPlayer(playerid,Textdraw1[playerid]); 


В OnGameModeInit:

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

    VinTimer SetTimer("Vint",10,1); 


В OnGameModeExit:

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

    KillTimer(VinTimer); 


Сам паблик выносливости в конец мода:

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

public Vint()
{
    new 
al[32];
     new 
an[32];
    for(new 
i=0;i<MAX_PLAYERS;i++)
    {
        if(!
IsPlayerConnected(i)) continue;
        
TextDrawHideForPlayer(i,Textdraw1[i]);
        
TextDrawTextSize(Textdraw1[i], 496+109/MaxVin[i]*Vin[i], -2.0);
        
TextDrawShowForPlayer(i,Textdraw1[i]);
        if(!
GetPlayerSpeed(i) && MaxVin[i] > Vin[i]) Vin[i] += 0.01;
        if(
GetPVarInt(i,"Ustal"))
        {
            if(
Vin[i] >= 10)
            {
                
TogglePlayerControllable(i,1);
                
ClearAnimations(i);
                
SetPVarInt(i,"Ustal",0);
            }
            else continue;
        }
        if(!
strcmp(al,"PED") && !strcmp(an,"RUN_PLAYER"))
          {
              if(
GetPlayerSpeed(i) > 130)
              {
                  if(
Vin[i] < 0.05)
                  {
                      
TogglePlayerControllable(i,0);
                      
SetPVarInt(i,"Ustal",1);
                       
ApplyAnimation(i,"FAT","IDLE_tired",4.0,1,0,0,0,0,1);
                }
                  
Vin[i] -= 0.05;
                  
MaxVin[i] += 0.005;
                  continue;
            }
            else if(
GetPlayerSpeed(i) > 50)
            {
                   if(
Vin[i] < 0.02)
                  {
                      
TogglePlayerControllable(i,0);
                      
SetPVarInt(i,"Ustal",1);
                     
ApplyAnimation(i,"FAT","IDLE_tired",4.0,1,0,0,0,0,1);
                }
                  
Vin[i] -= 0.02;
                  
MaxVin[i] += 0.002;
                  continue;
            }
            else if(
GetPlayerSpeed(i) > 0)
            {
                   if(
Vin[i] < 0.005)
                  {
                      
TogglePlayerControllable(i,0);
                      
SetPVarInt(i,"Ustal",1);
                     
ApplyAnimation(i,"FAT","IDLE_tired",4.0,1,0,0,0,0,1);
                }
                  
Vin[i] -= 0.005;
                  
MaxVin[i] += 0.0005;
                  continue;
            }
        }
    }
    return 
1;


Для выносливости нужна функция вычисления скорости движения игрока, её так же в конец мода:

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

stock GetPlayerSpeed(playerid)
{
    new 
Float:ST1[4];
    
GetPlayerVelocity(playerid,ST1[0],ST1[1],ST1[2]);
    
ST1[3] = floatsqroot(floatpower(floatabs(ST1[0]), 2.0) + floatpower(floatabs(ST1[1]), 2.0) + floatpower(floatabs(ST1[2]), 2.0)) * 1000;
    return 
floatround(ST1[3]);


Miranda F
Старшина
Старшина
Аватара
Miranda F
Старшина
Старшина
Сообщения: 143
Зарегистрирован: 5 июля 2013
С нами: 10 лет 8 месяцев

#2 Miranda » 23 июля 2013, 11:54

Aleksandr писал(а):Если усталость заполнена, то активируется анимка усталости и игрока замораживает пока он не отдохнет

Как то ни к чему всё это
Изображение

Prezident M
Ефрейтор
Ефрейтор
Аватара
Prezident M
Ефрейтор
Ефрейтор
Сообщения: 28
Зарегистрирован: 9 июля 2013
С нами: 10 лет 8 месяцев

#3 Prezident » 17 января 2014, 22:09

Miranda писал(а):Как то ни к чему всё это
Ну кому как

Дим M
Администратор
Администратор
Аватара
Дим M
Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#4 Дим » 17 января 2014, 22:26

Иногда бесят вот такие "плюшки"
[center]i love you [s]mxIni[/s] Mysql[/center]

SJplayer M
Модератор
Модератор
Аватара
SJplayer M
Модератор
Модератор
Сообщения: 196
Зарегистрирован: 25 мая 2013
С нами: 10 лет 10 месяцев

#5 SJplayer » 18 января 2014, 10:29

Дим писал(а):Иногда бесят вот такие "плюшки"
Хоть какое то разнообразие


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

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

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