#3801 02-10-2011 20:05

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

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

Den_spb wrote:

Поворот матрицы на заданные углы:

0AA6: call_method 0x59B120 struct $Matrix num_params 3 pop 0 0.0 0.0 0.0  // rot Z rot Y rot X (radians)

Спасибо, проверю.

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

0A8D: 14@ = read_memory 0xC88050 size 4 virtual_protect 0 // получаем адрес координат камеры
0085: 20@ = 14@ // (int) 
0A8C: write_memory 0x52B730 size 1 value 0xC3 virtual_protect 1 // записываем retn по указанному адресу, оригинальное значение - 0x81
0AC7: 12@ = var 17@ offset
0A96: 30@ = actor $PLAYER_ACTOR struct
while true
0AA6: call_method 0x5E4280 struct 30@ num_params 3 pop 0 1 8 12@ // getPedBonePosition
0085: 14@ = 20@ // (int) 
0A8C: write_memory 14@ size 4 value 17@ virtual_protect 0
14@ += 4
0A8C: write_memory 14@ size 4 value 18@ virtual_protect 0
14@ += 4
0A8C: write_memory 14@ size 4 value 19@ virtual_protect 0
wait 0
end

Камера движется вообще без рывков, плавно и не отстаёт, но сам "объект камеры" остаётся на прежнем месте, т.е. если уйти далеко, то не будут убираться LOD'ы зданий, звук будет слышен из прежнего положения камеры и т.п.. Кстати. чуть не забыл про тот самый скрипт, который убирает задержку в цикле.

У меня вот возникла такая интересная идея, не знаю насчёт того, можно ли её воплотить в реальность (вероятней всего да): из игрового MOV'ера камеры вырезать операции с передвижением камеры, но оставить всё остальное. 0x52B730 - Start of camera 'MOVer' subroutine - короче говоря, как я понял, если писать в самое начало retn, то всё, что идёт далее игнорируется - процесс переходит далее, вобщем, аналогично опкодам end_thread, return или jump. Если посмотреть в IDA этот адрес, то можно увидеть, что первым делом идёт обработка положения камеры, затем обработка углов, а если точнее той точки, куда смотрит камера и т.п. Вот если бы можно было пропустить этот кусок (что-то вроде jump'а в СБ) и пойти дальше, было бы очень хорошо. Ещё лучше было бы, если бы можно было просто подставить свои координаты туда...

Last edited by Voron295 (02-10-2011 21:31)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3802 03-10-2011 10:11

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

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

Подскажите, можно ли выключить взрыв автомобилей при переворачивании?

Offline

#3803 08-10-2011 03:15

Yoda
From: Moscow
Registered: 08-03-2011
Posts: 90

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

Dr_Emmett_Brown_2011 wrote:

Подскажите, можно ли выключить взрыв автомобилей при переворачивании?

мои тесты (путем включения чита неубиваемости текущего авто) показывают, что авто при переворачивании не взрывается как таковое, а быстро теряет здоровье (как известно при здоровье меньше 250 авто начинает гореть и потом (при 0) взрывается - с включенным читом оно порывается загореться, но сразу тушится). Согласно базе данных по адресам в СА по оффсету +1216 находится флоат значение оставшегося здоровья авто, а по оффсету +2276 - флоат таймер горения. Соответственно отключить взрыв можно, проверив находится ли авто в перевернутом положении, и переписывая в лупе значение либо здоровья, либо таймера. Хотя, возможно, где-то есть флаг, отвечающий за последствия переворачивания...


Try not. Do or do not, there is no try.

Offline

#3804 08-10-2011 05:47

444andrei444
Registered: 29-03-2011
Posts: 317
Website

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

Есть такой опкод. Находил в базе deji. Сейчас сам хочу найти. Можно посмотреть тему cleo favorites там тоже кое что есть.

Offline

#3805 08-10-2011 10:09

Yoda
From: Moscow
Registered: 08-03-2011
Posts: 90

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

444andrei444 wrote:

Есть такой опкод. Находил в базе deji. Сейчас сам хочу найти. Можно посмотреть тему cleo favorites там тоже кое что есть.

Да, действительно, есть опкод на эту тему. Мой SASCM.INI знает один:
03ed=2,set_car %1d% disable_flipped_explosion_when_empty %2h%
1ый параметр - переменная авто, 2ой, насколько я понимаю, - флаг 0/1
Однако, судя по описанию, он отключает взрыв только на пустой машине...


Try not. Do or do not, there is no try.

Offline

#3806 08-10-2011 20:15

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

Занопать функцию того самого изменения таймера.

Offline

#3807 09-10-2011 00:37

Yoda
From: Moscow
Registered: 08-03-2011
Posts: 90

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

Jack Daniel's wrote:

Занопать функцию того самого изменения таймера.

Занопать можно, но тогда это будет на все авто действовать, а не только на авто героя...
Кстати, вопрос к тебе: у тебя что-то вышло с добавлением нового шрифта в игру?

Вопрос ко всем: у кого-нибудь есть почищенный мейн (то есть не совсем пустой, как в файлах СБ идёт, а почищенный от рокстаровского мусора типа опкодов про mutual_activities и идущих подряд jump'ов)?

И еще нубский вопрос... Можно ли в мейне (не в клео) сделать госабом переход в "левую" метку? Например, добавить в мейн интерсептор. Из одного потока искать, скажем авто... из второго - педов. Но искать их госабами, обращаясь к единому интерсептору? Или, можно ли использовать в каждом из таких потоков опкод 0AB1: call_scm_func @interceptor 0, а, соответствено, метку интерсептора в мейне иметь одну?

Last edited by Yoda (09-10-2011 06:13)


Try not. Do or do not, there is no try.

Offline

#3808 09-10-2011 03:18

Dr_Emmett_Brown_2011
Registered: 28-04-2011
Posts: 80

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

Занопать можно, но тогда это будет на все авто действовать, а не только на авто героя...

Так вот мне и надо выключить взрыв у всех автомобилей..

Offline

#3809 09-10-2011 06:08

Yoda
From: Moscow
Registered: 08-03-2011
Posts: 90

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

Dr_Emmett_Brown_2011 wrote:
Занопать можно, но тогда это будет на все авто действовать, а не только на авто героя...

Так вот мне и надо выключить взрыв у всех автомобилей..

Это я поторопился малось, сказав, что все таймеры отключаться... Отключится как раз только авто героя, ну или той машины, от хендла которой считать оффсет таймера... Чтобы отключить у всех (ну или почти у всех) я бы искал интерсептором перевёрнутое авто и вышеуказанным опкодом запрещал взрыв + нопил таймер в авто героя (поскольку компьютерные педы из авто при переворачивании вылезают - их авто будет пустой и опкод будет работать, а авто героя будет с героем пока кнопку выхода не нажмёшь).


Try not. Do or do not, there is no try.

Offline

#3810 09-10-2011 09:42

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

Yoda wrote:
Jack Daniel's wrote:

Занопать функцию того самого изменения таймера.

Кстати, вопрос к тебе: у тебя что-то вышло с добавлением нового шрифта в игру?

Ничего %D
Посмотри скрипт Ryosuke, он там свой txd загружает и текстуры из него.
http://dl.dropbox.com/u/34394266/hud.zip

Offline

#3811 09-10-2011 09:52

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

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

Yoda wrote:

Вопрос ко всем: у кого-нибудь есть почищенный мейн (то есть не совсем пустой, как в файлах СБ идёт, а почищенный от рокстаровского мусора типа опкодов про mutual_activities и идущих подряд jump'ов)?

Что ты имеешь ввиду? Всё кроме миссий? Если да, то я этим занимаюсь, через пару дней может выложу, если надо.

У меня тож вопрос:
Хочу прикрепить камеру к объекту, но так, чтобы крепление было жёстким - углы объекта и камеры должны совпадать. Наткнулся на метод, а может функцию, я толком и не понял в чём между ними разница, у училки по информатике спросил, она сказала, что в функцию передаются параметры и в конце её работы какие-то значения возвращаются, а метод не возвращает никаких значений. Но вот я ещё заметил, что в опкоде, который вызывает метод нужно указывать структуру. К тому же видал методы, которые возвращают значения. Как же всё-таки их различить (в IDA)? Вернёмся к основному вопросу: нашёл, вероятней всего, метод - CCamera__attach (0x50C7C0). Его используют опкоды 0158 и 0159. Можно ли (если да, то как) прикрепить камеру к объекту этим методом?

Last edited by Voron295 (09-10-2011 09:56)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3812 09-10-2011 11:41

444andrei444
Registered: 29-03-2011
Posts: 317
Website

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

Извините за оффтоп:
в твоем мейне я нашел еще один баг. На улицах в лавках с едой нельзя кушать, хотя продавцы стоят. И можешь еще убрать скрипт спортзала. Вообщем, чтоб в спортзал можно было зайти, но в нем небыло боев.

Offline

#3813 09-10-2011 13:00

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

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

Как же всё-таки их различить (в IDA)?

http://sannybuilder.com/forums/viewtopic.php?id=941

CCamera__attach (0x50C7C0). Его используют опкоды 0158 и 0159. Можно ли прикрепить камеру к объекту этим методом?

Должно работать, т.к. метод используется с CVehicle и CPed, а CVehicle, CPed и CObject имеют общего предка. Попробуй.

(если да, то как)

Как определить количество передаваемых параметров - разъяснено по ссылке выше. В метод CCamera__attach передаётся 4 параметра, не считая указателя на структуру CCamera (0x0B6F028). В опкоде вызова функции (метода) параметры перечисляются в том же порядке, в каком кладутся на стек в exe:

084 push    1               ; int
088 push    ecx             ; mode2
08C mov     ecx, offset _camera
08C push    edx             ; mode1
090 push    eax             ; target

Т.е. метод надо вызывать так:

0AA6: call_method $CCamera__attach struct $CCamera num_params 4 pop 0 1 $mode2 $mode1 $Object_struct

Offline

#3814 09-10-2011 21:41

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

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

Offline

#3815 09-10-2011 23:24

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

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

Ага, есть метод CVehicle::setModelIndex. Но Денис (Den_spb) тестировал его, и обнаружил какие-то проблемы с колёсами.


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

Offline

#3816 10-10-2011 16:12

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

В этот метод передается только 1 параметр? (Ид машины или ид/название модели или что-то другое?).

deleted

Это не работает. Можешь привести код с правильным вызовом метода?

Last edited by Jack Daniel's (30-10-2011 08:51)

Offline

#3817 10-10-2011 17:30

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

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

Параметр один, всё верно. Но метод работает только при следующих условиях:
1.Предварительно загружена новая модель.
2.Старая и новая модели однотипны (например, 4-дверное авто заменить на 2-дверное не получится, только 4-дверное на 4-дверное).

Offline

#3818 10-10-2011 17:38

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

Спасибо, работает.

P.S я нашел способ заменить 2-дверную на 4-дверную (у меня gta_sa.exe отредактированный - не вылетает при ошибках, т.е если юзнуть даже Actor.DestroyInstantly($PLAYER_ACTOR), то актер уничтожится! Но продолжать играть не будет возможно grin или же если юзнуть Player.Defined($ACTOR_CHAR), то тоже не вылетит).

Last edited by Jack Daniel's (10-10-2011 17:57)

Offline

#3819 10-10-2011 18:48

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

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

Jack Daniel's wrote:

P.S я нашел способ заменить 2-дверную на 4-дверную (у меня gta_sa.exe отредактированный - не вылетает при ошибках, т.е если юзнуть даже Actor.DestroyInstantly($PLAYER_ACTOR), то актер уничтожится! Но продолжать играть не будет возможно grin или же если юзнуть Player.Defined($ACTOR_CHAR), то тоже не вылетит).

Хах, не хочешь поделиться?))


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#3820 10-10-2011 18:54

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

На самом-то деле тестировалось в мультиплеере, а там samp.dll так же отслеживает ошибки (samp.dll я тоже пропатчил) и завершает работу игры по необходимости (вот как раз я пропатчил, чтобы не завершал) + в gta_sa.exe я пропатчил обработчик исключений, который используется samp.dll. Поэтому этот exe работает только в мп, а в сингле вылет при начале миссии. На самом-то деле это сырая версия, можно доделать, чтобы все было ок.

Last edited by Jack Daniel's (10-10-2011 18:56)

Offline

#3821 10-10-2011 19:17

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

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

у меня gta_sa.exe отредактированный - не вылетает при ошибках

Надо от ошибок избавляться, а не от вылетов. Хотя как эксперимент - интересно конечно.

ли же если юзнуть Player.Defined($ACTOR_CHAR), то тоже не вылетит

Это проверка на существование игрока. Из-за её применения и не должно вылетать.

Last edited by Den_spb (10-10-2011 19:24)

Offline

#3822 10-10-2011 20:20

Jack Daniel's
Registered: 05-07-2011
Posts: 211

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

Den_spb wrote:

Это проверка на существование игрока. Из-за её применения и не должно вылетать.

Обрати внимание на параметр - должен быть $PLAYER_CHAR.

Offline

#3823 10-10-2011 20:51

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

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

$PLAYER_CHAR - это номер игрока, который, как правило, равен 0 (во многих скриптах так и пишется: Player.Defined(0) ). Ты создал новую переменную, а начальное значение любой новой переменной - ноль. Поэтому в принципе ничего не изменилось, и ошибки здесь быть не должно.

Offline

#3824 11-10-2011 16:45

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

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

Jack Daniel's wrote:

Спасибо, работает.

P.S я нашел способ заменить 2-дверную на 4-дверную (у меня gta_sa.exe отредактированный - не вылетает при ошибках, т.е если юзнуть даже Actor.DestroyInstantly($PLAYER_ACTOR), то актер уничтожится! Но продолжать играть не будет возможно grin или же если юзнуть Player.Defined($ACTOR_CHAR), то тоже не вылетит).

Хвастаться все горазды, а как на счёт выложить на суд людской?

Offline

#3825 11-10-2011 19:10

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

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

Sw[ee wrote:

t]Хвастаться все горазды, а как на счёт выложить на суд людской?

Вот вот, я бы тож не отказался от такого экзешника, для опытов над SA-нькой очень даже пригодился бы!)


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

Board footer

Powered by FluxBB