[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Игры серии GTA » GTA Vice City » Проблема со скриптом (Помогите)
Проблема со скриптом
Drs36
Проверенные
28.01.14 21:59
Offline
Код
thread 'actor'  

:actor_10
Model.Load(#RUGER)
Model.Load(#PGA)

:actor_19
wait 0  
if and

05EE:  key_pressed 49//VK_...  
jf @actor_19  
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_actor offset 1.0 0.0 0.0  
11@ = Actor.Create(Gang7, #PGA, 1@, 2@, 3@)
$1307 = Marker.CreateAboveActor(11@)
01B2: give_actor 11@ weapon 27 ammo 9999 // Load the weapon model before using this
01DE: tie_actor 11@ to_actor $player_actor  
0243: set_actor 11@ ped_stats_to 6  
011A: set_actor 11@ flags 64  
011A: set_actor 11@ flags 16

$1444 = actor.Health(11@)  

    

02E2: set_actor 11@ weapon_accuracy_to 100
  actor.Health(11@) = 850
$1444 = actor.Health(11@)
04F7: status_text $1444 0 line 1 'TEXT4'

:actor_185
not actor.Dead(11@)
$1444 = actor.Health(11@)
actor.Dead(11@)

0151: remove_status_text $1444  

wait 1000  
jump @actor_10


Как сделать чтоб созданный охранник после смерти игрока подбегал к нему(когда актер подъезжает к нему на машине) ?
Отредактировал Drs36 - Среда, 29.01.14, 17:53

Vital
Друзья
Скриптер
30.01.14 18:45
Offline
1) Модели нужно опять же загрузить и потом выгрузить, об этом я написал в теме, где вопрос про GTA 3.
2) if and содержит у тебя одну проверку, хотя для одиночных условий нужен просто один if.
3) Опять (not) actor.dead без if
4) Ты хочешь, чтобы охранник продолжал охрану даже после смерти игрока? То есть, игрок умер/арестован, а потом охранник прибежал обратно. Если так, то лучше сделать телепорт, а не заставлять охранника бежать к игроку (снова привязывать его к игроку опкодом 01DE или как-то иначе), так как ИИ бега к цели у ботов крайне низкий, они будут полчаса бежать к точке, если ещё не застрянут на полпути. Предлагаю телепортацию к игроку, для этого надо делать примерно так:
Код

repeat
wait 0
until not actor.Dead($PLAYER_ACTOR)
actor.StorePos($PLAYER_ACTOR,0@,1@,2@)
02C0: set 0@ 1@ 2@ to_ped_path_coords_closest_to 0@ 1@ 2@
actor.PutAt(11@,0@,1@,2@)

Это вставляешь после проверки на смерть игрока и после, при необходимости, конечно, снова используешь команду привязки актёра к игроку. Думаю, будет работать.
2109: create_special_actor $VITAL in_front_of_computer

Drs36
Проверенные
30.01.14 18:52
Offline
Код
thread 'actor'

:actor_10
Model.Load(#RUGER)
Model.Load(#PGA)

:actor_19
wait 0
if
05EE: key_pressed 49 //VK_...
else_jump @ACTOR_19
04C4: create_coordinate 1@ 2@ 3@ from_actor $PLAYER_actor offset 1.0 0.0 0.0
$1497 = actor.Create(Gang7, #PGA, 1@, 2@, 3@)
01B2: give_actor $1497 weapon 27 ammo 9999 // Load the weapon model before using this
0243: set_actor $1497 ped_stats_to 6
011A: set_actor $1497 flags 64
011A: set_actor $1497 flags 16
01DF: tie_actor $1497 to_player $PLAYER_CHAR
02E2: set_actor $1497 weapon_accuracy_to 100

04F7: status_text $1444 0 line 1 'TEXT4'
$1444 = Actor.Health($1497)
Actor.Health($1497) = 9087
while not Actor.Dead($1497)
wait 0
$1444 = Actor.Health($1497)
end

:ACTOR_196
not Actor.Dead($1497)
01DE: tie_actor $1497 to_actor $PLAYER_ACTOR

wait 0
$1444 = Actor.Health($1497)
jump @ACTOR_196
0151: remove_status_text $1444

:ACTOR_241
wait 0
if
Actor.Dead($1497)
else_jump @ACTOR_241
wait 10
jump @ACTOR_10


Как сделать чтобы оранник после смерти игрока снова защищал его ?
Отредактировал Drs36 - Суббота, 01.02.14, 17:13

HYPERMUV
Проверенные
02.02.14 13:19
Offline
Drs36,
Могу предложить добавить проверку, если я умер, то через две секунды охранник ко мне тп и снова защищает меня. Думаю так. Выглядить должно так:
Код

if
actor.Dead($PLAYER_ACTOR)
jf @Metka
wait 2000
actor.StorePos($PLAYER_ACTOR,1@,2@,3@)
1@ += 1.0
actor.PutAt($1497,1@,2@,3@)
01DE: tie_actor $1497 to_actor $PLAYER_ACTOR

Попробуй это, вставишь куда ни будь сам в свой код, я его не совсем понимаю если честно.

Vital
Друзья
Скриптер
03.02.14 23:45
Offline
Да, код лучше подправить тебе самому, иначе будет сложно учиться. Но можно поступить примерно так, как сказал HYPERMUV, то есть вместо repeat..until (в моём коде) поставить проверку. И можно сразу объединить проверку на смерть игрока и охранника (одну в одном if, другую - в if, которое пойдёт в else первого, если ты умеешь делать высокоуровневый код). Советую отходить от меток, у меня есть некоторые видеоуроки по меткам, проверкам, циклам.
2109: create_special_actor $VITAL in_front_of_computer

Drs36
Проверенные
04.02.14 00:10
Offline
Цитата HYPERMUV ()
if
actor.Dead($PLAYER_ACTOR)
jf @Metka
wait 2000
actor.StorePos($PLAYER_ACTOR,1@,2@,3@)
1@ += 1.0
actor.PutAt($1497,1@,2@,3@)
01DE: tie_actor $1497 to_actor $PLAYER_ACTOR


После чего это вставлять ?

Vital
Друзья
Скриптер
04.02.14 18:38
Offline
Скрипт для .scm, если переделывать для cleo, то надо будет кое-что изменить и убрать текст.
Код
:Actor
wait 0
if
player.Defined(0)
jf @Actor
if and
not actor.Dead($PLAYER_ACTOR)
not actor.Driving($PLAYER_ACTOR)
05EE:   key_pressed 49  // VK_...
jf @Actor

:Actor2
repeat
wait 0
until player.Defined(0)
model.Load(#RUGER)
model.Load(#PGA)
038B: load_requested_models
actor.StorePos($PLAYER_ACTOR,0@,1@,2@)
actor.Create(3@,Gang7,#PGA,0@,1@,2@)
01B2: give_actor 3@ weapon 27 ammo 9999    
model.Destroy(#RUGER)
model.Destroy(#PGA)
01DE: tie_actor 3@ to_actor $PLAYER_ACTOR     
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
       0@ = @Actor2
       break
       else
           if
           actor.Dead(3@)
           then
           0@ = @Actor
           break                   
           end
       end
end
0151: remove_status_text $HLT
actor.RemoveReferences(3@)
jump 0@
end_thread

Должно работать, я думаю, по крайней мере я смог преодолеть трудность с проверкой условий простым способом - сделать две отдельные метки, каждая для разных ситуаций: при смерти игрока охранник создаётся заново, а при смерти охранника игрок должен его снова вызвать.
P.S. Как я только что прочёл, player.defined можно использовать как альтернативу двум условиям: игрок арестован и игрок мёртв. То есть опкод возвращает true только тогда, когда игрок ещё играет, как написано на GTAG.
Отредактировал Vital - Вторник, 04.02.14, 18:43
2109: create_special_actor $VITAL in_front_of_computer

Drs36
Проверенные
04.02.14 20:53
Offline
Спасибо.

Форум » Игры серии GTA » GTA Vice City » Проблема со скриптом (Помогите)
Страница 1 из 11
Поиск: