You are not logged in.
Pages: 1
Это не такой уж сложный и навороченный клео-скрипт, к тому же старая версия этого скрипта была сделана мной ещё в 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
        //ß ïîñìîòðåë êàê ðèñóåòñÿ "ýêðàí àâòîìàòà" è êîîðäèíàòû âçÿë îòòòóäà
        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
@VcSaJen -
03F0: draw_toggle 0 03F0: draw_toggle 1
Что тебе дают такие конструкции?
Почему 1 раз не включить, а в конце кода - отключить (или не отключать совсем)... ?
Сначала ты надежда и гордость, 
Потом о спину ломают аршин. (c)БГ
Offline
В мейне есть какой - то тред, который стирает все тектуры, поэтому приходится каждый раз перерисовывать. Два раза - потому - что если только Draw_Toggle 1, то всё нормально работает, но при выходе из раздевалки текстура которая каждый раз перерисовывается, накладывается друг на друга, и через несколько секунд игра зависает. Если draw_toggle, то кажется текстура вообще не будет отображатся. В stripped такой проблемы не было, один раз нарисовал - и текстура ходит до конца.
А ты как сделал, что - бы спидометр отображался по-нормальному?
[---]
В мейне нет никакого треда, который стирает текстуры (это я ступил), проблема решена наполовину - текстура теперь не перерисовывается каждый раз, но из-за чего - непонятно. Я просто убрал в начале и конце Text_Draw_Toggle, оставил в двух местах (там, где нужно стереть или перерисовать).
В оригинальном мейне опкод 03F0 никогда не используется подряд, как-же тогда перерисовываются текстуры там? И вообще 03F0 какой - то глючный (или может я не так понимаю?).
Last edited by VcSaJen (25-06-2008 03:19)
[small][/small]
Offline
@VcSaJen -
А ты как сделал, что - бы спидометр отображался по-нормальному?
1. старт работы спидометра  - включаем draw_toggle 1
2. работает тред с нулевой задержкой (wait 0)
3. завершение работы спидометра (например игрок покинул машину)  - отключаем draw_toggle 0
Сначала ты надежда и гордость, 
Потом о спину ломают аршин. (c)БГ
Offline
Нет, я имею ввиду как перерисовывается (стирается), ведь у спидометра стрелка движется? Если не стирая выводить на экран, то получится не одна стрелка, а очень много и игра зависнет.
[small][/small]
Offline
@VcSaJen -
Если не стирая выводить на экран, то получится не одна стрелка, а очень много
Почему много - одна, всёЖ рисуется в цикле, меняется лишь положение стрелки ...
Сначала ты надежда и гордость, 
Потом о спину ломают аршин. (c)БГ
Offline
@Capushon -
Почему 1 раз не включить [c]03F0: draw_toggle 1[/c]?
И всё же этот способ иногда даёт сбой, например у меня такое всегда при выходе из раздевалки (текстуры в этот момент почему-то перестают стираться, и игра зависает из-за переизбытка текстур).
[small][/small]
Offline
@VcSaJen -
этот способ иногда даёт сбой, например у меня такое всегда при выходе из раздевалки
Понятное дело - ты сам должен учитывать все возможные ситуации, при которых игра может включить draw_toggle 1 из других тредов и исключить их. Мой спидометр работает нормально, потому что он работает только в машине и в миссиях я его отключаю...
Сначала ты надежда и гордость, 
Потом о спину ломают аршин. (c)БГ
Offline
Pages: 1