Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
Aiwan
Цитата(shadowdweller @ Jun 26 2008, 00:43) *
А еще такой вопрос - обязательно такой сложный скрипт писать на проверку надетого предмета у игрока или можно воспользоваться стандартным условием? Я просто скрипт у Айва посмотрела и жутко впечатлилась. Ключевое слово - жутко.

Шад, я жеж делал УНИВЕРСАЛЬНЫЙ скрипт один на все. Плюс, я хотел что бы тебе было ПРОСТО его использовать. Если бы я знал, что ты буш его ковырять, то сделал бы вместо этого:
Neverwinter Script
// ------------- Проверка на уникальный предмет одетый -----------------
  // находим одетое на игроке и определяем это
  object oItemNesk = GetItemInSlot(INVENTORY_SLOT_NECK, oPC);
  object oItemRingR = GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC);
  object oItemRingL = GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC);

  // Смотрим свойства триггера и ищем, помечен ли таг нужной вещи
  string sNesk = GetLocalString(oSelf, "INVENTORY_SLOT_NECK"); // Амулет
  string sItemRingR = GetLocalString(oSelf, "INVENTORY_SLOT_RIGHTRING"); // Кольцо
  string sItemRingL = GetLocalString(oSelf, "INVENTORY_SLOT_LEFTRING"); // Кольцо

  // Если у нас помечено, что таг амулета не пустой
  if (sNesk != "")
  {   // таг надетого амулета не сходятся или он вообще не надет то возврат скрипта
     if (GetTag(oItemNesk)!= sNesk || oItemNesk == OBJECT_INVALID)
     {
      SendMessageToPC(oPC, "<cу  >У ВАС ОТСУТСВУЕТ НУЖНЫЙ ПРЕДМЕТ</c>");
      if (GetIsObjectValid(oHench)) // Хеньчман нас предупреждает, что тут что-то есть
      {
        if(!GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
       {
         SetLocalInt(oSelf, "HENCHMAN_SPEAK", TRUE);
         DelayCommand(0.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_SEARCH)));
         DelayCommand(0.21, AssignCommand(oHench, SpeakString(sHench1)));
       }
     }
      return;
     }
  }
  if (sItemRingR != "")
  {
     if (GetTag(oItemRingR)!= sItemRingR || oItemRingR == OBJECT_INVALID)
     {
      SendMessageToPC(oPC, "<cу  >У ВАС ОТСУТСВУЕТ НУЖНЫЙ ПРЕДМЕТ</c>");
      if (GetIsObjectValid(oHench)) // Хеньчман нас предупреждает, что тут что-то есть
      {
        if(!GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
       {
         SetLocalInt(oSelf, "HENCHMAN_SPEAK", TRUE);
         DelayCommand(0.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_SEARCH)));
         DelayCommand(0.21, AssignCommand(oHench, SpeakString(sHench1)));
       }
     }
      return;
     }
  }
  if (sItemRingL != "")
  {
     if (GetTag(oItemRingL)!= sItemRingL || oItemRingL == OBJECT_INVALID)
     {
      SendMessageToPC(oPC, "<cу  >У ВАС ОТСУТСВУЕТ НУЖНЫЙ ПРЕДМЕТ</c>");
      if (GetIsObjectValid(oHench)) // Хеньчман нас предупреждает, что тут что-то есть
      {
        if(!GetLocalInt(oSelf, "HENCHMAN_SPEAK"))
       {
         SetLocalInt(oSelf, "HENCHMAN_SPEAK", TRUE);
         DelayCommand(0.2, AssignCommand(oHench, PlayVoiceChat(VOICE_CHAT_SEARCH)));
         DelayCommand(0.21, AssignCommand(oHench, SpeakString(sHench1)));
       }
     }
      return;
     }
  }
// ------------- Проверка на уникальный предмет одетый -----------------


ВОТ ЭТО:
Neverwinter Script
if GetTag(GetItemInSlot(oPC, INVENTORY_SLOT_NECK)) != "Branzuletko")
return;
Ilerien
Цитата
Ясно! А 1.69 вроде еще только на стадии проверки? Или уже все, можно качать и пользоваться?
Ну пока он бетой зовётся, хз, когда сделают финалку smile.gif Был слух, что десятая бета и будет финалкой, на биоварях пока выложена 9я.
shadowdweller
Ilerien, огромное спасибо! thank_you.gif
Айв, и тебе тоже! Приятно, честное слово! Конечно, я буду ковырять! Я все скрипты ковыряю smile.gif Мне же хочется знать, как это делается!
Мне просто нужна такая секретная дверь, появление которой зависело бы только от наличия амулета на слоте, и ни от чего другого. Вот и пытаюсь разобраться.

Ilerien, только вот какая вещь. Вот в этой строке выдает ошибку "VARIABLE DEFINED WITHOUT TYPE"
Neverwinter Script
if (LineOfSightObject(oSelf, oNearestCreature) && (!bNeedDetectMode || GetActionMode(oNearestCreature, ACTION_MODE_DETECT)) && GetTag(GetItemInSlot(oPC, INVENTORY_SLOT_NECK)) == "Branzuletko")

И еще. Ты говоришь - убрать хартбит с видимой двери. Если я правильно поняла, видимая - это та, которая присутствует в палитре и создается, если игрок приближается к невидимому объекту, так? То есть, видимая в игре, а не в тулсе? slow.gif
Ilerien
Neverwinter Script
if (LineOfSightObject(oSelf, oNearestCreature) && (!bNeedDetectMode || GetActionMode(oNearestCreature, ACTION_MODE_DETECT)) && GetTag(GetItemInSlot(oNearestCreature, INVENTORY_SLOT_NECK)) == "Branzuletko")
Цитата
И еще. Ты говоришь - убрать хартбит с видимой двери. Если я правильно поняла, видимая - это та, которая присутствует в палитре и создается, если игрок приближается к невидимому объекту, так? То есть, видимая в игре, а не в тулсе?
Она самая smile.gif Обжект в палитре зовётся "Потайная дверь".
virusman
Цитата(Ilerien @ Jun 26 2008, 23:29) *
Ну пока он бетой зовётся, хз, когда сделают финалку smile.gif Был слух, что десятая бета и будет финалкой, на биоварях пока выложена 9я.
Десятая бета как раз выложена. Финалкой будет 11-я, которая отличается только одним фиксом.
Lirulin
Цитата(virusman @ Jun 27 2008, 10:25) *
Десятая бета как раз выложена. Финалкой будет 11-я, которая отличается только одним фиксом.

Спасибо! Значит, заморачиваться с попытками надеть эти плащи пока просто не стоит...

И еще, безотносительно ко всему предыдущему вопрос: как сделать так, чтобы при юзании однго из нескольких юзабл прейсеблов, остальные делались бы неюзабл? Чтоб получалось, чо выбрал один раз - и все, больше не повыбираешь? (примерно как было в HotU в комнате зеркал, тока что там из инвентаря в зеркале выбирать, а тут плейсеблы)
shadowdweller
Цитата(Ilerien @ Jun 27 2008, 02:46) *
Neverwinter Script
if (LineOfSightObject(oSelf, oNearestCreature) && (!bNeedDetectMode || GetActionMode(oNearestCreature, ACTION_MODE_DETECT)) && GetTag(GetItemInSlot(oNearestCreature, INVENTORY_SLOT_NECK)) == "Branzuletko")

27.06.2008 13:28:35: Error. 'il_scdoor_hb_1' did not compile.
il_scdoor_hb_1.nss(59): ERROR: DECLARATION DOES NOT MATCH PARAMETERS
cray.gif
Ilerien
Цитата
Десятая бета как раз выложена. Финалкой будет 11-я, которая отличается только одним фиксом
Я отстал от жизни sad.gif
Цитата
ERROR: DECLARATION DOES NOT MATCH PARAMETERS
Neverwinter Script
GetItemInSlot(INVENTORY_SLOT_NECK, oNearestCreature)
Н-да, ну не помню я порядок аргументов blush.gif А смотреть хелп в тулсе было влом snoozer_17.gif
Aiwan
shadowdweller, скриптинг для шардов совсем другой. Не парь мозги, поставь так и будет работать:
Neverwinter Script
if (LineOfSightObject(oSelf, GetFirstPC()) && (!bNeedDetectMode || GetActionMode(GetFirstPC(), ACTION_MODE_DETECT)) && GetTag(GetItemInSlot(GetFirstPC(), INVENTORY_SLOT_NECK)) == "Branzuletko")
Zirrex
Lirulin, на тех зеркалах, если не ошибаюсь, случайным образом накладывались различные эффекты. Чтобы зеркало считалось уже использованным, на него можно повесить "флаг" (переменную), которая не позволит сработать висящему на событии объекта OnUsed скрипту. Если объекты сделаны по маске (pl_mirror_01, pl_mirror_02, pl_mirror_03, pl_mirror_04 ...), то все остальные объекты можно сделать неиспользуемыми с помощью цикла, который прогонит данные объекты через себя и поставит на каждый флажок, запрещающий запускаться скрипту.

shadowdweller, только наоборот:

Neverwinter Script
GetTag(GetItemInSlot(INVENTORY_SLOT_NECK, GetFirstPC()))
azathoth
Цитата
как сделать так, чтобы при юзании однго из нескольких юзабл прейсеблов, остальные делались бы неюзабл? Чтоб получалось, чо выбрал один раз - и все, больше не повыбираешь?

Neverwinter Script
// Set oPlaceable's useable object status.
// Note: Only works on non-static placeables.
void SetUseableFlag(object oPlaceable, int nUseableFlag)

нэ?

если не прокатит - всегда можно старые уничтожить и создать новые неюзабельные.
Aiwan
Цитата(Zirrex @ Jun 28 2008, 02:00) *
shadowdweller, только наоборот:

Neverwinter Script
GetTag(GetItemInSlot(INVENTORY_SLOT_NECK, GetFirstPC()))

Вот поэтому у тебя наверняка и не компелится твой скрипт. Я же правил твою строку без редактора. Ты наверное перепутала местами аргументы функции.

Это я Шад... smile.gif
shadowdweller
Цитата(Ilerien @ Jun 27 2008, 15:19) *
Н-да, ну не помню я порядок аргументов А смотреть хелп в тулсе было влом

Цитата(Zirrex @ Jun 28 2008, 01:00) *
[только наоборот:
Neverwinter Script
GetTag(GetItemInSlot(INVENTORY_SLOT_NECK, GetFirstPC()))

Цитата(Aiwan @ Jun 28 2008, 12:23) *
Вот поэтому у тебя наверняка и не компелится твой скрипт. Я же правил твою строку без редактора. Ты наверное перепутала местами аргументы функции.

Это моя вина smile.gif Вот что мне стоило зайти в тулсет и самой посмотреть эти грешные аргументы! А я испугалась, что что-нибудь вообще насовсем испорчу... Да, в обратном порядке действительно компилится. Спасибо!

ЗЫ: Урра! yahoo.gif Все работает! Ilerien, Aiwan, спасибо огромное, что мучаетесь со мной.

ЗЗЫ: И еще такой вопрос - скрипты применимы только к одной паре дверей? То есть можно ли использовать одни и те же скрипты для каждой пары дверей на одной и той же локации? Или нужно каждый раз их перенастраивать для каждой конкретной пары?
Lirulin
Zirrex, azathoth, спасибо, я попробую!

azathoth, а куда вешать скрипт?



Цитата(Zirrex @ Jun 28 2008, 03:00) *
Чтобы зеркало считалось уже использованным, на него можно повесить "флаг" (переменную), которая не позволит сработать висящему на событии объекта OnUsed скрипту. Если объекты сделаны по маске (pl_mirror_01, pl_mirror_02, pl_mirror_03, pl_mirror_04 ...), то все остальные объекты можно сделать неиспользуемыми с помощью цикла, который прогонит данные объекты через себя и поставит на каждый флажок, запрещающий запускаться скрипту.


Куда и как вешать флаги? На OnUsed уже висит - к нему прибавить?
А объекты имеют тэги примерно name1_statue, name2_statue... и .д. И по идее, когда поюзаешь, она сама пропадает. А вот другие должны оставаться... но не юзаться более.
Ilerien
Цитата
И еще такой вопрос - скрипты применимы только к одной паре дверей? То есть можно ли использовать одни и те же скрипты для каждой пары дверей на одной и той же локации? Или нужно каждый раз их перенастраивать для каждой конкретной пары?
Все настраивается в самих дверях, я в мануале описывал wink3.gif Просто теги нужны разные для каждой двери.

Цитата
Куда и как вешать флаги?
Поставить галочку "используемый" smile.gif
Снимать юзабл флаг у остальных - тоже в onUse.
shadowdweller
Цитата(Ilerien @ Jun 28 2008, 21:16) *
Все настраивается в самих дверях, я в мануале описывал wink3.gif Просто теги нужны разные для каждой двери.

Звиняюсь. Моя сегодня тупой тролль. orc.gif
Lirulin
Цитата(Ilerien @ Jun 28 2008, 23:16) *
Снимать юзабл флаг у остальных - тоже в onUse.


А можно поподробнее, как это сделать так, чтобы не получилось, как у Xfans - объект пропал, и скрипт, висящий на нем перестает выполняться? Поставить это действие ДО DestroyObject?
gennady
Цитата(Lirulin @ Jun 29 2008, 08:58) *
А можно поподробнее, как это сделать так, чтобы не получилось, как у Xfans - объект пропал, и скрипт, висящий на нем перестает выполняться? Поставить это действие ДО DestroyObject?

Пожалуйста… Количество плейсов может быть любым, останется только один юзабельным, т.е. который мы откроем. Что с ним делать – это уж ваши проблемы. Другие, с такими же тегами в этой области, заменятся плейсами из палитры.
Цитата(azathoth @ Jun 28 2008, 02:35) *
Neverwinter Scriptnss1// Set oPlaceable's useable object status.// Note: Only works on non-static placeables.void SetUseableFlag(object oPlaceable, int nUseableFlag)nss2nss3нэ?если не прокатит - всегда можно старые уничтожить и создать новые неюзабельные.

Что-то этой функции в моем тулсете нет…

Neverwinter Script
//:://////////////////////////////////////////////
//:: Слот: OnUsed
//:: File name: us_place_destroy
//:://////////////////////////////////////////////
void main()
{
object oPC = GetLastUsedBy();
int nNth; // Номер плейса
string sTag = GetTag(OBJECT_SELF);
object oPlace = GetNearestObject(OBJECT_TYPE_PLACEABLE, OBJECT_SELF, nNth); // Ближайший плейс

if(GetLocalInt(OBJECT_SELF, "DESTROY")==1) return; // Если скрипт сработал - выход
while(GetIsObjectValid(oPlace))
{
  if(GetTag(oPlace) == sTag && GetLocalInt(oPlace, "DESTROY")==0) // Если совпали теги
  {
  SetLocalInt(oPlace,"DESTROY",1); // Вешаем локалку
  string sResRef = GetResRef(oPlace); // ResRef неюзабельного плейса в палитре
  location Loc = GetLocation(oPlace);
  //Заменим плейс на неюзабельный из палитры
  object oPlaceNew = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, Loc, FALSE, "NEW_"+sTag);
  AssignCommand(oPC, SpeakString(GetName(oPlaceNew)+" "+IntToString(nNth))); // Фраза-Контроль
  DestroyObject(oPlace); // Удалим юзабельный плейс
  }
  nNth++;
  oPlace = GetNearestObject(OBJECT_TYPE_PLACEABLE, OBJECT_SELF, nNth);
}
  //ТУТ ПИШЕМ ЧТО ДОЛЖНО ПРОИЗОЙТИ С ЮЗАБЕЛЬНЫМ ПЛЕЙСОМ
  SetLocalInt(OBJECT_SELF,"DESTROY",1); // Вешаем локалку
}
/*
Теги всех удаляемых плейсов должны быть одинаковые.
РесРефы в палитре неюзабельных плейсов должны совпадать с юзабельными.
*/
Xfans
Цитата(virusman @ Jun 27 2008, 07:25) *
Десятая бета как раз выложена. Финалкой будет 11-я, которая отличается только одним фиксом.

А не знаете, будет ли там поправлен еще один глючок, связанный с плащами - а именно то, что у существ с крыльями наличие плаща начисто убирает эти крылья?
Ilerien
Цитата
А не знаете, будет ли там поправлен еще один глючок, связанный с плащами - а именно то, что у существ с крыльями наличие плаща начисто убирает эти крылья?
Это не глюк smile.gif Желаемый результат можно достичь редактированием cloakmodel.2da.
Цитата
Что-то этой функции в моем тулсете нет…
shok.gif Как-то всё сложно о.О
Neverwinter Script
const int PLACEABLE_QUANTITY = <количество обжектов>;

void main()
{
    object oPC = GetLastUsedBy(); //в приведённом ниже эта переменная не нужна, но, наверное, понадобится дальше
    object oSelf = OBJECT_SELF;
    string sTag = GetTag(oSelf);
    //теги что-то вроде "object_01", "object_02", etc. Bажен только двухсимвольный номер smile.gif
    int nNumberSelf = StringToInt(GetStringRight(sTag, 2));
    string sBase = GetStringLeft(sTag, GetStringLength(sTag) - 2);
    int nNumber;
    string sNumber;

    for(nNumber = 1; nNumber <= PLACEABLE_QUANTITY; nNumber++)
    {
        if(nNumber == nNumberSelf)
            continue;
        sNumber = IntToString(nNumber);
        if(nNumber < 10)
            sNumber = "0" + sNumber;
        SetUseableFlag(GetObjectByTag(sBase + sNumber), FALSE);
    }

    <тут прописываем, что должно происходить при юзе плейса>

}
Хы, <nss> не признаёт слово continue whistle3.gif
Цитата
А можно поподробнее, как это сделать так, чтобы не получилось, как у Xfans - объект пропал, и скрипт, висящий на нем перестает выполняться?
DestroyObject всё равно выполняется после того, как завершится вызвавший его скрипт. Если в скрипте ничего не заделеено, можно смело применять эту функцию на вызвавший скрипт обжект и не париться. Всё заделеенное нужно перекидывать на любой 100%-но валидный обжект - модуль/локу/игрока/...
Lirulin
Цитата(Ilerien @ Jun 29 2008, 15:15) *
Neverwinter Script
const int PLACEABLE_QUANTITY = <количество обжектов>;
...
    //теги что-то вроде "object_01", "object_02", etc. Bажен только двухсимвольный номер smile.gif
...

    <тут прописываем, что должно происходить при юзе плейса>

}

Количество включая юзаемый?
То есть мне, к тегам, которые есть, надо добавить порядковые номера, видом 01, 02 и т.д.?
А то, что при юзе плейса - это как раз изначально стоявший OnUsed скрипт?
Zirrex
gennady, скрипт, который ты привел выше, будет тормозить, и к тому же не стоит вкладывать в цикл такие вещи:
Neverwinter Script
object oPlaceNew = CreateObject(OBJECT_TYPE_PLACEABLE, sResRef, Loc, FALSE, "NEW_"+sTag);

без хотя бы маленькой задержки. Функция CreateObject довольно медленная, и точно также, как и DestroyObject, срабатывает не сразу, поэтому может привести к тормозу. Если бы так создавались живые объекты (НПС), то скрипт завершился бы ошибкой "Слишком много инструкций".

Да, переменная nNth у тебя равна FALSE, хотя, если посмотреть саму функцию, то она по умолчанию равна 1 (сомневаюсь, что цикл сработает правильно при первом лупе).

Потом, а зачем в теле цикла ты при каждом новом лупе определяешь переменные? Все это должно описываться перед циклом в самом начале кода.

Lirulin, под флагами подразумеваются "переменные". Вешаются они на тот объект, с которым производится операция.

Скрипт, который привел Ilerien выше, включает все нужные тебе объекты. Чтобы скрипт изменил им статус с "Use" на "Not Use", необходимо у каждого объекта сделать одинаковый тэг, в котором в самом конце изменить номер, начиная от 01 и заканчивая номером последнего объекта. Скрипт вешается на событие OnUsed каждогообъекта.

Ilerien,
Цитата
Хы, <nss> не признаёт слово continue
оно довольно редко используется в скриптах. А вообще, недочет smile.gif Кстати, скриптик прикольный. Я такими вещами часто пользуюсь, когда нужно составить из мелких символов, раскиданных по объектам нужный тэг. Коротко и сердито, и главное, нужен всегда всего лишь один скрипт smile.gif

Xfans, а почему глюк? Плащ как бы закрывает крылья. Торчащие крылья через плащ, очень странное явление. То что они торчат через броню, еще страннее smile.gif
Ilerien
Цитата
Количество включая юзаемый?
То есть мне, к тегам, которые есть, надо добавить порядковые номера, видом 01, 02 и т.д.?
А то, что при юзе плейса - это как раз изначально стоявший OnUsed скрипт?
Включая. Там в цикле специальная проверка на то, чтобы с обжектом, который мы юзаем, ничего не случилось Если нужно, её можно убрать smile.gif Вот проверка:
Neverwinter Script
if(nNumber == nNumberSelf)
    continue;
Тег отдельного плейсебла должен состоять из базы (любой, в примере "object_"), одинаковой для _всех_ таких плейсеблов, и двухсимвольного номера, начиная с "01".
Цитата
Функция CreateObject довольно медленная, и точно также, как и DestroyObject, срабатывает не сразу, поэтому может привести к тормозу.
У меня такое было, когда в цикле на вейпоинтах создавались камни завала при заходе существа на триггер smile.gif Сервер-то это ещё проглотит (хотя, в зависимости от количества обжектов), а вот в сингле будут тормоза, потому что там одна машина является сервером и клиентом одновременно, да и сама машина слабее любого шардового сервера.
Xfans
Цитата(Ilerien @ Jun 29 2008, 12:15) *
Это не глюк smile.gif Желаемый результат можно достичь редактированием cloakmodel.2da.

Спасибо! Покопаем и найдем!

Цитата(Zirrex @ Jun 29 2008, 22:11) *
Xfans, а почему глюк? Плащ как бы закрывает крылья. Торчащие крылья через плащ, очень странное явление. То что они торчат через броню, еще страннее smile.gif

В том-то и дело, что раз уж они через броню торчат... наверное, подразумевается, что крылатые существа заказывают себе спец. броню с дырками для крыльев biggrin.gif (бывает же броня, через которую виден хвостbiggrin.gif). А если плащ прикроет крылья, будет порядочный горб. Ну ладно, это все тонкости, и уже не по теме. Просто должны же у ангела крылья торчать, чтоб было видно, что он ангел и есть.
Lirulin
Цитата(Ilerien @ Jun 30 2008, 01:57) *
У меня такое было, когда в цикле на вейпоинтах создавались камни завала при заходе существа на триггер smile.gif Сервер-то это ещё проглотит (хотя, в зависимости от количества обжектов), а вот в сингле будут тормоза, потому что там одна машина является сервером и клиентом одновременно, да и сама машина слабее любого шардового сервера.

Ну, наверное создание одного паршивого NPC и убрание одной не менее паршивой статуи - это все же посильная задача для простого компа=) Вроде не виснет. Но спасибо за предупреждение, что много object'ов сразу ни destroy, ни create делать не надо.

Цитата(Zirrex @ Jun 30 2008, 01:11) *
Lirulin, под флагами подразумеваются "переменные". Вешаются они на тот объект, с которым производится операция.

Ну, это-то я уже усек, что флаг - это переменная. Просто вешать их пока не научился=)Но с такими подробными объяснениями скоро научусь!
Ilerien
Цитата
наверное, подразумевается, что крылатые существа заказывают себе спец. броню с дырками для крылье
У Ли Байерса ("Rage", "Rite", "Ritem") был эльф-авариэль, экипированный как раз такой бронёй smile.gif)
Цитата
Просто вешать их пока не научился=)
Neverwinter Script
SetLocalInt(<объект>, <название>, <значение>);
Lirulin
Цитата(Ilerien @ Jun 30 2008, 20:11) *
Neverwinter Script
SetLocalInt(<объект>, <название>, <значение>);

Запомню и применю при первом же удобном случае! Если запутаюсь - приду, будете распутывать меня!
Xfans
Цитата(Ilerien @ Jun 30 2008, 18:11) *
У Ли Байерса ("Rage", "Rite", "Ritem") был эльф-авариэль, экипированный как раз такой бронёй smile.gif)

Видимо, идеи носятся в воздухе! У одного из нас был сочинен мир, где тож народ с крыльями был. Так пришлось продумывать, куда девать крылья при одевании=))) wacko.gif
Aiwan
Цитата(Ilerien @ Jun 29 2008, 14:15) *
Хы, <nss> не признаёт слово continue

Цитата(Zirrex @ Jun 30 2008, 00:11) *
Оно довольно редко используется в скриптах. А вообще, недочет

Усе исправлено declare.gif


Neverwinter Script
if () continue;
Ilerien
Цитата(Aiwan @ Jun 30 2008, 23:15) *
Усе исправлено

Благодарю wink3.gif
Xfans
Скажите, плиз, водится ли еще на сайте WRG прога, которая делает заставки/видюшки/титры к НВН? Вроде где-то про нее упоминали, но найти мы не можем. Если она есть, можно сюда ссылку?
Aiwan
Если такая прога есть, то я о ней не слышал. Не то что бы увидеть...
Lex
эта прога - любая прога, которая может выдавать в результате своей работы видеофайл, пригодный для конвертации в *.bic.
У нас на сайте таких программ никогда не было. Возможно был когда-то конвектор типа avi - bic, но врядли. По крайней мере в памяти не отложилось.
Xfans
Цитата(Lex @ Jul 2 2008, 20:04) *
У нас на сайте таких программ никогда не было. Возможно был когда-то конвектор типа avi - bic, но врядли. По крайней мере в памяти не отложилось.

Вот именно конвертор и нужен (просто выразились непонятно unsure.gif ). А чем делалась например начальная заставка к Левору? Она же тоже должна быть *.bic? Или нет?
Dik Morris
*bic, bic какой же еще.
Цитата
Вот именно конвертор и нужен

*avi-> *bic
Xfans
Цитата(Dik Morris @ Jul 3 2008, 07:23) *
*bic, bic какой же еще.
*avi-> *bic

Спасибо! @>- Будем пробовать!
Aiwan
Цитата(Xfans @ Jul 2 2008, 23:32) *
Вот именно конвертор и нужен

Правильно заданный вопрос почти 100% полученный ответ. declare.gif Я ж не знал ЧТО ТЫ ИМЕЕШЬ ВВИДУ.
Xfans
Цитата(Aiwan @ Jul 3 2008, 11:40) *
Правильно заданный вопрос почти 100% полученный ответ. declare.gif Я ж не знал ЧТО ТЫ ИМЕЕШЬ ВВИДУ.

sorry.gif Сами не знали, как точно обозвать эту прогу! Пардон, в следующий раз будем точны как... как... опытный скриптер, во!;)

Кстати, о скриптах - совсем уж чушь творится - компайлер молчит=( Ни сообщения об ошибке, ни сообщения о том, что все ок... просто пустое поле внизу... что сие может значить? Что пора переставить игру? Или он как-то отключился и его просто надо включить... (и где?)
Aiwan
Цитата(Xfans @ Jul 2 2008, 09:48) *
Скажите, плиз, водится ли еще на сайте WRG прога, которая делает заставки/видюшки/титры к НВН?

Заставки делаются с помощью 3Дмакса, флеша, на прочих аниматорских прогах. Соотвественно у нас его на сайте не было. Все делается в AVI и КОНВЕРТИРУЕТСЯ в BIC. Это обычный конвертор каких много. Твой вопрос звучит так прога, которая делает заставки/видюшки/титры к НВН?.

Цитата(Xfans @ Jul 4 2008, 19:52) *
Кстати, о скриптах - совсем уж чушь творится - компайлер молчит=(

Не все что компелится работает. (с)
Xfans
Цитата(Aiwan @ Jul 4 2008, 22:32) *
Не все что компелится работает. (с)

Это уже понятно=) Но все же, что с ним делать, чтобы он подавал признаки жизни? А то может он вовсе не компилирует ничего! scratch_one-s_head.gif
shadowdweller
Очередная проблема. Не хочет разговаривать плейсебл. Мне нужно, чтобы при попытке прочесть книжку в локации начинался диалог. Делаю все по инструкции - выставляю в свойствах объекта галочку Plot и Useable. Во вкладке скриптов на OnClick, OnUsed и OnDisturb выставляю вот это:

Neverwinter Script
void main()
{
object oPC = GetClickingObject();
object oTome = OBJECT_SELF;

AssignCommand(oPC,ActionStartConversation(oTome));
}


Диалог присоединен. там тоже все как полагается - сначала ветка с проверкой на наличие амулета-переводчика на соответствующем слоте, потом - ветка, которая выводится, если амулет не надет.
В первой части мода скрипт прекрасно работает, правда, там диалог с одной веткой без всяких проверок. Во второй - не хочет ни в какую. Что я не так делаю?
Melisse
на OnUsed

Neverwinter Script
void main()
{
ActionStartConversation(GetLastUsedBy());
}


В свойствах плэйса, на вкладке улучшенный - поставь нужный диалог в поле "разговор".

GetLastUsedBy(); - это значит объект, который последним поюзал данный предмет - такое ставитсья на вкладку OnUsed.
GetClickingObject(); - это тот кто просто кликнул на объект - такое ставиться на вкладку OnClick.

на вкладку OnDisturb ставятся скрипты, которые производят какое-то действие или событие, если происходит воздействие на предметы в инвентаре, например: перемещение из инвен.плэйса к себе в инвен. или наоборот.
shadowdweller
Попробовала - не работает sad.gif
Ilerien
Мел, боюсь, что плейс не умеет выполнять ActionStartConversation, надо, наверное, на игрока перекидывать. И здесь лучше юзать BeginConversation.
Цитата
Попробовала - не работает
Укажи там напрямую реф диалога. И перекинь функцию на игрока:
Neverwinter Script
void main()
{
    object oPC = GetLastUsedBy();
    object oTome = OBJECT_SELF;
    AssignCommand(oPC,  BeginConversation(oTome, "<реф диалога>"));
}
Aiwan
Не надо ничего извращать.
Neverwinter Script
//:://////////////////////////////////////////////
//:: OnExit  am_pus_dialog
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
   Скрипт использования PLC_ объектов для диалога.
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 26.12.2005
//:://///////////////////////////////////////////

void main()
{
    object oPC = GetLastUsedBy();
    object oSelf = OBJECT_SELF;
    AssignCommand(oPC, ClearAllActions());
    ActionStartConversation(oPC);
}

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

Код что привел работает во всем модуле с разными объектами. Ни разу не тупило...

Цитата(shadowdweller @ Jul 5 2008, 20:03) *
Во вкладке скриптов на OnClick, OnUsed и OnDisturb выставляю вот это:

Выстави ОДИН скрипт на OnUsed.
shadowdweller
Урра! Заработала! Ребята, спасибо! thank_you.gif
Ilerien
Потестил, плейс умеет начинать диалог smile.gif
Lirulin
У меня вот тоже с диалогом проблема, только другая - NPC должен (бы!), когда 1-й раз видит PC, бежать к нему и начинать диалог. Пробовал ставить триггер, при наступании на который этот NPC делал бы, что ему надо - не работает. Поставил NPC OnPerception, чтоб бежал - он начал таскаться за PC, как привязанный=( Попробовал добавить условие, чтоб бегал, только пока не говорили 1-й раз (на диалоге ставится переменная)
Neverwinter Script
void main()
{
    object oNPC = OBJECT_SELF;
    object oPC = GetFirstPC();
    if(GetIsPC(oPC) &&
       GetLocalInt(GetPCSpeaker(), "AineTalk") < 1 &&
       GetLocalInt(oPC,"NW_L_Init" + GetTag(oNPC)) == FALSE &&
       IsInConversation(oNPC) == FALSE)

    {
        AssignCommand(oPC,ClearAllActions());
        AssignCommand(oNPC,ClearAllActions());
        AssignCommand(oNPC,ActionForceMoveToObject(oPC));
        AssignCommand(oNPC,ActionStartConversation(oPC));
    }
   
}

Все равно таскается! Может я в скрипте что-то не так сделал?
azathoth
Цитата
Пробовал ставить триггер, при наступании на который этот NPC делал бы, что ему надо - не работает

ну дык сделай чтобы рабатало, а не виласепедры придумывай.

1. не видно где устанавливается локалка
2. GetPCSpeaker() на онПерсепшен?
shadowdweller
Lirulin, у меня работает так:
1. Создаешь триггер, при входе на который игрока к нему будет бежать НПС. Нужен триггер типа NewGeneric.
2. Внутри триггера создаешь вэйпойнт - точку, куда будет возвращаться НПС, если игрок вышел из области триггера, и присваиваешь ему тэг "WP_RETURN_ТЭГ_НПС" (без кавычек, разумеется)
3. На этот вэйпойнт ставишь НПС
4. В скриптах триггера на OnEnter ставишь вот это:
Neverwinter Script
void main()
{
object oNPC = GetObjectByTag("ЗДЕСЬ_ТЭГ_НПС");
object oPC = GetEnteringObject();
if(GetIsPC(oPC) &&
GetLocalInt(oPC,"Dlg_Init_" + GetTag(oNPC)) == FALSE &&
!IsInConversation(oNPC))
{
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oNPC,ActionMoveToObject(oPC));
AssignCommand(oNPC,ActionStartConversation(oPC));
}
}

5. И на OnExit - вот это:
Neverwinter Script
void main(){  string sTag = "ЗДЕСЬ_ТЭГ_НПС";
object oExit = GetExitingObject();
if(GetTag(oExit) == sTag)
{
AssignCommand(oExit,ClearAllActions());
AssignCommand(oExit,ActionMoveToObject(GetNearestO
bjectByTag("WP_RETURN_" + sTag)));
}
}

Вот это - как раз для того, чтобы НПС не ходил за героем хвостом.

Кажется, все.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.