#1 25-12-2010 15:15

DEN58
Registered: 23-10-2010
Posts: 48

Scripting.

Здраствуйте! У меня вопрос:Какой опкод в CLEO 4 может вычислить автомобиль через память?

Offline

#2 26-12-2010 06:12

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

Re: Scripting.

Что значит "вычислить автомобиль через память"?

Offline

#3 26-12-2010 16:41

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Ну опкоды есть? Я хотел сделать, чтобы в инкассаторе сидели два wmysgrd.Вооружены пистолетом.
Нужно как-то вычислить инкассатор и затем сделать так, чтобы они там были.Если wmysgrd атаковал
любой прохожий, чтобы он убивал его.

Offline

#4 26-12-2010 17:23

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

Re: Scripting.

Это называется захват транспорта. Можно использовать стандартные опкоды ("get car"), а лучше - опкод клео4 0ae2.

Offline

#5 26-12-2010 19:17

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Правильно?

0000: NOP
thread 'WMYSGRD'
wait 0
Model.Load(#WMYSGRD)
Model.Load(#SECURICA)
Model.Load(#COLT45)
038B: load_requested_models

:WMYSGRD_33
wait 0
if
   Model.Available(#WMYSGRD)
   Model.Available(#SECURICA)
   Model.Available(#COLT45)
else_jump @WMYSGRD_33
wait 5000
0AE2: $CAR = random_vehicle_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_wrecked 1 //IF and SET
$CAR = Car.Create(#SECURICA, 0@, 1@, 2@)
0129: 3@ = create_actor_pedtype 4 model #WMYSGRD in_car $CAR driverseat
01C8: 4@ = create_actor_pedtype 4 model #WMYSGRD in_car $CAR passenger_seat 0
01B2: give_actor 3@ weapon 22 ammo 744 // Load the weapon model before using this
01B2: give_actor 4@ weapon 22 ammo 744 // Load the weapon model before using this
jump @WMYSGRD_33

:WMYSGRD_143
wait 0
if
   Actor.Dead(3@)
   Actor.Dead(4@)
else_jump @WMYSGRD_143
Actor.RemoveReferences(3@)
Actor.RemoveReferences(4@)
jump @WMYSGRD_33

Last edited by DEN58 (26-12-2010 19:18)

Offline

#6 26-12-2010 21:19

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

Re: Scripting.

Ты же ищешь уже созданную машину. Зачем её создавать ещё раз? Опкод применяется так:

if
    0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 0 pass_wrecked 1 //IF and SET
then
    repeat
        if
            0137:   car TRAM model == #SECURICA
        then
            // здесь пишешь действия, которые надо произвести над машиной (создание пассажиров и т.п.)
        end
    until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 1 pass_wrecked 1 //IF and SET
end

Offline

#7 27-12-2010 11:34

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

У меня вылетает:

0000: NOP
wait 0
0AE2: $CAR = random_vehicle_near_point 1@ 2@ 3@ in_radius 10.0 find_next 1 pass_wrecked 1 //IF and SET
else_jump @WMYSGRD_4

:WMYSGRD_7
if
   Car.Model($CAR) == #SECURICA
else_jump @WMYSGRD_2
0129: $WMYSGRD1 = create_actor_pedtype 4 model #WMYSGRD in_car $CAR driverseat
01C8: $WMYSGRD2 = create_actor_pedtype 4 model #WMYSGRD in_car $CAR passenger_seat 0
01B2: give_actor $WMYSGRD1 weapon 22 ammo 744 // Load the weapon model before using this
01B2: give_actor $WMYSGRD2 weapon 22 ammo 744 // Load the weapon model before using this

:WMYSGRD_2
8AE2:   not $CAR = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 1 pass_wrecked 1 //IF and SET
else_jump @WMYSGRD_7

:WMYSGRD_4 // Note: a jump to this label will crash the game

Offline

#8 28-12-2010 01:00

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

Re: Scripting.

Исходный код покажи, а не декомпилированный.

Offline

#9 28-12-2010 10:02

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

Re: Scripting.

И не забывай [cоde][/codе], пожааалуйста!

Offline

#10 28-12-2010 16:45

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Что за декомпилированный код?

Offline

#11 28-12-2010 17:51

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

Re: Scripting.

Тяжёлый случай. Советую внимательно проштудировать справку Санни Билдера, от корки до корки. Иначе конструктивного диалога не получится.
-------------------------------------------------------------
Код должен выглядеть примерно так:

{$CLEO}
wait 0
while true
    wait 0
    if
        not player.Defined($player_char)
    then
        continue
    end
    actor.StorePos($player_actor 1@ 2@ 3@)
    if
        0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 0 pass_wrecked 1 //IF and SET
    then
        repeat
            if
                0137:   car 0@ model == #SECURICA
            then
                // здесь пишешь действия, которые надо произвести над машиной (создание пассажиров и др.)
            end
        until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 1 pass_wrecked 1 //IF and SET
    end
end

Last edited by Den_spb (29-12-2010 02:55)

Offline

#12 30-12-2010 12:21

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Всё равно вылетает!

Last edited by DEN58 (30-12-2010 12:22)

Offline

#13 30-12-2010 17:56

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

Re: Scripting.

Приведи полностью код, который ты написал.

Offline

#14 30-12-2010 19:31

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Я всё делал как надо! Открыл SB выбрал Создать и поставил код:

{$CLEO}
wait 0
while true
    wait 0
    if
        not player.Defined($player_char)
    then
        continue
    end
    actor.StorePos($player_actor 1@ 2@ 3@)
    if
        0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 0 pass_wrecked 1 //IF and SET
    then
        repeat
            if
                0137:   car 0@ model == #SECURICA
            then
            0129: $WMYSGRD1 = create_actor_pedtype 4 model #WMYSGRD in_car 0@ driverseat
            01C8: $WMYSGRD2 = create_actor_pedtype 4 model #WMYSGRD in_car 0@ passenger_seat 0
            01B2: give_actor $WMYSGRD1 weapon 22 ammo 744 // Load the weapon model before using this
            01B2: give_actor $WMYSGRD2 weapon 22 ammo 744 // Load the weapon model before using this
            end
        until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 1 pass_wrecked 1 //IF and SET
    end
end
Скомпилировал.Назвал wmysgrd.cs
Открыл cs файл и всё меняется:
//-------------MAIN---------------
wait 0

:NONAME_4
wait 0
if
   not Player.Defined($PLAYER_CHAR)
else_jump @NONAME_31
jump @NONAME_154

:NONAME_31
Actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@)
if
0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 0 pass_wrecked 1 //IF and SET
else_jump @NONAME_154

:NONAME_79
if
   Car.Model(0@) == #SECURICA
else_jump @NONAME_124
0129: $WMYSGRD1 = create_actor_pedtype 4 model #WMYSGRD in_car 0@ driverseat
01C8: $WMYSGRD2 = create_actor_pedtype 4 model #WMYSGRD in_car 0@ passenger_seat 0
01B2: give_actor $WMYSGRD1 weapon 22 ammo 744 // Load the weapon model before using this
01B2: give_actor $WMYSGRD2 weapon 22 ammo 744 // Load the weapon model before using this

:NONAME_124
8AE2:   not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 1 pass_wrecked 1 //IF and SET
else_jump @NONAME_79

:NONAME_154
jump @NONAME_4

Last edited by DEN58 (30-12-2010 19:31)

Offline

#15 30-12-2010 19:50

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

Re: Scripting.

Во-первых, вылетает потому, что ты пытаешься сделать актёров и оружие для них "из ничего" - сначала надо загрузить соответствующие модели. Во-вторых, не надо применять глобальные переменные - вместо них надо использовать локальные.

Открыл cs файл и всё меняется:

Так и должно быть, высокоуровневые конструкции заменяются метками. Если хочешь отредактировать скрипт, то надо открывать его исходник (Файл-Открыть-wmysgrd.txt).
Кроме того, чтобы постоянно не создавать актёров (из-за этого тоже может вылететь), надо проверять, существует ли машина, в которую были посажены актёры. После создания актёров надо удалить их флаг уникальности, чтобы при удалении машины удалялись и актёры.
С учётом всего вышесказанного, код пишется так:

{$CLEO}
wait 0
while true
    wait 0
    if
        not player.Defined($player_char)
    then
        continue
    end
    if
        056E: car 0@ defined
    then
        if
            0137:   car 0@ model == #SECURICA
        then
            continue
        end
    end
    actor.StorePos($player_actor 1@ 2@ 3@)
    if
        0AE2: 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 0 pass_wrecked 1 //IF and SET
    then
        repeat
            if
                0137:   car 0@ model == #SECURICA
            then
                model.Load(#WMYSGRD)
                model.Load(#colt45)
                repeat
                    wait 0
                    if and
                        model.Available(#WMYSGRD)
                        model.Available(#colt45)
                    then
                        break
                    end
                until false
                0129: 4@ = create_actor_pedtype 4 model #WMYSGRD in_car 0@ driverseat
                01B2: give_actor 4@ weapon 22 ammo 744 // Load the weapon model before using this
                actor.RemoveReferences(4@) 
                01C8: 5@ = create_actor_pedtype 4 model #WMYSGRD in_car 0@ passenger_seat 0
                01B2: give_actor 5@ weapon 22 ammo 744 // Load the weapon model before using this
                actor.RemoveReferences(5@)
                model.Destroy(#WMYSGRD)
                model.Destroy(#colt45)
                break 
            end
        until 8AE2: not 0@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 100.0 find_next 1 pass_wrecked 1 //IF and SET
    end
end

Last edited by Den_spb (31-12-2010 14:39)

Offline

#16 30-12-2010 20:26

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

Re: Scripting.

Den_spb wrote:

не надо применять глобальные переменные - вместо них надо использовать глобальные.

Локальные.

Offline

#17 31-12-2010 13:11

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Не известная команда end.

Offline

#18 31-12-2010 13:56

DK22Pac
From: Ukraine
Registered: 26-03-2010
Posts: 447
Website

Re: Scripting.

DEN58 wrote:

Не известная команда end.

Замени тот end на until false


Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv

Offline

#19 03-01-2011 19:06

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Я просто скорее всего скопировал не правильно! Всё работает, но правда я иногда, когда приближаюсь к
инкассатору, то вижу всё как обычно и в друг появляются два wmysgrd.Вообще мне этот способ
кажется устаревшим.Есть опкоды надёжнее, новые, например 0A8C: write_memory 0@ size 4 value 0 virtual_protect 0. Видно, что через память вычисление.

Last edited by DEN58 (03-01-2011 19:06)

Offline

#20 07-01-2011 11:50

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

Будьте добры ответте!

Offline

#21 07-01-2011 12:10

Gyr
From: Серпухов
Registered: 03-02-2009
Posts: 246
Website

Re: Scripting.

@DEN58 - Опкод 0A8C: работает напрямую с памятью и записывает значение прямо в адрес. Тебе же нужно просто найти машину рядом с персонажем. Если опкод 0AE2 тебе кажется ненадежным то используй Interceptor. Хотя для начала попробуй просто увеличить радиус поиска.

Last edited by Gyr (07-01-2011 12:40)


Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!

Offline

#22 08-01-2011 16:44

DEN58
Registered: 23-10-2010
Posts: 48

Re: Scripting.

А как чувака вычислить? Ещё есть глюк в скрипте, почему-то пассажир в инкассаторе при остановке
выходит.Как исправить?

Offline

#23 08-01-2011 16:53

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

Re: Scripting.

Случайного человека можно найти двумя способами.

02DD: 88@ = get_random_ped_in_zone 'SAN_AND' with_pedtype_civilian 1 gang 0 criminal/prostitute 1 
 Берет случайного человека из опр. зоны (здесь всего СА) с опр. типом пешехода
0AE1: $actor = random_actor_near_point 0@ 1@ 2@ in_radius 10.0 find_next 1 pass_deads 1 //IF and SET
 Берет случайного человека из опр. точки с радиусом 10.0 (можно поставить свой, свегда дробное число) find_next значит, что будет каждый раз искать разного человека (не будет выбирать одного и того же сто раз) pass_deads пропускать мертвых (1 да, 0 нет)

Надеюсь, это то, что надо

Offline

#24 08-01-2011 17:13

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

Re: Scripting.

пассажир в инкассаторе при остановке выходит.Как исправить?

Какой опкод применяется для создания пассажира? Если 0561, то так и должно быть - создавай пассажира другими способами.

Offline

#25 08-01-2011 17:27

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

Re: Scripting.

@Den_spb - он применил вот этот опкод

01C8: 40@ = create_actor_pedtype 23 model #SPECIAL01 in_car 35@ passenger_seat 0

0561 создает просто пассажира, там случайная модель. Может вот это поможет:

0526: set_actor 65@ stay_in_car 1

Эта команда заставляет актера оставаться в машине. Правда тогда он вряд ли будет атаковать, надо ему тогда поставить отношения к другим актерам.
Например так

077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0 // see ped.dat 
1@ - переменная актера
4 - тип отношений. 4 -ненависть
0 - тип педов, к которому он так относится

Offline

Board footer

Powered by FluxBB