#1 24-06-2008 14:45

VcSaJen
Registered: 25-08-2006
Posts: 217

Скрипт связанный со здоровьем игрока.

Это не такой уж сложный и навороченный клео-скрипт, к тому же старая версия этого скрипта была сделана мной ещё в 2005 году, но может кому пригодится текстура.

Скрипт - 4-в-1: При повреждения здоровья и брони экран краснеет/
белеет мнгновенно (как в некоторых шутерах), при большом повреждении здоровья экран краснеет на 2 секунды и экран искажается, при малом здоровьи у СиДжея кружится голова (есть в каждом первом моде), идёт кровотечение, экран по краям окрашивается в красный цвет, при большом здоровьи раны заживают (если СиЖдей стоит на месте), при малом СиДжею всё хуже и хуже (Если не в машине и не стоит на месте).
Дополнительно нужно скопировать прикреплённую текстуру (10,5 КБ) в папку \Models\Txd.


{$CLEO}

:PlHealth
thread "Player_Health"
var
  $Player_char: PLAYER
  $Player_Actor: ACTOR
  0@: Integer
  1@: Integer
  2@: Integer
  3@: Integer
  4@: Integer
  5@: Integer
  6@: Integer
  7@: Integer
  33@: Integer
end
const
  PMaxHealth = 0@
  Oldhealth = 1@
  NewHealth = 2@
  DeepWound = 3@
  OldArmor = 4@
  NewArmor = 5@
  I = 6@
  RHealth = 7@
  BloodTexture = 1
  Timer = 33@
end
PMaxHealth = $Player_Actor.Health
DeepWound = 0
wait 10000
$Player_Actor.Health = 45

:HLoops
while true
  wait 25
  if and 
    $Player_char.Defined
    $ONMISSION == 0
  then
    gosub @HLoopHealth
    gosub @HLoopArmor
    gosub @HLoopNearlyDead
    gosub @HLoopRegen
  else
    if not $ONMISSION == 1 
    then
      0391: release_txd_dictionary
    end 
    Oldhealth = PMaxHealth
    NewHealth = PMaxHealth
    DeepWound = 0
    OldArmor = 0
    NewArmor = 0
    $Player_char.SetDrunkVisuals(0)    
    0332: set_actor $Player_Actor bleeding 0
    0922: set_camera_zoom_in_factor 70.0 out_factor 70.0 timelimit 1000 mode 1
    03F0: draw_toggle 1
    03F0: draw_toggle 0    
  end
end

:HLoopHealth
  NewHealth = $Player_Actor.Health
  if OldHealth > NewHealth
  then
    OldHealth -= NewHealth
    if OldHealth >= 30 
    then
    // ýòîì ó÷àñòêå âîçìîæíû ãëþêè èç-çà FADE
      0169: set_fade_color_RGB 255 0 0   
      fade 0 250
      wait 500
      0922: set_camera_zoom_in_factor 120.0 out_factor 70.0 timelimit 17000 mode 1          
      fade 1 2500
      wait 3000
      0169: set_fade_color_RGB 0 0 0    
    else
      0169: set_fade_color_RGB 255 0 0
      fade 0 500
      wait 50
      fade 1 100
      wait 115
      0169: set_fade_color_RGB 0 0 0
    end
  else
  
  end
  OldHealth = $Player_Actor.Health
return

:HLoopArmor
//NewArmor = $Player_Actor.Armour
  04DD: NewArmor = actor $PLAYER_ACTOR armour 
  if OldArmor > NewArmor
  then
    0169: set_fade_color_RGB 255 255 255
    fade 0 500
    wait 50
    fade 1 100
    wait 115
    0169: set_fade_color_RGB 0 0 0
  else
  
  end
//OldArmor = $Player_Actor.Armour
  04DD: OldArmor = actor $PLAYER_ACTOR armour 
return

:HLoopNearlyDead
if Oldhealth < 50 
then
  if DeepWound == 0 
  then
    0169: set_fade_color_RGB 255 0 0   
    fade 0 250
    wait 500
    0922: set_camera_zoom_in_factor 120.0 out_factor 70.0 timelimit 25000 mode 1
    052C: set_player $PLAYER_CHAR drunk_visuals 255
    0390: load_txd_dictionary 'PHealth'
    038F: load_texture "Blood" as BloodTexture
    0332: set_actor $Player_Actor bleeding 1
    038D: draw_texture BloodTexture position 160.0 112.0 size  320.0  224.0 RGBA 150 150 150 250
    038D: draw_texture BloodTexture position 480.0 112.0 size -320.0  224.0 RGBA 150 150 150 250
    038D: draw_texture BloodTexture position 480.0 336.0 size -320.0 -224.0 RGBA 150 150 150 250
    038D: draw_texture BloodTexture position 160.0 336.0 size  320.0 -224.0 RGBA 150 150 150 250
    fade 1 2500                                                 
    wait 3000
    0169: set_fade_color_RGB 0 0 0  
    DeepWound = 1
  else
  
  end  
else
  if DeepWound == 1
  then
    0332: set_actor $Player_Actor bleeding 0     
    for I = 255 downto 0
      if and
        $Player_char.Defined
        $ONMISSION == 0
      then
        wait 30
        03F0: draw_toggle 0
        03F0: draw_toggle 1
        //&#223; &#239;&#238;&#241;&#236;&#238;&#242;&#240;&#229;&#235; &#234;&#224;&#234; &#240;&#232;&#241;&#243;&#229;&#242;&#241;&#255; "&#253;&#234;&#240;&#224;&#237; &#224;&#226;&#242;&#238;&#236;&#224;&#242;&#224;" &#232; &#234;&#238;&#238;&#240;&#228;&#232;&#237;&#224;&#242;&#251; &#226;&#231;&#255;&#235; &#238;&#242;&#242;&#242;&#243;&#228;&#224;
        038D: draw_texture BloodTexture position 160.0 112.0 size  320.0  224.0 RGBA 150 150 150 I
        038D: draw_texture BloodTexture position 480.0 112.0 size -320.0  224.0 RGBA 150 150 150 I
        038D: draw_texture BloodTexture position 480.0 336.0 size -320.0 -224.0 RGBA 150 150 150 I
        038D: draw_texture BloodTexture position 160.0 336.0 size  320.0 -224.0 RGBA 150 150 150 I
        052C: set_player $PLAYER_CHAR drunk_visuals I        
        gosub @HLoopHealth
        gosub @HLoopArmor
      else
        GoTo @HLoops        
        break
      end
    end
    03F0: draw_toggle 1
    wait 500
    0391: release_txd_dictionary
    DeepWound = 0
  end
end
return

:HLoopRegen
RHealth = $Player_Actor.Health
if and 
  RHealth >= 80
  RHealth < PMaxHealth 
  $Player_Actor.Stopped
  Timer >= 1000
then
  Timer = 0
  Rhealth += 1   
  $Player_Actor.Health = Rhealth
else
  if and
    RHealth < 15
    RHealth >= 0 
    not $Player_Actor.Stopped
    not $Player_Actor.Driving
    Timer >= 5000
  then
    Timer = 0
    Rhealth -= 1   
    $Player_Actor.Health = Rhealth
  end
end
return

[---]
Обновил скрипт.

Last edited by VcSaJen (25-06-2008 03:17)


[small][/small]

Offline

#2 24-06-2008 17:52

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Скрипт связанный со здоровьем игрока.

@VcSaJen -

03F0: draw_toggle 0
03F0: draw_toggle 1

Что тебе дают такие конструкции?
Почему 1 раз не включить, а в конце кода - отключить (или не отключать совсем)... ?


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#3 25-06-2008 02:41

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: Скрипт связанный со здоровьем игрока.

В мейне есть какой - то тред, который стирает все тектуры, поэтому приходится каждый раз перерисовывать. Два раза - потому - что если только Draw_Toggle 1, то всё нормально работает, но при выходе из раздевалки текстура которая каждый раз перерисовывается, накладывается друг на друга, и через несколько секунд игра зависает. Если draw_toggle, то кажется текстура вообще не будет отображатся. В stripped такой проблемы не было, один раз нарисовал - и текстура ходит до конца.
А ты как сделал, что - бы спидометр отображался по-нормальному?
[---]
В мейне нет никакого треда, который стирает текстуры (это я ступил), проблема решена наполовину - текстура теперь не перерисовывается каждый раз, но из-за чего - непонятно. Я просто убрал в начале и конце Text_Draw_Toggle, оставил в двух местах (там, где нужно стереть или перерисовать).
В оригинальном мейне опкод 03F0 никогда не используется подряд, как-же тогда перерисовываются текстуры там? И вообще 03F0 какой - то глючный (или может я не так понимаю?).

Last edited by VcSaJen (25-06-2008 03:19)


[small][/small]

Offline

#4 25-06-2008 08:32

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Скрипт связанный со здоровьем игрока.

@VcSaJen -

А ты как сделал, что - бы спидометр отображался по-нормальному?

1. старт работы спидометра  - включаем draw_toggle 1
2. работает тред с нулевой задержкой (wait 0)
3. завершение работы спидометра (например игрок покинул машину)  - отключаем draw_toggle 0


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#5 25-06-2008 12:44

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: Скрипт связанный со здоровьем игрока.

Нет, я имею ввиду как перерисовывается (стирается), ведь у спидометра стрелка движется? Если не стирая выводить на экран, то получится не одна стрелка, а очень много и игра зависнет.


[small][/small]

Offline

#6 25-06-2008 14:04

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Скрипт связанный со здоровьем игрока.

@VcSaJen -

Если не стирая выводить на экран, то получится не одна стрелка, а очень много

Почему много - одна, всёЖ рисуется в цикле, меняется лишь положение стрелки ...


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#7 26-06-2008 04:20

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: Скрипт связанный со здоровьем игрока.

@Capushon -

Почему 1 раз не включить [c]03F0: draw_toggle 1[/c]?

И всё же этот способ иногда даёт сбой, например у меня такое всегда при выходе из раздевалки (текстуры в этот момент почему-то перестают стираться, и игра зависает из-за переизбытка текстур).


[small][/small]

Offline

#8 26-06-2008 16:39

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: Скрипт связанный со здоровьем игрока.

@VcSaJen -

этот способ иногда даёт сбой, например у меня такое всегда при выходе из раздевалки

Понятное дело - ты сам должен учитывать все возможные ситуации, при которых игра может включить draw_toggle 1 из других тредов и исключить их. Мой спидометр работает нормально, потому что он работает только в машине и в миссиях я его отключаю...


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

Board footer

Powered by FluxBB