You are not logged in.
Я остановил действие одного потока в мэйне, но через клео, таким образом:
end_thread_named 'GFAGNT'
Потом сохранил игру, а после загрузки тот поток тоже не работал. Как теперь запустить его снова?
Или есть ли другой способ на некоторое время отключить возможность ходить на свидания? И чтобы девушки не звонили по телефону, и чтобы маркеры вообще не появлялись возле их домов?
Offline
Или есть ли другой способ на некоторое время отключить возможность ходить на свидания? И чтобы девушки не звонили по телефону, и чтобы маркеры вообще не появлялись возле их домов?
Нужно смотреть сам поток и определять, что может повлиять на его работу. Скорее всего это какие-нибудь глобальные переменные.
Первое, что бросилось в глаза - тестирование бита 31 в переменной $391. Судя по всему, если выставить этот бит, то свидания не будут работать. Но делать это нужно в цикле.
08BA: set $391 bit 31
Конечно, не факт, что будет работать (т.к. поток сам убирает этот бит, если игрок не на миссии и не убит), но попробовать можно, я думаю.
Offline
Исправил ошибку. Какой ид левой руки для 070A?
Last edited by Dark_Knight (31-05-2014 09:20)
Offline
Или есть ли другой способ на некоторое время отключить возможность ходить на свидания? И чтобы девушки не звонили по телефону, и чтобы маркеры вообще не появлялись возле их домов?
Можно попробовать запустить поток снова опкодами:
004F: create_thread @MS_BIKE_MISSIONS
00D7: create_thread @NONAME_1 // without extra params
Либо надо менять прогресс отношений с каждой из подруг.
Это можно сделать с помощью опкода изменения статистики:
0627: update_integer_stat 215 to $1922
Номера статистики для отношений с подругами: 252 - 257 (см. справку СБ: Документация по scm - статистика ИД)
Другой вариант: найти в main.scm глобальные переменные со словом "girl" и попробовать записать в них ноль.
Скорее всего, нужно обнулить глобальные переменные: $GIRL_PROGRESS[0] ... $GIRL_PROGRESS[5]
Offline
Можно попробовать запустить поток снова опкодами:
004F: create_thread @MS_BIKE_MISSIONS
00D7: create_thread @NONAME_1 // without extra params
Насколько я понял, это нужно сделать CLEO-скриптом, поэтому такой вариант не подойдёт. А вот со статами и переменными - вполне возможно.
Offline
Можно попробовать запустить поток снова опкодами:
004F: create_thread @MS_BIKE_MISSIONS
00D7: create_thread @NONAME_1 // without extra params
Либо надо менять прогресс отношений с каждой из подруг.
Это можно сделать с помощью опкода изменения статистики:
0627: update_integer_stat 215 to $1922
Номера статистики для отношений с подругами: 252 - 257 (см. справку СБ: Документация по scm - статистика ИД)
Другой вариант: найти в main.scm глобальные переменные со словом "girl" и попробовать записать в них ноль.
Скорее всего, нужно обнулить глобальные переменные: $GIRL_PROGRESS[0] ... $GIRL_PROGRESS[5]
Спасибо, но ничего из этого не подействовало. С глобальными переменными экспериментировал - удалось сделать так, как было в начале игры, когда у CJ ещё не было девушек. На свидания ходить стало нельзя, но снова появилась возможность знакомиться с девушками, а этого тоже не должно быть.
А нельзя ли как-то сделать так, чтобы при компиляции скрипт не проверял метки? Может, тогда сработают опкоды 004F: и 00D7:? Или из клео запустить поток в мэйне даже в теории не возможно?
Offline
А нельзя ли как-то сделать так, чтобы при компиляции скрипт не проверял метки? Может, тогда сработают опкоды 004F: и 00D7:? Или из клео запустить поток в мэйне даже в теории не возможно?
Дело вовсе не в том, что при компиляции проверяются метки. Дело в том, что они отсчитываются относительно текущего скрипта. Т.е. по сути надпись типа "@label_1" на самом деле является обычным целочисленным значением, которое компилятор подставляет сам, при компиляции. Поэтому, выходит, что запустить поток можно лишь из майна. Хотя, вопрос спорный, наверняка можно откопать какой-нибудь способ.
Last edited by Voron295 (04-06-2014 01:14)
Offline
{ START NEW THREAD WITHOUT INTERRUPTING MAIN THREAD 0AB1: call_scm_func @RUN_CLEO_MOD 1 AT LINE @CLEO by Deji } :RUN_CLEO_MOD 0A9F: 32@ = current_thread_pointer 000A: 32@ += 0x10 0A8D: 32@ = read_memory 32@ size 4 virtual_protect 0 0062: 32@ -= 0@ 0AA7: call_function 0x464C20 num_params 1 pop 1 32@ 33@ 005A: 32@ += 0@ 000A: 33@ += 0x10 0A8C: write_memory 33@ size 4 value 32@ virtual_protect 0 000A: 33@ += 0x2C for 32@ = 0 to 30 0A8C: write_memory 33@ size 4 value 1@(32@,30i) virtual_protect 0 000A: 33@ += 4 end 0AB2: ret 0
Example by opcode
{$CLEO .cs} 0000: 0662: NOP "#########################" 0662: NOP "___Made by Opcode.eXe___" { BASIC THREAD } 0662: NOP "Www.Youtube.Com/OpcodeXe" 0662: NOP "#########################" 0AB1: call_scm_func @RUN_CLEO_MOD 1 AT LINE @CLEO WHILE TRUE wait 0 if 0AB0: 49 // X then 0AD1: show_formatted_text_highpriority "CLEO THREAD_1 IS RUNNING! %d" time 1 33@ end END :CLEO 0000: WHILE TRUE wait 0 if 0AB0: 50 // X then 0AD1: show_formatted_text_highpriority "CLEO THREAD_2 IS RUNNING! %d" time 1 33@ end END :RUN_CLEO 0A9F: 32@ = current_thread_pointer 000A: 32@ += 0x10 0A8D: 32@ = read_memory 32@ size 4 virtual_protect 0 0062: 32@ -= 0@ 0AA7: call_function 0x464C20 num_params 1 pop 1 32@ 33@ 005A: 32@ += 0@ 000A: 33@ += 0x10 0A8C: write_memory 33@ size 4 value 32@ virtual_protect 0 000A: 33@ += 0x2C for 32@ = 0 to 30 0A8C: write_memory 33@ size 4 value 1@(32@,30i) virtual_protect 0 000A: 33@ += 4 end 0AB2: ret 0
Offline
В опкоды вместо меток можно ставить числа.
отличие меток в майне от меток в скриптах в том, что первые имеют положительное значение, а вторые отрицательные. Т.е. опкод jump 200 будет указывать на позицию +200 байтов от начала main.scm, а jump -200 на позицию +200 байтов от начала текущего скрипта или миссии. Собственно, create_thread 10000 запустит поток из main.scm по смещению 10000.
Offline
Offline
Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.
Поэтому, выходит, что запустить поток можно лишь из майна. Хотя, вопрос спорный, наверняка можно откопать какой-нибудь способ.
Я просто подумал, что если в клео можно остановить поток из мэйна, то, может, удастся и запустить его снова.
Offline
Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.
Ну, я экспериментировал не с числами, а с функциями игры. Но так у меня ничего толкового и не вышло. Поэтому и решил Seemann'а спросить.
Offline
Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.
Вообще в скомпилированных скриптах никаких меток нет. Скомпилированный скрипт содержит только номера опкодов и значения параметров опкодов (в этом легко убедиться, открыв любой cs-файл в hex-редакторе, и сравнив полученную картину с исходным кодом скрипта). Метки создаёт декомпилятор в момент декомпиляции для удобства чтения полученного кода. Декомпилятор называет метки так, как указано в настройках СБ (Настройки СБ - Форматирование -Формат меток).
Last edited by Den_spb (09-06-2014 20:07)
Offline
Вообще в скомпилированных скриптах никаких меток нет. Скомпилированный скрипт содержит только номера опкодов и значения параметров опкодов (в этом легко убедиться, открыв любой cs-файл в hex-редакторе, и сравнив полученную картину с исходным кодом скрипта). Метки создаёт декомпилятор в момент декомпиляции для удобства чтения полученного кода. Декомпилятор называет метки так, как указано в настройках СБ (Настройки СБ - Форматирование -Формат меток).
Я понимаю, что при компиляции и декомпиляции происходит преобразование. Я имел в виду, что после декомпиляции стало видно, что эта метка вовсе не из мэйна, а из того же скрипта. Хотя, этого и следовало ожидать.
Offline
Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?
Offline
1) Получить координаты прицеливания игрока + проверить, что он целится.
....
2) Выполнить ProcessLineOfSight для этих координат.0AA7: call_function {CWorld::ProcessLineOfSight} 0x56BA00 num_params 12 pop 12 0 0 0 0 _objects 1 _peds 1 _vehicles 1 _buildings 1 _pEntity 1@v _colPoint 20@ _end 5@v _start 2@v _result: 13@ if 08B7: test 13@ bit 0 then continue end3) Проверить, что полученный Entity - автомобиль.
0A8E: 2@ = 1@ + 0x36 0A8D: 2@ = read_memory 2@ size 1 virtual_protect 0 0B10: 2@ = 2@ AND 7 if 2@ <> 2 then continue end4) Перевести struct в handle.
0AEB: 0@ = car_struct 1@ handlep
Понадобилось получить хендл кара на который целится игрок. Решил воспользоваться твоими наработками. Если не затруднит, то можно готовый код? Что-то у меня не получилось собрать эти все пункты воедино. На 0AA7: происходит вылет.
Offline
Кстати, насколько реально сделать Сплитскрин версию гта са? Чтоб был кооп в сингле. В ps2 как раз было нечто похожее реализовано. И да, сплитскрин не обязательно на одном пк, а еще по сети, используя как базу, например, sa-mp или mta.
Или уже пытались реализовать?
P.S. Давно не был на форуме
Last edited by Jack Daniel's (22-07-2014 23:04)
Offline
Недавно отредактировал свой мэйн, с которым уже давно работаю. Открыл его сегодня и обнаружил, что мои глобальные переменные изменялись. Теперь их имена представляют из себя просто пятизначные числа, например $10117, $10226. Можно ли вернуть им прежний вид и как избежать этого в будущем?
Offline
Исходник-то есть, он же автоматически сохраняется. Но я хочу знать, из-за чего это произошло, и что сделать, чтобы этого не повторилось. Я всю жизнь открывал мэйн в СБ, и всегда всё было в порядке, а тут вдруг непонятно с чего такая ерунда.
Last edited by d88 (23-07-2014 19:06)
Offline
Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.
Offline
Кстати, насколько реально сделать Сплитскрин версию гта са?
Теоретически возможно. Но нужно очень много функций игровых перебирать и переписывать. Слишком много мороки ради такой бесполезной вещи.
Исходник-то есть, он же автоматически сохраняется. Но я хочу знать, из-за чего это произошло, и что сделать, чтобы этого не повторилось. Я всю жизнь открывал мэйн в СБ, и всегда всё было в порядке, а тут вдруг непонятно с чего такая ерунда.
Названия переменных хранятся в дополнительной информации скрипта/мэйна (в настройках можно выключить, что ты, вероятно, и сделал). Чтобы такого не повторилось, можно вручную вписать соответствие номеров переменных их именам в файле "CustomVariables.ini" в папке "Sanny Builder 3\data\sa".
Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.
Я так понимаю, соответствующего опкода нет? Можно получить его так:
0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0
Это дробное число, максимум вроде как 1000.
Last edited by Voron295 (26-07-2014 17:21)
Offline
Названия переменных хранятся в дополнительной информации скрипта/мэйна (в настройках можно выключить, что ты, вероятно, и сделал). Чтобы такого не повторилось, можно вручную вписать соответствие номеров переменных их именам в файле "CustomVariables.ini" в папке "Sanny Builder 3\data\sa".
Да, спасибо. Оказалось, что надо было поставить отметку возле "Добавлять доп. информацию в SCM".
Offline
Я так понимаю, соответствующего опкода нет? Можно получить его так:
0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0Это дробное число, максимум вроде как 1000.
А как вы это нашли? В интернете ничего нет, в SB вообще туториал просто мизерный.
При компиляции SB пишет "неизвестная команда о."
Last edited by Dimoman (27-07-2014 17:42)
Offline