#1 Re: Вопросы по скриптингу » Один вопрос » 10-08-2014 15:57

Hetzer wrote:

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

В опкодник не судьба заглянуть?

010B: 1@ = player $PLAYER_CHAR money

#2 Re: Вопросы по скриптингу » Один вопрос » 26-07-2014 17:06

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.

#3 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 26-07-2014 17:02

Dark_Knight wrote:

Об этом можно спорить вечно. Как по мне. клео больше в сампе используется, чем в сингле.

Не думаю. CLEO изначально был предназначен для сингла, а в сампе он работает лишь благодаря отсутствию в сампе античита.
Даже если сейчас большинство играет в SA-MP с клео, то это ещё не значит, что все скрипты, которые используются, были написаны специально под SA-MP. Под него обычно только читы пишут. Остальное касается других вещей.

#4 Re: Вопросы по скриптингу » Один вопрос » 06-06-2014 21:05

d88 wrote:

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

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

#5 Re: Вопросы по скриптингу » Один вопрос » 05-06-2014 12:50

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

#6 Re: Вопросы по скриптингу » Один вопрос » 04-06-2014 17:04

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

#7 Re: Вопросы по скриптингу » Один вопрос » 04-06-2014 01:13

d88 wrote:

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

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

#8 Re: Вопросы по скриптингу » Один вопрос » 31-05-2014 14:01

Den_spb wrote:

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

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

#9 Re: Вопросы по скриптингу » Один вопрос » 26-05-2014 20:29

d88 wrote:

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

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

08BA: set $391 bit 31 

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

#10 Re: Вопросы по скриптингу » Один вопрос » 07-04-2014 14:08

HH wrote:

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

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

#11 Re: Вопросы по скриптингу » Один вопрос » 04-04-2014 06:20

booom wrote:

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

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

#12 Re: Вопросы по скриптингу » Один вопрос » 21-03-2014 23:11

d88 wrote:

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

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

#13 Re: Вопросы по скриптингу » Один вопрос » 21-03-2014 17:39

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

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

046D: 55@ = actor 36@ members_in_group

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

#14 Re: Вопросы по скриптингу » Один вопрос » 19-03-2014 21:26

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, если актёр не состоит в группе.

#15 Re: Вопросы по скриптингу » Один вопрос » 19-03-2014 12:01

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-переменными, для того, чтобы передать хендл группы из одного скрипта в другой. Тут правда возникает ещё вопрос - а почему возникла необходимость в использовании двух скриптов?

#16 Re: Вопросы по скриптингу » Один вопрос » 18-03-2014 23:23

{$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

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

#17 Re: Вопросы по скриптингу » Один вопрос » 17-03-2014 21:16

mfisto wrote:

Это понятно, а в деталях как это будет?

Ну, надо поэкспериментировать. Ща попробую что-нибудь сварганить, если получится, то расскажу чё к чему. Да, кстати, переменная глобальная или локальная?

#18 Re: Вопросы по скриптингу » Один вопрос » 17-03-2014 20:22

mfisto wrote:

Вот такой вопрос: как отловить что совершается сохранение, и в момент сохранения, допустим, изменить значение переменной?

Наверное, хук ставить надо + асм вставку.

#19 Re: Вопросы по скриптингу » Один вопрос » 25-02-2014 15:03

Я всё-таки не понимаю, что мешает отнять единицу от высоты?

#20 Re: Вопросы по скриптингу » Один вопрос » 04-02-2014 13:56

HH wrote:

По идее они же включаются и выключаются, мне надо кажды

Читай работу с битами в справке СБ.

#21 Re: О сайте и форумах » Изменения на форумах » 04-02-2014 13:53

Seemann wrote:

Перенес форум с punBB на FluxBB. Часть прежнего функционала пока не реализована, буду допиливать.

Выглядит очень даже ничего smile

#22 Re: Вопросы по скриптингу » Один вопрос » 03-02-2014 22:11

1) Как узнать ид машины, только ид нужен.
Пробовал 1@ = Car.Id (0@) выдает ошибку при комплирование

Если идёт речь о ID модели машины, то это должно подойти:

0441: 1@ = car 0@ model

При условии, что в 0@ записан хендл машины и эта машина существует.

Насчёт флагов - ты их читать хочешь или записывать?

#23 Re: Вопросы по скриптингу » Один вопрос » 02-02-2014 17:52

HH wrote:

@Voron295 все читает правильно, получил значение подвески -0.15 для Bravura, в handling совпало. Но почему же нельзя вбить значение в этот адрес, читать можно, а задать нельзя? И как теперь задать своё значение чтобы работало??

Возможно, не все данные можно записать.

#24 Re: Вопросы по скриптингу » Один вопрос » 01-02-2014 22:27

HH wrote:

полазил по форуму нашёл вот это

LANDSTAL          c2b9dc
BRAVURA           c2babc
BUFFALO           c2bb9c
LINERUN           c2bc7c
PEREN             c2bd5c
SENTINEL          c2be3c
DUMPER            c2bf1c
FIRETRUK          c2bffc
...............................

может как то связано с этим

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

#25 Re: Вопросы по скриптингу » Один вопрос » 31-01-2014 18:40

HH wrote:

Не пойму в чем проблема, помогите пожалуйста

Отсчёт ведётся с нуля. Для бравуры не 2, а 1.

Board footer

Powered by FluxBB