Автор Тема: Проблема со скриптом охраны  (Прочитано 5153 раз)

Оффлайн drs36

  • Прохожий
  • *
  • Сообщений: 61
  • Репутация: +1/-0
    • Просмотр профиля
Проблема со скриптом охраны
« : Апрель 01, 2014, 07:54:10 pm »
Скрипт на охранника вылетает в чем может быть дело ?

thread 'Actor'   

:Actor
wait 0
if
player.Defined(0)
jf @Actor
if and
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
0AB0:   key_pressed 50

jf @Actor

:Actor2
repeat
wait 0
until player.Defined(0)
model.Load(#AK47)
Model.Load(#BALLAS2)
038B: load_requested_models
3@ = Actor.Create(gang2,#BALLAS2, 1@, 2@, 3@)
$1307 = Marker.CreateAboveActor(3@)
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
0631: put_actor 3@ in_group $PLAYER_GROUP
01B2: give_actor 3@ weapon 30 ammo 6000 // Load the weapon model before using this   
Model.Destroy(#AK47)
Model.Destroy(#BALLAS2)
       
0243: set_actor 3@ ped_stats_to 6       
011A: set_actor 3@ flags 64       
011A: set_actor 3@ flags 16
actor.Health(3@) = 850
04F7: status_text $HLT 0 line 1 'TEXT4'       
while true
wait 0     
$HLT = actor.Health(3@)
         if or
         not player.Defined(0)
         0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET
         then
           
         break
         else
             if
             actor.Dead(3@)
             then
               
             break                     
             end
         end
end
wait 5
0151: remove_status_text $HLT
actor.RemoveReferences(3@)
jump @Actor2
end_thread

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Проблема со скриптом охраны
« Ответ #1 : Апрель 02, 2014, 10:01:58 am »
Это CLEO скрипт?

Если да, то: не юзай глобальные переменные типа $1307, используй локальные 1@ 2@ и т.д.
----------------------------------------------------------------------------------

Далее:
***ты загружаешь модели
model.Load(#AK47)
Model.Load(#BALLAS2)
038B: load_requested_models
А потом сразу создаешь чувака и даешь ему оружие
3@ = Actor.Create(gang2,#BALLAS2, 1@, 2@, 3@)
$1307 = Marker.CreateAboveActor(3@)
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
0631: put_actor 3@ in_group $PLAYER_GROUP
01B2: give_actor 3@ weapon 30 ammo 6000 // Load the weapon model before using this   
, а модели игрока и оружия могут не успеть прогрузиться.
поэтому тебе нужно делать проверку, загрузились ли модели, и лишь потом создавать чела с оружием:
0248:   model #AK47 available
0248:   model #BALLAS2 available
----------------------------------------------------------------------------------

*** ты создаешь чувака:
3@ = Actor.Create(gang2,#BALLAS2, 1@, 2@, 3@)а уже потом получаешь координаты игрока, в которые нужно спавнить "охранника":
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0, т.е. нужно это поменять местами.
----------------------------------------------------------------------------------

***ты используешь одну переменную в двух противоречивых местах:
Цитировать
3@ = Actor.Create(gang2,#BALLAS2, 1@, 2@, 3@)
Это нормально, если ты хочешь оптимизировать код, но лишь если код позволяет это сделать, но у тебя ниже идут строки:
Цитировать
$HLT = actor.Health(3@) // кстати здесь опять нужно заменить глоб. переменную на локальную
         if or
         not player.Defined(0)
         0AB6: store_target_marker_coords_to 1@ 2@ 3@ // IF and SET
         then
           
         break
         else
             if
             actor.Dead(3@)
- и в результате - каша. В общем замени переменную актера 3@ на 4@, чтобы не путалось с координатами.

P.S. Может еще че есть, но пока - это то, что бросилось в глаза.
« Последнее редактирование: Апрель 02, 2014, 10:09:07 am от Shaggy »

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Проблема со скриптом охраны
« Ответ #2 : Апрель 02, 2014, 10:25:53 am »
для загрузки моделей есть опкод -> 038B: load_requested_models
и проверять ничего не надо.
это работает во всей третьей серии.

я заметил только строчку (04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0), которую надо переместить повыше создания актера, и стараться следить, какая у актера переменная будет во всем скрипте. не напутал ли ты чего. дай актеру переменную 4@ это лучший вариант.
I know everything and nothing...

Оффлайн drs36

  • Прохожий
  • *
  • Сообщений: 61
  • Репутация: +1/-0
    • Просмотр профиля
Re: Проблема со скриптом охраны
« Ответ #3 : Апрель 02, 2014, 10:48:33 am »
Благодарю всех за советы.ПОЛУЧИЛОСЬ.

Оффлайн Shagg_E

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 705
  • Репутация: +24/-4
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: Проблема со скриптом охраны
« Ответ #4 : Апрель 02, 2014, 12:22:36 pm »
для загрузки моделей есть опкод -> 038B: load_requested_models
и проверять ничего не надо.
это работает во всей третьей серии.
o_0 хз у меня иногда вылетало, если загружал, и сразу использовал без проверки

Оффлайн drs36

  • Прохожий
  • *
  • Сообщений: 61
  • Репутация: +1/-0
    • Просмотр профиля
Re: Проблема со скриптом охраны
« Ответ #5 : Апрель 02, 2014, 05:56:18 pm »
thread 'Actor'
:Actor
wait 0
if
player.Defined(0)
jf @Actor
if and
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
0AB0: key_pressed 50
jf @Actor
:Actor2
repeat
wait 0
until player.Defined(0)
model.Load(#AK47)
Model.Load(#BALLAS2)
038B: load_requested_models
if
Model.Available(#AK47) // проверяй всегда доступность моделей
Model.Available(#BALLAS2)
else_jump @Actor2
04C4: create_coordinate 4@ 5@ 6@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0 // вот здесь твой косяк

3@ = Actor.Create(gang2,#BALLAS2, 4@, 5@, 6@)
7@ = Marker.CreateAboveActor(3@)
0631: put_actor 3@ in_group $PLAYER_GROUP
01B2: give_actor 3@ weapon 30 ammo 6000 // Load the weapon model before using this
Model.Destroy(#AK47)
Model.Destroy(#BALLAS2)
               
0243: set_actor 3@ ped_stats_to 6               
011A: set_actor 3@ flags 64     
011A: set_actor 3@ flags 16
actor.Health(3@) = 850
04F7: status_text $HLT 0 line 1 'TEXT4'
while true
wait 0
$HLT = actor.Health(3@)
                                 if or
                                 not player.Defined(0)
                                 8104:   actor $PLAYER_ACTOR near_actor 3@ radius 100.0 100.0 50.0 sphere 0
                                 then
                                 else_jump @Actor2
                                 else
                                                 if
                                                 actor.Dead(3@)
                                                 then
                                               
                                                 break                                                         
                                                 end
                                 end
end

actor.RemoveReferences(3@)
jump @Actor2
end_thread

Что надо изменить в коде когда игрок арестован или убит охранник (здоровье которое было у охранника чтоб нового не создавать) после его смерти появлялся рядом с ним ?
« Последнее редактирование: Апрель 02, 2014, 06:04:49 pm от drs36 »

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Проблема со скриптом охраны
« Ответ #6 : Апрель 02, 2014, 06:28:23 pm »
thread 'Actor'

:Actor
wait 0
if
    player.Defined(0)
jf @Actor
if and
    not actor.Driving($PLAYER_ACTOR)
0AB0: key_pressed 50
jf @Actor

:Actor2
wait 0
if
    player.Defined(0)
jf @Actor2
if
    not actor.Driving($PLAYER_ACTOR)
jf @Actor2
model.Load(#AK47)
Model.Load(#BALLAS2)
038B: load_requested_models
04C4: create_coordinate 4@ 5@ 6@ from_actor $PLAYER_ACTOR offset 0.0 1.2 0.0
3@ = Actor.Create(gang2,#BALLAS2, 4@, 5@, 6@)
7@ = Marker.CreateAboveActor(3@)
0631: put_actor 3@ in_group $PLAYER_GROUP
01B2: give_actor 3@ weapon 30 ammo 6000 // Load the weapon model before using this
Model.Destroy(#AK47)
Model.Destroy(#BALLAS2)               
0243: set_actor 3@ ped_stats_to 6               
011A: set_actor 3@ flags 64     
011A: set_actor 3@ flags 16
actor.Health(3@) = 850
0AB1: call_scm_func @AddStatusText 4 VARNUMBER = 31 TYPE = 0 GXT = @StatusText LINE = 1
while true
    wait 0
    if or
        not player.Defined(0)
        8104:   actor $PLAYER_ACTOR near_actor 3@ radius 100.0 100.0 50.0 sphere 0
        actor.Dead(3@)
    then
        Actor.DestroyInstantly(3@)
        0AB1: call_scm_func @RemoveStatusText 1 VARNUMBER = 31
        jump @Actor2
    else
        31@ = actor.Health(3@)
    end
end

:AddStatusText               
0AB1: call_scm_func @__VarToOffset 1 0@ 0@
0AB1: call_scm_func @__LabelToOffset 1 2@ 2@
0AA6: call_method 0x0044CDA0 struct 0x00BA1788 num_params 4 pop 0 ( LINE = 3@ GXT = 2@ TYPE = 1@ VARNUMBER = 0@ )
0AB2: ret 0

:RemoveStatusText
0AB1: call_scm_func @__VarToOffset 1 0@ 0@
0AA6: call_method 0x0044CE80 struct 0x00BA1788 num_params 1 pop 0 ( VARNUMBER = 0@ )
0AB2: ret 0

:__VarToOffset
0A9F: 1@ = current_thread_pointer
0A8E: 2@ = 1@ + 0xDC // mission Flag
0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0
if
    2@ == 1
then
    1@ = 0x00A48960 // mission locals
else
    1@ += 0x3C
end
0@ *= 4
005A: 1@ += 0@ // address of the local variable
1@ -= 0xA49960
0AB2: ret 1 1@
 
:__LabelToOffset
if
    0@ == 0
then
    0AB2: ret 1 0
end
0A9F: 1@ = current_thread_pointer
1@ += 0x10
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // baseIP
0062: 1@ -= 0@ // label address
1@ += 3
0AB2: ret 1 1@
 
:StatusText
0900: 'TEXT4'
0000:
« Последнее редактирование: Апрель 02, 2014, 06:43:08 pm от mfisto »
I know everything and nothing...

Оффлайн drs36

  • Прохожий
  • *
  • Сообщений: 61
  • Репутация: +1/-0
    • Просмотр профиля
Re: Проблема со скриптом охраны
« Ответ #7 : Апрель 02, 2014, 06:57:46 pm »
Все хорошо,но охранник при смерти создается новый,а как сделать чтобы у него было то здоровье когда умер игрок ?

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Проблема со скриптом охраны
« Ответ #8 : Апрель 02, 2014, 07:00:01 pm »
а зачем жизнь сохранять, смысл в чем? если после смерти актера он снова появится
I know everything and nothing...

Оффлайн drs36

  • Прохожий
  • *
  • Сообщений: 61
  • Репутация: +1/-0
    • Просмотр профиля
Re: Проблема со скриптом охраны
« Ответ #9 : Апрель 02, 2014, 07:17:07 pm »
А как еще 2-х создать через переменную ?

Оффлайн mfisto

  • Скриптер
  • Главный Модератор
  • Новичок
  • *****
  • Сообщений: 176
  • Репутация: +19/-0
  • Не пью, не курю, за компьютером сижу...
    • mfistof
    • Просмотр профиля
    • Empire of CJ
Re: Проблема со скриптом охраны
« Ответ #10 : Январь 04, 2015, 01:11:02 am »
По аналогии, создаешь еще одного охранника, через переменную локальную, только в цикле проверяешь уже двоих. Либо на каждого охранника создаешь свой скрипт.
I know everything and nothing...