AERIE Team

Все об играх серии Baldur's Gate
Текущее время: 22 авг 2017, 15:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 17 дек 2010, 21:17 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
Насколько я понимаю, при присоединении NPC происходит следующие:

1. Меняется диалог в соответствии с PDIALOG.2DA.
2. Меняется default скрипт на dplayer2.bcs.
3. В ToB меняется override скрипт с тем же 2da.
Все? Или что-то еще?

При этом у тех, кто в партии изначально, в default стоит dplayer3.bcs. Что касается dplayer.bcs, то его роль мне не ясна. У некоторых NPC он стоит в default до присоединения, но это не всегда так.

Из этого, казалось бы, вытекает простейший способ обеспечить выполнение скрипта для всех персонажей в партии: дописать его в dplayer2.bcs и dplayer3.bcs. Но с этим способом есть одна проблема — он не работает. Точнее, работает, только если у нас включен AI.

Посему — вопросы:

1. На какие уровни скриптов действует включение/выключение AI? На default — точно действует. На override — точно не действует. Что с остальными?

2. Как добиться выполнения скрипта для каждого члена партии, независимо от состояния AI? Можно добавить его всем присоединяемым NPC к override, но этот способ мне сильно не нравится. Идеальным было бы из baldur.bcs перехватить момент изменения состава партии, и в этот момент заюзать на нее ChangeAIScript. Это возможно?

P.S. Кстати, в BGT ржавение оружия реализовали, как выяснилось, именно через dplayer2.bcs и dplayer3.bcs. То-то я удивляюсь, что оно не ломается вообще!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 17 дек 2010, 21:31 
Не в сети
Аватара пользователя

Зарегистрирован: 23 авг 2002, 11:06
Сообщения: 1331
Откуда: Киев
mirror писал(а):
Кстати, в BGT ржавение оружия реализовали, как выяснилось, именно через dplayer2.bcs и dplayer3.bcs. То-то я удивляюсь, что оно не ломается вообще!

Оно не ломается, если установлен фикс из БГТ Твика. А если нет, то ломается не только оружие, но и броня. Обидно, когда купленный фуллплейт взял и сломался...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 17 дек 2010, 21:48 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
BGTTweak, компонент @1500 «Измененный эффект износа предметов», все свои манипуляции ограничивает теми же dplayer2.bcs и dplayer3.bcs. Так что, если AI выключен, оно на игру влиять не будет, независимо то того, что именно там установлено.

Во всяком случае, у меня оно себя ведет именно так.


Возвращаясь к теме, еще один вопрос: изменение скриптов при подсоединении/отсоединении жестко зашито, или на это, все-таки, можно повлиять через какие-нибудь 2da? Скажем, добавив в тот же PDIALOG.2DA столбец с чем-нибудь вроде CLASS_SCRIPT_FILE (или еще чего в том же духе) можно добиться какого-нибудь эффекта?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 17 дек 2010, 22:13 
Не в сети
Аватара пользователя

Зарегистрирован: 23 авг 2002, 11:06
Сообщения: 1331
Откуда: Киев
mirror писал(а):
BGTTweak, компонент @1500 «Измененный эффект износа предметов», все свои манипуляции ограничивает теми же dplayer2.bcs и dplayer3.bcs. Так что, если AI выключен, оно на игру влиять не будет, независимо то того, что именно там установлено.

"Как много нам открытий чудных..." Но фишка в том, что играть с отключенным АИ очень стремно. Это надо постоянно каждому давать команду на драку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 00:27 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
mirror писал(а):
P.S. Кстати, в BGT ржавение оружия реализовали, как выяснилось, именно через dplayer2.bcs и dplayer3.bcs. То-то я удивляюсь, что оно не ломается вообще!
Там не самый оптимальный метод. Лучше было обойтись 248 (Set Melee Effect), а в него напихать манипуляции с оружием.

mirror писал(а):
1. На какие уровни скриптов действует включение/выключение AI? На default — точно действует. На override — точно не действует. Что с остальными?
Не знаю, надо тестить.


А что конкретно нужно сделать? Возможно, есть альтернативные варианты.

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 10:48 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
Senka писал(а):
"Как много нам открытий чудных..." Но фишка в том, что играть с отключенным АИ очень стремно. Это надо постоянно каждому давать команду на драку.
Всю жизнь играю именно с отключенным AI. И, естественно, с автопаузами по максимуму. Получается почти turn-based, как и положено нормальной AD&D-игрушке. Никаких проблем с управлением партией не замечал. А вот если AI включить — они начинают проявлять излишнюю самодеятельность...


Ardanis писал(а):
Там не самый оптимальный метод. Лучше было обойтись 248 (Set Melee Effect), а в него напихать манипуляции с оружием.
Э-э... А как туда это напихать? Этот опкод, вроде, кастует спелл на противника? Единственное, что сходу приходит в голову — саммон кричи... Но что-то мне этот способ более оптимальным не кажется...

Ardanis писал(а):
mirror писал(а):
1. На какие уровни скриптов действует включение/выключение AI? На default — точно действует. На override — точно не действует. Что с остальными?
Не знаю, надо тестить.
Мда. Пожалуй, сейчас этим и займусь.

Ardanis писал(а):
А что конкретно нужно сделать? Возможно, есть альтернативные варианты.
В принципе, задумок, для которых потребуется этот механизм, у меня много. Но сейчас конкретно я пытаюсь реализовать альтернативный механизм разрушения вещей дроу.

Смысл тут в следующим. Мне сильно не нравится, что этот механизм (как основной, так и его вариация из BG2_Tweaks) завязан на AR2500. По идее, если дровийской шмот используется, то он должен ломаться везде, где светит солнце. А если лежит на дне рюкзака — то с чего бы ему вообще ломаться? В общем, примерно так:
Код:
IF
   AreaType(DAYNIGHT)
   !TimeOfDay(NIGHT)
   HasItemEquiped("DWXPEHb",Myself)
THEN
   RESPONSE #100
   TakeItemReplace("DWDUST","DWXPEHb",Myself)
END
Но сейчас этот код работает (в составе dplayer?.bcs) только при включенном AI. Что, конечно, никуда не годится...


Впрочем, кажется я знаю, как решить задачу в общем виде. Это сработает, если хоть что-то, кроме override работает при отключенном AI:
1. Как я уже писал, нужно из baldur.bcs перехватить момент изменения состава партии, и в этот момент заюзать на нее ChangeAIScript.
2. Для этого нам нужно найти все диалоги присоединяемых NPC, в которых есть JoinParty, и вставить перед ним установку глобальной переменной.
3. Для облегчения поиска можно использовать PDIALOG.2DA. Там не все диалоги, но недостающие имеют похожие названия, и их относительно легко найти регекспом.

Дальнейшее очевидно. Возможности открываются довольно широкие: можно контролировать произвольных NPC как после присоединения, так и после отсоединения (у них устанавливается wtasight.bcs, в нем проверяем, переменную, установленную, пока перс был в партии, и ставим новый скрипт с нужным нам содержимым). А что касается тех, кто еще не присоединен, то большая их часть либо есть в NPCLEVEL.2DA, либо юзает dplayer.bcs. Выпадают только персы из модов...

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 12:34 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
mirror писал(а):
Ardanis писал(а):
Не знаю, надо тестить.
Мда. Пожалуй, сейчас этим и займусь.
Протестировал. Это полный ...

При отключенном AI работает ТОЛЬКО override!

Даже таинственные area и specifics тоже работают лишь при включенном AI. (Кстати, что это за звери? Их установка на cre-файле никак не отражается, но работают они точно также, как остальные, от первого лица...)

mirror писал(а):
Это сработает, если хоть что-то, кроме override работает при отключенном AI
Облом... :-(

Мы не можем заменить override через этот механизм — сделав такое, мы поломаем персам все квесты...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 13:41 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
mirror писал(а):
А вот если AI включить — они начинают проявлять излишнюю самодеятельность...

Им можно указать NONE скрипт в настройках персонажа.

mirror писал(а):
Этот опкод, вроде, кастует спелл на противника? Единственное, что сходу приходит в голову — саммон кричи... Но что-то мне этот способ более оптимальным не кажется...
Item: Remove Item [112]
Item: Create Inventory Item [122]

mirror писал(а):
Но сейчас конкретно я пытаюсь реализовать альтернативный механизм разрушения вещей дроу.
Можно добавить в скрипты всех уличных локаций. Конечно, это потребует установки после "обычных" модов, но вряд ли так уж критично. По крайней мере, так меньше шанс что-нибудь запороть.

Деталей не знаю, но Turambar относительно недавно тоже с адамантиновым шмотом возился http://www.shsforums.net/topic/45924-tu ... tweaks-17/

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 15:31 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
Ardanis писал(а):
mirror писал(а):
Но сейчас конкретно я пытаюсь реализовать альтернативный механизм разрушения вещей дроу.
Можно добавить в скрипты всех уличных локаций. Конечно, это потребует установки после "обычных" модов, но вряд ли так уж критично. По крайней мере, так меньше шанс что-нибудь запороть.
Не, такой вариант мне сильно не нравится. В принципе, override у Player1 свободный, так что можно все писать туда. Правда, оно будет криво работать, если партия разбросана по разным локациям, но тут уж ничего не поделаешь...

Наверное, так и сделаю. Сейчас я решаю вторую часть общей задачи — вешать свои скрипты на исключенных из партии NPC. Идея остается почти прежней: отслеживать их присоединение и устанавливать переменную, затем в wtasight.bcs ее проверять. Нашел триггер Joins, у которого нет описания. Если вешать его в скрипт к Player1, он срабатывает, но как-то странно: примерно через раз... Делаю так:
Код:
IF
   Joins([ANYONE])
THEN
   RESPONSE #100
   SetGlobal("M8NEWNPC","LOCALS",1)
END

IF
   Global("M8NEWNPC","LOCALS",1)
   InParty(Player2)
THEN
   RESPONSE #100
   ActionOverride(Player2, SetGlobal("M8INPARTY","LOCALS",1))
   Continue()
END

// Player3-6...

IF
   Global("M8NEWNPC","LOCALS",1)
THEN
   RESPONSE #100
   SetGlobal("M8NEWNPC","LOCALS",0)
END
Можно ли увеличить надежность срабатывания этого триггера?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 15:59 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
mirror писал(а):
Не, такой вариант мне сильно не нравится. В принципе, override у Player1 свободный, так что можно все писать туда. Правда, оно будет криво работать, если партия разбросана по разным локациям, но тут уж ничего не поделаешь...
Если работать через локации, то действовать будет на всех НПС, независимо от их происхождения. А в ненужное время не будет грузит проц.
Если же заполнять постоянно активный скрипт, то можно и прямо через baldur.bcs делать. Он не может читать локальные вары, но это и ГГ не сделает, так что смысла извращаться особого нет.

mirror писал(а):
Если вешать его в скрипт к Player1, он срабатывает, но как-то странно: примерно через раз...
Не срабатывает в каком блоке? Там где стоит Joins(), или в последующих? Если первое, то хз. Если второе, то я смутно припоминаю какие-то особенности Continue().

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 17:55 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
Ardanis писал(а):
mirror писал(а):
Не, такой вариант мне сильно не нравится. В принципе, override у Player1 свободный, так что можно все писать туда. Правда, оно будет криво работать, если партия разбросана по разным локациям, но тут уж ничего не поделаешь...
Если работать через локации, то действовать будет на всех НПС, независимо от их происхождения. А в ненужное время не будет грузит проц.
Вроде бы, он будет грузить проц все время, пока мы на открытом воздухе, не? А override в пещерах должен перестать его грузить после заваленной проверки AreaType...

Впрочем, возможность проверить конкретного NPC — это, конечно, жирный плюс в пользу этого варианта. Жирный минус — сотни одинаковых (и весьма пухлых!) скриптов в сотнях разных локаций...

Кстати, в скрипте арии "LOCALS" (или что-нибудь аналогичное) работает, или к локальной переменной можно обращаться только по названию локации?

Ardanis писал(а):
Не срабатывает в каком блоке? Там где стоит Joins(), или в последующих? Если первое, то хз. Если второе, то я смутно припоминаю какие-то особенности Continue().
Где Joins. :-(
Вообще, вроде бы, это как-то связано с активностью других крич на локации... Чем она больше, тем меньше шансов, что оно отработает.

P.S. Кстати, еще одни грабли: в момент исключения персонажа из партии нельзя заменять default-скрипт. Если это сделать, то J-диалог не заменится на P-диалог, и персонаж зависнет. Замена race-скриптa работает нормально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 19:33 
Не в сети
Аватара пользователя

Зарегистрирован: 09 сен 2006, 19:38
Сообщения: 558
Откуда: СПб
mirror писал(а):
Вроде бы, он будет грузить проц все время, пока мы на открытом воздухе, не? А override в пещерах должен перестать его грузить после заваленной проверки AreaType...
Этот скрипт, с проверкой на предметы дроу, реально нужен только на внешних локациях. Если он приделан к локации, то загружаться будет только при ее посещении, если к персонажу - постоянно, причем совершенно независимо от того, чему равны условия. Длинные скрипты имеют скверную тенденцию увеличивать время загрузки игры/новой локации - что очень наглядно демонстрирует СКС2, особенно его ранние версии. Чеки на предметы дроу, конечно, не сравнятся с ИИ длиной в метр-полтора, но свою лепту тоже внесут.

mirror писал(а):
Кстати, в скрипте арии "LOCALS" (или что-нибудь аналогичное) работает, или к локальной переменной можно обращаться только по названию локации?
Отдельные арии воспринимают AR****, LOCALS доступны только кричам.
Правда у меня такое чувство, что я где-то видел контейнер, скрипт которого содержал локалку и тем не менее работал как надо :unsure:
Типы переменных.


Документация по Joins()/Leave()
Avenger писал(а):
I wonder why these are not in IESDP:

These two triggers are accessible only from party members, because they are ever sent to them when a PC leaves/joins the party.

I guess they send it to each partymember so they can react on it individually.


mirror писал(а):
Где Joins.
Вообще, вроде бы, это как-то связано с активностью других крич на локации... Чем она больше, тем меньше шансов, что оно отработает.
В принципе, можно просканировать скрипты/диалоги и к найденным JoinParty()/LeaveParty() добавить установку переменной. Немного муторно, правда...

_________________
They killed Fry :( Them bastards have killed her :'(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Смена скриптов при JoinParty и их работа пока в партии
СообщениеДобавлено: 18 дек 2010, 20:28 
Не в сети

Зарегистрирован: 04 мар 2009, 18:22
Сообщения: 32
Ardanis писал(а):
Этот скрипт, с проверкой на предметы дроу, реально нужен только на внешних локациях. Если он приделан к локации, то загружаться будет только при ее посещении, если к персонажу - постоянно, причем совершенно независимо от того, чему равны условия.
О, идея! При первом заходе ГГ на локацию с нужными свойствами создается невидимая (и летающая, чтоб не мешать движению) крича. Дальнейшая проверка на предметы дроу у всех PC, которых она найдет на этой локации, поручается ей.

Создать кричу можно через скрипт ГГ и MYAREA. Места это займет немного. Вопрос только, как будет вести себя крича, когда герои за пределами ее локации, и не будет ли уже она своими скриптами грузить движок... Впрочем, если будет, то можно их ручками подгружать на время «охотничьего сезона», а потом отключать обратно...

Ardanis писал(а):
В принципе, можно просканировать скрипты/диалоги и к найденным JoinParty()/LeaveParty() добавить установку переменной. Немного муторно, правда...
Именно, что муторно... Вначале, пока не нашел Joins, я так и собирался делать. Посмотрю еще, как этот Joins будет работать в реальных условиях. Если совсем плохо — откачусь на этот вариант...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB