#4551 26-05-2014 16:07

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

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

Я остановил действие одного потока в мэйне, но через клео, таким образом:

end_thread_named 'GFAGNT' 

Потом сохранил игру, а после загрузки тот поток тоже не работал. Как теперь запустить его снова?

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

Offline

#4552 26-05-2014 20:29

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

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

d88 wrote:

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

Нужно смотреть сам поток и определять, что может повлиять на его работу. Скорее всего это какие-нибудь глобальные переменные.
Первое, что бросилось в глаза - тестирование бита 31 в переменной $391. Судя по всему, если выставить этот бит, то свидания не будут работать. Но делать это нужно в цикле.

08BA: set $391 bit 31 

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


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

Offline

#4553 27-05-2014 14:41

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

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

Voron295 wrote:

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

Нет, не подействовало.

Offline

#4554 30-05-2014 22:23

Dark_Knight
From: г. Полтава
Registered: 09-07-2013
Posts: 33

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

Исправил ошибку. Какой ид левой руки для 070A?

Last edited by Dark_Knight (31-05-2014 09:20)

Offline

#4555 31-05-2014 10:47

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

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

d88 wrote:

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

Можно попробовать запустить поток снова опкодами:
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

#4556 31-05-2014 14:01

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

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

Den_spb wrote:

Можно попробовать запустить поток снова опкодами:
004F: create_thread @MS_BIKE_MISSIONS
00D7: create_thread @NONAME_1 // without extra params

Насколько я понял, это нужно сделать CLEO-скриптом, поэтому такой вариант не подойдёт. А вот со статами и переменными - вполне возможно.


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

Offline

#4557 03-06-2014 15:14

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

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

Den_spb wrote:

Можно попробовать запустить поток снова опкодами:
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

#4558 04-06-2014 01:13

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

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

d88 wrote:

А нельзя ли как-то сделать так, чтобы при компиляции скрипт не проверял метки? Может, тогда сработают опкоды 004F: и 00D7:? Или из клео запустить поток в мэйне даже в теории не возможно?

Дело вовсе не в том, что при компиляции проверяются метки. Дело в том, что они отсчитываются относительно текущего скрипта. Т.е. по сути надпись типа "@label_1" на самом деле является обычным целочисленным значением, которое компилятор подставляет сам, при компиляции. Поэтому, выходит, что запустить поток можно лишь из майна. Хотя, вопрос спорный, наверняка можно откопать какой-нибудь способ.

Last edited by Voron295 (04-06-2014 01:14)


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

Offline

#4559 04-06-2014 11:24

mgmoldova
Registered: 20-06-2013
Posts: 13

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

{
    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

#4560 04-06-2014 17:04

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

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

@mgmoldova, этот код запускает поток, находящийся в CLEO-скрипте. А нужно запустить поток, находящийся в майне из CLEO-скрипта.


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

Offline

#4561 04-06-2014 22:48

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

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

В опкоды вместо меток можно ставить числа.

отличие меток в майне от меток в скриптах в том, что первые имеют положительное значение, а вторые отрицательные. Т.е. опкод jump 200 будет указывать на позицию +200 байтов от начала main.scm, а jump -200 на позицию +200 байтов от начала текущего скрипта или миссии. Собственно, create_thread 10000 запустит поток из main.scm по смещению 10000.

Offline

#4562 05-06-2014 12:50

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

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

@Seemann, можно ли вообще запустить поток майна из CLEO-скрипта? Я сейчас перепробовал много разных вариантов, но все приводят к вылету где-то в cleo.asi, в процессе обработки опкодов. Версия CLEO 4.1.1.30f.


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

Offline

#4563 06-06-2014 13:38

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

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

Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.

Voron295 wrote:

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

Я просто подумал, что если в клео можно остановить поток из мэйна, то, может, удастся и запустить его снова.

Offline

#4564 06-06-2014 21:05

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

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

d88 wrote:

Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.

Ну, я экспериментировал не с числами, а с функциями игры. Но так у меня ничего толкового и не вышло. Поэтому и решил Seemann'а спросить.


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

Offline

#4565 09-06-2014 20:05

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

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

d88 wrote:

Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.

Вообще в скомпилированных скриптах никаких меток нет. Скомпилированный скрипт содержит только номера опкодов и значения параметров опкодов (в этом легко убедиться, открыв любой cs-файл в hex-редакторе, и сравнив полученную картину с исходным кодом скрипта). Метки создаёт декомпилятор в момент декомпиляции для удобства чтения полученного кода. Декомпилятор называет метки так, как указано в настройках СБ (Настройки СБ - Форматирование -Формат меток).

Last edited by Den_spb (09-06-2014 20:07)

Offline

#4566 11-06-2014 18:23

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

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

Den_spb wrote:

Вообще в скомпилированных скриптах никаких меток нет. Скомпилированный скрипт содержит только номера опкодов и значения параметров опкодов (в этом легко убедиться, открыв любой cs-файл в hex-редакторе, и сравнив полученную картину с исходным кодом скрипта). Метки создаёт декомпилятор в момент декомпиляции для удобства чтения полученного кода. Декомпилятор называет метки так, как указано в настройках СБ (Настройки СБ - Форматирование -Формат меток).

Я понимаю, что при компиляции и декомпиляции происходит преобразование. Я имел в виду, что после декомпиляции стало видно, что эта метка вовсе не из мэйна, а из того же скрипта. Хотя, этого и следовало ожидать.

Offline

#4567 01-07-2014 11:20

Dimoman
Registered: 01-07-2014
Posts: 15

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

Подскажите плиз как отключить отображение иконок оружия в HUD, а не весь HUD?

Offline

#4568 20-07-2014 10:42

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

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

DK22Pac wrote:

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
end

3) Проверить, что полученный 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
end

4) Перевести struct в handle.

0AEB: 0@ = car_struct 1@ handlep

Понадобилось получить хендл кара на который целится игрок. Решил воспользоваться твоими наработками. Если не затруднит, то можно готовый код? Что-то у меня не получилось собрать эти все пункты воедино.  wall На 0AA7: происходит вылет.

Offline

#4569 22-07-2014 22:59

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

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

Кстати, насколько реально сделать Сплитскрин версию гта са? Чтоб был кооп в сингле. В ps2 как раз было нечто похожее реализовано. И да, сплитскрин не обязательно на одном пк, а еще по сети, используя как базу, например, sa-mp или mta.
Или уже пытались реализовать?

P.S. Давно не был на форуме

Last edited by Jack Daniel's (22-07-2014 23:04)

Offline

#4570 23-07-2014 09:26

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

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

Недавно отредактировал свой мэйн, с которым уже давно работаю. Открыл его сегодня и обнаружил, что мои глобальные переменные изменялись. Теперь их имена представляют из себя просто пятизначные числа, например $10117, $10226. Можно ли вернуть им прежний вид и как избежать этого в будущем?

Offline

#4571 23-07-2014 19:00

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

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

Исходник-то есть, он же автоматически сохраняется. Но я хочу знать, из-за чего это произошло, и что сделать, чтобы этого не повторилось. Я всю жизнь открывал мэйн в СБ, и всегда всё было в порядке, а тут вдруг непонятно с чего такая ерунда.

Last edited by d88 (23-07-2014 19:06)

Offline

#4572 25-07-2014 09:40

Dimoman
Registered: 01-07-2014
Posts: 15

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

Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.

Offline

#4573 26-07-2014 17:06

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

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

Jack Daniel's wrote:

Кстати, насколько реально сделать Сплитскрин версию гта са?

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

d88 wrote:

Исходник-то есть, он же автоматически сохраняется. Но я хочу знать, из-за чего это произошло, и что сделать, чтобы этого не повторилось. Я всю жизнь открывал мэйн в СБ, и всегда всё было в порядке, а тут вдруг непонятно с чего такая ерунда.

Названия переменных хранятся в дополнительной информации скрипта/мэйна (в настройках можно выключить, что ты, вероятно, и сделал). Чтобы такого не повторилось, можно вручную вписать соответствие номеров переменных их именам в файле "CustomVariables.ini" в папке "Sanny Builder 3\data\sa".

Dimoman wrote:

Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.

Я так понимаю, соответствующего опкода нет? Можно получить его так:

0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0

Это дробное число, максимум вроде как 1000.

Last edited by Voron295 (26-07-2014 17:21)


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

Offline

#4574 27-07-2014 10:11

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

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

Voron295 wrote:

Названия переменных хранятся в дополнительной информации скрипта/мэйна (в настройках можно выключить, что ты, вероятно, и сделал). Чтобы такого не повторилось, можно вручную вписать соответствие номеров переменных их именам в файле "CustomVariables.ini" в папке "Sanny Builder 3\data\sa".

Да, спасибо. Оказалось, что надо было поставить отметку возле "Добавлять доп. информацию в SCM".

Offline

#4575 27-07-2014 17:31

Dimoman
Registered: 01-07-2014
Posts: 15

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

Voron295 wrote:

Я так понимаю, соответствующего опкода нет? Можно получить его так:

0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0

Это дробное число, максимум вроде как 1000.

А как вы это нашли? В интернете ничего нет, в SB вообще туториал просто мизерный.

При компиляции SB пишет "неизвестная команда о."

Last edited by Dimoman (27-07-2014 17:42)

Offline

Board footer

Powered by FluxBB