You are not logged in.
Здраствуйте! У меня вопрос:Какой опкод в CLEO 4 может вычислить автомобиль через память?
Offline
Ну опкоды есть? Я хотел сделать, чтобы в инкассаторе сидели два wmysgrd.Вооружены пистолетом.
Нужно как-то вычислить инкассатор и затем сделать так, чтобы они там были.Если wmysgrd атаковал
любой прохожий, чтобы он убивал его.
Offline
Правильно?
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
Ты же ищешь уже созданную машину. Зачем её создавать ещё раз? Опкод применяется так:
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
У меня вылетает:
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
И не забывай [cоde][/codе], пожааалуйста!
Offline
Что за декомпилированный код?
Offline
Тяжёлый случай. Советую внимательно проштудировать справку Санни Билдера, от корки до корки. Иначе конструктивного диалога не получится.
-------------------------------------------------------------
Код должен выглядеть примерно так:
{$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
Всё равно вылетает!
Last edited by DEN58 (30-12-2010 12:22)
Offline
Я всё делал как надо! Открыл 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
Во-первых, вылетает потому, что ты пытаешься сделать актёров и оружие для них "из ничего" - сначала надо загрузить соответствующие модели. Во-вторых, не надо применять глобальные переменные - вместо них надо использовать локальные.
Открыл 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
не надо применять глобальные переменные - вместо них надо использовать глобальные.
Локальные.
Offline
Не известная команда end.
Offline
Не известная команда 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
Я просто скорее всего скопировал не правильно! Всё работает, но правда я иногда, когда приближаюсь к
инкассатору, то вижу всё как обычно и в друг появляются два wmysgrd.Вообще мне этот способ
кажется устаревшим.Есть опкоды надёжнее, новые, например 0A8C: write_memory 0@ size 4 value 0 virtual_protect 0. Видно, что через память вычисление.
Last edited by DEN58 (03-01-2011 19:06)
Offline
Будьте добры ответте!
Offline
@DEN58 - Опкод 0A8C: работает напрямую с памятью и записывает значение прямо в адрес. Тебе же нужно просто найти машину рядом с персонажем. Если опкод 0AE2 тебе кажется ненадежным то используй Interceptor. Хотя для начала попробуй просто увеличить радиус поиска.
Last edited by Gyr (07-01-2011 12:40)
Специально для тех, кто не умеет читать по английски. Мой ник читается как "ГИР"!!!
Народная мудрость:
Прежде чем задавать вопросы,ПОЧИТАЙ СПРАВКУ!!!!
Offline
А как чувака вычислить? Ещё есть глюк в скрипте, почему-то пассажир в инкассаторе при остановке
выходит.Как исправить?
Offline
Случайного человека можно найти двумя способами.
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
@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