#1 Re: GTA Modding » HEX Addition not working as expected? » 10-02-2018 09:45

298 is a decimal number and 19AD26D8 is a hexadimal one (430778072). 430778072+298=430778370=19AD2802
If you want to get a desired result you have to add a value of 0x298.

#3 Re: Вопросы по скриптингу » Вопрос » 23-09-2017 17:53

На первой странице этого форума я насчитал 16 тем, созданных тобой. Я не вижу причины, по которой эти вопросы нельзя задавать в общей теме https://sannybuilder.com/forums/viewtopic.php?id=49

Пожалуйста, на будущее, если у тебя появляется вопрос, задай его в общей теме.

#5 Re: Вопросы по скриптингу » Немного оффтопа. » 04-09-2017 19:34

Таких опкодов достаточно много, 00E2, 017B, 0299 и т.д.
смотри http://www.gtamodding.com/wiki/List_of_opcodes

#6 Re: GTA Modding » How to disable the automatic updater? » 21-07-2017 22:01

Where have you downloaded CLEO library? Official package does not have such an 'option'. I recommend you to uninstall what you have now, go to http://cleo.li and download CLEO from there.

#7 Re: Программирование » C# и C++ защита от реверсеров » 21-07-2017 21:59

Выбор языка зависит от личных предпочтений и решаемых задач.

Сложность декомпиляции вряд ли является хоть сколько-нибудь стоящим аргументом в пользу C++. Скорее его выберут за скорость конечного приложения и возможность прямого доступа к памяти.

#8 Re: Вопросы по скриптингу » Один вопрос » 16-07-2017 11:25

Позиция игрока определяется или в момент создания (опкод 0053) или при перемещении опкодами 0055, 00A1, и подобными. Игрок и его координаты задаются в файле main.scm.

#9 Re: Вопросы по скриптингу » $Вопросы по пикапом$ » 15-07-2017 11:54

попробуй установить ScrLog http://www.gtagarage.com/mods/show.php?id=23846 чтобы понять на каком опкоде вылетает игра

#11 Re: Вопросы по скриптингу » Как прикрепить игрока к лайнеру [не вопрос] » 08-06-2017 19:50

Интересно) Это воспроизводится стабильно? Что будет, если попробовать передать невалидный хендл машины, например -1 в опкод 0464 (ты же его используешь)?

#12 Re: Sanny Builder и CLEO » I/O error 103 » 06-06-2017 20:04

Видимо какая-то защита от декомпилирования. Выложи файл - разберемся

#14 Re: GTA Modding » CLEO Compile wrong » 03-06-2017 14:34

If I understand your problem correctly you're writing a string in lowercase but getting the result in uppercase. In order to preserve original string formatting go to Options(F10) -> Formats and set "Case converting" option to "As is".

#16 Re: Вопросы по скриптингу » Деление HEX числа на разряды » 22-05-2017 23:44

как мне взять название HandlingID

возможно это поможет https://sannybuilder.com/forums/viewtop … 7478#p7478

mov eax, <ID модели>
mov eax, [0xA9B0C8 + eax*4]
add eax, 0x32

eax => указатель на имя модели

#18 Re: Вопросы по скриптингу » Проверка после лоадскрина » 11-05-2017 07:59

Можно написать такой CLEO скрипт:
взять любой неиспользуемый адрес памяти,
проверить, что его значение равно X
если значение не равно X - это первый старт игры, записать в адрес памяти значение X
если значение равно X, значит это повторный запуск игры, ничего не записывать

#19 Re: Sanny Builder и CLEO » Help, everytime i open GTA:SA it's showing this. » 02-04-2017 09:13

Go to Sanny Builder Options (F10), Formats tab, set Case converting to "As is". Recompile the script.

#20 Re: Работа с памятью, EXE » база GTA III.idb (exe 1.0) » 18-03-2017 19:25

А существуют базы GTA3 с расписанными структурами (хотя бы RW)? В тех, что у есть у меня, совсем немного структур

#21 Re: Работа с памятью, EXE » база GTA III.idb (exe 1.0) » 14-03-2017 18:57

Спасибо! Эта база включает в себя ту, что лежит на паблике или это отдельная разработка?

#22 Re: Вопросы по скриптингу » Крашит пустой скрипт » 02-03-2017 21:31

в конце файла должна стоять команда jump или end_custom_thread

#23 Re: Вопросы по скриптингу » 2 условия в while » 02-03-2017 19:53

Vital wrote:
Seemann wrote:

В этом варианте внутри Check не нужны 0485 и 059A, т.к. опкод jump_if_false (который используется в циклах) читает результат последней проверки, который обновляется после применения любого условного опкода.

Ого, этого не знал, спасибо! А это не может сработать в условном gosub не в цикле? У меня такая (гуманитарная) логика: если в цикле при условном gosub можно обойтись без return_true/false, то без них можно обойтись везде, так как высокоуровневые конструкции игрой "разбираются" на низкоуровневые конструкции с метками, то есть на "начальном" уровне они ничем не отличаются друг от друга. Если так, то зачем нужны 0485 и 059А?
Но скорее всего, я просто недопонимаю.

Ещё раз благодарю за этот нюанс!


0485/059A удобно использовать как результат функции. Этот результат в простейшем случае равен результату одной проверки, как в нашем примере с Check. Но если взять более сложные примеры, где внутри функции есть цепочка проверок, то такой трюк уже не прокатит. Например:

:Check
if x > 0
  then
    if y > 0
    then
     return_false
     ret 0
    end
end
return_true
ret 0

Ну и, вообще это "неочевидная возможность", которая во многих случаях вредит читабельности кода и отлавливанию ошибок. Подобные функции становятся очень чувствительными к порядку выполнения команд. Как и в обычном программировании, писать код в таком стиле не рекомендуется.

#24 Re: Вопросы по скриптингу » 2 условия в while » 27-02-2017 19:54

Vital wrote:

В циклах (while, repeat) ещё можно использовать условный gosub.

while gosub @Check
wait 0
//действия
end 

:Check
if and //или if or
//условие 1
//условие 2
then
0485:  return_true
else
059A:  return_false
end
return

У меня работало, это удобно. Можно и внутрь while true вставить условия, как показал DK22Pac.

В этом варианте внутри Check не нужны 0485 и 059A, т.к. опкод jump_if_false (который используется в циклах) читает результат последней проверки, который обновляется после применения любого условного опкода.

while gosub @Check
wait 0
//действия
end 

:Check
if and //или if or
//условие 1
//условие 2
return

Но вообще это костыли от ограниченности компилятора(

#25 Re: Вопросы по скриптингу » Один вопрос » 15-02-2017 21:02

Mr.Secret wrote:

Почему-то стал менее предсказуемо себя вести скриптовый движок игры после переезда на новое железо. Был старенький пенёк, сейчас новый быстрый i5.

возможно это связано с тем, как игра измеряет интервалы времени
цитата отсюда

R* used two ways of updating GT value:
1) using QueryPerformanceCounter() if the current system supports it
2) using timeGetTime() for other systems.

возможно, что с обновлением железа игра стала использовать первый метод и это каким-то образом повлияло на игровой таймер. Кстати, замечено, что при очень большой продолжительности игры, таймер начинает глючить. При начале новой игры такой проблемы нет. почитай мой пост по ссылке, может как-то поможет.

Board footer

Powered by FluxBB