Перейти к содержанию

.pro И Игровая Механика


kotovstomat

Рекомендуемые сообщения

Опубликовано

ВОПРОС#1

.pro редактирую WinHex. В документации к ProEdit и в мануале Otto Krupp нахожу почти идентичные вещи - в .pro есть некий адрес, отвечающий за "навешенный" на прототип скрипт с флагами. В документации к ProEdit адрес указан неверно. В мануале Otto Krupp про адрес вообще ни слова.

 

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

 

Кто-нибудь сталкивался с подобной проблемой? Как ее решить, кроме как приклеплять в WorldEd скрипт на прототип?

 

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

 

ВОПРОС#2

Как рассчитывается damage от применения скажем, Clarington Rifle? Какие параметры PC и target влияют на дамаг? Есть ли какая-то формула, или формулы, и где их посмотреть?

 

и вдогонку ВОПРОС#3

Можно ли изменить анимацию выстрела? Скажем, у той же Clarington Rifle анимация выстрела - из дула вылетают непонятные ошметки, а мне хочется несколько другого. Какие файлы за это отвечают? Есть ли ограничения на размер картинки?

Опубликовано

вопрос 2.

Насколько я знаю - формула расчёта урона, в зависимости от параметров перса и его амуниции - зарыта в движке и принципы оных - неведомы. Теоретически, видимо, их можно посчитать по неким формулам ad&d. Хотя вряд ли кто пробовал.

 

вопрос 1.

Я эту проблему не решил. Была она и осталась. Я - лично не знаю, как в протос "прописать" скрипт, прикреплённый к итему. Всё верно, у Отто - адреса нет, а наш товарисч - и отписал, что за адрес не уверен... Я - пробовал долго, но безрезультатно.

Выходов много. На самом деле.

- Мне вполне достаточно было - прописать эффект в effect.mes, что достаточно стабильно пишется в прото.

- Понятно, сделать предмет уникальным и в редакторе "повесить" на него скрипт.

- Весьма смутно... Тем не менее - можно попытаться запустить скрипт через .dlg. Почему б и нет. Не пробовал, вроде. А может и пробовал, не помню.

 

Не понятно, что нужно. Способ придумать можно, пусть и через ж..., но реально почти всё. Но.Не всё, тем не менее. Пара -тройка проблемок так и не решается...

 

Врочем, лучше б на вопросы ответил Gentle_Giant, он знает по теории - точно всё известное на сей день в Аркануме.

userbar_008.gif

Опубликовано
прописать эффект в effect.mes

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

через ж...

а по этому пункту я уже голову сломал. Единственный выход, который я нашел, вместо схематика сделать некую "лабораторию"/"кузницу", помещая в которую предметы для изготовления, получать искомый итем путем toggle (obj) state on/off.

Опубликовано
сделать некую "лабораторию"/"кузницу", помещая в которую предметы для изготовления, получать искомый итем путем toggle (obj) state on/off.

 

Если не трудно - поподробнее... Со временем всё забывается, суть я, вроде, улавливаю, но вот только "вроде"...

userbar_008.gif

Опубликовано

Объясняю.

Нужен скрипт. Сам пока еще его не писал, но знаю как.

Создаем в ворлдеде объект типа container, вешаем на него скрипт с флагом TRANSFER. Рядом кладем наш искомый итем, вешаем на него флаг OFF и нужный скрипт.

Из мануала Тройки читаем:

TRANSFER

when called: when an item’s owner is transferring an item to a target (either a critter or a container)

triggerer: owner

attachee: target

extra object: item

effect of RETURN AND SKIP DEFAULT: the target is not allowed to receive the item, which remains on the owner

Ну, а далее уже все просто. Ставим два кондишена на два предмета (obj) is named (num), num берем из oname.mes.

1. Когда происходит TRANSFER предмета, запускается скрипт.

2. Идет проверка на итем (obj) is named (num).

3. Если обе проверки TRUE, то toggle (obj) on/off

Указатель на наш obj можно повесить либо проверкой на принадлежность к тайлу X Y, либо сыграть глобалфлагами, но это уже извращение.

 

Для игрока выглядеть это будет так: ПЦ подбегает к некоему предметцу (например, наковальня), тыкает в него мышкой, открывается окно инвентаря как в сундуке. ПЦ перетаскивает туда два предмета, и получает рядом с наковальней искомый итем.

 

Причем вариаций может быть очень много. Например, сделать так, чтобы после того как поместим итемы в наковальню, на нее обязательно нужно будет три раза применить молот кузнеца) И так далее. Фантазия почти ничем не ограничена.

Опубликовано

Вопрос, конечно, что за итем.

А в принципе - сваргань алтарь. Положи - два предмета - получи третий?

 

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

 

Наверное хочется, что б разные варианты разных предметов давали разный интересный резалт. Типа сундучка в Дьябле?

userbar_008.gif

Опубликовано

Нет, все не так)

 

По сути получение предметов путем соединения двух компонентов можно рассмотреть так:

1 проверка на наличие схематика (да/нет)

2 проверка на наличие первого компонента (да/нет) в инвентаре

3 проверка на наличие второго компонента (да/нет) в инвентаре

4 если 1=да, 2=да, 3=да, то по нажатию кнопки создание предмета

 

Я всего лишь предлагаю заменить схематик глобалфлагом (знает ли PC как создать предмет), инвентарь PC на инвентарь obj типа container (в него PC будет помещать компоненты), а нажатие кнопки интерфейса - каким то другим действием (например, нажатие рычага, который будет являться obj типа scenery).

Ах, да, и создание предмета заменить на toggle (obj) on/off, иначе все теряет смысл. Изначально obj лежит где-нибудь на карте, где мы его поместили, например в другом контейнере, и на нем стоит флаг OFF. Соотвественно, когда мы к нему применим toggle (obj) on/off, он станет ON, то есть видим и ощущаем.

Опубликовано
ВОПРОС#1

.pro редактирую WinHex. В документации к ProEdit и в мануале Otto Krupp нахожу почти идентичные вещи - в .pro есть некий адрес, отвечающий за "навешенный" на прототип скрипт с флагами. В документации к ProEdit адрес указан неверно.

Все правильно там указано: адрес, по которому находится описание скрипта, "плавающий" (если так можно выразится)... на сколько я помню. :wink: Чтобы добавить скрипт, нужно т.с. "вклеить" эту секцию в прототип.

Приложение 3. Описание скриптов

Описание скрипта состоит из 12 байт, в отличие от сопротивлений и повреждений, где просто указывается значение (4 байта). Структура элемента следующая.

TScript = packed record
Flags: DWORD;   //Флаги скрипта
Counter0: BYTE;  //Счетчик Count 0
Counter1: BYTE;  //Счетчик Count 1
Counter2: BYTE;  //Счетчик Count 2
Counter3: BYTE;  //Счетчик Count 3
ScriptId: Integer;   //Номер скрипта
end;

В маске для скриптов используются оба DWORD отведенных под Mask (конкретные биты см. ниже)

//Первый DWORD
SCRIPT_EXAMINE = $00000001;
SCRIPT_USE = $00000002;
SCRIPT_DESTROY = $00000004;
SCRIPT_UNLOCK = $00000008;
SCRIPT_GET = $00000010;
SCRIPT_DROP = $00000020;
SCRIPT_THROW = $00000040;
SCRIPT_HIT = $00000080;
SCRIPT_MISS = $00000100;
SCRIPT_DIALOG = $00000200;
SCRIPT_FIRST_HEARTBEAT= $00000400;
SCRIPT_CATCHING_THIEF_PC= $00000800;
SCRIPT_DYING = $00001000;
SCRIPT_ENTER_COMBAT = $00002000;
SCRIPT_EXIT_COMBAT = $00004000;
SCRIPT_START_COMBAT = $00008000;
SCRIPT_END_COMBAT = $00010000;
SCRIPT_BUY_OBJECT = $00020000;
SCRIPT_RESURRECT = $00040000;
SCRIPT_HEARTBEAT = $00080000;
SCRIPT_LEADER_KILLING = $00100000;
SCRIPT_INSERT_ITEM = $00200000;
SCRIPT_WILL_KOS = $00400000;
SCRIPT_TAKING_DAMAGE = $00800000;
SCRIPT_WIELD_ON = $01000000;
SCRIPT_WIELD_OFF = $02000000;
SCRIPT_CRITTER_HITS = $04000000;
SCRIPT_NEW_SECTOR = $08000000;
SCRIPT_REMOVE_ITEM = $10000000;
SCRIPT_LEADER_SLEEPING= $20000000;
SCRIPT_BUST = $40000000;
SCRIPT_DIALOG_OVERRIDE= $80000000;
//Второй DWORD
SCRIPT_TRANSFER = $00000001;
SCRIPT_CAUGHT_THIEF = $00000002;
SCRIPT_CRITICAL_HIT = $00000004;
SCRIPT_CRITICAL_MISS = $00000008;

 

Указание на скрипты в прототипы я добавлял (см. приманки в Grand Fix). :wink:

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Опубликовано

Хорошо. Хорошо что это возможно. Теперь у меня следующий вопрос: что значит "вклеить"?

Посмотрел на взрывчатую приманку.

 

vzrivchata_9757801_120166.gif

 

01 - признак наличия опциональной секции

0С 00 00 00 - размер элемента

02 00 00 00 - количество элементов

05 00 00 00 - неизвестные байты

00 00 00 00 00 00 00 00 67 60 00 00 - первый элемент

00 00 00 00 00 00 00 00 67 60 00 00 - второй элемент

02 00 00 00 - неизвестные байты

80 01 00 00 - первый DWORD битовой маски

00 00 00 00 - второй DWORD битовой маски

 

Я правильно все понял?

 

Теперь вопросы:

1) Где здесь указаны Counter0 etc.?

2) Как мне прочитать битовую маску? Получается, что 80 01 00 00 - это указание на SCRIPT_DIALOG_OVERRIDE ($80000000) и SCRIPT_END_COMBAT (00010000)?

3) что за неизвестные байты?

 

По поводу пункта 2 Отто Крупп пишет:

1st byte - 1st bit (1 for Get, 2 for Drop, 4 for Throw, 8 for Hit)
2nd byte – 2nd bit (1 for Miss, 2 for Dialog, 4 for First Heartbeat, 8 for Catching Thief Pc)

Следует ли понимать 80 01 00 00 - первый DWORD битовой маски, как указание на HIT и MISS?

Опубликовано
Теперь у меня следующий вопрос: что значит "вклеить"?

Вставить определенное количество байт после определенного смещения (в твоем hex-редакторе должно быть что-то типа "insert"), тем самым добавив секцию скрипта; далее эту секцию нужно отредактировать под свои нужды.

 

Где здесь указаны Counter0 etc.?

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

 

 

По использованию счетчиков...

Например, есть скрипт на DIALOG:

description ""

MAX_LINES_ALLOCATED 10

 

0. dialog Counter 0

 

1. return and SKIP default

Вешаешь в WorldEd этот скрипт мобам (NPC) на диалог. Первому NPC в разделе скриптов указываешь Counter 0 = 10, второму = 20, третьему = 30 и т.п. Тогда первый NPC начнет разговор с 10-ой строчки диалога, второй - с 20-ой, третьий - с 30-ой и т.п., причем реплики будут браться из одного диалогового файла и будет задействован один скрипт. Удобно, и полезно, когда делаешь однотипных "буратин" (стражники, например).

 

 

Следует ли понимать 80 01 00 00 - первый DWORD битовой маски, как указание на HIT и MISS?

Надо полагать. :) Всегда можно проверить в ProView:

HIT=30304, Counter: 0, 0, 0, 0 Flags: 0x00000000

MISS=30304, Counter: 0, 0, 0, 0 Flags: 0x00000000

 

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

 

 

P.S. Я могу что-то забыть, потому что последний раз этим занимался год назад - привязывал скрипт на HIT к Клинку Прикосновения Вампира для второго минификса GF. :)

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...