You are not logged in.
Подскажите, сеть ли условие, которе проверяет количество денег у персонажа, в том числе и отрицательное? Хочу сделать скрипт, который бы насылал коллекторскую фирму, если игрок задолжал банку
В опкодник не судьба заглянуть?
010B: 1@ = player $PLAYER_CHAR money
Кстати, насколько реально сделать Сплитскрин версию гта са?
Теоретически возможно. Но нужно очень много функций игровых перебирать и переписывать. Слишком много мороки ради такой бесполезной вещи.
Исходник-то есть, он же автоматически сохраняется. Но я хочу знать, из-за чего это произошло, и что сделать, чтобы этого не повторилось. Я всю жизнь открывал мэйн в СБ, и всегда всё было в порядке, а тут вдруг непонятно с чего такая ерунда.
Названия переменных хранятся в дополнительной информации скрипта/мэйна (в настройках можно выключить, что ты, вероятно, и сделал). Чтобы такого не повторилось, можно вручную вписать соответствие номеров переменных их именам в файле "CustomVariables.ini" в папке "Sanny Builder 3\data\sa".
Как получить уровень кислорода для SECOND_PLAYER_ACTOR? Это второй игрок в однопользовательском режиме.
Я так понимаю, соответствующего опкода нет? Можно получить его так:
0A8D: 0@ = read_memory 0xB7CF70 size 4 virtual_protect 0
Это дробное число, максимум вроде как 1000.
Об этом можно спорить вечно. Как по мне. клео больше в сампе используется, чем в сингле.
Не думаю. CLEO изначально был предназначен для сингла, а в сампе он работает лишь благодаря отсутствию в сампе античита.
Даже если сейчас большинство играет в SA-MP с клео, то это ещё не значит, что все скрипты, которые используются, были написаны специально под SA-MP. Под него обычно только читы пишут. Остальное касается других вещей.
Я тоже поэкспериментировал с числами. Так вот, при декомпеляции вместо числа появляется метка с тем же именем, что и у остальных меток в этом скрипте.
Ну, я экспериментировал не с числами, а с функциями игры. Но так у меня ничего толкового и не вышло. Поэтому и решил Seemann'а спросить.
@Seemann, можно ли вообще запустить поток майна из CLEO-скрипта? Я сейчас перепробовал много разных вариантов, но все приводят к вылету где-то в cleo.asi, в процессе обработки опкодов. Версия CLEO 4.1.1.30f.
@mgmoldova, этот код запускает поток, находящийся в CLEO-скрипте. А нужно запустить поток, находящийся в майне из CLEO-скрипта.
А нельзя ли как-то сделать так, чтобы при компиляции скрипт не проверял метки? Может, тогда сработают опкоды 004F: и 00D7:? Или из клео запустить поток в мэйне даже в теории не возможно?
Дело вовсе не в том, что при компиляции проверяются метки. Дело в том, что они отсчитываются относительно текущего скрипта. Т.е. по сути надпись типа "@label_1" на самом деле является обычным целочисленным значением, которое компилятор подставляет сам, при компиляции. Поэтому, выходит, что запустить поток можно лишь из майна. Хотя, вопрос спорный, наверняка можно откопать какой-нибудь способ.
Можно попробовать запустить поток снова опкодами:
004F: create_thread @MS_BIKE_MISSIONS
00D7: create_thread @NONAME_1 // without extra params
Насколько я понял, это нужно сделать CLEO-скриптом, поэтому такой вариант не подойдёт. А вот со статами и переменными - вполне возможно.
Или есть ли другой способ на некоторое время отключить возможность ходить на свидания? И чтобы девушки не звонили по телефону, и чтобы маркеры вообще не появлялись возле их домов?
Нужно смотреть сам поток и определять, что может повлиять на его работу. Скорее всего это какие-нибудь глобальные переменные.
Первое, что бросилось в глаза - тестирование бита 31 в переменной $391. Судя по всему, если выставить этот бит, то свидания не будут работать. Но делать это нужно в цикле.
08BA: set $391 bit 31
Конечно, не факт, что будет работать (т.к. поток сам убирает этот бит, если игрок не на миссии и не убит), но попробовать можно, я думаю.
Ребят всем привет. Есть вопрос. Возможно ли управляя игроком перемещаться по воздуху также как и на земле, чтоб игрок не падал, а ходил по воздуху. Как это сделать?? С анимацией думаю туговато будет, да и создания невидимой текстуры тоже не все отлично.
Делал подобный мод. Можно было по воздуху и бегать, и на машине ездить. Всё это при помощи создания под игроком плоского объекта. После создания делаем его невидимым при помощи опкода 0750. А потом просто в цикле перемещаем под игрока, т.е. когда игрок двигается, объект движется вместе с ним.
Конечно, тут есть свои минусы - например, машины и педы, попадающие в этот объект могут сдвинуться и даже исчезнуть. С адресами памяти не всё так просто - нельзя просто взять и поменять "статус" игрока через память. Каждый игровой цикл (как правило, это обработка и отрисовка одного кадра) игра проверяет все факторы влияющие на игрока. Единственный вариант - разбирать все функции, связанные с этим и править их - нопить некоторые вызовы функций и т.п.
Как сделать, что бы приближенный скин, был не видим для меня, но сама жта, думала что я его вижу приближенным.
Для начала - научись пользоваться исходниками (txt), вместо того, чтобы открывать каждый раз cs-файл. Так ты "убиваешь" оригинальные названия меток, код становится менее читабельным. К тому же, высокоуровневые конструкции преобразуются в низкоуровневые.
Во-вторых, что значит "сама жта думала, что я его вижу приближенным". GTA думать не может. Выразись яснее.
Ладно, попробую. Только по логике номер члена группы может быть равен 0. Тогда уж скорее всего если актёр не состоит в группе, это значение должно быть -1.
Опкод возвращает не номер члена группы, а количество членов группы. Логично будет предположить, что если актёр не состоит в группе, то и количество участников несуществующей группы будет равно нулю.
В Decision Maker не разбираюсь, так что тут не могу помочь.
046D: 55@ = actor 36@ car_free_seats
У меня подписан так:
046D: 55@ = actor 36@ members_in_group
Посмотрел в базе - вроде вызывающиеся функции работают с группами. Это точно не свободные места в машине. Во всяком случае, стоит проверить.
Фишка в том что мне надо не просто перехватить момент сохранения, а осуществить подмену значения переменной, которая должна по идее сохранится в файле сохранений, пусть то в файле стандартных сохранений (и там может быть получается глоба или локалка) пусть то в файле клео сохранений (ну тут уже локалка). Например переменная $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, если актёр не состоит в группе.
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-переменными, для того, чтобы передать хендл группы из одного скрипта в другой. Тут правда возникает ещё вопрос - а почему возникла необходимость в использовании двух скриптов?
{$CLEO} // Получаем указатель на асм-код 0AC6: 0@ = label @asm_jump offset // Записываем указатель на переменную 30@ в соответствующее место в асм-коде 0AC7: 1@ = var 30@ offset 0A8E: 2@ = 0@ + 2 0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // Ставим хук - прыжок на наш асм-код в функции сохранения 0A8C: write_memory 0x619081 size 1 value 0xE9 virtual_protect 1 0@ -= 0x619086 0A8C: write_memory 0x619082 size 4 value 0@ virtual_protect 1 while true wait 0 if 30@ == 1 then // Делаем что-нибудь, когда происходит сохранение end 30@ = 0 end :asm_jump hex C705 00000000 01000000 // MOV DWORD PTR DS:[00000000], 1 B8 E0135D00 // MOV EAX,005D13E0 FF D0 // CALL EAX B8 86906100 // MOV EAX,00619086 FFE0 // JMP EAX end
С глобальной переменной надо будет убрать кое-что лишнее. Но, надо знать точный номер переменной. Если устроит - расскажу, как это сделать.
Это понятно, а в деталях как это будет?
Ну, надо поэкспериментировать. Ща попробую что-нибудь сварганить, если получится, то расскажу чё к чему. Да, кстати, переменная глобальная или локальная?
Вот такой вопрос: как отловить что совершается сохранение, и в момент сохранения, допустим, изменить значение переменной?
Наверное, хук ставить надо + асм вставку.
Я всё-таки не понимаю, что мешает отнять единицу от высоты?
По идее они же включаются и выключаются, мне надо кажды
Читай работу с битами в справке СБ.
1) Как узнать ид машины, только ид нужен.
Пробовал 1@ = Car.Id (0@) выдает ошибку при комплирование
Если идёт речь о ID модели машины, то это должно подойти:
0441: 1@ = car 0@ model
При условии, что в 0@ записан хендл машины и эта машина существует.
Насчёт флагов - ты их читать хочешь или записывать?
@Voron295 все читает правильно, получил значение подвески -0.15 для Bravura, в handling совпало. Но почему же нельзя вбить значение в этот адрес, читать можно, а задать нельзя? И как теперь задать своё значение чтобы работало??
Возможно, не все данные можно записать.
полазил по форуму нашёл вот это
LANDSTAL c2b9dc BRAVURA c2babc BUFFALO c2bb9c LINERUN c2bc7c PEREN c2bd5c SENTINEL c2be3c DUMPER c2bf1c FIRETRUK c2bffc ...............................может как то связано с этим
Ну адреса вроде совпадают. Всё должно работать в том примере, который я тебе скидывал. Пробуй не записывать значения, а читать. Если совпадают с теми, что в хендлинге, значит всё работает.
Не пойму в чем проблема, помогите пожалуйста
Отсчёт ведётся с нуля. Для бравуры не 2, а 1.