#4526 19-03-2014 12:01

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

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

d88 wrote:
0615: define_AS_pack_begin 0@ 

0633: AS_actor -1 exit_car 
0643: set_AS_pack 0@ loop 0 
0618: assign_actor 1@ to_AS_pack 0@ 
061B: remove_references_to_AS_pack 0@

А где опкод 0616?

d88 wrote:

3. Можно ли сделать так, чтобы взорванная машина не исчезала до конца миссии?

А какая машина была взорвана? Та, что создана скриптом или игрой?
Если первый вариант, то вроде не удаляется, пока не удалишь референсы. А второй - посложнее будет. Скорее всего придётся искать машины, которые были взорваны и присваивать им дополнительные флаги (типа, она была создана скриптом).

d88 wrote:

1. Нужно сделать так, чтобы актёр, созданный одним скриптом, мог попасть в группу, созданную в другом скрипте. Можно ли как-то это сделать?

Разве что воспользоваться CLEO-переменными, для того, чтобы передать хендл группы из одного скрипта в другой. Тут правда возникает ещё вопрос - а почему возникла необходимость в использовании двух скриптов?


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

Offline

#4527 19-03-2014 12:32

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

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

Voron295 wrote:

С глобальной переменной надо будет убрать кое-что лишнее. Но, надо знать точный номер переменной. Если устроит - расскажу, как это сделать.

Фишка в том что мне надо не просто перехватить момент сохранения, а осуществить подмену значения переменной, которая должна по идее сохранится в файле сохранений, пусть то в файле стандартных сохранений (и там может быть получается глоба или локалка) пусть то в файле клео сохранений (ну тут уже локалка). Например переменная $8552 сохранится со значением 1, а я хочу перед тем как осуществится сохранение было значение 2 допустим.


I know everything and nothing...

Offline

#4528 19-03-2014 14:05

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

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

Voron295 wrote:

А где опкод 0616?

А он обязателен? Я никогда его не использовал, думал, что 061B достаточно.

Voron295 wrote:

А какая машина была взорвана? Та, что создана скриптом или игрой?

Скриптом. Но всё равно почему-то исчезает.
На это может повлиять команда Car.ImmuneToNonPlayer(1@) = True ? Не я писал скрипт, поэтотому вообще не знаю, зачем она нужна.

Voron295 wrote:

Тут правда возникает ещё вопрос - а почему возникла необходимость в использовании двух скриптов?

Один скрипт спавнит актёров в случайное время в случайных координатах. Второй делает то же самое, но с группой. Если актёр из первого скрипта встретится с группой, он должен присоединиться к ним.

А есть способ проверить, что актёр состоит в группе? Не в какой-то конкретной, а вообще, не является ли членом группы?

Offline

#4529 19-03-2014 21:26

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

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

mfisto wrote:

Фишка в том что мне надо не просто перехватить момент сохранения, а осуществить подмену значения переменной, которая должна по идее сохранится в файле сохранений, пусть то в файле стандартных сохранений (и там может быть получается глоба или локалка) пусть то в файле клео сохранений (ну тут уже локалка). Например переменная $8552 сохранится со значением 1, а я хочу перед тем как осуществится сохранение было значение 2 допустим.

Попробуй такой вариант, для глобальных переменных:

{$CLEO}
// Получаем указатель на асм-код
0AC6: 0@ = label @asm_jump offset

// Вычисляем адрес глобальной переменной и вписываем его в асм-код
1@ = 8552 // Номер глобальной переменной
1@ *= 4
1@ += 0xA49960
0A8E: 2@ = 0@ + 2 // int
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0

// Ставим хук - прыжок на наш асм-код в функции сохранения
0A8C: write_memory 0x619066 size 1 value 0xE9 virtual_protect 1
0@ -= 0x61906B
0A8C: write_memory 0x619067 size 4 value 0@ virtual_protect 1

while true
    wait 0
end

:asm_jump
hex
    C705 00000000 02000000  // MOV DWORD PTR DS:[00000000], 2 // Присваиваем значение 2 переменной (можно изменять по необходимости)
    B8 900E5D00     // MOV EAX,005D0E90
    FF D0           // CALL EAX
    B8 6B906100     // MOV EAX,0061906B
    FFE0            // JMP EAX
end
d88 wrote:

А он обязателен? Я никогда его не использовал, думал, что 061B достаточно.

Игра же должна как-то понять, где начало объявления последовательности, а где конец. По крайней мере, в справке он использовался, в майне, наверняка, тоже.

d88 wrote:

А есть способ проверить, что актёр состоит в группе? Не в какой-то конкретной, а вообще, не является ли членом группы?

Могу предположить, что при использовании опкода 046D ты получишь 0, если актёр не состоит в группе.

Last edited by Voron295 (19-03-2014 21:27)


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

Offline

#4530 21-03-2014 09:01

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

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

Voron295 wrote:

Могу предположить, что при использовании опкода 046D ты получишь 0, если актёр не состоит в группе.

Эм-м… так ведь вроде этот опкод записывает в переменную количество cвободных мест в машине актёра. По крайней мере поиск показал, что он выглядит так:

046D: 55@ = actor 36@ car_free_seats

Кто-нибудь разбирается в Decision Maker? Мне нужно, чтобы пед, увидев актёра, которого он недолюбливает (но не ненавидит), начал его атаковать. Но только когда он пешком, в машине он этого делать не должен.
Вроде код должен выглядеть так:

060A: create_decision_maker_type 2 store_to 20@ 
0708: reset_decision_maker 20@ event 37 
0709: set_decision_maker 20@ on_event 37 taskID 1000 chance_if_acquaintance respect 0.0 hate 0.0  unk_like_dislike 100.0 unk_like_dislike 100.0 in_car 0 on_foot 1
060B: set_actor 13@ decision_maker_to 20@ 

Но он не работает.
Возможно, 1000 - это не та задача, которая должна быть здесь. Но как узнать нужную? И ещё я не знаю, какой именно параметр отвечает за реакцию на педа, которого актёр недолюбливает, поэтому поставил 100.0 у обоих unk_like_dislike.

Offline

#4531 21-03-2014 17:39

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

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

d88 wrote:
046D: 55@ = actor 36@ car_free_seats

У меня подписан так:

046D: 55@ = actor 36@ members_in_group

Посмотрел в базе - вроде вызывающиеся функции работают с группами. Это точно не свободные места в машине. Во всяком случае, стоит проверить.


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

Offline

#4532 21-03-2014 20:32

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

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

Voron295 wrote:

Посмотрел в базе - вроде вызывающиеся функции работают с группами. Это точно не свободные места в машине. Во всяком случае, стоит проверить.

Ладно, попробую. Только по логике номер члена группы может быть равен 0. Тогда уж скорее всего если актёр не состоит в группе, это значение должно быть -1.
А что с Decision Maker? Можешь помочь с этим вопросом?

Offline

#4533 21-03-2014 23:11

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

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

d88 wrote:

Ладно, попробую. Только по логике номер члена группы может быть равен 0. Тогда уж скорее всего если актёр не состоит в группе, это значение должно быть -1.

Опкод возвращает не номер члена группы, а количество членов группы. Логично будет предположить, что если актёр не состоит в группе, то и количество участников несуществующей группы будет равно нулю.
В Decision Maker не разбираюсь, так что тут не могу помочь.


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

Offline

#4534 22-03-2014 11:06

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

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

Voron295 wrote:

Попробуй такой вариант, для глобальных переменных:


Если получится то это здорово, спасибо тебе wink  smile


I know everything and nothing...

Offline

#4535 31-03-2014 17:15

HH
Registered: 21-01-2014
Posts: 35

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

Ребят, как заставить актёра одеть очки ночного виденья не применяя анимацию, т.е. пропустить тот момент когда актер одевает очки???

Offline

#4536 01-04-2014 08:19

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

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

0AA6: call_method 0x5E3AE0 struct (ped_struct) num_params 0 pop 0

Last edited by DK22Pac (01-04-2014 08:19)


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

Offline

#4537 01-04-2014 15:56

HH
Registered: 21-01-2014
Posts: 35

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

DK22Pac wrote:
0AA6: call_method 0x5E3AE0 struct (ped_struct) num_params 0 pop 0

Cпасибо, то что нужно

Offline

#4538 03-04-2014 13:03

booom
Registered: 03-04-2014
Posts: 1

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

Как сделать, что бы приближенный скин, был не видим для меня, но сама жта, думала что я его вижу приближенным.

:BOOM_209
if 
  0@ == 1 
else_jump @BOOM_342 
if
0AD2: 1@ = player $PLAYER_CHAR targeted_actor //IF and SET 
else_jump @BOOM_342 

:BOOM_246
0AB0:   key_pressed 1 
else_jump @BOOM_342 
wait 0 
if 
856D:   not actor 1@ defined 
else_jump @BOOM_284 
jump @BOOM_342 

:BOOM_284
04C4: store_coords_to 2@ 3@ 4@ from_actor $PLAYER_ACTOR with_offset 0.3 2.0 0.2 
0AB1: call_scm_func @BOOM_349 4 1@ 2@ 3@ 4@  
jump @BOOM_246 

:BOOM_342
jump @BOOM_9 

:BOOM_349
0A96: 4@ = actor 0@ struct
4@ += 20 
0A8D: 4@ = read_memory 4@ size 4 virtual_protect 0 
4@ += 48 
0A8C: write_memory 4@ size 4 value 1@ virtual_protect 0 
4@ += 4 
0A8C: write_memory 4@ size 4 value 2@ virtual_protect 0 
4@ += 4 
0A8C: write_memory 4@ size 4 value 3@ virtual_protect 0 
0AB2: ret 0 

Offline

#4539 04-04-2014 06:20

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

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

booom wrote:

Как сделать, что бы приближенный скин, был не видим для меня, но сама жта, думала что я его вижу приближенным.

Для начала - научись пользоваться исходниками (txt), вместо того, чтобы открывать каждый раз cs-файл.  Так ты "убиваешь" оригинальные названия меток, код становится менее читабельным. К тому же, высокоуровневые конструкции преобразуются в низкоуровневые.
Во-вторых, что значит "сама жта думала, что я его вижу приближенным". GTA думать не может. Выразись яснее.


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

Offline

#4540 05-04-2014 20:16

HH
Registered: 21-01-2014
Posts: 35

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

Ребят всем привет. Есть вопрос. Возможно ли управляя игроком перемещаться по воздуху также как и на земле, чтоб игрок не падал, а ходил по воздуху. Как это сделать?? С анимацией думаю туговато будет, да и создания невидимой текстуры тоже не все отлично. Думаю как бы внушить игроку что он не в воздухе а на земле, пробовал через память, но не чего не вышло, применял такие адреса:

CPed +0x15C = Некторые статусы анимации: 
154 = спринт (бежит с ускорением)
205 = бежит 
CPed +0x534 = Статус бега: 
4 = начинает бежать
6 = бежит
7 = спринт (бежит с ускорением) 

Помогите

Last edited by HH (05-04-2014 20:17)

Offline

#4541 07-04-2014 14:08

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

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

HH wrote:

Ребят всем привет. Есть вопрос. Возможно ли управляя игроком перемещаться по воздуху также как и на земле, чтоб игрок не падал, а ходил по воздуху. Как это сделать?? С анимацией думаю туговато будет, да и создания невидимой текстуры тоже не все отлично.

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

Last edited by Voron295 (07-04-2014 14:09)


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

Offline

#4542 08-04-2014 16:29

HH
Registered: 21-01-2014
Posts: 35

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

Спасибо

Offline

#4543 20-04-2014 12:13

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

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

Создаю актёра и заставляю его в панике убегать опкодом 05DA. А другому даю команду убить того актёра. Оружия у второго актёра нет, поэтому он бежит за первым, чтобы драться с ним врукопашную. Так вот, проблема в том, что первый актёр бежит не разбирая дороги, и часто даже упирается в стены зданий, а второй наоборот придерживается путей педов, т.е. в основном бежит по тротуару. Можно ли как-то заставить либо первого педа бегать только по тротуару, либо второго не придерживаться путей педов?

Offline

#4544 05-05-2014 18:12

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

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

Можно ли отключить внешние скрипты, если они привязаны к объекту и педу? Например, мне нужно, чтобы не появлялись продавцы хот-догов и другой еды. Нашёл скрипты, которые их активируют, и пробовал отключить так:

0A46: set_external_scripts_triggers_type 9 enabled 0 
0A46: set_external_scripts_triggers_type 77 enabled 0 

Но почему-то не действует.

Offline

#4545 06-05-2014 14:03

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

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

090F: end_external_script 66 (CARMOD1)
- завершает скрипт если он запущен.

0910: release_external_script 1
- выгружает скрипт (т.е. нужна будет новая активация скрипта)


I know everything and nothing...

Offline

#4546 09-05-2014 15:20

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

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

mfisto wrote:

090F: end_external_script 66 (CARMOD1)
- завершает скрипт если он запущен.

0910: release_external_script 1
- выгружает скрипт (т.е. нужна будет новая активация скрипта)

Сначала попробовал - вроде сработало. Теперь тестирую - не работает.

Offline

#4547 09-05-2014 15:54

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

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

Надеюсь в опкоде 0910 ты используешь нужный номер скрипта? (а не 1)


I know everything and nothing...

Offline

#4548 10-05-2014 09:52

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

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

mfisto wrote:

Надеюсь в опкоде 0910 ты используешь нужный номер скрипта? (а не 1)

Разумеется.
Может, всё дело в том, что на внешние скрипты нельзя влиять через клео?

Offline

#4549 10-05-2014 14:32

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

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

Я делал так для двух скриптов: стритбола и бильярда, они выгружались, и да в клео. Только надо понимать, что это надо делать каждый раз когда начинаешь игру. А вот если сохранишься то и клео скрипт должен содержать режим сохранения, дабы не происходило постоянная выгрузка.


I know everything and nothing...

Offline

#4550 10-05-2014 16:01

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

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

Попробовал эти опкоды в цикле - так пока работают.

Offline

Board footer

Powered by FluxBB