Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
gennady
shadowdweller, не будет лишним запретить работу скрипту, если это сингл и ГГ не находится в одной локе с объектом. Поставьте объекту сюжет и снимите статик, так будет работать стабильно, если скрипт весит на ХБ.
Neverwinter Script Source
void main()
{
    object oLight = OBJECT_SELF;
    int nEffectID;
    // Если сингл
    if(GetArea(GetFirstPC()) != GetArea(oLight)) return; // если ПС нет в локе

  switch(d10())  // Generated number или switch(Random(10)+1)
    {
      case 1:  nEffectID = VFX_DUR_GLOW_LIGHT_GREEN;  break;
      case 2:  nEffectID = VFX_DUR_GLOW_LIGHT_RED;    break;
      case 3:  nEffectID = VFX_DUR_GLOW_LIGHT_WHITE;  break;
      case 4:  nEffectID = VFX_DUR_GLOW_LIGHT_BLUE;    break;
      case 5:  nEffectID = VFX_DUR_GLOW_LIGHT_ORANGE; break;
      case 6:  nEffectID = VFX_DUR_GLOW_LIGHT_PURPLE; break;
      case 7:  nEffectID = VFX_DUR_GLOW_LIGHT_YELLOW; break;
      case 8:  nEffectID = VFX_DUR_GLOW_LIGHT_BROWN;  break;
      case 9:  nEffectID = VFX_DUR_GLOW_LIGHT_GREEN;  break;
      case 10: nEffectID = VFX_DUR_GLOW_LIGHT_BLUE;    break;
    }
    effect eLight = EffectVisualEffect(nEffectID);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLight, oLight, 5.0);
}

P.S. Звиняйте за тормоза…
Vhall
Лекс, я не спорю, но какие можно?
ЗЫ
QUOTE
Static
If true, this placeable can not be modified dynamically in game. It cannot have its inventory accessed, cannot be deleted, add cannot have dynamic collision.
Lex
ну в этом скрипте эффекты рассматриваюца - их можно (что я и сказал). Про остальное надо отдельно разговаривать smile.gif
вариант в том, что нивидимый объект не имеет формы, и поэтому на него не кладется например эффект ГостВизаж.. по той причине, что мы результат эффекта просто не увидим. Есть мысль что со светом тоже самое, поэтому я и предложил сделать объект видимым.
shadowdweller
Gennady, спасибо, попробую.

Что касается световых эффектов, то, если я правильно поняла, скрипты с ними не работают собственно на источниках света. На фонаре и на жаровне скрипт Virusman'a не работает, как не работает и немного измененный, где эффекты типа VFX_DUR_GLOW_LIGHT_ХХХ заменены на VFX_DUR_LIGHT_ХХХ_20. Зато прекрасно работают на всех остальных объектах (типа фонтана или алтаря), если отменить им Static.
virusman
У меня в системе освещения всё прекрасно зажигалось - и невидимые объекты, и источники света.
Кстати, дайсы d10 кидаются от 1 до 10, а вот Random - действительно с 0.
gennady
Цитата
Кстати, дайсы d10 кидаются от 1 до 10, а вот Random - действительно с 0.

Спасибо Вирь, что поправил. Сто лет уже скрипты не писал… забыл, да видно и не знал. biggrin.gif
shadowdweller
А вот еще такая проблема - нужно, чтобы НПС красивенько лежали бы на полу, но при этом не были бы мертвыми. И чтобы не вскакивали, когда перс пытается с ними разговаривать.
Признаюсь честно - сдула из Shadows of Undrentide вот такой скрипт:
Neverwinter Script Source
#include "x0_i0_corpses"

void main()
{
    effect eKnock = EffectKnockdown();
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eKnock, OBJECT_SELF);
}

Ставится на OnSpawn. В итоге все неписи стоят на коленях, ложиться не желает ни один. Почему так происходит?
Leon PRO
Если мне не изменяет память - кноки бывают разные - на спину и на колени, от чего зависит - уже не помню. От силы кнока кажется, или рандомно... vava.gif
virusman
EffectKnockdown всегда ставит на колени.
nwnlexicon.com - там советую поискать константу по её части "FALL".
gennady
shadowdweller, вот вам два скрипта… Один с эффектом сна, значит с персом нельзя будет говорить. Другой с анимацией и возможностью разбудить перса и поговорить с ним. Сон будет ночью, ну можно и задать свое время сна, т.е. значение int T
Neverwinter Script Source
//:://////////////////////////////////////////////////
//:: СКРИПТ ДЛЯ СПЯЩИХ (МОЖНО ГОВОРИТЬ)
//:: File name: de_sleep
//:: Слот: OnHeartBeat
//:://////////////////////////////////////////////////
void main()
{
object oSelf = OBJECT_SELF;
if(GetArea(GetFirstPC()) != GetArea(oSelf)) return; // если ПС нет в локе

int T = GetTimeHour();
effect eSL = EffectVisualEffect(VFX_IMP_SLEEP);
if (GetIsInCombat(oSelf))  return;
if (IsInConversation(oSelf))  return;
if(T>=7 && T<21) // день
{
  ExecuteScript("nw_c2_default1", oSelf);
  SetLocalInt(oSelf,"SLEEP_ANIM",0);
  return;
}
  AssignCommand(oSelf, ClearAllActions(TRUE));
  if(GetLocalInt(oSelf,"SLEEP_ANIM")==0)
  {
  if(d2()==1) SetLocalInt(oSelf,"SLEEP_ANIM",1);
  else        SetLocalInt(oSelf,"SLEEP_ANIM",2);
  }
  if(GetLocalInt(oSelf,"SLEEP_ANIM")==1)
ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 10.0);
  else
ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK, 1.0, 10.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eSL, oSelf);
}
/* Для корректной работы, у ходячих удалить скрипты
    nw_c2_default9 и nw_c2_default2 */

Neverwinter Script Source
//:://////////////////////////////////////////////////
//:: СКРИПТ ДЛЯ СПЯЩИХ (НЕЛЬЗЯ ГОВОРИТЬ)
//:: File name: ef_sleep
//:: Слот: OnHeartBeat
//:://////////////////////////////////////////////////
void main()
{
  object oSelf = OBJECT_SELF;
  effect eSleep = EffectSleep();
  effect eSL = EffectVisualEffect(VFX_IMP_SLEEP);

  if(GetArea(GetFirstPC()) != GetArea(oSelf)) return; // если ПС нет в локе
if(GetIsDay()) // день
{ExecuteScript("nw_c2_default1", oSelf); return;}
  AssignCommand(oSelf, ClearAllActions(TRUE));
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSleep, oSelf, 10.0);
  ApplyEffectToObject(DURATION_TYPE_INSTANT, eSL, oSelf);
}
/* Для корректной работы, у ходячих удалить скрипты
    nw_c2_default9 и nw_c2_default2 */
shadowdweller
Gennady, спасибо. thank_you.gif

А еще хотелось бы спросить вот что - нужен скрипт, который срабатывал бы на триггере если РС идет по нему один, без хенча. Т.е., если хенч к персу присоединен, не происходит ничего, а происходит только в том случае, если перс один. Все действия написаны, а проверка не получается.
В лексиконе не могу найти функцию, которая подходит. scratch_one-s_head.gif Подскажите, плз.
Lex
навскидку так
Neverwinter Script Source
if (!GetIsObjectValid(GetHenchman(oPC))) // если игрок один
shadowdweller
Lex, спасибо. Попробую.

Продолжаю разбираться со спящими. Дело в том, что мне нужно, чтобы НПС не то, чтобы спали в определенное время суток, а лежали бы раненые (госпиталь у меня там! rolleyes.gif ).
Немного модифицировав скрипт Gennady, получила вот что:
Neverwinter Script Source
void main()
{
    int iDoOnce = GetLocalInt(OBJECT_SELF, "iDoOnce");

    if (iDoOnce == FALSE)
    {
  object oSelf = OBJECT_SELF;
  effect eSleep = EffectSleep();
  effect eSL = EffectVisualEffect(VFX_IMP_SLEEP);

        AssignCommand(oSelf, ClearAllActions(TRUE));
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSleep, oSelf, 10.0);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eSL, oSelf);
       
        SetLocalInt(oSelf, "iDoOnce", TRUE);
    }
}

На хартбите НПС красиво падает как подкошенный, на OnSpawn работает идеально. При попытке добавить еще и ранение + не разрешить некоторым злобным РС добить беднягу:
Neverwinter Script Source
void main()
{
    int iDoOnce = GetLocalInt(OBJECT_SELF, "iDoOnce");

    if (iDoOnce == FALSE)
    {
  object oSelf = OBJECT_SELF;
  effect eSleep = EffectSleep();
  effect eSL = EffectVisualEffect(VFX_IMP_SLEEP);

        AssignCommand(oSelf, ClearAllActions(TRUE));
        ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSleep, oSelf, 10.0);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eSL, oSelf);
        ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(10), oSelf);
        SetPlotFlag(oSelf, TRUE);

        SetLocalInt(oSelf, "iDoOnce", TRUE);
    }
}

НПС стоит как вкопанный. То же происходит, если убираю переменную. Почему? scratch_one-s_head.gif
sKaa
SetPlotFlag
он не дает ето зделать, используй лучше SetImmortal
shadowdweller
Спасибо. Что самое интересное - функции эти нахально и тупо тырю из SoU - там работают прекрасно. crazy.gif

И еще возник вопрос - скрипт, который выполняется только при отсутствии хенча у перса. Получилось что-то вроде:
Neverwinter Script Source
#include "nw_i0_generic"
void main()
{
if (!GetIsObjectValid(GetHenchman(oPC)))
{
object oZOM1 = GetNearestObjectByTag("NPC_MON_FSKEL01");
object oZOM2 = GetNearestObjectByTag("NPC_MON_FSKEL02");
object oZOM3 = GetNearestObjectByTag("NPC_MON_FSKEL03");
object oDr1 = GetObjectByTag("DOOR_ZOM_01");
object oDr2 = GetObjectByTag("DOOR_ZOM_02");
object oDr3 = GetObjectByTag("DOOR_ZOM_03");
object oPoint1 = GetObjectByTag("WP_ZOM1");
object oPoint2 = GetObjectByTag("WP_ZOM2");
object oPoint3 = GetObjectByTag("WP_ZOM3");
object oPC = GetFirstPC();
ChangeToStandardFaction(oZOM1,STANDARD_FACTION_HOS
ILE);
ChangeToStandardFaction(oZOM2,STANDARD_FACTION_HOS
ILE);
ChangeToStandardFaction(oZOM3,STANDARD_FACTION_HOS
ILE);
AssignCommand(oDr1, DestroyObject(oDr1));
AssignCommand(oDr2, DestroyObject(oDr2));
AssignCommand(oDr3, DestroyObject(oDr3));
AssignCommand(oZOM1,ClearAllActions());
AssignCommand(oZOM2,ClearAllActions());
AssignCommand(oZOM3,ClearAllActions());
AssignCommand(oZOM1, ActionAttack(oPC));
AssignCommand(oZOM2, ActionAttack(oPC));
AssignCommand(oZOM3, ActionAttack(oPC));
}
}

Срабатывает каждый раз - и с хенчем, и без... scratch_one-s_head.gif
sKaa
Во превых где стоит скрипт? на каком евенте и евенте чего?
Во вторых кто такой оПЦ?
у тя нет ошибки в скриптах?
Neverwinter Script Source
object oPC = GetEnteringObject(); // Ето если скрипт на евенте ентера тригера..
if (!GetIsObjectValid(GetHenchman(oPC)))
{
object oZOM1 = GetNearestObjectByTag("NPC_MON_FSKEL01");
object oZOM2 = GetNearestObjectByTag("NPC_MON_FSKEL02");
object oZOM3 = GetNearestObjectByTag("NPC_MON_FSKEL03");
shadowdweller
2 sKaa
Увы, SetImmortal не помогло - НПС как стоял, так и стоит. Тяжелораненый, а на ногах держится smile.gif
Причем, упрямо продолжает стоять как со строкой
Neverwinter Script Source
SetPlotFlag(oSelf, TRUE); // или
SetImmortal(oSelf, TRUE);

так и без нее

Скрипт стоит на OnEnter триггера. На самом деле, там так и есть:
Neverwinter Script Source
#include "nw_i0_generic"
void main()
object oPC = GetEnteringObject(); // до этого-то я додумалась
{
if (!GetIsObjectValid(GetHenchman(oPC)))
{
object oZOM1 = GetNearestObjectByTag("NPC_MON_FSKEL01");
object oZOM2 = GetNearestObjectByTag("NPC_MON_FSKEL02");
object oZOM3 = GetNearestObjectByTag("NPC_MON_FSKEL03");
object oDr1 = GetObjectByTag("DOOR_ZOM_01");
object oDr2 = GetObjectByTag("DOOR_ZOM_02");
object oDr3 = GetObjectByTag("DOOR_ZOM_03");
object oPoint1 = GetObjectByTag("WP_ZOM1");
object oPoint2 = GetObjectByTag("WP_ZOM2");
object oPoint3 = GetObjectByTag("WP_ZOM3");
object oPC = GetFirstPC();
ChangeToStandardFaction(oZOM1,STANDARD_FACTION_HOS
ILE);
ChangeToStandardFaction(oZOM2,STANDARD_FACTION_HOS
ILE);
ChangeToStandardFaction(oZOM3,STANDARD_FACTION_HOS
ILE);
AssignCommand(oDr1, DestroyObject(oDr1));
AssignCommand(oDr2, DestroyObject(oDr2));
AssignCommand(oDr3, DestroyObject(oDr3));
AssignCommand(oZOM1,ClearAllActions());
AssignCommand(oZOM2,ClearAllActions());
AssignCommand(oZOM3,ClearAllActions());
AssignCommand(oZOM1, ActionAttack(oPC));
AssignCommand(oZOM2, ActionAttack(oPC));
AssignCommand(oZOM3, ActionAttack(oPC));
}
}

Все равно в обоих случаях срабатывает - и когда есть хенч, и когда нету... А нужно, чтобы выполнялся только при отсутствии хенча. sad.gif
sKaa
Цитата(shadowdweller @ Sep 6 2007, 23:49) *
2 sKaa
Увы, SetImmortal не помогло - НПС как стоял, так и стоит. Тяжелораненый, а на ногах держится smile.gif
Причем, упрямо продолжает стоять как со строкой
Neverwinter Script Source
SetPlotFlag(oSelf, TRUE); // или
SetImmortal(oSelf, TRUE);

так и без нее

Надо ставить Иммортал без Плот флага...
Neverwinter Script Source
SetPlotFlag(oSelf, FALSE); // или
SetImmortal(oSelf, TRUE);


Цитата(shadowdweller @ Sep 6 2007, 23:49) *
Скрипт стоит на OnEnter триггера. На самом деле, там так и есть:
Neverwinter Script Source
#include "nw_i0_generic"
void main()
{

object oPC = GetEnteringObject(); // до этого-то я додумалась
if(GetIsObjectValid(GetHenchman(oPC)))
return; // Попробуй возврашение функции если хечмент есть...
object oZOM1 = GetNearestObjectByTag("NPC_MON_FSKEL01");
object oZOM2 = GetNearestObjectByTag("NPC_MON_FSKEL02");
object oZOM3 = GetNearestObjectByTag("NPC_MON_FSKEL03");
object oDr1 = GetObjectByTag("DOOR_ZOM_01");
object oDr2 = GetObjectByTag("DOOR_ZOM_02");
object oDr3 = GetObjectByTag("DOOR_ZOM_03");
object oPoint1 = GetObjectByTag("WP_ZOM1");
object oPoint2 = GetObjectByTag("WP_ZOM2");
object oPoint3 = GetObjectByTag("WP_ZOM3");
object oPC = GetFirstPC();
ChangeToStandardFaction(oZOM1,STANDARD_FACTION_HOS
LE);
ChangeToStandardFaction(oZOM2,STANDARD_FACTION_HOS
LE);
ChangeToStandardFaction(oZOM3,STANDARD_FACTION_HOS
LE);
AssignCommand(oDr1, DestroyObject(oDr1));
AssignCommand(oDr2, DestroyObject(oDr2));
AssignCommand(oDr3, DestroyObject(oDr3));
AssignCommand(oZOM1,ClearAllActions());
AssignCommand(oZOM2,ClearAllActions());
AssignCommand(oZOM3,ClearAllActions());
AssignCommand(oZOM1, ActionAttack(oPC));
AssignCommand(oZOM2, ActionAttack(oPC));
AssignCommand(oZOM3, ActionAttack(oPC));
}

Все равно в обоих случаях срабатывает - и когда есть хенч, и когда нету... А нужно, чтобы выполнялся только при отсутствии хенча. sad.gif


А еще если по тргеру мона кликнуть маусом создай такой-же скрипт только вместо
GetEnteringOjbect();
GetClickingObject(); - помойму так пишеться
и поставь етот скрипт на евент клика тригера
frozenCat
Добрый день. У меня есть несколько вопросов по поводу игрового движка и создания модов. Есть концепция RP игры и есть необходимость воплотит ее в более менее играбельный вид. Есть желание сделать это в виде мода к нвн. Но практически вся игровая механика отличается от ДнД. Возможно ли полностью изменить систему статов/скилов? Возможно ли введение новых параметров персонажа? Насколько возможно изменить GUI игры? Т.е. хочется узнать насколько гибкий этот движок.

PS Как альтернатива есть вариант создания игры как мод к Unreal 2004, там возможности не ограничены, но информации по этому делу в разы меньше, а русскоязычной практически нет.

Neo: информации по UnrealEd море, да - на русском не много, а так... google и узнаешь все, что хочешь wink3.gif
sKaa
Читай форум, в нвн движок достаточно гибкий..
На форуме все возможности описаны
gennady
shadowdweller, я привел два скрипта для примера, т.к. там есть два варианта уложить перса, анимацией и эффектом. (к тому же кто-то недавно спрашивал…) Если наложен эффект, то нужно учесть, что игроки попытаются его снять… Это нужно писать еще один скрипт на OnSpellCastAt. (если эффект не поддерживает SupernaturalEffect) Чтобы персы не говорили при анимации, то достаточно заблокировать их стек, или навесить локалку и изменить скрипт на OnConversation написав:
Neverwinter Script Source
void main()
{
  object oSelf = OBJECT_SELF;

if (GetLocalInt(oSelf, "LOCAL") == 1) return; // Проверить
ExecuteScript("nw_c2_default4", oSelf);
}

Lex ругается за готовые скрипты, т.ч. скрипт писать не буду biggrin.gif… Кстати, навесить на перса сюжет после урона, можно прописав через DelayCommand. Хотя в вашем случае просто достаточно сразу проставить персу бессмертие. Вот для примера скрипт на ранение из моего мода.
Neverwinter Script Source
//::////////////////////////////////////////
//:: СКРИПТ:  СМЕРТЬ - РАНЕНИЕ
//:: File name:
//:: Слот: OnHeartBeat
//::////////////////////////////////////////
void main()
{
  object oSelf = OBJECT_SELF;
  if(GetArea(GetFirstPC()) != GetArea(oSelf)) return; // если ПС нет в локе
  if(GetLocalInt(oSelf, "P_smert") == 1) return;
  if (!IsInConversation(oSelf))
  {
   if(GetCurrentHitPoints(oSelf) < 30)
   {
    ClearAllActions();  // Почистим все Action у НПС
    ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 7.0);
   }
else ExecuteScript("nw_c2_default1", oSelf);
  }
if(GetLocalInt(oSelf, "smert") != 1)
{
  if(GetAbilityScore(oSelf, ABILITY_INTELLIGENCE) >= 17)
  {
   effect eDamage = EffectDamage(GetCurrentHitPoints(oSelf)-3);
   ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,
Self);
   SetLocalInt(oSelf, "smert", 1);
  }
  else
  {
   effect eDeath = EffectDeath();
   ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oSelf);
   SetLocalInt(oSelf, "P_smert", 1);
  }
}
}
/*   Если интеллект выше 17, то ранение и падение.
     Если вылечить, то если ХР выше 30, падать не будет.
     Если интеллект ниже 17, то смерть.  */

С хенчем и триггером все просто. Кстати, не увидел в скрипте функций из инклюды…
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return// Если не герой
object oSP = GetHenchman(oPC);
if (GetIsObjectValid(oSP)) return; // Если есть хенчь

object oZOM1 = GetNearestObjectByTag("NPC_MON_FSKEL01");
object oZOM2 = GetNearestObjectByTag("NPC_MON_FSKEL02");
object oZOM3 = GetNearestObjectByTag("NPC_MON_FSKEL03");
object oDr1 = GetObjectByTag("DOOR_ZOM_01");
object oDr2 = GetObjectByTag("DOOR_ZOM_02");
object oDr3 = GetObjectByTag("DOOR_ZOM_03");
object oPoint1 = GetObjectByTag("WP_ZOM1");
object oPoint2 = GetObjectByTag("WP_ZOM2");
object oPoint3 = GetObjectByTag("WP_ZOM3");

ChangeToStandardFaction
(oZOM1,STANDARD_FACTION_HOSTILE);
ChangeToStandardFaction
(oZOM2,STANDARD_FACTION_HOSTILE);
ChangeToStandardFaction
(oZOM3,STANDARD_FACTION_HOSTILE);
AssignCommand(oZOM1,ClearAllActions());
AssignCommand(oZOM2,ClearAllActions());
AssignCommand(oZOM3,ClearAllActions());
AssignCommand(oZOM1, ActionAttack(oPC));
AssignCommand(oZOM2, ActionAttack(oPC));
AssignCommand(oZOM3, ActionAttack(oPC));
AssignCommand(oDr1, DestroyObject(oDr1));
AssignCommand(oDr2, DestroyObject(oDr2));
AssignCommand(oDr3, DestroyObject(oDr3));
}

P.S. Нео, ну че за фигня?! Задолбался править скрипты!!! При переносе строки режет последний символ…
Teranozavr_REX
Прошу уточнить OnModuleLoad
это событие которое будет отробатыватьпри каждом старте сервера ???
нету ли на нем какихто подводных камней

что делает стандартный скрипт этого слота что будет если я его удалю???
sKaa
Цитата(Teranozavr_REX @ Sep 7 2007, 12:13) *
Прошу уточнить OnModuleLoad
это событие которое будет отробатыватьпри каждом старте сервера ???

да
Цитата(Teranozavr_REX @ Sep 7 2007, 12:13) *
нету ли на нем какихто подводных камней

Есть smile.gif
Цитата(Teranozavr_REX @ Sep 7 2007, 12:13) *
что делает стандартный скрипт этого слота что будет если я его удалю???

Включает разные фишки, не чего собо не изменица, я его вообще отключаю, т.к все что там описано настраиваю своими методами smile.gif
Teranozavr_REX
QUOTE
Цитата(Teranozavr_REX @ Sep 7 2007, 12:13)
нету ли на нем какихто подводных камней

Есть

А можно узнатькакие
уж очень надоело по 3 часа выяснятьвсякие недокументированые фишки )
sKaa
В скрипте все описано, правда на английском но я тож не преводчик..
так что топор те +2 в руки smile.gif и вперед на сайты переводчики и разбирай каждую функцию которая там
Teranozavr_REX
Сегодня мне сказали чтоестьтакая програмка называеться вроде бы как NWNХ что с её помощью можно проконтролироватькакой скрипт сколько сьедает процесорноговремени занемает в памяти и тп...

если ли такая програмка если естьде взять как пользоваться ???
sKaa
Скачать отсюда
отсюда
там же плагины к ней.. а пользоваться ей надо хитро.. помойму там чтоб узнать инфу о скриптах надо плагин один.. profiler
кароч там надо собрать етот плагин с модулями в одной папке и потом все ето кинуть к нвну.. потом в файле нвнх.ини узакать ТОЧНОЕ имя модуля с котором будем вести работы всякие и запустить нвнх, если все верно то автоматом запуститца сервак с загруженным модулем и если краш сервака то автоподъем..
ну а дальше читай папку logs
shadowdweller
Цитата(gennady @ Sep 7 2007, 07:38) *
С хенчем и триггером все просто.

Gennady, да не работает оно в NWN2 все равно! Есть для триггерных скриптов там какая-то особая специфика?
И получается, что инклюда #include "nw_i0_generic" там вообще не нужна?

Кстати, со скриптом на сон/падение/ранение разобралась - надо было поменять местами
Neverwinter Script Source
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSleep, oSelf, 10.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eSL, oSelf);

и
Neverwinter Script Source
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(10), oSelf);

Вообще, sKaa, Gennady - спасибо за советы. Только, сдается мне, вы лучшего мнения о моих скриптерских способностях, чем они есть на самом деле. biggrin.gif
sKaa
а я думал скрипт ы под нвн1, smile.gif
в нвн2 помойму форум другой.. я нвн2 не наю как там чо
shadowdweller
Извиняюсь за внесенную путаницу. Скрипт на OnSpawn был нужен для НВН1. Скрипт на триггер - на НВН2. Я была абсолютно уверена, что скрипты и в первом, и во втором НВН работают одинаково, поэтому и постила в ту тему, которая привычнее. sad.gif Теперь буду постить отдельно для первого, отдельно для второго.
Продолжаю мучить глупыми вопросами. Существует триггер, при входе на который РС полностью вылечивается, если он ранен. На OnEnter этого триггера стоит
Neverwinter Script Source
void main()
{
object oUser;
effect eHeal;
effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_S);
int nCurrentHitPoints, nMaxHitPoints, nVisualEffectId;
oUser = GetEnteringObject();
nMaxHitPoints = GetMaxHitPoints(oUser);
nCurrentHitPoints = GetCurrentHitPoints(oUser);
if ( nCurrentHitPoints < nMaxHitPoints )
{
eHeal = EffectHeal(nMaxHitPoints - nCurrentHitPoints);
ApplyEffectToObject( DURATION_TYPE_INSTANT, eHeal, oUser );
ApplyEffectToObject( DURATION_TYPE_INSTANT, eHealVis, oUser );
}
}

Не подскажет ли мне кто-нибудь, что нужно добавить, чтобы триггер лечил еще и хенча?
Для хенча тоже нужно прописывать GetMaxHitPoints и GetCurrentHitPoints?
azathoth
этот триггер и так лечит хенча, да и вообще всех кто в него вступит.
Neverwinter Script Source
...
    oUser = GetEnteringObject();
    if (!GetIsPC(oUser) && !GetIsPC(GetMaster(oUser))) return; // <-- лечит только Игроков и Ко
...

в принципе лечение не может дать больше здоровья, чем максимум
shadowdweller
Прошу прощения, торможу. GetEnteringObject - это же действительно любой, кто входит mosking.gif
А если соблюдать все эти условия - игрок и компания и раненый, все вводить одной строкой,
Neverwinter Script Source
...
if (GetIsPC(oUser) && GetIsPC(GetMaster(oUser)) && (nCurrentHitPoints < nMaxHitPoints))
{
eHeal = EffectHeal(nMaxHitPoints - nCurrentHitPoints);
...

или это так будет?
Neverwinter Script Source
...
if (!GetIsPC(oUser) && !GetIsPC(GetMaster(oUser))) return;
{
if ( nCurrentHitPoints < nMaxHitPoints )
{
eHeal = EffectHeal(nMaxHitPoints - nCurrentHitPoints);
...
Белатрис
Neverwinter Script Source
if (!GetIsPC(oUser) && !GetIsPC(GetMaster(oUser))) return;

Если не ошибаюсь, то так:
Neverwinter Script Source
if ( (!GetIsPC(oUser)) && (!GetIsPC(GetMaster(oUser))) ) return;

sKaa
Одинаково, просто скокбок можно нарисовать сколько хочеш
Белатрис
Ну, не знаю, на Си это грубая синтаксическая ошибка. А, эт ты не мне =)
shadowdweller
Дело, пожалуй, не столько в скобках - скрипты компилируются, и ни в одном варианте - ни с дополнительной парой скобок, ни без - ошибку не выдает.
Дело в том, как вообще лучше написать - первый вариант, где все условия сведены в одну строку, или второй вариант - с двумя условиями - сначала сделать проверку на РС и компанию, а потом уже на урон. Как будет грамотнее?
sKaa
Обинаково, как тебе удобней так и пиши, а остально мелочи.. главное чтоб потом самому легко разобрать можно было
azathoth
Пиши как думаешь, заодно избавишься от ошибок при отрицании

ЕСЛИ это игрок ИЛИ хенч, И здоровья маловато, ТО лечить:
Neverwinter Script Source
...
if ((GetIsPC(oUser) || GetIsPC(GetMaster(oUser))) && (nCurrentHitPoints < nMaxHitPoints)) {
{
    ...
}
..

как раз тут скобки нужны, т.к без скобок сначала проверяется И, а потом ИЛИ.

А можно вообще разлениться в плане фигуристых скобок и записать всё по строчкам:
Neverwinter Script Source
void main()
{
    object oUser = GetEnteringObject();

    if (!GetIsPC(oUser) && !GetIsPC(GetMaster(oUser))) return;
    if (GetCurrentHitPoints(oUser) >= GetMaxHitPoints(oUser)) return;

    effect eHeal = EffectHeal(9999);
    effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_S);

    ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oUser);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eHealVis, oUser);
}


P.S. if (...) ОднаКоманда; = if (...) { ОднаКоманда; }
P.P.S. Приоритет операторов от высшего к низшему: ! && ||
Taiko
Привет всем. prankster2.gif

Вопрос: Хотел добавить воину (fighter) фемильяра. Сделал 40 штук фема (на каждый лвл), прописал всё в 2да'шки (дал фит фамильяра воину на первом уровне, как подарочный фит (-1)). Теперь есть проблема. У волшебника/виза новый фам есть, а у воина, как не было так и нет, хотя фит фама в списке фитов отображается.

P.S. Хотел зарегистироваться под подлинным ником Veliant, но т.к. он занят, решил взять альтернативный.
Vhall
QUOTE(Taiko @ Sep 10 2007, 12:58) *
дал фит фамильяра воину на первом уровне, как подарочный фит (-1)

List: "3" - получение автоматически.
GainedLevel (LevelGained?): "1" - получаем фит на первом левеле, а не "-1" - просто доступен для выбора. Насколько я знаю, удовлетворить условиям получения фита фамильяра нельзя никому никогда.

Не знаю, что там у тебя точно, но это все что я могу сказать на основе данной тобой информации.
Taiko
Цитата(Vhall @ Sep 10 2007, 14:09) *
List: "3" - получение автоматически.
GainedLevel (LevelGained?): "1" - получаем фит на первом левеле, а не "-1" - просто доступен для выбора. Насколько я знаю, удовлетворить условиям получения фита фамильяра нельзя никому никогда.

Не знаю, что там у тебя точно, но это все что я могу сказать на основе данной тобой информации.
Точно, тройка. Запамятовал. smile.gif
Мм, а если создать новый класс с нуля? (не базовый, а по принципу "престижей") Тож никак не впихнуть? Или, скажем, создать абилку, которая запускала бы спелл и последний в свою очередь проверял, какой лвл у персонажа и, тем самым, вызывал бы соответсвующего фэма. Глупо звучит?
Lex
Цитата(Taiko @ Sep 10 2007, 15:22) *
Или, скажем, создать абилку, которая запускала бы спелл и последний в свою очередь проверял, какой лвл у персонажа и, тем самым, вызывал бы соответсвующего фэма.

Это реально, сделать активный фит и привязать его к заклу можно без проблем.
Taiko
Цитата(Lex @ Sep 10 2007, 18:19) *
Это реально, сделать активный фит и привязать его к заклу можно без проблем.
Спасиб, бум пробовать. 8)
Teranozavr_REX
Товарищи помогите пожалусто
надо что бы паучек при спавне "с потолка падал"
так как весь АИ уже переписал надо напрямую команду отыграть анимацию, а не какието управляющие флаги ) которые уже нечем обработать)

как сделатьанимацию выпить банку или прочитатьсвиток знаю...
если паучек падает точно также то подскажите константу а еще лудше ссылочку где по "русски" написано описание констант

если же єто делаеться как топодругому, то кто может потрудитесь расказать как
dumbo
Цитата(Teranozavr_REX @ Sep 26 2007, 17:19) *
надо что бы паучек при спавне "с потолка падал"
в CreateObject четвертый параметр(bUseAppearAnimation) в TRUE.
Teranozavr_REX
пасибки, не сказатьчто поможет ) но хотьбуду знатькак )
Mandrake
Подскажите пожалуйста, как по английский называется заклинание "метать камни", которое есть у гигантов.
Белатрис
STONE - камни, а метать... не наю... А ты не пробовал установить английскую версию? declare.gif
Shadenuat
Mandrake
"Hurl Rocks", вроде бы.
Shadenuat
В тайлсете Rural Winter есть вагончики на колесах, включая зелененький, с проемом для двери, но двери на него не ставятся. А в тайлесете Desert есть такой же вагончик, но двери на него ставятся нормально. Почему?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.