#76 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 18-08-2013 20:25

DK22Pac wrote:

Seemann, запись/чтение таким способом:

write<dword> baseStructAddr :: memberOffset  << _VALUE
write<dword> addr  << _VALUE

Или не удобно?

Мне кажется, это тяжело читается. К тому же

baseStructAddr :: memberOffset

нужно ведь как-то объявлять? Как компилятор узнает, на какую структуру ты передаёшь указатель?

#77 Re: Вопросы по скриптингу » Один вопрос » 18-08-2013 20:23

ThePRO wrote:

DK22Pac,
спасибо, все работает прекрасно smile и спасибо за полезные советы.

Ещё много полезных советов можно найти изучая справку (F12).

#78 Re: Вопросы по скриптингу » Один вопрос » 13-08-2013 09:13

Seemann wrote:
068C:   is_player_autoaiming $PLAYER_CHAR

не подойдет?

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

Seemann wrote:

судя по базе, первая переменная занимает 4 байта

.data:008CC388 dword_8CC388

Прошу прощения, так и есть. Я просто посмотрел только вторую и решил, что первая тоже байтовая.

#79 Re: Вопросы по скриптингу » Один вопрос » 12-08-2013 22:00

RitrS wrote:

1) Можно ли как то скрыть прицел(пистолета, дробовика автомата и т.п) кроме того как вместо текстуры прицела засунуть пустую текстуру.

Можно переместить его в координаты, находящиеся за пределами экрана.

0A8C: write_memory 0xB6EC10 size 4 value 1.5 virtual_protect 0
0A8C: write_memory 0xB6EC14 size 4 value 1.5 virtual_protect 0

Чтобы вернуть обратно, делаем так:

0A8C: write_memory 0xB6EC10 size 4 value 0.40000001 virtual_protect 0
0A8C: write_memory 0xB6EC14 size 4 value 0.52999997 virtual_protect 0
RitrS wrote:

2) Есть проверка на то активен ли прицел(игрок целится)?

Поигравшись с Cheat Engine'ом, выяснил, что есть парочка переменных - 0x8CC388 и 0x8CCB80 (обе размером в 1 байт). Первая "по умолчанию" равна 4, если прицелиться - значение меняется на 53, если целишься из обычного оружия (пистолет, дробовик, штурмовая винтовка), на 51 - если из базуки, на 7 - если из снайперки. Вторая меняет своё значение на 0 при использовании обычного оружия (с обычным прицелом). Не меняется при использовании базуки или снайпы.

RitrS wrote:

И еще вопрос: можно ли загрузить и использовать текстуры(не оригинальные) в hud.txd. И надо ли загружать тхд архив в скрипте?

Не совсем понял вопрос. Как именно ты собираешься использовать текстуры? По сути, hud.txd уже загружен игрой, в любом случае, это не так уж сложно проверить, вроде.

#80 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 10-08-2013 17:07

Seemann wrote:

Скопировать опкод из списка в буфер обмена можно кнопкой Enter. Добавить опкод к содержимому буфера обмена - Shift+Enter

Слишком непривычно. Да и неудобно - приходится убирать руку с мыши. А так левая рука сама тянется нажать Ctrl+C smile

#81 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 08-08-2013 16:05

Насчёт поиска опкодов:
Меня ещё всегда бесило, что нельзя скопировать опкод сочетанием клавиш Ctrl+C. smile

#82 Re: Вопросы по скриптингу » Один вопрос » 31-07-2013 07:59

Den_spb wrote:

Попробуй такой вариант, но не знаю, что получится:

008A: $player_actor = 0@ // (int) 0@ - переменная педа

Полный бред. Управление игроком никак не зависит от переменной, куда записан его хендл.
Можно посмотреть структуру CPlayer. Там в самом первом поле стоит указатель на структуру педа игрока. Можно попробовать подменить указатель.

UPD. Если подменить указатель - вылет. Видимо нужно ещё что-то где-то менять.

#83 Re: Вопросы по скриптингу » Один вопрос » 23-07-2013 17:22

SHooZ wrote:

можно ли поставить камеру на объект с смещением по оси X или Y?

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

#84 Re: Вопросы по скриптингу » Один вопрос » 22-07-2013 23:21

Hetzer wrote:

ДД, товарищи. Скажите, какую команду использовать, что бы убрать в миссии, скажем, задние двери автомобиля?

Тебе нужен один из опкодов с компонентами:

0697: set_car 543@ remove_component 4 visible_effect_flag 1
06E8: car 4@ destroy_component 2

У меня 2 вопроса:
1. Как перевести из игровых координат в экранные
2. Как перевести из экранных координат в игровые

В обоих случаях нельзя использовать игровые функции - нужен код, который будет работать в SA-MP (пишу на Pawno). У меня в распоряжении позиция камеры и Front-вектор камеры (вектор указывающий направление, куда смотрит камера), помимо координат, которые необходимо перевести.

#85 Re: Справочная информация » Новые описания для опкодов » 17-07-2013 22:41

RitrS wrote:

@Voron295 -
4 года спустя smile)

Изначально этот пост был в теме "Sanny Builder v3.xx". Seemann его перенёс сюда.

#86 Re: Справочная информация » Новые описания для опкодов » 16-07-2013 14:06

Seemann wrote:

а исправления ошибок можно сюда.

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

0393: actor 215@ perform_animation "POOL_SHORT_SHOT" at 248@ times_normal_rate

Этот опкод лучше перефразировать так:

0393: actor $PLAYER_ACTOR animation "POOL_SHORT_SHOT" set_speed 1.0
04ED: load_animation "LOWRIDER"
04EE: animation "LOWRIDER" loaded
04EF: release_animation "LOWRIDER"

Заменить на:

04ED: load_IFP_file "LOWRIDER"
04EE: IFP_file "LOWRIDER" loaded
04EF: release_IFP_file "LOWRIDER"
0605: actor -1 perform_animation "M_SMKLEAN_LOOP" IFP "LOWRIDER" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1 // versionA
0812: AS_actor -1 perform_animation "LRGIRL_IDLELOOP" IFP "LOWRIDER" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time -1  // versionB
088A: actor 34@ perform_animation "RAIL_FALL" IFP "SWAT" 8.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1 disable_force 0 disable_lockZ 1
0A1A: actor 88@ perform_walk_animation "HIKER_POSE_L" IFP "MISC" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 1 -1 ms // versionC

В этих опкодах нужно посоветоваться, как лучше переименовать. Я распишу за что отвечает каждый параметр.
Actor, animation и IFP - думаю понятно, здесь всё правильно описано.

framedelta нужно переименовать в interpolation. Этот параметр отвечает за плавность перехода в анимацию (и за плавность выхода из анимации или перехода в другую анимацию). Чем больше этот параметр - тем быстрее и заметнее переход. Чем меньше параметр - тем плавнее и красивее. Обычно лучше ставить его в районе 4.0-15.0. Если поставить 10000.0, то актёр моментально примет начальную позу анимации, т.е. вообще без перехода.

loop - здесь всё ясно, цикл. lockX и lockY нужно поменять местами. Они отвечают за перемещение коллизии игрока вместе с анимацией (Root-костью в анимации). Т.е. если выставить lockX = 1 то коллизия игрока будет двигаться вместе с анимацией вперёд-назад (по оси Y относительно игрока); если выставить lockY = 1, то коллизия игрока будет двигаться вместе с анимацией влево-вправо (по оси X относительно игрока). Поэтому нужно бы их поменять местами. Ещё замечен следующий факт: если выставить только lockY = 1, а lockX оставить равным нулю, то перемещения игрока вместе с анимацией не будет ни по одной из осей. Проще говоря у нас 3 варианта - без перемещения коллизии (0, 0), с перемещением по оси Y (1, 0) и с перемещением по осям X и Y (1, 1).

lockF отвечает за замораживание игрока в последней позе анимации. Не знаю даже, как его переименовать. Наверное лучше так и оставить.
time - тут, я думаю, без комментариев. Здесь всё верно.

У нас есть 4 опкода воспроизводящих анимации для актёров (не считая комбинированных с прикреплением объектов и т.п.). Они отличаются между собой некоторыми нюансами. Есть 3 опкода с одинаковыми параметрами и один содержащий те же параметры + 2 дополнительных параметра. Первые 3 опкода можно разделить по версиям (A, B, C), как это сделано комментариями к опкодам.
versionA (0605): Отличительная особенность опкода состоит в том, что анимация воспроизводится только если актёр находится на земле. Если во время выполнения анимации актёр слетел с поверхности, т.е. оказался в воздухе, то воспроизведение анимации прервётся.
versionB (0812): Тоже самое, что и versionA, только работает и в воздухе. Т.е. нет зависимости от того, в воздухе актёр или нет, анимация будет работать в любом случае, даже под водой.
versionC (0A1A): Имеет ту же особенность, что и versionA - не работает в воздухе. Имеет дополнительную особенность - выполняется относительно кости Root актёра и может выполняться параллельно другой анимации. К примеру, если включить lockX и lockY, бежать, и воспроизвести анимацию на игроке, то перемещение Root в анимации будет прибавляться к бегу. Если lockX и lockY отключить, перемещение будет только визуальным, без перемещения коллизии актёра. При этом анимацию можно сбить, например, совершив удар (ЛКМ).

Ну и последний опкод, содержащий дополнительные параметры, 088A.
Первый параметр описан как disable_force. На самом деле этот параметр отвечает за возможность воспроизведения анимации в воздухе. Если выставить 1, то опкод будет равносилен опкоду 0812 (versionB), если 0, то, соответственно, опкоду 0605 (versionA).
Второй параметр описан как disable_lockZ, что опять же неверно. Если выставить параметр равным 1, то по окончанию анимации коллизия актёра будет установлена в то место, где закончилась анимация, но это - если lockX и lockY равны нулю. Примечательно, что на ось Z это тоже работает. Т.е. если в анимации актёр смещается ещё и по оси Z, то в конце анимации коллизия актёра будет установлена точно в то место, где анимация закончилась, по всем трём координатам. Судя по всему, алгоритм использует разницу между начальным положением и конечным положением, а в конце анимации смещает коллизию на заранее вычисленную разницу. Из-за этого, если использовать параметры lockX и lockY, актёр будет дополнительно смещён в конце анимации на ту самую разницу, о которой я упомянул предложением ранее. Если отключить параметр disable_lockZ, то опкод будет работать полностью точно так же, как и опкоды версии A и B, в зависимости от параметра disable_force.
Параметр disable_force лучше переименовать в allow_air или что-то в этом роде, а disable_lockZ - пока что не могу придумать, как изъяснить его коротко и понятно.

Если кого-то интересует синхронизация в SA-MP, то воспроизведение анимации опкодом 0812 даёт возможность другим игрокам видеть вашу анимацию в SA-MP'е, при двух условиях:
1. Анимация находится в оригинальных игровых IFP-файлах. Т.е. если создать свой IFP-файл, или добавить свою анимацию к уже существующему игровому IFP-файлу, то другие игроки их не увидят, даже если у них есть эта анимация тоже. Видимо, SA-MP использует список всех игровых анимаций для синхронизации.
2. IFP-файл, из которого воспроизводится анимация, загружен у других игроков. Обычно SA-MP сам загружает нужный IFP-файл при 1-2 воспроизведениях из этого IFP.

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

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

#87 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 15-07-2013 14:40

Кстати, исправления описания опкодов куда писать?)

#88 Re: Программы для GTA » SB Class Editor [Визуальный редактор классов] » 15-07-2013 14:29

@wmysterio, при создании проекта в MVS вверху можно выбрать версию фреймворка, которую будешь использовать. Наверняка можно изменить её и для уже созданного проекта. Надо бы покопаться в гугле.

#89 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 15-07-2013 14:22

Seemann wrote:

Проект будет ориентирован на скрипты движка RAGE (GTA4 и последующие игры).

Чисто под RAGE или предыдущие игры тоже будут поддерживаться?

#90 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 15-07-2013 14:14

Seemann wrote:

Я сейчас как раз занимаюсь переговорами с заинтересованными людьми о дальнейшей разработке CLEO.

Обращайтесь, если что. Помогу с удовольствием smile

Seemann wrote:

Кроме того, недавно начал думать над Sanny Builder 4. Но это еще в стадии раннего планирования.

А что собой будет представлять такое глобальное изменение в целую версию?)

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

#91 Re: Sanny Builder и CLEO » Sanny Builder v3.xx » 15-07-2013 13:59

@Seemann, как насчёт обработки декомпилируемых скриптов, приведение их к высокоуровневым конструкциям?) Это, наверняка будет очень сложно, но если вносить о них информацию в скрипты (в конце, как и информация о конструкциях hex..end и т.п), то можно было бы оформить что-нибудь такое. Хотя, вроде предлагали делать исходник внутри cs-файла - тоже идея неплохая.
Кстати, выше прозвучала идея об автообновлениях - тоже пригодилось бы)

И, да, планируется написание CLEO 5?

#92 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 15-07-2013 12:05

Portal25 wrote:

Seemann эх.. лучше бы это дело все организовать в текст и разместить в русскоязычной GTA-Википедии чтобы, страна знала своих героев smile и будущим поколениям я думаю, будет наверняка интересно узнать историю создания CLEO и СанниБилдера... blush

Мне кажется, скриптингом сейчас в основном занимаются олдфаги, да и те уже завязывают с CLEO. А если новички пытаются что-то делать, то они на этих форумах редко появляются. Хотя историю написать было бы совсем неплохо и даже интересно.
Я вот сюда уже очень давно не заходил. Перешёл на плагины (ASI). Хотя, в своё время CLEO подарило мне множество интересных открытий, скриптов и всякого разного фана, за что спасибо Seemann'у и Alien'у smile
Я вот собираюсь сейчас стать программистом, а если бы не Sanny Builder и CLEO, не знаю, ушёл бы я в эту сферу или нет, ведь всё с него и началось. C++ я стал изучать только год-полтора назад, а Паскаль был по школьной программе, но если б не Sanny Bulder и CLEO - я б так быстро не смог понять синтаксис и логику того или иного языка программирования.

Я вот сам не знал истории создания CLEO, а вот сейчас прочитал и... оказывается CLEO 1 написано ассемблерными вставками в самом scm... Вобщем, интересно было почитать топик о продвижениях в разработке CLEO smile

#93 Re: Вопросы по скриптингу » Один вопрос » 16-01-2013 20:32

JuSskeee* wrote:

Здарова, ребят. Как сделать, что бы актер в scm пути ходил бесконечно? Две координаты: Начало и конец пути, и он по ним ходит и ходит.. Патрулирование что-ли.

Первое, что приходит на ум - проверять, находится ли актёр в конечной точке, если да, то по новой ставить его на путь.

#94 Re: Вопросы по скриптингу » Один вопрос » 06-10-2012 15:03

sh2ezo wrote:

т.е. для двух тачек одинаковой модели будут существовать в памяти две разные модели(сорри за тавтологию)?

Зачем две разные? Одна и та же. Модель загружается только один раз и пока она используется (неважно, 1 машина с такой моделью или 100), она есть в памяти, только одна. Как только ни одной машины с такой моделью не будет использоваться в игре - модель будет выгружена из памяти.

Jack Daniel's wrote:

Я канеш могу ошибаться, но:
0xA47B60 - Start of the external scripts info pool. There are 82 elements with 32 bytes of size each
+0 = [dword] Script IP
+4 = [word] Status (can be obtained by 0926)
+6 = [word] Index in SCM (a number as defined in the scm header)
+8 = [char] Name, char 20
+28 = [dword] Size

Предполагается не имя потока, а имя файла .cs, а это совершенно разные вещи.
Можно попробовать разобраться в том, как CLEO загружает скрипты, хотя я сильно сомневаюсь, что там есть то, что тебе нужно.

#95 Re: Вопросы по скриптингу » Один вопрос » 05-10-2012 20:52

sh2ezo wrote:

Хай! Вопрос такой: модельки тачек SA подгружает динамически по мере надобности или один раз загрузила и пользуется, пока её не закроют?

Если модель не используется - она выгружается. Да, динамически.

#96 Re: Вопросы по скриптингу » Один вопрос » 05-10-2012 18:44

Ruzel wrote:

Да, именно так :3

Тогда я не пойму одного - ты не знаешь, как называется твой .cs-файл?)

#97 Re: Вопросы по скриптингу » Один вопрос » 05-10-2012 17:01

Ruzel wrote:

Я имел ввиду поток, клео скрипт. Можно ли открыть файл %script_name%.ini если имя скрипта %script_name%.cs

Имеется ввиду клео-скрипт, который выполняется в данный момент? Т.е. в своём скрипте ты хочешь открыть файл ini, с таким же именем как и твой скрипт? Или как? Объясни задачу подробнее.

#98 Re: Вопросы по скриптингу » Один вопрос » 04-10-2012 13:11

Ruzel wrote:

Хм, а как узнать имя текущего выполняемого скрипта? И можно ли, опираясь на него, открыть файл для чтения с тем же именем, но другим расширением (например, .ini)?

Что значит "текущего выполняемого скрипта"? В один момент выполняется только один скрипт)

#99 Re: Вопросы по скриптингу » Один вопрос » 03-09-2012 21:29

JuSskeee* wrote:

2 - Как записать в переменную дистанцию от одной машины к другой?

Элементарно:

050A: 0@ = distance_between_XYZ 1@ 2@ 3@ and_XYZ 4@ 5@ 6@

где 1@, 2@, 3@ - координаты первой машины, а 4@, 5@, 6@ - координаты второй машины.

По поводу первого вопроса ничего не могу сказать. Скорее всего нужно разбирать код в экзешнике (базе).

#100 Re: Вопросы по скриптингу » Один вопрос » 26-08-2012 10:35

JuSskeee* wrote:

Приветствую. А как создать грузовик с прицепом?
Загрузить две модели. А какой опкод, что бы прицепить к грузовику прицеп?

0893: put_trailer 0@ on_cab 1@

Вот так, вроде. 0@ - хэндл прицепа, 1@ - хэндл грузовика.

Board footer

Powered by FluxBB