#26 Программы для GTA » Актуальная версия IDA » 15-09-2010 01:12

BritishColonist
Replies: 3

Привет, ребята. В темах про память и реверс-инженеринг игры многие товарищи хвастаются теми адресами, что смогли раскопать некой идой. Лишь в ~10% таких тем давались ссылки на IDA версий 4 и 5. Все эти ссылки/версии программы устарели, по сему прошу выложить ссылку на актуальную и полнофункциональную версию. Поисковики приводили на иностранные сайты с нерабочими ссылками, отсутствием кряка и прочими неприятностями.
Уверен, что ссылка будет полезна далеко не только мне одному.

#27 Re: Работа с памятью, EXE » Скриптово меняем навык стрельбы из оружия » 07-05-2010 03:24

Думаю, раз меню создаётся в игре (а не в сампе), то значения точно должны быть в gta_sa.exe. Ну, я о таблице очков (TAB).

#28 Re: Программирование » Несколько вопросов по Delphi » 05-05-2010 13:04

Ещё несколько вопросов.
Надо написать плагин (в основном просто для теста) на Дельфи.
1) То есть скрипт не будет подключать библиотеку отдельно, а она будет запускаться с игрой сама?
2) Формат .asi это просто переименованные .dll или нужно как-то конвертировать?
3) Плагин должен создать опкоды для Sanny Builder. Их надо будет просто прописать в файл опкодов и кинуть .asi в корень игры?
4) Прошу привести простейший пример .asi и способ вызова созданных им опкодов.
И уже выйдет неплохой мануал по созданию плагинов, имхо.

#29 Re: Работа с памятью, EXE » Скриптово меняем навык стрельбы из оружия » 03-05-2010 14:03

Хм. Нужно найти значение пинга игрока (каждого, кто подключен), используя айди игрока.
Два вопроса: как можно искать такое значение? где именно его искать?

Создавал серв, где игроку ставилось количество очков, равное его пингу и пришёл к мнению, что, пока игра свёрнута (игрок афк), пинг не меняется. Искал я то значение, которое видел в сампе (для этого и ставил фраги, равные пингу). Искал в самой игре (gta_sa.exe) с помощью АртМани. Эти значения есть именно в игре, но, как оказалось позднее, это и было количество фрагов игрока, а не его пинг.

#30 Re: Работа с памятью, EXE » Скриптово меняем навык стрельбы из оружия » 13-03-2010 11:59

Alien, приведи пожалуйста пример.

{$CLEO}
0@ = 30
0@ += 36
0@ *= 0x70
0@ += 0xC8AAB8
0@ += 0x18
08BA: set 0@ bit 11
0a93:

Подход правильный? Пытаюсь сделать две М4.

#31 Re: Работа с памятью, EXE » Скриптово меняем навык стрельбы из оружия » 12-03-2010 13:58

Товарищи, здравствуйте!

{$CLEO}
0@ = 30    //индекс оружия
0@ += 36   //приращение индекса по навыку
0@ *= 0x70 //размер структуры
0@ += 0xC8AAB8 //поинтер на массив структур
0@ += 0x38  //смещение в структуре
0A8C: write_memory 0@ size 4 value 100.0 virtual_protect 0
0a93:

Насчёт вот этого. А как можно залезть в флаги оружия?
Я так понимаю, смещение в структуре будет +0x18 (+0x18 = [dword] flags - из gtamodding).
А если нужно добраться до анимационной группы оружия? Или до рендеринга в двух руках?
Или надо записать/считать всю последовательность флагов?

#32 Re: Работа с памятью, EXE » [Delphi] Чтение координат игрока » 25-12-2009 11:22

Оу! Результаты есть. Спасибо)

Alien wrote:
    ReadProcessMemory(ProcHandle,Pointer(pPlayerPed + $14),@pMatrix,4,NULL);
    if (pMatrix <> 0) then
        ReadProcessMemory(ProcHandle,Pointer(pMatrix + $30),@PlayerPos,12,NULL);
    else
        ReadProcessMemory(ProcHandle,Pointer(pPlayerPed + 4),@PlayerPos,12,NULL);

Можно тут поподробнее? Почему сначала читается адрес со смещением +$30, а потом другой адрес со смещением +4?
Ещё вопрос: как получить угол игрока? Меня интересует значение направления лица игрока (Z). На gtamodding.ru написано "матрица вращения", то есть, надо создать ещё одну запись (pAng : record ax,ay,az:single end;). Так я сделал. А вот считать как?
Я не понял (выше), почему смещения в этих двух случаях (pMatrix=0 или pMatrix<>0) разные, но принцип вроде должен быть таким же и для координат?

ReadProcessMemory(ProcHandle,ptr(pPlayerPed + $14),@pMatrix,4,rw);
      if (pMatrix <> 0) then
       begin
        ReadProcessMemory(ProcHandle,ptr(pMatrix + $30),@pPos,12,rw);
        ReadProcessMemory(ProcHandle,ptr(pMatrix),@pAng,12,rw)
       end
      else
       begin
        ReadProcessMemory(ProcHandle,ptr(pPlayerPed + 4),@pPos,12,rw);
        ReadProcessMemory(ProcHandle,ptr(pMatrix),@pAng,12,rw) //вот тут другое смещение?
       end;

Я читаю из pMatrix, ибо в базе адресов стоит непонятное 0x0 to 0x2C... (а откуда надо читать? x_X)

#33 Re: Работа с памятью, EXE » [Delphi] Чтение координат игрока » 24-12-2009 21:43

Так я и не понял, что мы делаем, чтобы находить значения правильно.
Мы складываем адрес из смещений и сразу из него читаем?
Или читаем один адрес, складываем смещение со значением из этого адреса, читаем получившийся адрес (адрес-сумма предыдущего адреса и смещения)?
Почему, кстати надо использовать Single? Простенький Real разве не подходит под максимальные значения координат на карте? Я пробовал уже и так, и так, но дельного ничего не вышло.

#34 Работа с памятью, EXE » [Delphi] Чтение координат игрока » 24-12-2009 21:03

BritishColonist
Replies: 6

Alien, а если я хочу найти координаты игрока, мне надо пользоваться такой же формулой?
Получается результат 0.
Delphi:

X:=$B6F5F0+($30)*$7C4+$14;
ReadProcessMemory(ProcHandle,ptr(X),@value,4,rw);
Edit1.Text := FloatToStr(value);

$7С4 - размер педа (в смысле ячейки с педом).
$30 - Х-координата (смещение или как там?).
$14 - ещё какое-то там смещение (не разбираюсь пока в них).
Чувствую, формула неверна. Представил ещё две строки из дельфи на всякий случай (а вдруг в них накосячил, не зная каких-нибудь там правил преобразования данных?).

#35 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 11-12-2009 17:15

Нельзя ли в SB добавить возможность подключать отдельный GXT файл?
Пусть будет опкод, указывающий название файла, который мы ранее создали в SAGXT-editor и который валяется в папке TEXT. Это может упростить работу с надписями...
Нет ли программ, позволяющих добавить в GXT автоматически текст типа <КЛЮЧ> <СТРОКА>, находящийся в текстовом файле?

#36 Re: Модификации » Rocket Launcher Bug (вроде готов) - чисто для SA:MP 0.2x » 26-10-2009 18:25

И не говори. У меня был простенький скрипт на перекраску авто игрока в чёрный цвет. Так с 0.3 синхронизацией машинка становилась то чёрной, то обычной бесконечно))

#37 Re: Вопросы по скриптингу » SB in SAMP » 25-10-2009 19:08

Отлично, Den_spb. Большое спасибо.
Вопрос. Раз маркер использует одну переменную (0186: 2@ = create_marker_above_car 0@) 2@, то почему создаются новые маркеры, а старые не удаляются?
Вопрос2. Как убрать маркер?) 0164: disable_marker 2@?
Вопрос3. Что такое 018B: set_marker 2@ radar_mode 2? Что ещё за мод радара? Сколько их? Какие? Где б надыбать подобную инфу? Часто возникают эти вопросы.

#38 Re: Вопросы по скриптингу » SB in SAMP » 25-10-2009 18:38

Вот. Что-то типа такого было, только цвет маркера менялся во время игры по нажатию клавиши (там я садился в тачку и появлялся маркер, а тут надо просто на ближайшую тачку).

{$CLEO}

:TEST
wait 100

:EXISTS
wait 10
Player.Defined($PLAYER_CHAR)
jf @EXISTS

:PRESS
wait 10
0AB0: key_pressed 220
jf @PRESS

0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@

if 056E:   car 0@ defined
then
0186: 2@ = create_marker_above_car 0@
0165: set_marker 2@ color_to 14
0168: set_marker 2@ size 3 
end

Эффекта нету (точнее игра вылетает).
P.S. Подумал, что могут как-то влиять другие скрипты (их у меня до фига).
Удалил всё, кроме этого. Всё равно вылетает.

#39 Re: Вопросы по скриптингу » SB in SAMP » 25-10-2009 18:00

Ну я точно знаю, что на сервере машины и игроки есть.
Зачем делать проверку? Для правильности? Пусть. НО:
скрипт определяет тачку/педа не в определённой области рядом с игроком, а вообще по всей карте. Как такой тачки/педа может не быть?
Повторюсь, вылетает сразу после 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@, а не при попытке сделать с переменными что-либо.

#40 Re: Вопросы по скриптингу » SB in SAMP » 25-10-2009 17:00

Вы меня за идиота принимаете?! grin
Ясное дело, скрипт так заканчиваться не будет. Это как бы для теста. Был у меня скрипт, игра от него вылетала.
Переписал заново поэтапно и понял, что вылетает именно здесь.

GTASA wrote:

Он хотел сделать поиск актера, как видно из скрипта. xD
А еще вылетает от того, что перед 0AB0 не написали if

Никогда не ставлю if в таких случаях, и всё прекрасно пашет:

:метка
действие
jf @метка
то, что выполняется после действия, если оно всё же выполнилось

Уже много раз замечаю, что вылетает именно из-за store closest ped to 0@ closest vehicle to 1@.

#41 Re: Вопросы по скриптингу » SB in SAMP » 25-10-2009 11:08

{$CLEO}

:TEST
wait 100

:EXISTS
wait 10
Player.Defined($PLAYER_CHAR)
jf @EXISTS

:PRESS
wait 10
0AB0: key_pressed 220
jf @PRESS

0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@

Игра по нажатию клавиши вылетает. SA:MP 0.2x
Проверил и в сингле. Там то же самое.

#42 Модификации » Rocket Launcher Bug (вроде готов) - чисто для SA:MP 0.2x » 19-10-2009 18:43

BritishColonist
Replies: 3

Мой первый самостоятельно написанный скрипт. Как говорили "включи мозг".
Пожалуйста: усиление "бага базук". Простой скрипт, даёт 100% вероятность "бага".
Баг: целимся базукой, жмём атаку, убираем прицел. Сами ракету не видим, однако все отлетают, получая урон (а у нас ракеты нету вообще, урона нет, ракеты не тратятся). Если тренироваться - научиться несложно.
Скрипт: замедление времени на момент нажатия правой кнопки мыши (если в руках базука). В SA:MP изменение времени оказывает эффект только на использующего, то есть у остальных игроков время будет нормальным, ракета вылетит (а у нас точно не вылетит). Если что отмазываемся, говоря "баг".

К сожалению на 0.3 версии сампа скрипт работать не будет, ибо там временем управлять не получится(

Чит =\

P.S. К теме файл почему-то не прикрепился, так что вот ссылка на dump:
http://dump.ru/file/3608552

#43 Re: Вопросы по скриптингу » Вопросы по опкодам » 19-10-2009 15:41

У меня 0000: почти нигде не стоит.
Когда ставил там, где компилятор не "ругался", ошибок не было.
Очевидно, кашу маслом не испортишь?)

#44 Re: Вопросы по скриптингу » Вопросы по опкодам » 19-10-2009 14:57

Ок.
Вопрос по опкдам 0000: и 0001:.
Когда именно какой надо применять?
Я применяю 0001: wait, когда изменяю параметры, загружаю модели, перед проверкой условий. Это правильно?
0000: NOP применяю только когда делаю вечные циклы, и компилятор ругается. А если не ругается, не ставлю. Тут файл откомпилился нормально. Когда применять 0000: ?

#45 Re: Вопросы по скриптингу » Вопросы по опкодам » 19-10-2009 12:50

Да тут не нужен хендл. Лишние строки. Забыл на форуме закомментировать)

{$CLEO}
                           
:TEST
wait 100

:EXISTS
repeat 
wait 1
until Player.Defined($PLAYER_CHAR)

repeat 
wait 1
until 00DF:   actor $PLAYER_ACTOR driving

if
0AB0:   key_pressed 16 
then 
     0A8C: write_memory 0x96914C size 1 value 1 virtual_protect 0
     015D: set_gamespeed 0.45
else 015D: set_gamespeed 1.0
       0A8C: write_memory 0x96914C size 1 value 0 virtual_protect 0
end

jump @EXISTS

Довольно интересный и простой скрипт. Получается, как в NFS: Most Wanted. Нажал кнопку - вот тебе замедление, вот тебе лучшая управляемость.

#46 Re: Вопросы по скриптингу » Вопросы по опкодам » 18-10-2009 19:42

Если кому интересно)

{$CLEO}
                           
:TEST
wait 100
0@ = -1

:EXISTS
repeat 
wait 1
until Player.Defined($PLAYER_CHAR)

repeat 
wait 1
until 00DF:   actor $PLAYER_ACTOR driving

03C0: 0@ = actor $PLAYER_ACTOR car

if
0AB0:   key_pressed 16 
then 
     //0423: set_car 0@ improved_handling_to 2.0 // (float) 
     0A8C: write_memory 0x96914C size 1 value 1 virtual_protect 0
     015D: set_gamespeed 0.45
else 015D: set_gamespeed 1.0
     0A8C: write_memory 0x96914C size 1 value 0 virtual_protect 0
     //0423: set_car 0@ improved_handling_to 0.0   
     Car.RemoveReferences(0@)
end

jump @EXISTS

Опкод 0423 вообще не нужен) Спасибо, 3Doomer.

#47 Re: Вопросы по скриптингу » Вопросы по опкодам » 17-10-2009 19:53

Отлично, спасибо! Игра теперь не вылетает.
Только эффекта не даёт ни в мультиплеере, ни в сингле. Время замедляется, вождение остаётся прежним.
Специально убирал замедление, чтобы проверить. Подставлял разные значения (2.0, 4.0, 6.0, 100.0), эффекта не принесло.
Рядом с опкодом  00D9: действительно написано "только для миссий", но я подумал, прокатит, а второго опкода не видел вообще smile

#48 Re: Вопросы по скриптингу » Вопросы по опкодам » 17-10-2009 18:17

0423: set_car 0@ improved_handling_to 2.0

Когда выполняется эта строка, игра вылетает.
Хендл в переменной лежит.
Никто не знает, в чём дело?

#49 Re: Вопросы по скриптингу » Вопросы по опкодам » 17-10-2009 12:41

Ок. Но когда я проверял 0@ <> 0 вылетала игра.
Думал, раз не равно 0, то хендла не содержит и удалять хендл не стоит.
Какое значение принимает переменная с хендлом внутри? И какое не примет никогда?

#50 Re: Вопросы по скриптингу » Вопросы по опкодам » 17-10-2009 09:34

            not 1@ == -1

Думаю, не выйдет, ибо переменная хранит хендл, а не цифру.
---------------------------------------------------------
Хм. Нашёл строку, после которой падает игра.

0423: set_car 1@ improved_handling_to 2.0

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

Board footer

Powered by FluxBB