#26 10-01-2011 16:12

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Понятно! Вопрос, а вот так персонажа можно вычислить?
:Noname
wait 0
if and
06FF: any_ped_near_actor $PLAYER_ACTOR in_range 20.0 // радиус
Player.Defined($PLAYER_CHAR)
else_jump @Noname
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to -1 closest_ped_to 1@
if
not 1@ == -1
else_jump @Noname

Offline

#27 10-01-2011 17:31

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Scripting.

Так можно вычислить ближайшего к игроку персонажа. 06FF тут не нужен. В closest_vehicle надо подставить 0@ вместо -1.

Last edited by Den_spb (10-01-2011 17:32)

Offline

#28 10-01-2011 19:44

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Я сделал скрипт, тестирую.При нажатии на Y, должен появиться BMYST с оружием в руках.Он
идет как пешеход, я поставил опкод.Если его атаковал любой прохожий, то он должен его убить.
Так и происходит, но если он убивает, то стоит и больше не идёт.Так-же не реагирует на повреждения
повторно.Что неправильно?
//-------------MAIN---------------
0000: NOP
thread 'TEST'
wait 0
Model.Load(#BMYST)
038B: load_requested_models

:TEST_23
wait 0
if
   Model.Available(#BMYST)
else_jump @TEST_23
if
00E1:   player 0 pressed_key 11
else_jump @TEST_23
wait 5000
04C4: store_coords_to $X1 $Y1 $Z1 from_actor $PLAYER_ACTOR with_offset 1.0 3.0 1.0
2@ = Actor.Create(CivMale, #BMYST, $X1, $Y1, $Z1)
01B2: give_actor 2@ weapon 22 ammo 744 // Load the weapon model before using this
Actor.WeaponAccuracy(2@) = 88
05DE: AS_actor 2@ walk_around_ped_path
jump @TEST_140

:TEST_140
wait 0
if
   Player.Defined($PLAYER_CHAR)
else_jump @TEST_140
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
if
   not 1@ == -1
else_jump @TEST_140
jump @TEST_196

:TEST_196
wait 0
if
051A:   actor 2@ damaged_by_actor 1@
else_jump @TEST_196
05E2: AS_actor 2@ kill_actor 1@
jump @TEST_23

:TEST_234
wait 0
if
   Actor.Dead(2@)
else_jump @TEST_234
Model.Destroy(#BMYST)
Actor.RemoveReferences(2@)
jump @TEST_23

Offline

#29 11-01-2011 10:25

MB116
From: Almaty
Registered: 15-09-2010
Posts: 104
Website

Re: Scripting.

А разве ненужно загружать модель оружия?

Offline

#30 11-01-2011 10:38

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Нет.Оружие появляется! Не знаю, но вот так.

Offline

#31 11-01-2011 11:16

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Scripting.

загружать надо.
а появляется потому что модель случайным образом оказалась уже загружена. раз на раз не приходится...будут вылеты


GIMS developer

Offline

#32 11-01-2011 15:52

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Загрузил, но глюк не исправился! Он убивает, атаковавшего, но повторно не реагирует и перестаёт идти.
Помогите!

//-------------MAIN---------------
0000: NOP
thread 'TEST'
wait 0
Model.Load(#BMYST)
Model.Load(#COLT45)
038B: load_requested_models

:TEST_28
wait 0
if
   Model.Available(#BMYST)
   Model.Available(#COLT45)
else_jump @TEST_28
if
00E1:   player 0 pressed_key 11
else_jump @TEST_28
wait 5000
04C4: store_coords_to $X1 $Y1 $Z1 from_actor $PLAYER_ACTOR with_offset 1.0 3.0 1.0
2@ = Actor.Create(CivMale, #BMYST, $X1, $Y1, $Z1)
01B2: give_actor 2@ weapon 22 ammo 744 // Load the weapon model before using this
Actor.WeaponAccuracy(2@) = 88
05DE: AS_actor 2@ walk_around_ped_path
jump @TEST_150

:TEST_150
wait 0
if
   Player.Defined($PLAYER_CHAR)
else_jump @TEST_150
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
if
   not 1@ == -1
else_jump @TEST_150
jump @TEST_206

:TEST_206
wait 0
if
051A:   actor 2@ damaged_by_actor 1@
else_jump @TEST_206
05E2: AS_actor 2@ kill_actor 1@
jump @TEST_28

:TEST_254
wait 0
if
   Actor.Dead(2@)
else_jump @TEST_254
Model.Destroy(#BMYST)
Model.Destroy(#COLT45)
Actor.RemoveReferences(2@)
jump @TEST_28

Last edited by DEN58 (11-01-2011 15:53)

Offline

#33 11-01-2011 15:56

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Scripting.

DEN58 wrote:
jump @TEST_196 

:TEST_196

Пипец...
Блин, ну команды выполняются последовательно. Представь, что чел идёт по улице прямо. Ему даются команды: свернуть, развернуться, перелететь на джет-паке. Скажи, НАХРЕНА ПЕРЕЛЕТАТЬ НА ДЖЕТ-ПАКЕ ПОЛМЕТРА!!!!!??? Не знаю, как ещё объяснять, что не считая jump'а код выполняется последовательно, и до метки которая рядом интерпретатор дойдёт сам.

Удалять модель нужно сразу после создания актёра.

Offline

#34 12-01-2011 17:50

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Scripting.

DEN58 wrote:

Загрузил, но глюк не исправился! Он убивает, атаковавшего, но повторно не реагирует и перестаёт идти.
Помогите!

....
if
   Actor.Dead(2@)
else_jump @TEST_254
....

Возможно, имелось в виду @TEST_150 ? Или хочется дождаться нового нажатия 'Y' ?

Кроме того, оно все ужасно (начиная с проверки на ближайшего педа и заканчивая упомянутыми джампами на следующую команду).

Offline

#35 13-01-2011 11:42

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Я по разному пробывал, и у меня не вышло! Я ОБУЧАЮСЬ! Можете весь скрипт написать? Я так
не понимаю! Если весь с исправленными ошибками, то я найду и пойму! Пожалуйста!

Offline

#36 13-01-2011 12:33

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Scripting.

а не проще этому педу поставить тип, который сам будет защищаться? бандюга какойнить, или ещё что...

хочешь разбираться в коде?) ну на) не проверял, но должно работать grin

thread 'TEST'
while true
    wait 100
    while player.Defined($PLAYER_CHAR)
        wait 100
        if or
            00E1:   player 0 pressed_key 11 
            Actor.Dead(3@)
        then
            Model.Load(#BMYST)
            Model.Load(#COLT45)
            while true
                wait 100 
                if and 
                   Model.Available(#BMYST)
                   Model.Available(#COLT45)
                then
                    Break
                end
            end
            wait 5000 
            04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset 1.0 3.0 0.0 
            if
                3@ <> -1
            then
                Actor.DestroyWithFade(3@)
            end
            3@ = Actor.Create(CivMale, #BMYST, 0@, 1@, 2@)
            01B2: give_actor 3@ weapon 22 ammo 744
            Actor.WeaponAccuracy(3@) = 88
            05DE: AS_actor 3@ walk_around_ped_path 
            Model.Destroy(#BMYST)
            Model.Destroy(#COLT45)
        end
        0AB5: store_actor 3@ closest_vehicle_to 0@ closest_ped_to 1@ 
        if
            1@ <> -1
        then
            if
                051A: actor 3@ damaged_by_actor 1@
            then
                05E2: AS_actor 3@ kill_actor 1@
            end
        end
    end
    if
        3@ <> -1
    then
        Actor.RemoveReferences(3@)
    end
end

GIMS developer

Offline

#37 13-01-2011 13:36

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

У меня вопрос: Я привык к меткам, а вы пишите в виде кода.А как научиться коды делать?
Что это за команды break, until false?

Last edited by DEN58 (13-01-2011 13:37)

Offline

#38 13-01-2011 13:57

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Scripting.

break прерывает цикл, в котором находится, и программа идёт дальше
until и while организуют цикл...а true/false в проверках часто используется(да/нет)
всё это и многое другое есть в гугле, не стесняйтесь пользоваться wink

метки и опкоды - низкоуровневое программирование, как basic или скорее даже ассемблер, а мой код использует интуитивно понятные высокоуровневые конструкции...как си, паскаль, си++, дельфи и т д

Last edited by 3Doomer (13-01-2011 13:58)


GIMS developer

Offline

#39 13-01-2011 23:04

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Scripting.

DEN58 wrote:

У меня вопрос: Я привык к меткам, а вы пишите в виде кода.А как научиться коды делать?
Что это за команды break, until false?

В справке всё это расписано (раздел Кодинг). Команда break - выход из цикла, внутри которого написана эта команда. Команда continue - прыжок на начало цикла, внутри которого написана эта команда.

Last edited by Den_spb (13-01-2011 23:07)

Offline

#40 14-01-2011 09:03

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: Scripting.

"низкоуровневое программирование, как basic или скорее даже ассемблер"
- бедный бейсик, даже если кто и использовал в нём goto, это не значит, что он низкоуровневый, уж не хужее паскаля!  wink

Offline

#41 14-01-2011 11:28

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Scripting.

Den_spb wrote:

В справке всё это расписано (раздел Кодинг). Команда break - выход из цикла, внутри которого написана эта команда. Команда continue - прыжок на начало цикла, внутри которого написана эта команда.

Если придираться к словам:
break - переход на оператор, следующий за конструкцией (в C  это не обязательно цикл, это может быть и switch)
continue - переход на закрывающую скобку цикла (т.е. до перехода к первому оператору, еще будут выполнены все проверки и прочие вещи, прописанные в условии цикла)

reute70
Эх, молодежь... Бэйсика не знают.
В классическом бэйсике, все строки нумеруются и никаких операторных скобок нет - все управляющие конструкции используют номер строки.

Если углубляться в историю, такой подход был взят из фортрана, где было не обязательно нумеровать все строки, но любая строка, участвовавшая в управляющих конструкциях, должна была иметь метку.

Offline

#42 14-01-2011 15:54

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Scripting.

listener wrote:

break - переход на оператор, следующий за конструкцией (в C  это не обязательно цикл, это может быть и switch)
continue - переход на закрывающую скобку цикла (т.е. до перехода к первому оператору, еще будут выполнены все проверки и прочие вещи, прописанные в условии цикла)

По-моему где-то на этом форуме я это уже видел.

Offline

#43 14-01-2011 21:23

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: Scripting.

Ещё чуток пооффтоплю wink
Для меня теперь бЕйсик - VBA, пусть как хотят думают, а по мне нормальная штука, только компилятора нет (т.е. как в дельфи - рраз и приложение! - всё собираюсь этот вопрос в инете провентилировать smile

Offline

#44 22-01-2011 19:15

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Как вычислить через память гангстеров? Я хочу 88% точность стрельбы сделать.

Offline

#45 23-01-2011 18:30

Vital
From: Москва
Registered: 07-11-2010
Posts: 64
Website

Re: Scripting.

@DEN58 -  используй опкод

02DD: 1@ = get_random_ped_in_zone 'SAN_AND' with_pedtype_civilian 0 gang 1 criminal/prostitute 0 
1@ - переменная (хендл) актера
0,1,0 - флаги, указывающие, кого искать (гражданский, гангстер, криминал)

Потом проверяешь, найден ли актер (056D:   actor 1@ defined), проверяешь его тип (089F: get_actor 1@ pedtype_to 2@) и далее делаешь с ним все, что захочешь.
П.С. Если тебе нужно, чтобы действия выполнялись только для определенной банды, то тип проверять надо. И еще. Если актер не найден или не соответствует условиям, убери о нем сведения и снова возвращайся к поиску.

Last edited by Vital (23-01-2011 18:32)

Offline

#46 23-01-2011 20:28

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

А как в файле pedstats.dat указать точность стрельбы? Какой параметр нужен, чтобы гангстеры нормально
стреляли не промахиваясь?

Last edited by DEN58 (23-01-2011 20:28)

Offline

#47 23-01-2011 23:47

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Scripting.

Можно изменить точность стрельбы актёра таким опкодом:

02E2: set_actor 2@ weapon_accuracy_to 75 // 75 - точность в процентах

Offline

#48 11-02-2011 21:39

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Какой адрес памяти проверяет стреляет ли чел или нет? Не смог найти!

Offline

#49 12-02-2011 10:44

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Scripting.

DEN58 wrote:

Какой адрес памяти проверяет стреляет ли чел или нет? Не смог найти!

Проверь текущую аниму чела.

Offline

#50 12-02-2011 12:16

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Подробнее, пожалуйста!

Offline

Board footer

Powered by FluxBB