Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
ud4ever
Цитата(zmeylsdn @ Feb 25 2019, 23:30) *
Спасибо, работает.
Существует ли способ определить школу волшебника-специалиста и применить к ней же какие либо бонусы, например +2 spellDC?


Можно с nwnx, в 1.69 плагин nwnx_funcs, в NWN EE эта функция в плагине nwnx_creature.

1.69
/* Gets whether or not oCreature has a specialist school of wizardry. */
int GetWizardSpecialization (object oCreature);

NWN EE
// Gets whether or not creature has a specialist school of wizardry.
int NWNX_Creature_GetWizardSpecialization(object creature);


zmeylsdn
задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1.
На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу:
int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale)
Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4).
Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный.
Итого, как лучше реализовать скалирование самонов от уровня мастера?
Как вариант нашел такой способ, основа из предыдущего сообщения:
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon);
}
ud4ever
Цитата(zmeylsdn @ Feb 26 2019, 12:56) *
задумал улучшить эпик самонов blackguard and shadowdancer. За это отвечает скрипт "X2_inc_summscale", который является инклюдом для NW_CH_AC1.
На родном существе x2_s_vrock (из x0_s2_fiend) у меня получилось изменить формулу:
int nLevelTo = GetLevelByClass(CLASS_TYPE_BLACKGUARD, GetMaster(oServant))+10;//-4 (из X2_inc_summscale)
Т.е. стало новый уровень врока = уровень БГ+10 (было уровень БГ-4).
Но вот если заменить x2_s_vrock (из x0_s2_fiend) на собственное существо, скалирование не работает вообще. Стандартный моб со скриптами для призванного существа, в т.ч. и NW_CH_AC1. Может у этих самонов (врок и тень) какой из скриптов уникальный.
Итого, как лучше реализовать скалирование самонов от уровня мастера?
Как вариант нашел такой способ, основа из предыдущего сообщения:
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
EmpowerMySummon(GetHitDice(OBJECT_SELF)-20,oSummon);
}


а той же функцией для левелапа хенчмана из X2_inc_summscale воспользоваться не пробовал?

int SSMLevelUpCreature(object oCreature, int nLevelUpTo, int nClass = CLASS_TYPE_INVALID, int bReadySpells =TRUE)

____________

#include "X2_inc_summscale"

void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
SSMLevelUpCreature(oSummon,GetHitDice(OBJECT_SELF)
);
}

zmeylsdn
В x0_s2_fiend меняю стандартного врока на своего, докидываю DelayCommand(4.0, ExecuteScript("z_sbuff_scale", OBJECT_SELF)); после ApplyEffectAtLocation...
CODE
//z_sbuff_scale
#include "X2_inc_summscale"
void main()
{
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED);
SSMLevelUpCreature(oSummon,GetLevelByClass(CLASS_T
YPE_BLACKGUARD, OBJECT_SELF)+10);
SendMessageToPC(GetFirstPC(), "oSummon: " + GetName(oSummon)); //в игре oSummon: Самон Эпик Врок
SendMessageToPC(GetFirstPC(), "oSummonlvl: " + IntToString(GetHitDice(oSummon)));//в игре oSummonlvl: 25
SendMessageToPC(GetFirstPC(), "BG+10lvl: " + IntToString(GetLevelByClass(CLASS_TYPE_BLACKGUARD, OBJECT_SELF)+10));//в игре BG+10lvl: 39
}

Но Врок остается 25й лвл как и был. У него стандартный набор скриптов "nw_ch_ac%"
denis0k
SSMLevelUpCreature возвращает 0 на ошибку, это стоит проверить.

Второй момент - чудеса внутри самой функции:
Neverwinter Script
int nLevel = LevelUpHenchman(oCreature,nClass,bReadySpells); // <-- первый ап oCreature
  // level me up until I the same level as my master (or something fails) <-- коммент врёт, нет проверки на уровень мастера (либо эта проверка вшита и её не обойти)
  while (nLevel < (nLevelUpTo) && nLevel != 0)
  {
    // level up to thenext level
      //PrintString(GetName(oCreature) + " is now level "+ IntToString(nLevel));
    nLevel = LevelUpHenchman(OBJECT_SELF,nClass,bReadySpells); // <-- а тут внезапно в цикле OBJECT_SELF
  }

Ещё он не просто так апает. У каждого класса есть пакет стандартных настроек, кажется, это всё в 2да. Тут тоже стоит проверить.
Chiffa
Привет всем!
Уважаемые мастера, не могли бы вы подсказать, как правильно похоронить слона?
В смысле, уничтожить одного очень упертого и несговорчивого непися.
Непись так и называется "Мертвый слон". У него нет никаких скриптов, кроме единственного несложного, стоит на порождении (спавне):
Neverwinter Script
void main()
{
    //object oNpc = OBJECT_SELF;
    SetIsDestroyable(FALSE,FALSE,FALSE);
//  ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),OBJECT_SELF);
    SetCommandable(FALSE);
}

Собственно, и метода, и сам скрипт повзаимстовован с покойников Верхнего Хаспура, крушиморд и стражников, их там много. А проблема в том, что слон уничтожаться не желает. Джамповаться куда-нибудь на... на вейп в закрытой локе тоже не хочет. Вообще никаких команд не признает.
Если я правильно понял, дестрою мешает строка:
Neverwinter Script
SetIsDestroyable(FALSE,FALSE,FALSE);

Но именно эта строка держит чертову тварь в мире! Пробовал ее отключить - так слон исчезает мгновенно, без всяких команд на дестрой. Стоит только персонажу его просто увидеть.
Пробовал чередовать FALSE и TRUE, перебрал все варианты - не помогает. В любых сочетаниях если первой стоит TRUE - слон исчезает сам, если FALSE - не выжжешь каленым железом! Пробовал вернуть все дефолтные скрипты на модельку - эффект нулевой.
Собрался уже применить способ, который советовал уважаемый denis0k, то есть скопировать локацию, в одной - мертвый слон, в копии - евонная могила. И джамповать туда персонажа. Но есть причины, по которым этого делать очень не хотелось бы.
Может, кто-то вспомнит какой-нибудь более другой способ? Или удержать модельку до команды "дестрой" в диалоге, без строки "SetIsDestroyable..." или все-таки уничтожить тварь невзирая на целых три FALSE-а?
Заранее спасибо и прошу простить за многабукафф.

Привет всем!
Уважаемые мастера, не могли бы вы подсказать, как правильно похоронить слона?
В смысле, уничтожить одного очень упертого и несговорчивого непися.
Непись так и называется "Мертвый слон". У него нет никаких скриптов, кроме единственного несложного, стоит на порождении (спавне):
Neverwinter Script
void main()
{
    //object oNpc = OBJECT_SELF;
    SetIsDestroyable(FALSE,FALSE,FALSE);
//  ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(),OBJECT_SELF);
    SetCommandable(FALSE);
}

Собственно, и метода, и сам скрипт повзаимстовован с покойников Верхнего Хаспура, крушиморд и стражников, их там много. А проблема в том, что слон уничтожаться не желает. Джамповаться куда-нибудь на... на вейп в закрытой локе тоже не хочет. Вообще никаких команд не признает.
Если я правильно понял, дестрою мешает строка:
Neverwinter Script
SetIsDestroyable(FALSE,FALSE,FALSE);

Но именно эта строка держит чертову тварь в мире! Пробовал ее отключить - так слон исчезает мгновенно, без всяких команд на дестрой. Стоит только персонажу его просто увидеть.
Пробовал чередовать FALSE и TRUE, перебрал все варианты - не помогает. В любых сочетаниях если первой стоит TRUE - слон исчезает сам, если FALSE - не выжжешь каленым железом! Пробовал вернуть все дефолтные скрипты на модельку - эффект нулевой.
Собрался уже применить способ, который советовал уважаемый denis0k, то есть скопировать локацию, в одной - мертвый слон, в копии - евонная могила. И джамповать туда персонажа. Но есть причины, по которым этого делать очень не хотелось бы.
Может, кто-то вспомнит какой-нибудь более другой способ? Или удержать модельку до команды "дестрой" в диалоге, без строки "SetIsDestroyable..." или все-таки уничтожить тварь невзирая на целых три FALSE-а?
Заранее спасибо и прошу простить за многабукафф.
denis0k
Можно одной строкой, что именно нужно сделать? smile.gif
Chiffa
Цитата(denis0k @ Feb 28 2019, 17:23) *
Можно одной строкой, что именно нужно сделать? smile.gif


Нужно уничтожить непися.
Команда " DestroyObject(GetObjectByTag("ELEFANT_DEATH"));" не срабатывает.
Причины, как я их понял, описаны в предыдущем посту.

Можно было бы еще убрать этого непися в закрытую локу. Но команда "JumpToObject" также игнорируется. Полагаю, по тем же причинам. То есть из-за строчки " SetIsDestroyable(FALSE,FALSE,FALSE);" в графе "Порожден" (спавн) тела непися. Но без этой строки непись исчезает сама, не дожидаясь команды.
denis0k
Может перед дестроем сделать SetIsDestroyable(true)?
Chiffa
Цитата(denis0k @ Feb 28 2019, 19:11) *
Может перед дестроем сделать SetIsDestroyable(true)?


Пробовал в разных вариантах. Весь вечер и половину ночи.
Исчезает невидимый плейс, с которым, собственно, и ведется диалог. (На саму непись нельзя кликнуть, как и задумано.) Но плейс-то легко уничтожить одной строчкой без всяких танцев с бубнами. А вот объяснить компилятору что применять SetIsDestroyable(true) надо не к плейсу, к этой чертовой неписи, я не сумел...
Пробовал и другой путь: привязать SetIsDestroyable к переменным. Есть переменная - TRUE, а пока ее нет - FALSE. Если не трудно, взгляни на скрипт. Может, поймешь, в чем моя ошибка. На мой взгляд, ошибаться там просто нечему, но это взгляд дилетанта, не знающего английского.
Neverwinter Script
void main()
{
    object oNpc = GetObjectByTag("ELEFANT_DEATH"); // Этот чертов слон

          ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc); // Слон мертв. Лежит и не рыпается, кликнуть нельзя.

              SetCommandable(FALSE);

                            if  (GetLocalInt(oNpc, "SLON") != 1) // Переменной еще нет.
    SetIsDestroyable(FALSE,FALSE,FALSE); // Слона не расшибешь ядрен-батоном.

                  if  (GetLocalInt(oNpc, "SLON") == 1) // Переменная присвоена

              SetIsDestroyable(TRUE,TRUE,TRUE); // Слон должен исчезнуть сам или по команда скрипта - не важно.
}


Не исчезает, зараза! Плевал он на переменные.
И что интересно, если строчку " ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDeath(TRUE),oNpc);" переставить в любое другое место вниз, компилятор считает, что все правильно, а вот непись "оживает". Стоит на ножках, крутит башкой, кликнуть можно. Получаются не "похороны", а цирк какой-то.
Скрипт стоит на порождении (OnSpawn) непися.
Спасибо.
denis0k
Цитата
Исчезает невидимый плейс, с которым, собственно, и ведется диалог.
Почему плейс-то? smile.gif Теги что ли одинаковые у плейса и нпс? Так надо разные, или тип объекта проверять.
Chiffa
Цитата(denis0k @ Mar 1 2019, 17:39) *
Почему плейс-то? smile.gif Теги что ли одинаковые у плейса и нпс? Так надо разные, или тип объекта проверять.


Извини, зря я вообще этот плейс приплел. Путаницу вношу. Просто слона невозможно кликнуть, он же лежит труп-трупом. Диалог ("Снять шкуру --- Вырыть яму --- Закопать слона") идет с невидимым плейсом под брюхом у непися.
Теги у плейса и непися-слона, разумеется, разные.
Просто в конце диалога перс типа хоронит слона, дестроятся оба, и слон и плейс. То есть должны дестроиться. С плейсом все ок, а со слоном-неписью... Просто беда...
denis0k
Потому что действие дестрой вешается на плейс, и после его уничтожения некому уничтожать слона? Через assign можно дестрой на модуль повесить. Или слона сразу, а плейс - через секунду делэем.
Chiffa
В том то и проблема, что у меня не получается объяснить компилятору, что функцию "SetIsDestroyable(TRUE,TRUE,TRUE)" надо применять не к плейсу, ч которым диалог, а к объекту с другим тегом.

Цитата(denis0k @ Mar 1 2019, 18:34) *
Потому что действие дестрой вешается на плейс, и после его уничтожения некому уничтожать слона? Через assign можно дестрой на модуль повесить. Или слона сразу, а плейс - через секунду делэем.


Разумеется, я именно так и делал. Сначала дестрой слону, а потом, через пару строк, в самом конце диалога - плейсу. Разными скриптами. Иначе бы диалог просто прервался.
Причем На последней строчке не только дестрой плейсу, а еще + переключение квеста, куча дебафов на перса, типа задолбался, реплика перса. Через акции. И все работает как часики.
Кроме чертова слона!!!
denis0k
Цитата
у меня не получается объяснить компилятору, что функцию "SetIsDestroyable(TRUE,TRUE,TRUE)" надо применять не к плейсу, ч которым диалог, а к объекту с другим тегом.
Через ассигн? Кстати, неплохо бы и SetCommandable(true) делать. Иначе ассигн не сработает. А зачем вообще там false делается в начале? Он же вроде невыделяем вообще, его блокировать не надо.
Chiffa
Цитата(denis0k @ Mar 2 2019, 00:22) *
Через ассигн?

Нет. Через ассинг у меня последний скрипт в диалоге. Но там иначе никак. Много всего: переключение квеста, анимация, затемнение, отсчет времени, крейт с палитры кучи мусора (могила слона) и т. д. Но этот скрипт как раз работает нормально. Все команды выполняются.
А для "SetIsDestroyable(TRUE)" я пытался сочинить отдельный скрипт. Тоже в диалоге, парой строк раньше. Исключительно для нее. Где тупо, в лоб, желательно вообще одной строкой объяснить компилятору, что эту функцию надо применить к объекту с тегом "ELEFANT_DEATH". И не сумел.
Понимаешь, я вообще впервые с этой функцией столкнулся. Нет примера перед глазами, как правильно сформулировать. На все попытки сформулировать по аналогии с другими функциями компилятор ругается.
А сам сочинять я умею, увы, только на русском.
denis0k
Как всё сложно. Нелегко ванговать, но могу предложить следующее:

SetCommandable(FALSE); - убрать. Кажется, оно ни на что не влияет, пациент дохлый.

Для разрушения сделать в диалоге:
Neverwinter Script
AssignCommand("слон", SetIsDestroyable(TRUE));
AssignCommand(GetModule(), DestroyObject("слон"));
Chiffa
Цитата(denis0k @ Mar 2 2019, 17:31) *
Как всё сложно.


Дык, я обычно и не прошу помощи пока сам не расшибу лоб апстену. vava.gif

Цитата(denis0k @ Mar 2 2019, 17:31) *
SetCommandable(FALSE); - убрать. Кажется, оно ни на что не влияет, пациент дохлый.


В том то и беда, что влияет. И еще как. Без этого FALSE-а моделька исчезает совершенно самостоятельно. Без всяких диалогов-команд-дестроев. Стоит только персонажу ее просто увидеть. Даже подходить не обязательно. И не получается как раз отменить эту функцию через скрипт диалога. Ну, или заменить на SetCommandable(труЪ); - тот же арбуз, только сбоку.
Кстати, я еще в первом посту на эту тему спрашивал: может, существует какой-то более другой способ удержать модельку? Без SetCommandable(FALSE); И тогда в нужный момент можно бы ее убрать простым дестроем, без танцев с бубнами.
За "GetModule()," спасибо огромное! Мне эта идея почему-то не приходила в голову. А надо бы! Нутром чую, раз моделька так себя ведет, - это модульные заморочки.
Пошел пробовать всякие варианты.
Спасибо еще раз!

denis0k, мой должок тебе, и без того немаленький, увеличился на порядок! Все работает! Мерзкая тварь исчезла.
Больше того, я понял, почему компилятор ругался на мои прежние попытки. Я писал как в теле (на OnSpawn) непися, т. е. SetIsDestroyable(TRUE,TRUE,TRUE); Оказалось, в диалоге надо всего 1 раз.
Я специально не писал, как для меня важен этот издевательский квест. А он не просто сюжетный, он ключевой. Понимаешь, мой Робинзон наконец-то добрал к людям, нашел деревушку с прекрасными туземками. Бежит к ним весь на крыльях, готовый спасать принцесс и побеждать драконов. А его все игнорят. И только старый ехидный шаман дает квест: иди как ты, геройский наш, закопай слона. Герой в ауте, но... куда деваться!
В общем, прошу прощения за оффтоп и многабукв.
denis0k, спасибо еще раз. Огромное!
denis0k
Если нужно вырубать очередь, то можно её потом и включить: SetCommandable(TRUE, "слон").
Chiffa
Ага, спасибо. Щас попробую слепить оба скрипта в один, в конец диалога. Так будет правильней, а то он, гад, сразу исчезает. Пусть исчезает во время затемнения.
Feron
Цитата(Chiffa @ Mar 2 2019, 22:07) *
Ага, спасибо. Щас попробую слепить оба скрипта в один, в конец диалога. Так будет правильней, а то он, гад, сразу исчезает. Пусть исчезает во время затемнения.


Получилось? Если нет, скинь модуль, я посмотрю и поправлю, а то разбираться на форуме дольше, чем сделать.
zmeylsdn
При копировании русского текста из тулсета вставляется в виде нечитабельных символов (Óðîâåíü(íè) Çàêëèíàòåëÿ). Русификатор для тулсета NWTSrus.rar не помогает. Как пофиксить?
Вот кстати сейчас когда редактировал один раз показало как нужно.
denis0k
Попробуй в nwtoolset.ini шрифт сменить на Courier New Cyr, раньше что-то такое работало. Ещё можно попробовать вставлять в какой-нить крутой редактор типа notepad++ и баловаться с кодировками.
Melisse
Самый простой способ это переключить раскладку там где вы копируете и там куда копируете. Это реально работает.
Если раскладка разная будут кракозябры. Вроде надо рус / рус, чтобы было нормально
zmeylsdn
-0-Это реально работает, спасибо)
-1-Есть ли способ, чтобы при достижении DAMAGE_BONUS_20 (вроде как предел для нвн без доп програм), добавлялся следующий тип урона например
CODE
#include "x2_inc_itemprop"
/*
int IPGetDamageBonusConstantFromNumber(int nNumber)
{
switch (nNumber)
{
case 1: return DAMAGE_BONUS_1;
// здесь строки для 2-19
case 20: return DAMAGE_BONUS_20;
//a)case 21: return DAMAGE_BONUS_20 дробящий +DAMAGE_BONUS_1 режущий вплоть до
//case 40: return DAMAGE_BONUS_20 дробящий +DAMAGE_BONUS_20 режущий

}
}
*/
void EmpowerMySummon(int iBonus, object oSummon)
{
eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN
umber(iBonus), DAMAGE_TYPE_BLUDGEONING);
//б)или здесь DAMAGE_TYPE_BLUDGEONING, DAMAGE_TYPE_SLASHING
}

в)Или может через два эффекта (EffectDamageIncrease()), но чтобы второй подключался только когда первый достигнет максимума
г)По идее можно и так:
eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN
umber(iBonus/2), DAMAGE_TYPE_BLUDGEONING);
eSummonBonuses = EffectDamageIncrease(IPGetDamageBonusConstantFromN
umber(iBonus/2), DAMAGE_TYPE_SLASHING);
Тогда при iBonus=40 будет 20+20.
-2-SSMLevelUpCreature не разобрался, сделал ап через эффекты EffectDamageIncrease(iBonus=GetHitDice) и т.п. Если у кого есть готовый пример поделитесь пож).
denis0k
Что мешает попробовать? smile.gif Можно и добавлять второй эффект, можно сразу два вешать. Я бы только советовал присмотреться к типам типа режущего/дробящего/колющего, там какой-то баг был, по крайней мере на оружии, урон типа добавлялся, но тип был другой, судя по прохождению резистов мобов.
shmel
Живые есть? sneak/death attack можно проводить не только оружием ближнего боя, но и при помощи лука.
справка: https://nwn.fandom.com/wiki/Sneak_attack
Дистанция 30 feet (хз). Ищу способ нарисовать данный радиус.
Готовых модов не нашел. Google сообщает что на врагов можно навесить плавающий идентификатор когда они будут в нужном радиусе, н.р.
https://nwnlexicon.com/index.php/FloatingTe...tringOnCreature . Но информации как добавить такую или подобную функциональность в оригинальную компанию я не нашел.
Melisse
специальные атаки типа сников/смертельный удар убийцы, а так же режимы кнок, парирование, экспертиза - вшиты в движек и без использования сторонних программ не возможно как-то влиять на них.
shmel
Я не хочу влиять на механику, я хочу 1) нарисовать кружок вокруг персонажа. Либо 2)пометить персонажей которые находятся в N радиусе от моего.
Melisse
Я не очень понимаю что вы с этим сделаете, но
Скриптом через цикл:

Neverwinter Script
int n = 1;
object oSphere = GetNearestCreature (CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1);
while (oSphere!= OBJECT_INVALID)
{
    if (GetDistanceBetween (OBJECT_SELF, oSphere ) <= 30.0f)
    {

// тут эффект какой-нить?

    }

  n++; 
  oSphere = GetNearestCreature (CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, n);
}


пробежаться по объектам и навесить эффект на все что нужно в его ореоле. Эффекты будут видны всем, если без использования специальных программ типа нвнх и прочего.
Вопрос только как вы скрипт запустите, на хербит персонажа?
Потому что все действия, как я уже писала выше, они хардкоденные smile.gif туда никаких дополнительных штук не добавить/изменить и прочее.
shmel
"хербит персонажа" это что, (herb) подтравой?

Я нашел что в игре есть скриптинг, aurora toolset итд, но инструкции начинаются с... создадим модуль.
Хочу получить функционал в уже существующей стандартной компании. (можно: как навык персонажа, предмета, любым другим способом)
Возможно я просмотрел/ не нашел / не понял. Если вы дадите мне ссылку где почитать как добавить скрипт или просто готовое решение (нр: вот тебе кружок), будет очень хорошо.
Aiwan
Цитата(shmel @ Mar 15 2019, 20:55) *
Хочу получить функционал в уже существующей стандартной компании. (можно: как навык персонажа, предмета, любым другим способом)
Возможно я просмотрел/ не нашел / не понял. Если вы дадите мне ссылку где почитать как добавить скрипт или просто готовое решение (нр: вот тебе кружок), будет очень хорошо.

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



Компания работает на своих скриптах, в их механике тоже надо разбираться тонну времени. Зачем эти заморочки?
Цитата(shmel @ Mar 15 2019, 19:43) *
я хочу

Для чего?
shmel
Все что мне нужно, описано (повторно) в этом сообщении. (игра NWN 1)

> sneak атака из лука работает только если цель находится на расстоянии 30 feet, иначе происходит обычный выстрел. Единственный способ понять какая будет атака это использовать глазомер.
Как я вижу решение:
1) рисовать контур заданным радиусом вокруг персонажа.
http://psand.ru/wp-content/uploads/2013/03...g-apelsinov.jpg
2) помечать вражеских персонажей цветом / плавающим текстом.
__________________________________________________
______
что я сделал для решения этой задачи: проверил nexus (там только шлак), узнал что возможен скриптинг, нашел этот форум.
у меня есть список доступных функций https://nwnlexicon.com/index.php?title=Category:Functions и даже туториал который начинается с описания как создать модуль, но (как мне кажется) вникать во всю специфику это слишком. потому что мне нужен только кружок.

Aiwan программировать учат даже идиотов в школе уже давно, это обще доступный скилл, на уровне математики и химми итд.
нр. Что бы нарисовать кружок в unity нужно к префабу объекта присединить скрипт (ниже) вписанный в Update(). и все! одно предложение!
https://answers.unity.com/questions/1527538...n-a-circle.html
https://docs.unity3d.com/ScriptReference/MonoBehaviour.html
Aiwan
Ну так в чем дело то? Кто мешает все реализовать? Лексикон знаете, программировать умеете. pardon.gif
А если точно, то вот что нужно: Нужен скрипт, который будет запускаться у Вас. Этот скрипт будет сканировать вокруг на определенном расстоянии, искать враждебных НПС, если они ближе или ровны 30 метров от РС, то можно хоть текст над головой сделать или любой спцэффект из набора. Вот и весь скрипт. Можно сделать амулет с бесконечным зарядом в быстрый слот. На его "он юзед" объект вставить нужный скрипт и вуаля. Все заработает. Кто бы написал. У меня НВН нет сто лет.

О, я только прочел, что Мелисса написала то же самое, только уже заготовку. Дерзайте.
denis0k
Юнити - игровой движок с морем функций. Аврора - просто казуальный редактор с печально ограниченным набором команд.

Хертбит ("сердцебиение") - это скрипты всех объектов игры, запускаемые раз в ~6 секунд. Это, с одной стороны, адово тормозно, с другой, - всё равно слишком редко, чтобы на него полагаться.


Я рекомендую так.

1. EffectAreaOfEffect + vfx_persistent.2da, скопировать тот же страх дракона. Радиусы там в метрах, 30 фт ~ 9 м, но биовари кажется об этом не знают smile.gif У них всё кратно 10 м, в т.ч. размеры тайлов/локаций, мб и радиус сника тоже 10 м.

2. На заход в модуль (можно редактировать кампанию вроде) бафать эти эффектом игрока навечно, т.о. вокруг него будет аура.
Heather
Всем салют!
Возможно ли активировать стандартный триггер со спавном монстров, не наступая на него? В катсцене, например.
(очень лень 10 товарищей из палитры по одному доставать biggrin.gif )
sabbat8310
Всем привет! А где можно почитать про условия выдачи прав на форуме?).. мне бы темку создать.
Давно зарегистрирован - но последние пару тысячелетий предпочитал читать, нежели что-то писать rolleyes.gif
Дубовит
Всем привет.
Цитата(Heather @ Mar 17 2019, 21:47) *
Всем салют!
Возможно ли активировать стандартный триггер со спавном монстров, не наступая на него? В катсцене, например...

В катсцене можно наложить на перса инвиз, джампнуть его на триггер, чтоб активировал, а через пару секунд обратно.
Код
object oPC = GetFirstPC();
object oWP = GetObjectByTag("WP");
location l = GetLocation(oPC);
effect eInvis = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eInvis, oPC, 1.1);
AssignCommand(oPC, ActionJumpToObject(oWP));
DelayCommand(1.0, AssignCommand(oPC, ActionJumpToLocation(l)));

А зрителей пока каким-нибудь пейзажем отвлечь. Или, если персу влом, в свойствах схватки >> продвинутый, убрать галочку с пункта "только включённые игроком"

и непися какого-нибудь в инвизе заслать, чтоб наступил и сразу дестроить его.
Heather
Дубовит, спасибо! Про галочку-то я и забыла!))
Aiwan
Цитата(sabbat8310 @ Mar 18 2019, 01:00) *
Всем привет! А где можно почитать про условия выдачи прав на форуме?).. мне бы темку создать.
Давно зарегистрирован - но последние пару тысячелетий предпочитал читать, нежели что-то писать

Надо 5 сообщений. Из них становится понятно, кто ты и зачем пришел.

Heather, любой спавн монстров, будь то палитра, будь то триггер ресурсоемок для сингла. Происходит лаг, причем заметный, особенно в катсценах. Делать надо так, создаешь локацию, в ней ставишь 20 комнат без окон и дверей, туда пихаешь нужных монстров по пачкам. Дальше скриптом их оттуда достаешь и джампом в нужном месте вставляешь.
Heather
Цитата(Aiwan @ Mar 18 2019, 18:57) *
Делать надо так, создаешь локацию, в ней ставишь 20 комнат без окон и дверей, туда пихаешь нужных монстров по пачкам. Дальше скриптом их оттуда достаешь и джампом в нужном месте вставляешь.

В итоге я так и сделала. biggrin.gif Поставить 6 мужиков в угол и прописать их в скрипте вышло быстрее, чем создавать таинственного невидимого непися и рисовать спавн)
Aiwan
Отож. Где бы ты еще шестерых мужиков в угол поставила? biggrin.gif
Дубовит
Скриптом в любом случае лучше, хоть если из палитры вызывать, хоть если из гаража. Можно персональные места появления разметить, можно обыграть по-разному появление, чтоб по одному выбегали или цепью вышли из леса, например. А в инкаунтере они тупо толпой нарисуются. Но если вдруг всё-таки понадобится инкаунтер скриптом запустить, если в начале убрать галочку "активность", то по нему до нужного момента хоть танцевать можно, а когда понадобится, нужно, чтоб перс уже в нём стоял и активировать
Код
SetEncounterActive(TRUE, GetObjectByTag("encount"));
Тогда он сразу срабатывает.
Aiwan
Энкаунтер это "не наш метод". Слишком много случайностей. Лучше всех прописать. pardon.gif
sabbat8310
Цитата(Aiwan @ Mar 18 2019, 18:57) *
Надо 5 сообщений. Из них становится понятно, кто ты и зачем пришел.

А-а, вот оно что. Понятно, спасибо за разъяснение)

Цитата(denis0k @ Mar 10 2019, 10:54) *
бы только советовал присмотреться к типам типа режущего/дробящего/колющего, там какой-то баг был, по крайней мере на оружии, урон типа добавлялся, но тип был другой, судя по прохождению резистов мобов.

Из багов которые мне известны точно знаю что если на пушку с основным уроном, например, режущий, повесить "дополнительный тип урона - колющий" (в тул сете, а не в 2da), то игра всё равно считала оружие "режущим".
То есть поглот только к режущему всё равно отбивал урон, когда как в аналогичной ситуации для оружия с изначальными двумя типами урона (алебарда, к примеру) требуются поглоты к режущему + колющему.

(хотя Гил скорее всего это знает, но мне же нужно что-нибудь написать по теме rolleyes.gif ph34r.gif )
Melisse
В последнем патче нвн ее кажется есть баг с эффектами на иммун к урону
Victorixxx
vava.gif Привет всем! Снова вопрос, на этот раз по конфигам nwn.ini и nwnplayer.ini.
Хотелось бы узнать где можно посмотреть список ВСЕХ доступных и скрытых команд в этих конфигурационных файлах?
Интересует конкретно функция инверсии камеры, чтобы при повороте влево, она поворачивалась в противоположную сторону.

Помню на форуме кто то публиковал подобный список, но сейчас даже через поиск не могу его найти rolleyes.gif Помогите советом
Melisse
Привет.
Попробуйте тут посмотреть
https://nwn.fandom.com/wiki/Nwnplayer.ini
Victorixxx
Цитата(Melisse @ Apr 14 2019, 13:23) *
Привет.
Попробуйте тут посмотреть
https://nwn.fandom.com/wiki/Nwnplayer.ini


Уже видел эту статью, но даже в моём конфигурационном файле nwnplayer.ini командных строк больше, чем представлено в этой статье biggrin.gif Ладно, благодарю за совет rolleyes.gif
Melisse
Есть еще тут http://www.neverwinternights.info/dedicatedserver.htm
но, наверное, там тоже самое
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.