#4601 11-09-2014 06:30

Dimoman
Registered: 01-07-2014
Posts: 15

Re: Один вопрос

Я нашел адрес прицела. Делаю так и прицел исчезает: 0A8C: write_memory 5497312 size 5 value 144 virtual_protect 0
Только как сделать чтобы он обратно появился? И откуда берётся число 144? Для разных адресов это число разное. Ужас какой-то, магия...

Offline

#4602 11-09-2014 15:36

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Один вопрос

ну смотри. стандартный вызов какой-то функции в 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

#4603 11-09-2014 18:08

Dimoman
Registered: 01-07-2014
Posts: 15

Re: Один вопрос

Seemann wrote:

ну смотри. стандартный вызов какой-то функции в 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

#4604 11-09-2014 20:10

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Один вопрос

Попробуй так

{$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

#4605 12-09-2014 08:04

Dimoman
Registered: 01-07-2014
Posts: 15

Re: Один вопрос

Seemann wrote:

Попробуй так

{$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

#4606 13-09-2014 15:32

Vitlgt
Registered: 28-08-2013
Posts: 42

Re: Один вопрос

{$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

#4607 13-09-2014 15:46

Dimoman
Registered: 01-07-2014
Posts: 15

Re: Один вопрос

Vitlgt wrote:
{$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

#4608 26-09-2014 08:51

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Один вопрос

Подскажите пожалуйста для VC есть ли список загруженных звуков, как для SA?

Offline

#4609 04-11-2014 20:12

JuSskeee*
From: Мариуполь
Registered: 25-11-2011
Posts: 51

Re: Один вопрос

Подскажите, как выводить текст в игре через CLEO? И можно ли выводить текст через .scm скрипт, а не через .cs?

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

Last edited by JuSskeee* (04-11-2014 20:50)


Your Banny Wrote

Offline

#4610 06-11-2014 05:24

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Один вопрос

JuSskeee* wrote:

Подскажите, как выводить текст в игре через CLEO?

Текст можно выводить по разному (набери в поиске опкодов text - получишь список опкодов для работы с текстом). Всё зависит от конкретной задачи. Что именно надо вывести и при каких обстоятельствах?

Offline

#4611 06-11-2014 22:30

JuSskeee*
From: Мариуполь
Registered: 25-11-2011
Posts: 51

Re: Один вопрос

kenking wrote:

Текст можно выводить по разному (набери в поиске опкодов text - получишь список опкодов для работы с текстом). Всё зависит от конкретной задачи. Что именно надо вывести и при каких обстоятельствах?

Ну мне нужно без .gxt файлов текст вывести. Просто написанный в коде. Два типа нужно: Текст, который выводится в начале миссии - то есть ее название. И текст диалогов в миссиях.

Все, нашел. Спасибо.

Last edited by JuSskeee* (06-11-2014 22:34)


Your Banny Wrote

Offline

#4612 24-11-2014 17:08

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Скажите, можно ли сделать проверку, что игрок делает блок? Не проверять анимацию для каждого стиля боя, а одним опкодом.

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

Offline

#4613 24-11-2014 19:09

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Один вопрос

Можно отключить генерацию парковок, но на уже созданные машины это не повлияет.

Offline

#4614 25-11-2014 20:00

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

Re: Один вопрос

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

#4615 27-11-2014 10:54

MOSean
Registered: 27-11-2014
Posts: 2

Re: Один вопрос

Всем здрасте!
Подскажите, пожалуйста, как определить, что в CJя стреляют самонаводящимися ракетами? Ну, или хотя-бы ракетами вообще.

Last edited by MOSean (27-11-2014 10:55)

Offline

#4616 27-11-2014 21:35

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

Re: Один вопрос

Надо перебрать пул ракет, сравнивая значение цели каждой ракеты (смещение +0x0008 от начала структуры ракеты) с адресом структуры педа игрока/автомобиля игрока.
http://gtamodding.ru/wiki/Адреса_Памяти … 4.D1.8B.29

Offline

#4617 28-11-2014 07:26

MOSean
Registered: 27-11-2014
Posts: 2

Re: Один вопрос

Спасибо. Попытаюсь это осилить.

Offline

#4618 08-12-2014 08:36

laworden
Registered: 08-12-2014
Posts: 2

Re: Один вопрос

Добрый день!
Нашел программу MarEditor,разобрался с ней, наделал интерьеров - всё красиво.
Дальше нашел готовые скрипты входа и выхода, меняю координаты - всё работает.
Но теперь появилась проблема как из "заселить людьми".
Несколько дней поиска дали мне скрипт .
Как вставить пример скрипта не знаю, но суть такая:
Появляется персонаж (название) по координатам (x,y,z,)и выполняет анимацию.
Но этого мало , надо что бы он "воскресал" после смерти и опять проигрывал анимацию.
Скрипт небольшой , но я сам не разберусь.
Если кому не сложно напишите.
Знания скриптов минимальны , поэтому просьба выложить скрипт целиком
а не просто строчку ( в скрипте не там запятую поставишь уже всё не работает).

Offline

#4619 10-12-2014 20:49

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: Один вопрос

laworden

Попробуй вот этот
http://sannybuilder.com/dev/temp/ask1.txt

скрипт не мой, меня когда-то просили его подправить, возможно что он частично не рабочий, но как заготовка - самое то

Offline

#4620 11-12-2014 18:16

laworden
Registered: 08-12-2014
Posts: 2

Re: Один вопрос

Seemann , спасибо за ссылку .
Буду разбирать , что к чему.

Offline

#4621 31-12-2014 18:11

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

Re: Один вопрос

Есть вопрос относительно textbox, если точнее, относительно опкода 0АСА. Можно ли вывести textbox без звука или как-то сразу выключить звук, чтобы его не было? Дело в том, что в моей модификации textbox появляться может довольно часто, чтобы звук надоел, хотя саму надпись можно и не заметить.

Offline

#4622 01-01-2015 16:26

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

Re: Один вопрос

Спасибо большое! Буду пробовать, если что будет не так, напишу. Ещё раз благодарю за помощь!

Offline

#4623 03-01-2015 15:11

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

Re: Один вопрос

Всё работает прекрасно! Спасибо!
Теперь появился другой вопрос: есть скрипт, создающий машину, которая ездит за игроком, в ней два актёра, но тот, что на пассажирском сидении, не стреляет по ненавистным ему людям, хотя, по логике, 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

#4624 03-01-2015 18:41

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Один вопрос

Можно задать поведение для актера. В зависимости от того или иного случая, опкод:

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

#4625 03-01-2015 21:45

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

Re: Один вопрос

Спасибо! Помогло именно это, реакция 1022 на событие 36.  smile

Offline

Board footer

Powered by FluxBB