You are not logged in.
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?
3. Можно ли сделать так, чтобы взорванная машина не исчезала до конца миссии?
А какая машина была взорвана? Та, что создана скриптом или игрой?
Если первый вариант, то вроде не удаляется, пока не удалишь референсы. А второй - посложнее будет. Скорее всего придётся искать машины, которые были взорваны и присваивать им дополнительные флаги (типа, она была создана скриптом).
1. Нужно сделать так, чтобы актёр, созданный одним скриптом, мог попасть в группу, созданную в другом скрипте. Можно ли как-то это сделать?
Разве что воспользоваться CLEO-переменными, для того, чтобы передать хендл группы из одного скрипта в другой. Тут правда возникает ещё вопрос - а почему возникла необходимость в использовании двух скриптов?
Offline
С глобальной переменной надо будет убрать кое-что лишнее. Но, надо знать точный номер переменной. Если устроит - расскажу, как это сделать.
Фишка в том что мне надо не просто перехватить момент сохранения, а осуществить подмену значения переменной, которая должна по идее сохранится в файле сохранений, пусть то в файле стандартных сохранений (и там может быть получается глоба или локалка) пусть то в файле клео сохранений (ну тут уже локалка). Например переменная $8552 сохранится со значением 1, а я хочу перед тем как осуществится сохранение было значение 2 допустим.
I know everything and nothing...
Offline
А где опкод 0616?
А он обязателен? Я никогда его не использовал, думал, что 061B достаточно.
А какая машина была взорвана? Та, что создана скриптом или игрой?
Скриптом. Но всё равно почему-то исчезает.
На это может повлиять команда Car.ImmuneToNonPlayer(1@) = True ? Не я писал скрипт, поэтотому вообще не знаю, зачем она нужна.
Тут правда возникает ещё вопрос - а почему возникла необходимость в использовании двух скриптов?
Один скрипт спавнит актёров в случайное время в случайных координатах. Второй делает то же самое, но с группой. Если актёр из первого скрипта встретится с группой, он должен присоединиться к ним.
А есть способ проверить, что актёр состоит в группе? Не в какой-то конкретной, а вообще, не является ли членом группы?
Offline
Фишка в том что мне надо не просто перехватить момент сохранения, а осуществить подмену значения переменной, которая должна по идее сохранится в файле сохранений, пусть то в файле стандартных сохранений (и там может быть получается глоба или локалка) пусть то в файле клео сохранений (ну тут уже локалка). Например переменная $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
А он обязателен? Я никогда его не использовал, думал, что 061B достаточно.
Игра же должна как-то понять, где начало объявления последовательности, а где конец. По крайней мере, в справке он использовался, в майне, наверняка, тоже.
А есть способ проверить, что актёр состоит в группе? Не в какой-то конкретной, а вообще, не является ли членом группы?
Могу предположить, что при использовании опкода 046D ты получишь 0, если актёр не состоит в группе.
Last edited by Voron295 (19-03-2014 21:27)
Offline
Могу предположить, что при использовании опкода 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
046D: 55@ = actor 36@ car_free_seats
У меня подписан так:
046D: 55@ = actor 36@ members_in_group
Посмотрел в базе - вроде вызывающиеся функции работают с группами. Это точно не свободные места в машине. Во всяком случае, стоит проверить.
Offline
Посмотрел в базе - вроде вызывающиеся функции работают с группами. Это точно не свободные места в машине. Во всяком случае, стоит проверить.
Ладно, попробую. Только по логике номер члена группы может быть равен 0. Тогда уж скорее всего если актёр не состоит в группе, это значение должно быть -1.
А что с Decision Maker? Можешь помочь с этим вопросом?
Offline
Ладно, попробую. Только по логике номер члена группы может быть равен 0. Тогда уж скорее всего если актёр не состоит в группе, это значение должно быть -1.
Опкод возвращает не номер члена группы, а количество членов группы. Логично будет предположить, что если актёр не состоит в группе, то и количество участников несуществующей группы будет равно нулю.
В Decision Maker не разбираюсь, так что тут не могу помочь.
Offline
Ребят, как заставить актёра одеть очки ночного виденья не применяя анимацию, т.е. пропустить тот момент когда актер одевает очки???
Offline
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
0AA6: call_method 0x5E3AE0 struct (ped_struct) num_params 0 pop 0
Cпасибо, то что нужно
Offline
Как сделать, что бы приближенный скин, был не видим для меня, но сама жта, думала что я его вижу приближенным.
: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
Как сделать, что бы приближенный скин, был не видим для меня, но сама жта, думала что я его вижу приближенным.
Для начала - научись пользоваться исходниками (txt), вместо того, чтобы открывать каждый раз cs-файл. Так ты "убиваешь" оригинальные названия меток, код становится менее читабельным. К тому же, высокоуровневые конструкции преобразуются в низкоуровневые.
Во-вторых, что значит "сама жта думала, что я его вижу приближенным". GTA думать не может. Выразись яснее.
Offline
Ребят всем привет. Есть вопрос. Возможно ли управляя игроком перемещаться по воздуху также как и на земле, чтоб игрок не падал, а ходил по воздуху. Как это сделать?? С анимацией думаю туговато будет, да и создания невидимой текстуры тоже не все отлично. Думаю как бы внушить игроку что он не в воздухе а на земле, пробовал через память, но не чего не вышло, применял такие адреса:
CPed +0x15C = Некторые статусы анимации: 154 = спринт (бежит с ускорением) 205 = бежит CPed +0x534 = Статус бега: 4 = начинает бежать 6 = бежит 7 = спринт (бежит с ускорением)
Помогите
Last edited by HH (05-04-2014 20:17)
Offline
Ребят всем привет. Есть вопрос. Возможно ли управляя игроком перемещаться по воздуху также как и на земле, чтоб игрок не падал, а ходил по воздуху. Как это сделать?? С анимацией думаю туговато будет, да и создания невидимой текстуры тоже не все отлично.
Делал подобный мод. Можно было по воздуху и бегать, и на машине ездить. Всё это при помощи создания под игроком плоского объекта. После создания делаем его невидимым при помощи опкода 0750. А потом просто в цикле перемещаем под игрока, т.е. когда игрок двигается, объект движется вместе с ним.
Конечно, тут есть свои минусы - например, машины и педы, попадающие в этот объект могут сдвинуться и даже исчезнуть. С адресами памяти не всё так просто - нельзя просто взять и поменять "статус" игрока через память. Каждый игровой цикл (как правило, это обработка и отрисовка одного кадра) игра проверяет все факторы влияющие на игрока. Единственный вариант - разбирать все функции, связанные с этим и править их - нопить некоторые вызовы функций и т.п.
Last edited by Voron295 (07-04-2014 14:09)
Offline
Спасибо
Offline
Создаю актёра и заставляю его в панике убегать опкодом 05DA. А другому даю команду убить того актёра. Оружия у второго актёра нет, поэтому он бежит за первым, чтобы драться с ним врукопашную. Так вот, проблема в том, что первый актёр бежит не разбирая дороги, и часто даже упирается в стены зданий, а второй наоборот придерживается путей педов, т.е. в основном бежит по тротуару. Можно ли как-то заставить либо первого педа бегать только по тротуару, либо второго не придерживаться путей педов?
Offline
Можно ли отключить внешние скрипты, если они привязаны к объекту и педу? Например, мне нужно, чтобы не появлялись продавцы хот-догов и другой еды. Нашёл скрипты, которые их активируют, и пробовал отключить так:
0A46: set_external_scripts_triggers_type 9 enabled 0 0A46: set_external_scripts_triggers_type 77 enabled 0
Но почему-то не действует.
Offline
090F: end_external_script 66 (CARMOD1)
- завершает скрипт если он запущен.0910: release_external_script 1
- выгружает скрипт (т.е. нужна будет новая активация скрипта)
Сначала попробовал - вроде сработало. Теперь тестирую - не работает.
Offline
Я делал так для двух скриптов: стритбола и бильярда, они выгружались, и да в клео. Только надо понимать, что это надо делать каждый раз когда начинаешь игру. А вот если сохранишься то и клео скрипт должен содержать режим сохранения, дабы не происходило постоянная выгрузка.
I know everything and nothing...
Offline