You are not logged in.
Я нашел адрес прицела. Делаю так и прицел исчезает: 0A8C: write_memory 5497312 size 5 value 144 virtual_protect 0
Только как сделать чтобы он обратно появился? И откуда берётся число 144? Для разных адресов это число разное. Ужас какой-то, магия...
Offline
ну смотри. стандартный вызов какой-то функции в exe выглядит так:
call <какой-то адрес>
call в архитектуре x86 - это обычно опкод E8
http://www.mathemainzel.info/files/x86asmref.html#call
адрес - это какое-то число (смещение до вызываемой функции), в данном случае его размер 4 байта
144 - это 0x90 или опкод команды NOP
https://ru.wikipedia.org/wiki/NOP
То, что ты сделал, это перезаписал вызов функции отрисовки прицела в ехе, т.е. вместо e3 xx xx xx xx ты записал туда 0x90 90 90 90 90
Поэтому, когда игра приходит в это место, она просто ничего не делает и идет дальше, а не вызывает отрисовку прицела.
Чтобы вернуть прицел, нужно сначала запомнить, что находится в этом адресе изначально, потом записать туда NOP (0x90 или 144), а потом в нужный момент вернуть оригинальное значение.
Оригинальное значение можно узнать либо прочитав его в переменную командой read_memory, либо посмотрев код exe в программе IDA.
Offline
ну смотри. стандартный вызов какой-то функции в exe выглядит так:
call <какой-то адрес>
call в архитектуре x86 - это обычно опкод E8
http://www.mathemainzel.info/files/x86asmref.html#callадрес - это какое-то число (смещение до вызываемой функции), в данном случае его размер 4 байта
144 - это 0x90 или опкод команды NOP
https://ru.wikipedia.org/wiki/NOPТо, что ты сделал, это перезаписал вызов функции отрисовки прицела в ехе, т.е. вместо e3 xx xx xx xx ты записал туда 0x90 90 90 90 90
Поэтому, когда игра приходит в это место, она просто ничего не делает и идет дальше, а не вызывает отрисовку прицела.Чтобы вернуть прицел, нужно сначала запомнить, что находится в этом адресе изначально, потом записать туда NOP (0x90 или 144), а потом в нужный момент вернуть оригинальное значение.
Оригинальное значение можно узнать либо прочитав его в переменную командой read_memory, либо посмотрев код exe в программе IDA.
Спасибо, но я ничего не понял. Вы не знаете, что конкретно надо написать, чтобы прицел появился?
Offline
Попробуй так
{$cleo} 0000: while true wait 250 if 0AB0: key_pressed 45 // Insert then 0A8C: write_memory 0x00B6F065 size 1 value 1 virtual_protect 0 // выключить end if 0AB0: key_pressed 46 // Home then 0A8C: write_memory 0x00B6F065 size 1 value 0 virtual_protect 0 // включить end end
немного другой подход, но эффект должен быть такой же
Offline
Попробуй так
{$cleo} 0000: while true wait 250 if 0AB0: key_pressed 45 // Insert then 0A8C: write_memory 0x00B6F065 size 1 value 1 virtual_protect 0 // выключить end if 0AB0: key_pressed 46 // Home then 0A8C: write_memory 0x00B6F065 size 1 value 0 virtual_protect 0 // включить end endнемного другой подход, но эффект должен быть такой же
Спасибо, но это не то( Тут убирается прицел и включается режим фильма. А мне нужно просто отключение прицела.
Offline
{$cleo} 0000: while true wait 250 if 0AB0: key_pressed 45 // Insert then 0A8C: write_memory 0x0053E1E0 size 4 value 0x90909090 virtual_protect 0 // выключить 0A8C: write_memory 0x0053E1E4 size 1 value 0x90 virtual_protect 0 end if 0AB0: key_pressed 46 // Delete then 0A8C: write_memory 0x0053E1E0 size 4 value 0x204B0BE8 virtual_protect 0 // включить 0A8C: write_memory 0x0053E1E4 size 1 value 0x0 virtual_protect 0 end end
Last edited by Vitlgt (13-09-2014 15:43)
Offline
{$cleo} 0000: while true wait 250 if 0AB0: key_pressed 45 // Insert then 0A8C: write_memory 0x0053E1E0 size 4 value 0x90909090 virtual_protect 0 // выключить 0A8C: write_memory 0x0053E1E4 size 1 value 0x90 virtual_protect 0 end if 0AB0: key_pressed 46 // Delete then 0A8C: write_memory 0x0053E1E0 size 4 value 0x204B0BE8 virtual_protect 0 // включить 0A8C: write_memory 0x0053E1E4 size 1 value 0x0 virtual_protect 0 end end
Спасибо огромное! Это просто суперская тема. Щас интегрирую в свой скрипт.
Offline
Подскажите, как выводить текст в игре через CLEO? И можно ли выводить текст через .scm скрипт, а не через .cs?
Еще вопрос. Как сделать, чтобы ракета летела из определенной точки в другую точку?
Last edited by JuSskeee* (04-11-2014 20:50)
Your Banny Wrote
Offline
Подскажите, как выводить текст в игре через CLEO?
Текст можно выводить по разному (набери в поиске опкодов text - получишь список опкодов для работы с текстом). Всё зависит от конкретной задачи. Что именно надо вывести и при каких обстоятельствах?
Offline
Текст можно выводить по разному (набери в поиске опкодов text - получишь список опкодов для работы с текстом). Всё зависит от конкретной задачи. Что именно надо вывести и при каких обстоятельствах?
Ну мне нужно без .gxt файлов текст вывести. Просто написанный в коде. Два типа нужно: Текст, который выводится в начале миссии - то есть ее название. И текст диалогов в миссиях.
Все, нашел. Спасибо.
Last edited by JuSskeee* (06-11-2014 22:34)
Your Banny Wrote
Offline
Скажите, можно ли сделать проверку, что игрок делает блок? Не проверять анимацию для каждого стиля боя, а одним опкодом.
И ещё вопрос, можно ли сделать так, чтобы на какое-то время в городе исчезли все припаркованные машины? И чтоб потом их можно было вернуть? Не работать с каждым парковочным генератором отдельно.
Заранее спасибо.
Offline
Можно отключить генерацию парковок, но на уже созданные машины это не повлияет.
Offline
d88, попробуй эти опкоды:
01E8: create_forbidden_for_cars_cube_cornerA 2500.0 -1677.0 20.0 cornerB 2430.0 -1653.0 0.0
включить запрет на спавн машин в указанной зоне
01E7: remove_forbidden_for_cars_cube_cornerA 2272.922 -1649.556 14.3311 cornerB 2266.101 -1633.219 14.3505
отключить запрет на спавн машин в указанной зоне
0395: clear_area 1 at 681.8004 -474.1063 15.5363 radius 3.0
очистить указанную зону от уже созданных объектов
Offline
Всем здрасте!
Подскажите, пожалуйста, как определить, что в CJя стреляют самонаводящимися ракетами? Ну, или хотя-бы ракетами вообще.
Last edited by MOSean (27-11-2014 10:55)
Offline
Надо перебрать пул ракет, сравнивая значение цели каждой ракеты (смещение +0x0008 от начала структуры ракеты) с адресом структуры педа игрока/автомобиля игрока.
http://gtamodding.ru/wiki/Адреса_Памяти … 4.D1.8B.29
Offline
Спасибо. Попытаюсь это осилить.
Offline
Добрый день!
Нашел программу MarEditor,разобрался с ней, наделал интерьеров - всё красиво.
Дальше нашел готовые скрипты входа и выхода, меняю координаты - всё работает.
Но теперь появилась проблема как из "заселить людьми".
Несколько дней поиска дали мне скрипт .
Как вставить пример скрипта не знаю, но суть такая:
Появляется персонаж (название) по координатам (x,y,z,)и выполняет анимацию.
Но этого мало , надо что бы он "воскресал" после смерти и опять проигрывал анимацию.
Скрипт небольшой , но я сам не разберусь.
Если кому не сложно напишите.
Знания скриптов минимальны , поэтому просьба выложить скрипт целиком
а не просто строчку ( в скрипте не там запятую поставишь уже всё не работает).
Offline
laworden
Попробуй вот этот
http://sannybuilder.com/dev/temp/ask1.txt
скрипт не мой, меня когда-то просили его подправить, возможно что он частично не рабочий, но как заготовка - самое то
Offline
Seemann , спасибо за ссылку .
Буду разбирать , что к чему.
Offline
Есть вопрос относительно textbox, если точнее, относительно опкода 0АСА. Можно ли вывести textbox без звука или как-то сразу выключить звук, чтобы его не было? Дело в том, что в моей модификации textbox появляться может довольно часто, чтобы звук надоел, хотя саму надпись можно и не заметить.
Offline
Спасибо большое! Буду пробовать, если что будет не так, напишу. Ещё раз благодарю за помощь!
Offline
Всё работает прекрасно! Спасибо!
Теперь появился другой вопрос: есть скрипт, создающий машину, которая ездит за игроком, в ней два актёра, но тот, что на пассажирском сидении, не стреляет по ненавистным ему людям, хотя, по логике, 077А должен позволять это делать. Пробовал опкод 0713 без параметров объекта обстрела, но не помогает. Проблема как раз в том, чтобы заставить пассажира стрелять по усмотрению его ИИ, а не по опкоду. Заранее благодарю!
Прилагаю код:
//$PLAYER_ACTOR $PLAYER_GROUP {$CLEO} 0000: while true wait 0 if player.Defined(0) then if and not actor.Driving($PLAYER_ACTOR) 0ADC: test_cheat "CAR" then model.Load(#ALPHA) model.Load(#FAM1) model.Load(#FAM2) model.Load(#TEC9) 038B: load_requested_models actor.StorePos($PLAYER_ACTOR,0@,1@,2@) 02C1: store_to 0@ 1@ 2@ car_path_coords_closest_to 0@ 1@ 2@ car.Create(3@,#ALPHA,0@,1@,2@) car.SetImmunities(3@,1,1,1,1,1) 0129: 4@ = create_actor_pedtype 8 model #FAM1 in_car 3@ driverseat 01C8: 5@ = create_actor_pedtype 8 model #FAM2 in_car 3@ passenger_seat 0 car.DoorStatus(3@,2) 077A: set_actor 5@ acquaintance 1 to_actors_pedtype 0 // see ped.dat 077A: set_actor 5@ acquaintance 4 to_actors_pedtype 6 // see ped.dat 077A: set_actor 5@ acquaintance 4 to_actors_pedtype 7 // see ped.dat 077A: set_actor 5@ acquaintance 4 to_actors_pedtype 9 // see ped.dat actor.GiveWeaponAndAmmo(4@,Tec9,99999) actor.GiveWeaponAndAmmo(5@,Tec9,99999) model.Destroy(#ALPHA) model.Destroy(#FAM1) model.Destroy(#FAM2) model.Destroy(#TEC9) car.SetDriverBehaviour(3@,DriveToPlayer) car.SetMaxSpeed(3@,50.0) marker.CreateAboveCar(6@,3@) marker.SetColor(6@,1) while true wait 0 if or not player.Defined(0) car.Wrecked(3@) not actor.InCar(4@,3@) not actor.InCar(5@,3@) actor.Dead(4@) actor.Dead(5@) then break end end car.SetImmunities(3@,0,0,0,0,0) car.DoorStatus(3@,1) marker.Disable(6@) actor.RemoveReferences(4@) actor.RemoveReferences(5@) car.RemoveReferences(3@) end end end
Offline
Можно задать поведение для актера. В зависимости от того или иного случая, опкод:
0709: set_decision_maker 0@ on_event 31 task 413 respect 0.0 hate 0.0 like 0.0 dislike 0.0 in_car 0 on_foot 1
I know everything and nothing...
Offline
Offline