• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 515
Последнее редактирование модератором:

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.563
Благодарности
4.157
Баллы
915
Хмм... Что-то я сомневаюсь, что это восприятие получит именно владелец помещения, а не какой-то левый NPC. Ведь большинство помещений в игре принадлежат не NPC, а гильдиям.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
Может вот такой вариант подойдёт?

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

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
ElderGamer, вот есть ещё такой вариант. Он немножко получше.
AI/Human/B_Human/B_AssessEnterRoom.d:
Код:
func void B_AssessPortalCollision()
{
    Print("Portal collision");
 
    //other - вошедший
    //self - свидетель

    //вырезано из функции "B_AssessSleepTalk()"
    if(C_BodyStateContains(self,BS_LIE))
    {
        AI_UseMob(self,"BEDHIGH",-1);
    };
    AI_StartState(self,ZS_ObservePlayer,0,"");
 

    var int formerportalguild;
    formerportalguild = Wld_GetFormerPlayerPortalGuild();
    if(B_AssessEnterRoom())
    {
        return;
    };
    if(!Npc_CanSeeNpc(self,other) && (C_BodyStateContains(other,BS_SNEAK) || C_BodyStateContains(other,BS_STAND)))
    {
        return;
    };
    Npc_PerceiveAll(self);
    if(Wld_DetectNpcEx(self,-1,ZS_ClearRoom,-1,FALSE))
    {
        return;
    };
    if((self.guild == formerportalguild) || (Wld_GetGuildAttitude(self.guild,formerportalguild) == ATT_FRIENDLY))
    {
        if((Wld_GetGuildAttitude(self.guild,other.guild) == ATT_FRIENDLY) || (Npc_IsPlayer(other) && (self.npcType == NPCTYPE_FRIEND)))
        {
            return;
        };
        if(self.guild == GIL_NONE)
        {
            return;
        };
        if(((formerportalguild == GIL_MIL) || (formerportalguild == GIL_SLD)) && (Wld_GetGuildAttitude(self.guild,formerportalguild) == ATT_FRIENDLY))
        {
            B_Attack(self,other,AR_LeftPortalRoom,0);
            return;
        }
        else
        {
            self.aivar[AIV_SeenLeftRoom] = TRUE;
            Npc_ClearAIQueue(self);
            B_ClearPerceptions(self);
            AI_StartState(self,ZS_ObservePlayer,0,"");
            return;
        };
    };
};


AI/Human/TA_Human/ZS_Sleep.d:
Код:
func void ZS_Sleep()
{
    //добавляем восприятие на столкновение с порталами
    Npc_PercEnable(self,PERC_ASSESSENTERROOM,B_AssessPortalCollision);
 
    Npc_PercEnable(self,PERC_ASSESSQUIETSOUND,B_AssessQuietSound);
    Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_AssessDamage);
    Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessSleepTalk);
    AI_SetWalkMode(self,NPC_WALK);
};
Но здесь реакция не на всех НПС, а только на ГГ.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Почему не реализовать?
А руны, - их текстурная сетка, помещение закла в магическую систему игры, не говоря уже про обработку двигом его эффекта(ов) и прочее, ты как реализовывать собрался?

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
ElderGamer, вот есть ещё такой вариант.
Ну, я бы не стал курочить существующий алгоритм ИИ, а назначил этому восприятию у спящего непися альтернативный обработчик - новую функцию. Непись, как мне кажется, не должен просыпаться, если ГГ присутствует в помещении легально, или если он крадётся, или если он - мясной жук...
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
435
Благодарности
261
Баллы
230
Ну, я бы не стал курочить существующий алгоритм ИИ, а назначил этому восприятию у спящего непися альтернативный обработчик - новую функцию.
В принципе да, можно и новую функцию-обработчик написать.

Непись, как мне кажется, не должен просыпаться, если ГГ присутствует в помещении легально
Легально - это как? Брат, сын или близкий друг("одногильдиец"). Даже сосед порой может быть опасен!

PS: Если каждую ночь кто-то ходит у вас дома - ставьте дверь, да замок по надёжнее!:D
 

Leonion

Участник форума
Регистрация
31 Мар 2008
Сообщения
249
Благодарности
154
Баллы
195
А руны, - их текстурная сетка, помещение закла в магическую систему игры, не говоря уже про обработку двигом его эффекта(ов) и прочее, ты как реализовывать собрался?

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

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

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.340
Благодарности
3.186
Баллы
525
Легально - это как? Брат, сын или близкий друг("одногильдиец").

Одногильдиец, да. Или помещение паблик-класса. Логика такова. Неписи не обращают внимания друг на друга. Оно и не удивительно, иначе они бы не давали друг другу спать, постоянно пробуждая один другого. Возьмём, к примеру, казарму ополчения в Хоринисе. Если неписи не вскакивают, когда ложится спать очередной ополченец, то почему они должны вскакивать, когда в казарму входит присоединившийся к ополчению ГГ?
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
В Возвращении вроде где-то даже была руна-щит (увеличивающая защиту) у укурков (аналогов вроде раньше не существовало).

Руна в SnC. Работает она через циклический триггер, изменяя защиту на определенное время (так же как и заточка оружия на + к урону, только там не нужны визуалы рун). Т.е. фактически из "движковых" свойств руны используется только визуал для отображения, а не для самого эффекта. Подобного можно наваять хоть мешок с тележкой - обработкой эффектов будет заниматься циклический триггер, а не непосредственно движок.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Потому что руны-то ведь делают в модах. Новые руны призыва, новые атакующие заклинания (пусть и де факто перекрашенные+ребаланснутые старые), новые руны телепортов - и все прекрасно работает.
В Возвращении вроде где-то даже была руна-щит (увеличивающая защиту) у укурков (аналогов вроде раньше не существовало).
Не пойму, почему толку-то нет, если все делается и все работает?
Руны если и делают, то только потому-что есть несколько свободных мест в классе, а чтобы сделать новую вне его рамок, то тут все приплыли...
А перерисованные и прочее руны реализованные: скриптами, триггерами и прочей мутью, это лишь жалкое их подобие. Если вас подобное устраивает, то конечно можно и так выкрутится из положения.. :)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
А перерисованные и прочее руны реализованные: скриптами, триггерами и прочей мутью, это лишь жалкое их подобие. Если вас подобное устраивает, то конечно можно и так выкрутится из положения..

Может и подобие... Вот только на огненных ловушках на сундуках я оставил только визуал горения, урон обрабатывается триггером. Это подобие работает более стабильно и безглючно чем оригинал (через ZS_Burn). И настраивается легче, вплоть до динамического изменения (напр. урон по главам и ли по другим критериям).
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Может и подобие... Вот только на огненных ловушках на сундуках я оставил только визуал горения, урон обрабатывается триггером. Это подобие работает более стабильно и менее безглючно чем оригинал. И настраивается легче, вплоть до динамического изменения (напр. урон по главам и ли по другим критериям).
При реализации этого через двиг, код был бы более оптимизирован и работало бы все стабильнее в разы. Сейчас от триггеров идет большая нагрузка идет на проц, который и так, сам по себе завален по самые уши занят разного рода вычислениями..
Тестирование В2 дает много пищи на эту тему, а триггеров там как орков в твоих и Трязика Миненталях, вместе взятых..
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
При реализации этого через двиг, код был бы более оптимизирован и работало бы все стабильнее в разы.

Вариант "был бы" я тоже рассматривал. :D Проще и надежнее через триггер, по крайней мере не зависишь от ФПС и прочего.

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

Ну так разумно грузить надо, а не пихать все что не попадя. :D

Leonion сейчас пытается заниматься, вот пусть и попробует сравнить работу горения через триггер и оригинал.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.804
Баллы
995
Ну так разумно грузить надо, а не пихать все что не попадя.
Дело не в разумности, а в том что он создает доп, нагрузку, причем постоянно пока активна игра, а таких Т. там может быть много, отчего возможны прочие косяки по игре..
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Дело не в разумности, а в том что он создает доп, нагрузку, причем постоянно пока активна игра, а таких Т. там может быть много, отчего возможны прочие косяки по игре..

а зачем их много делать? Многие вещи можно отсечь или реализовать на уровне движка и стандартных функций (повреждений, восприятий и т.д.), много в триггере можно отсечь по hero, конкретной локации и т.д. Поскольку я читал форум по В2 первые проблемы возникли из-за текстур, а не триггеров, хотя читал вскользь, может чего и упустил.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
А много триггеров не надо. Можно один скрипт-триггер на зен, который будет по неким условиям обрабатывать различные случаи. Так можно избежать роста нагрузки на проц.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Немножко из опыта общения с триггерами.
Частота триггера: можно поставить 0.1с, можно 1с. В конкретной ситуации (для примера обработка расхода выносливости) - вариант с 0.1с обеспечит 100% расход выносливости, в варианте с 1с возможен нерасход выносливости при использовании легкого и быстрого одноручного оружия (где-то в 5 случаях из 100 ударов). Ну и фиг с ним, можно считать что это игровой бонус за ловкость рук, он на геймплей никак не влияет, зато намного уменьшается нагрузка на двиг при обработке цикла. В варианте урона обычным оружием или разовый урон заклом, рассчитывать урон лучше движком, в варианте длительного по времени урона (отравление, горение и т.п.) - лучше триггером, но опять же с частотой 1с, нет никакого смысла ставить 0.1с (если только более точно подогнать под фреймы анимации горения, но стоит ли это свеч?). Может быть для каких-то уникальных случаев понадобится еще один триггер с большей частотой, но эти случаи и будут обрабатываться в единичном варианте (хотя я не могу придумать таких случаев, может игру уже подзабыл). В Обле и Скайриме довольно часто сталкивался в модах с непродуманностью использования циклов, например надо просто проверить и при необходимости переинициализировать переменную при загрузке сейва (во время игры она все равно изменится и переприсвоится движком обычным путем), но вместо простой проверки при загрузке ее вешают на цикл с частотой 0.1с и высшим приоритетом. Зачем?
Поэтому и остановился на триггере в 1с для Готики после всех своих тестов, да и при тестах было видно что еще одну локацию в Возвращение (это образно) и движок начнет неровно дышать.
ЗЫ. Кстати, интересно, в В2 убрали мусор связанный с выносливостью и ее отображением? Я в Ребалансе2.1 перекинул ее на триггер, но кучу оставшегося мусора так и не вынес, лень было. :D
ЗЫЫ. Уже и через Оперу Турбо еле зашел... Жесть :rolleyes:
 
Сверху Снизу