Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
yudgi
Мы сейчас говорим не о триггере, а о входе в локацию, там проверка будет другая или нет, за пояснение проверке буду особенно благодарна. Пояснение, за тем, чтобы я в следующий раз не задавала дурацкие вопросы по этому скрипту.
-fenix-
Если вы про проверку локальными переменнами, то вот
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
string sString = "бла-бла-бла, (вырезано цензурой)! ";

if(GetLocalInt(OBJECT_SELF, "START") != 1)
{
  AssignCommand(oPC, ActionSpeakString(sString));
  SetLocalInt(OBJECT_SELF, "START", 1);

}
}

Смысл вот в чем. Когда скрипт запускается, то идет проверка равна ли переменная "START" еденицы. При первом запуске такой переменной нет, значит пусто, знпчит это не равно 1, значит проверка успешна. Дальше идут действия и установка переменной на 1, поэтому в следующий раз скрипт дальше проверки не пойдет.

QUOTE (zmey @ Sep 27 2005, 13:35)
object oPC = GetEnteringObject(); -это для триггеров. Типа oPC -это тот, кто встал в триггер.

Это не для тригеров, это для всех событий в чьих названиях есть Enter - OnEnter, OnClientEnter.
yudgi
Спасибо-fenix-я поняла.
Aiwan
QUOTE (yudgi @ Sep 27 2005, 11:57)
Скрипт на то,когда РС первый раз входит в область и говорит фразу.

Видишь ли, есть задержка при загрузке локации и многое будет зависеть от машыны игрока. Некоторые твою фразу могут вообще не заметить. Лучше повеь ее на триггер, либо с задержкой секунд на 5.
Isendel
Как сделать, чтобы НПС (1 шт.) следовал за игроком до определенного места, а затем верулся туда, откуда начал следовать за ПК?

Как сделать, чтобы после использования игроком двери один раз, она бы уже не стала открываться второй?

Как сделать, чтобы после определенной фразы, например, модуль заканчивался бы и начинался бы другой?

Заранее спасибо.
NedWarN
QUOTE
Как сделать, чтобы НПС (1 шт.) следовал за игроком до определенного места, а затем верулся туда, откуда начал следовать за ПК?

Создай два одинаковых НПК, одного помести куда надо, а второго спрячь.
Присоедени НПК, к игроку
Neverwinter Script Source
AddHenchman(oPC,oNPC);
, когда надо дестрой его а второго джампь, на то самое место где стоял когдато настоящий.
QUOTE
Как сделать, чтобы после использования игроком двери один раз, она бы уже не стала открываться второй?

Например, оставь её открытой, в свойствах пропеши "Сюжет", Во вкладке "Закрыть" закрой её, и если игрок захлопнет дверь, всё!.
Daemonix
QUOTE (Isendel)
Как сделать, чтобы после определенной фразы, например, модуль заканчивался бы и начинался бы другой?

Neverwinter Script Source
void main()
{
  object oPC = GetEnteringObject(); // Кто вошел на триггер
  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") || GetIsInCombat(oPC))
        return; // Если не игрок, или уже наступал, или идет бой то возврат
  SetLocalInt(OBJECT_SELF, "TRIGGER", TRUE);
  ActionDoCommand(DoSinglePlayerAutoSave()); // Автосейв, на случай пожарный
  ActionDoCommand(StartNewModule("имя_модуля")); // НО БЕЗ РАСШИРЕНИЯ! *.mod

Вот это написал Aiwan и вроде должно работать. Но я не пробовал. Кстати, это надо вешать на триггер.
Isendel
Пасиб за помощь. Но в первом примере от NedWarn. Хотелось бы, чтобы непись не становился хенчманом, а просто следовал бы за игроком а-ля первая глава оригинального нвн, где игрок спасает население от плохих челов в тюремном квартале.
Daemonix
Вот ещё скриптик, который закрывает дверь сам через 20 сек. после закрытия.
Neverwinter Script Source
void main()
{
DelayCommand(14.9,ClearAllActions()); // Через 15 секунд
DelayCommand(15.0,ActionCloseDoor(OBJECT_SELF)); // захлопнет дверь
DelayCommand(20.0,SetLocked(OBJECT_SELF, TRUE)); // и закроет дверь на ключ через 20 сек
}
-fenix-
QUOTE (Isendel @ Sep 27 2005, 19:23)
Как сделать, чтобы НПС (1 шт.) следовал за игроком до определенного места, а затем верулся туда, откуда начал следовать за ПК?


QUOTE (NedWarN @ Sep 27 2005, 19:49)
Создай два одинаковых НПК, одного помести куда надо, а второго спрячь. Присоедени НПК, к игроку
Neverwinter Script Source
AddHenchman(oPC,oNPC);



Хенчманом его точно не надо делать!!!
Есть специальная функция
Neverwinter Script Source
void ActionForceFollowObject(object oFollow, float fFollowDistance=0.0f)


Если надо в разговоре, то надо так
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();

AssignCommand(OBJECT_SELF, ActionForceFollowObject(oPC, 1.0));
}


На том месте, где НПС стоит в начале надо поставить WP, а на том месте, где НПС должен вернутсья растянуть тригер и на OnEnter тригера поставить

Neverwinter Script Source
void main()
{
object oNPC = GetEnteringObject();
object oWP = GetWaypointByTag("ТАГ ВЕЙПОИНТА");

if(GetTag(oNPC) == "ТАГ НПС")
{
AssignCommand(oNPC, ClearAllActions());
AssignCommand(oNPC, ActionForceMoveToObject(oWP, FALSE, 0.0, 15.0));
}
}

Значения функций посмотри в тулсете.
Добавлено в 22:02

QUOTE (Daemonix @ Sep 27 2005, 21:55)
Вот ещё скриптик, который закрывает дверь сам через 20 сек. после закрытия.

Наверное после открытия и ставется он на OnOpen двери.
Зачем двери чистить акции?
Isendel
пасиб. теперь могу задуманный квест делать со спокойной (ну почти) душой.
-fenix-
Neverwinter Script Source
void main()
{
  object oPC = GetEnteringObject(); // Кто вошел на триггер

  if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") || GetIsInCombat(oPC))
        return; // Если не игрок, или уже наступал, или идет бой то возврат
  SetLocalInt(OBJECT_SELF, "TRIGGER", TRUE);
  ActionDoCommand(DoSinglePlayerAutoSave()); // Автосейв, на случай пожарный
  ActionDoCommand(StartNewModule("имя_модуля")); // НО БЕЗ РАСШИРЕНИЯ! *.mod
}

QUOTE (Daemonix @ Sep 27 2005, 19:52)
Вот это написал Aiwan и вроде должно работать. Но я не пробовал. Кстати, это надо вешать на триггер.

Надо просто чуток подкоректировать.
первая строчка будет такой
Neverwinter Script Source
object oPC = GetPCSpeaker();


Еще отпадает надобность в проверках, так как у нас сингл и скрипт стоит в разговоре.
Daemonix
QUOTE
Наверное после открытия и ставется он на OnOpen двери.
Зачем двери чистить акции?

Кстати, это тоже было вразделе ВиО по тулсету.
Geck0
Не знаю туда ли я пишу, но вот какой вопрос... Я уже как больше года жду выхода NwN от 1С, надеясь на то, что Тулсет будет переведен должным образом и не будет содержать различных ошибок, глюков и разных других недочетов... Идеи по созданию модуля есть, опыта работе в Авроре к сожалению почти нет. Если в качестве картографа я еще могу что-то как-то, то скрипты совсем уж не-очень то и так-как надо unsure.gif Все Тулсеты которые у меня были - содержали ошибки и тотально глючили, кроме одного - который содержится в самом первом NwN на трех дисках от Фаргуса (там еще написано, что он патченный), но зная о том, что с выходом и SoU и HoU Тулсет обновлялся и расширялся, я задумался - стоит ли с головой уходить в изучение "первого" Тулсета и решил, что - нет, буду ждать лицензию со всеми расширениями.
Как быть - подскажите! Работать мне, для начала, в Тулсете простого NwN или же все-таки дожидаться лицензий... С английским я на ВЫ.
AliceDiren
QUOTE

Neverwinter Script Source
TakeGoldFromCreature(GetGold(oPC),oPC, TRUE);
, а нет, денюжки никто не забирает... Почему? Вроде бы всё компилируется..

Daemonix , чтобы заработало нужно чтобы эти денюжки кто-то забрал. У тебя же объект скрипта OBJECT_SELF указывает на модуль. Я пишу:
Neverwinter Script Source
AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC), oPC, TRUE));

Добавлено в [mergetime]1127883173[/mergetime]
Neverwinter Script Source
if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") || GetIsInCombat(oPC))
        return; // Если не игрок, или уже наступал, или идет бой то возврат
  SetLocalInt(OBJECT_SELF, "TRIGGER", TRUE);

-fenix- , тогда проверка теряет смысл. Не игрок не сможет поговорить с NPC, так же игрок не сможет разговаривать одновременно воюя с кем-нибудь. И проверять начинался ли уже другой модуль и вовсе не имеет смысла.
yudgi
Aiwan у меня проблема возникла по этому скрипту
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oTrig = OBJECT_SELF;
string sSpeak = GetName(OBJECT_SELF);
int i = StringToInt(GetLockKeyTag(oTrig));
int iSp = GetLocalInt(oTrig, "SPEAK");
  if (!GetIsPC(oPC) || iSp >= i && i!=0)
    {
    return;
      }
      AssignCommand(oPC, SpeakString(sSpeak));
      if (i!=0)
      {
      SetLocalInt(oTrig, "SPEAK", (iSp+1));
      }
}

Фраза повторяется каждый раз при входе на триггер, а мне нужен только один раз, насколько я поняла в этом случае переменная должна равняться 1, так или нет?
Aiwan
Geck0 бери оригиналы английские и ставь себе все два аддона. Открывай тулсет и работай. Ждать чего-то и отмазываться мол вот выйдет, я вам покажу и т.д. удел слабаков. Конечно если у тебя нет серьезных причин для ожидания. Все остальное решаемо. Поверь мне, человеку который два года назад не знал что такое локальная переменная или стринг. Ну и на все твои вопросы ответят здесь. Это точно говорю. scout.gif
yudgi
Вот ещё такой вопрос появился: два непися разговаривают между собой над ихголовами появляется текст со словами,я читала что там нужен триггер со скриптом он у меня есть, всё OK, а без триггера это можно сделать.
Aiwan
Да, чуть не забыл. Слей себе два туториала от биовар и мой. Там все что тебе надо знать есть.
QUOTE (yudgi @ Sep 28 2005, 12:20)
Фраза повторяется каждый раз при входе на триггер, а мне нужен только один раз, насколько я поняла в этом случае переменная должна равняться 1, так или нет?

Ты немного не понимаешь код. Он сложноват для новичка. Все дело в том, что там несколько проверок и ты забыла вот эту надпись:
Neverwinter Script Source
//:://////////////////////////////////////////////
/*
  Текст над РС  KeyTag - Количество раз
            Если 0, то бесконечно
*/

//:://////////////////////////////////////////////
-

Решается твоя проблема просто, открываешь свойства триггера и в том месте где пишется в зкладке адвансед в поле Tag Key введи цифру, сколько раз надо говорить твою фразу. Это универсальный скрипт, его можно много раз применять. Что бы ты поняла объясню:
Neverwinter Script Source
int i = StringToInt(GetLockKeyTag(oTrig)); // цифра i это строка в поле триггера КеуТаг конвертируемая в число

int iSp = GetLocalInt(oTrig, "SPEAK"); // Это значение переменной ГОВОРИТЬ, тоже число

if (!GetIsPC(oPC) || iSp >= i && i!=0) // Если не игрок, или iSp больше или ровна i (Это значит что мы присвоили триггеру
// столько раз переменную iSp сколько мы задали числом в поле КеуТАг триггера. Но наша цифра i в этом условиии не
// должна ровняться 0. Если в КейТаг поставить 0, то это условие не сработает и не будет return;
// Дальше, мы сказали фразу и скрипт выполняется дальше, там такое условие:

      if (i!=0) // Если Поле КейТаг не ровно 0 (то эта строка игнорируется, поймешь ниже почему)
      {
      SetLocalInt(oTrig, "SPEAK", (iSp+1)); // Присваиваем триггеру локалку "SPEAK", числом равным на еденицу больше чем
      // есть. Изначально ее нет вообще и она ровна 0. Мы сказали один раз фразу, получилось 0+1. Присвоили 1. Сказали
      // 2 раза, у нас 1 прибавляем +1 в резльтате 2. Локалка теперь 2.
      }
// Что получается? Мы постоянно прибаляем +1 каждый раз когда произносим фразу и сравниваем значения iSp >= i , как
// только значения сказанных фраз совпало или стало больше чем в поле КейТаг. Скрипт не срабатывает. Ну а если i = 0 то
// все проверки кроме того, что это РС игнорируются. Вот.


yudgi
Спасибо,туторы обязательно скачаю, но насколько я знаю, там не много информации по скриптам. Lexicon - это что за программа? Ещё вопрос, пока не забыла, как обновить CD-версию игры, патчами, а какимии, где их взять, ещё не совсем понимаю, что такое SoU и HotU
-fenix-
QUOTE (AliceDiren @ Sep 28 2005, 08:42)
-fenix- , тогда проверка теряет смысл. Не игрок не сможет поговорить с NPC, так же игрок не сможет разговаривать одновременно воюя с кем-нибудь. И проверять начинался ли уже другой модуль и вовсе не имеет смысла.

Дык, а я что написал!!!!!!!
QUOTE (-fenix- @ Sep 27 2005, 23:08)
Еще отпадает надобность в проверках, так как у нас сингл и скрипт стоит в разговоре.



QUOTE (yudgi @ Sep 28 2005, 11:00)
Спасибо,туторы обязательно скачаю, но насколько я знаю, там не много информации по скриптам. Lexicon - это что за программа? Ещё вопрос, пока не забыла, как обновить CD-версию игры, патчами, а какимии, где их взять, ещё не совсем понимаю, что такое SoU и HotU

Lexicon - это как раз хелп по скриптам его качай обязательно, без него ни как, там есть описание функций, констант, есть тутор.(он на инглише)
Самое главное пытайся сначало сама понять и разобраться в скриптах и что не понятно спрашивай тут.

Обновить версии конечно патчами, некоторые есть в файлах на сайте, а самые последнии ищи на Ваулте.
SoU и HotU - сокращенно название двух оддонов к NWN: Shadows of Undrentide и Hordes of the Underdark
yudgi
А где Lexicon скачать, дайте ссылку плиз.
AliceDiren
-fenix- , извини - невнимательно читала.
Aiwan
QUOTE (yudgi @ Sep 28 2005, 13:27)
А где Lexicon скачать, дайте ссылку плиз.
Isendel
Блин. А нет нигде лексикона на русском? Я с английским не то чтобы уж очень на вы, но тексты объемные все же читать тяжело.
Ghost
QUOTE (Isendel @ Sep 28 2005, 18:23)
Блин. А нет нигде лексикона на русском? Я с английским не то чтобы уж очень на вы, но тексты объемные все же читать тяжело.

Переведи его.. и он будет... smile.gif И все тебе будут очень блаадарны...
Isendel
Господа, вот скрипт:

CODE

         void main()
{
object oMod = GetModule();
object oPC = GetEnteringObject();
TakeGoldFromCreature (GetGold(oPC), oPC, TRUE);
object oItem = GetFirstItemInInventory(oPC);

while (GetIsObjectValid(oItem))
   {
   DestroyObject(oItem);
   oItem = GetNextItemInInventory(oPC);
   }

int i;

for (i=0; i<=13; i++)
   {
   oItem = GetItemInSlot(i, oPC);
   DestroyObject(oItem);
   }
   SetXP (oPC, 105000);
   }


Все делает, и инвентарь убирает, и уровень назначает, а деньги не отбирает!!!
В чем ошибка, подскажите, плз. dntknw.gif
dumbo
Isendel
господа и дамы. учитесь не только писать, но и читать. rtfm.gif

ответ на твой вопрос находится буквально 10-тью постами выше! this.gif
QUOTE (AliceDiren @ Sep 28 2005, 08:42)
Daemonix , чтобы заработало нужно чтобы эти денюжки кто-то забрал. У тебя же объект скрипта OBJECT_SELF указывает на модуль. Я пишу:
Neverwinter Script Source
AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC), oPC, TRUE));

Isendel
Ойой. Недосмотрел, соряюсь.. unsure.gif biggrin.gif

LEX: устный пред. Читай внимательнее в след раз. И не засоряем тему несодержательными сообщениями.
yudgi
QUOTE (Ghost @ Sep 28 2005, 17:31)
Переведи его.. и он будет...И все тебе будут очень блаадарны...

Неплохая мысль, займусь наверно переводом Lexiconа, а вдруг получится, тем более что английский я не плохо знаю, единственная проблема, что текста много.
Добавлено в [mergetime]1127976867[/mergetime]
Реально, слушайте, в смысле читайте, переведём Lexicon, поможем новичкам, мне в переводе могут быть не понятны некоторые термины скрипта и тулсета, может быть некоторые слова даже английские. Предлагаю всерьёз заняться этой проблемой, для одного человека работы много, но если будет несколько... Короче тем, кто хочет и может мне помочь в этом нелёгком деле, пишите на мой личный ящик на wrg, я понимаю, быстро мы это не сделаем но попробовать стоит. Ещё просьба если моя идея показалась глупой, скажите сразу, обижаться не буду. Просто я подумала что неплохо бы этим заняться.
Scaled
Всем привет!
У меня вот такой вопрос.
Когда создаешь кастомный ТЛК и подключаешь его к модуль, почему всеравно все береться из стандарного?
Не хотелось бы каждый раз редактировать стандарный тлк, добавляя в него описание.
Заранее спасибо.
AliceDiren
Scaled , в кастомном TLK к ID строк нужно прибавлять 16777216.

LEX: Поправлю малек.
Если тебе нужна в 2дашке или в скрипте ссылка на строку твоего тлк, то номер, на который тебе надо ссылаться = ID в твоем тлк + 16777216.
acdcee
Приветсвую вас МАСТЕРА СКРИПТОВ.

У меня такой вопрос.
Подскажите какая функция считает ДАМАГ.

Т.е такая вот задумка, есть плэйсэйбел в нем стоит скрипт который считает количество дамага и если оно равно определнному числу за ранее стоящем в скрипте то при этом открывается инвентарь.
И еще одно в этом скрипте нужны ли локальные переменные или нет а то как то у меня не вяжеться
Скрипт не могу выложить верней не мой комп пока.

Помогите если есть у кого желание.

и еще одно как сделать так что бы в паке бутылки не соединялись?
-fenix-
QUOTE (acdcee @ Sep 29 2005, 16:33)
Т.е такая вот задумка, есть плэйсэйбел в нем стоит скрипт который считает количество дамага и если оно равно определнному числу за ранее стоящем в скрипте то при этом открывается инвентарь. И еще одно в этом скрипте нужны ли локальные переменные или нет а то как то у меня не вяжеться

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

Neverwinter Script Source
void main()
{
object oPC = GetLastDamager();
int iD = GetTotalDamageDealt();// эта функция получает общее кол-во демага

// запоминаем дамаг
SetLocalInt(OBJECT_SELF, "DAMAGE", GetLocalInt(OBJECT_SELF, "DAMAGE") + iD);

if(GetLocalInt(OBJECT_SELF, "DAMAGE") >= 15)// откроется при общем ущербе >= 15
{
SetLocked(OBJECT_SELF, FALSE);
AssignCommand(oPC, SpeakString("Похоже объект открылся"));
}
}


QUOTE (acdcee @ Sep 29 2005, 16:33)
и еще одно как сделать так что бы в паке бутылки не соединялись?

Тоесть, чтобы вообще не соединялись?
Добавлено в [mergetime]1128001122[/mergetime]
Ах да, совсем забыл, ставется скрипт на OnDamaged объекта!
Aiwan
QUOTE (Geck0 @ Sep 29 2005, 11:06)
1. Не знаю так ли это легко будет - найти оригиналы на английском языке.

"Легко!" (с) http://gamesold.ru/ - тут можно заказать оригиналы.
QUOTE (Geck0 @ Sep 29 2005, 11:06)
статья Aiwan'a с WRG.ru - посоветуете, что-нибудь еще или этого будет достаточного для минимального понимания скриптов NwN

Если у тебя статья моя веб формата, то сливай с нашего сайта файл PDF 10 мгб. Это полная статья в три раза больше первой. + примеры модулей и скриптов.
DEM
QUOTE
статья Aiwan'a с WRG.ru - посоветуете, что-нибудь еще или этого будет достаточного для минимального понимания скриптов NwN


скрипты по анимации смотри здесь wrg.ru/old (там в статьях ищи статьи ЛЕКСА)
acdcee
[NSS]if (GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC) != OBJECT_INVALID)

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


Да и Феникс спасибо за помощь посижу подумаю на счет открытия инвенторя можь че получиться smile.gif

А на счет бутылок то да что бы вообще не соединялись. Просто я вместо обычныхбутелей под типа воды для реста использую бутыли типа лечения легких ран и т.д, а они соединяються как одно целое вот в чем косяк smile.gif. Можь это и глупо но когда в пак берешь то они хоть булькают smile.gif.

Вопрос еще вот какой, есть скрипты которые запоминают время и место нахождения игрока после выхода, так вот как идет это сохранение, в том плане это кк запись и проверка каждого перса т.е создания на сервере отдельных файлов или ....... ?

Проблема в квестах еще не опробаванно но при рестарте по идеи все обнуляеться или не прав я ?


А помоему вот такая есть функция [NSS]OpenInventory , и вот так вот мона ?

[NSS]OpenInventory (OBJECT_SELF,TRUE); ну или типа того smile.gif, если кто можете посмотрите просто сейчас нету тулсета подрукой sad.gif

Воооо и еще такой вот вопрос, пока еще не дошел до этого но думаю пойму. Так вот как сделать так что бы после смерти игрока на его месте остался труп полностью такой же как и игрок т.е в доспехах, иглавное я додумал как его мона в пак брать но проблема вот с этим может кто помочь ?
И еще объесните мне как слокалками работать, с локальными и не только переменными smile.gif?
Уж очень то я повяз в этом деле (СКРИПТЫ)!!
Добавлено в [mergetime]1128015773[/mergetime]
Вот скрипт на то что бы появлялся итем трупа после смерти игрока, появляеться плейс в политре(Труп только видимый я брал)
И в ХБ ставил такой скрипт
Neverwinter Script Source
#include "nw_i0_tool"
void main()
{
object oCorpse = GetNearestObjectByTag("тег_итема трупа в палитре");//наш итем трупа который будет появляться
object oDeathCorpse = OBJECT_SELF;//плейс трупа в палитре ,появляеться после смерти игрока
{
  if(HasItem(OBJECT_SELF,"тег_итема трупа в палитре")==FALSE)
  CreateItemOnObject("res_ref итема трупа",OBJECT_SELF,1);
  return;

  if(HasItem(OBJECT_SELF,"тег_итема трупа в палитре")==TRUE)
  CreateItemOnObject("res_ref итема трупа",OBJECT_SELF,0);
  return;
}
}


Вроде бы так но не проверял, эээээээ если че то не судите строга я только начинаю smile.gif

Да и ИТЕМ трупа появляеться в инвенторе плейса.
Добавлено в [mergetime]1128016406[/mergetime]
Все оказалось на много проще вот там где СЕТЛОКЕД вот что надо

Neverwinter Script Source
void main()
{
object oPC = GetLastDamager();
int iD = GetTotalDamageDealt();// эта функция получает общее кол-во демага

// запоминаем дамаг
SetLocalInt(OBJECT_SELF, "DAMAGE", GetLocalInt(OBJECT_SELF, "DAMAGE") + iD);

if(GetLocalInt(OBJECT_SELF, "DAMAGE") >= 15)// откроется при общем ущербе >= 15
{
OpenInventory(OBJECT_SELF, GetLastDamager());
AssignCommand(oPC, SpeakString("Похоже объект открылся"));
}
}


Можь так будет открывать плиииззззззз посмотрите кто нить в тулсете???? если не сложно
-fenix-
QUOTE (acdcee @ Sep 29 2005, 21:30)
Да и Феникс спасибо за помощь посижу подумаю на счет открытия инвенторя можь че получиться

QUOTE (acdcee @ Sep 29 2005, 21:30)
А помоему вот такая есть функция [NSS]OpenInventory , и вот так вот мона ?

А зачем я писал вот это
QUOTE (-fenix- @ Sep 29 2005, 17:19)
Есле ты хочешь, чтобы открылась менюшка с инвентарем, то могу огорчить, так вроде не льзя у плейсов, только у Creature


Читаем Лексикон
QUOTE

Description
Opens a creature's inventory panel. DMs can see any player's inventory. Players can view their own inventory, or that of a henchman, familiar, or animal companion.

DM's never have a script to actually call this, however, they can just open it up via. the dial menu when they right click on a creature-object, if they are in the same area as the object.

Remarks
Trying to open the inventory of an object that doesn't fit into one of the aforementioned categories will not work.

This function is used with the SoU henchman system. When the player presses the "open henchman inventory" button, a silent shout is sent which the henchman hears. This is picked up on in the OnConversation script, which calls the bkRespondToHenchmenShout function in x0_inc_henai, which ultimately calls OpenInventory.


QUOTE (acdcee @ Sep 29 2005, 21:30)
Вот скрипт на то что бы появлялся итем трупа после смерти игрока, появляеться плейс в политре(Труп только видимый я брал) И в ХБ ставил такой скрипт

Что-то ни чего не понял. Но чтобы сделать как ты хочешь скрипт нужно ставить на OnPlayerDeath и на OnPlayerDying. В нем нужно определять координаты игрока, создавать на них из палитры труп и переносить на него инвентарь игрока(если нужно), самого игрока кидать в другую локу или еще что с ним делать.


QUOTE (acdcee @ Sep 29 2005, 21:30)
Вопрос еще вот какой, есть скрипты которые запоминают время и место нахождения игрока после выхода, так вот как идет это сохранение, в том плане это кк запись и проверка каждого перса т.е создания на сервере отдельных файлов или ....... ?
Проблема в квестах еще не опробаванно но при рестарте по идеи все обнуляеться или не прав я ?

Для этого есть Базы данных, куда записываются все нужные параметры. Поэтому если что-то случается с сервером, то информация сохр. в БД, правда если она успела сохраниться smile.gif
Вроде так.

QUOTE (acdcee @ Sep 29 2005, 21:30)
Воооо и еще такой вот вопрос, пока еще не дошел до этого но думаю пойму. Так вот как сделать так что бы после смерти игрока на его месте остался труп полностью такой же как и игрок т.е в доспехах, иглавное я додумал как его мона в пак брать но проблема вот с этим может кто помочь ?

Скорее всего не получется. Ведь, для этого нужно существо у которого есть слоты, в которые можно одеть вещи. У трупов в палитре(они плейсы) есть только инвентарь. Может можно где-нить в закрытой локе умертвлять НПС, потом портать этот труп на место смерти игрока и переносить на него одетые на ПС вещи. Но почему-то мне кажется, что так не получется dntknw.gif
Может можно сделать плейс с инвентарем, но это уже в другой форум?

Если у вас шард, то очень советую почитать и поспрашивать в форуме Шарды рунета.

QUOTE (acdcee @ Sep 29 2005, 21:30)
И еще объесните мне как слокалками работать, с локальными и не только переменными

Читай туториал айвана, на примере диалогов должен понять!


QUOTE (acdcee @ Sep 29 2005, 21:30)
Вот часть скрипта на проверку о наличии в руке оружия если я не ошибаюсь, если у перса есть лом в руке так называемый добывающий инструмент то как сделать так что бы если нету лома, и он бьет мечом то при ударе мечом по плейсу наносилса бы 0 дамага.

Ну да часть, но тут опроверяется само наличие оружия в руке, а тебе нужно определенное, поэтому после проверки нужно смотреть таг оружия, если он совпадает с тагом лома, то делать что нужно. А вот чтобы 0 демага наносилось наверное не льзя, ведь это событие будет запускаться на OnDamaged плейса, что уже подразумевает нанесение ущерба, можно просто после нанесения удара по плейсу востанавливать ему хиты.
А можно при вхождении ПС в локу или если он надевает какойто предмет проверять в какой он локе находится. Если в той, где есть шахты, то делать все камни сюжетными, если у ПС надет не лом, а если лом, то снимать сюжетные галки. Так оно наверное получется. good.gif

QUOTE (acdcee @ Sep 29 2005, 21:30)
А на счет бутылок то да что бы вообще не соединялись. Просто я вместо обычныхбутелей под типа воды для реста использую бутыли типа лечения легких ран и т.д, а они соединяються как одно целое вот в чем косяк

Ну почему косяк? Так и было задумано, св-во у них такое. Если тебе так не надо, то не делай рест с помощью этих бутылей, сделай с использованием каких-нить камней, цветочков и прочей мелочи, у которой нету стека.
Тогда им нужно добавлять в св-вах Наложить заклинание: Уникальная сила - только на себя[а дальше сколько раз можно юзать]. Это событие отслеживается в OnActivateItem в св-вах модуля.

З.Ы Ну и спросил ты. Тогда завтра более подробно напишу, если больше ни кто не ответит и если тебе будет нужно.
Geck0
Aiwan, спасибо за ссылку!
Я про эту статью в PDF и говорил. Ну все - займусь поиском NwN'ов.
Если еще будут вопросы - напишу. dirol.gif
-fenix-
yudgi, это обсуждается в другом месте - ТУТ
Lex
вмазать шоль всем по преду за оффтоп?
*думает*

пока я все посты по теме СОУ, ХОТУ, и прочего туда перенес.
-fenix-
2 acdcee

К вопросу про лом. Все оказалось просто вот два скрипта

Один на OnEnter локи или тригера.
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
object oPlace = GetObjectByTag("ТАГ КАМНЯ");

if(oItem != OBJECT_INVALID)
{
    if(GetTag(oItem) == "ТАГ ЛОМА")
    {
        SetPlotFlag(oPlace, FALSE);
    }
    else
    {
        SetPlotFlag(oPlace, TRUE);
    }
}
}


И один на OnPlayerEquipItem в св-вах модуля.
Neverwinter Script Source
void main()
{
object oPC = GetPCItemLastEquippedBy();
object oItem = GetPCItemLastEquipped();
object oPlace = GetObjectByTag("ТАГ КАМНЯ");

if(oItem != OBJECT_INVALID)
{
    if(GetTag(oItem) == "ТАГ ЛОМА")
    {
        SetPlotFlag(oPlace, FALSE);
    }
    else
    {
        SetPlotFlag(oPlace, TRUE);
    }
}
}

Все работает!
Lex
Этот вариант сработает тока в сингле.. в мульте будет так, что игрок А берет лом, а игрок Б двуручем своим крушит камень.

Лучше сделать на onAttack объекта.
Если в руках лом, то снять плот, иначе повесить.

Neverwinter Script Source
void main()
{
object oAttacker = GetLastAttacker();
object oW = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oAttacker);
if (GetTag(oW)!="ITM_HANDAXE")
    {
    AssignCommand(oAttacker,ClearAllActions(TRUE));
    SetPlotFlag(OBJECT_SELF,TRUE);
    AssignCommand(oAttacker,SpeakString("мне нужен топорик"));
    }
else
    {
    if (GetPlotFlag())
        SetPlotFlag(OBJECT_SELF,FALSE);
    }
}

Вот так я делал, чтобы рубить деревья можно было только топором.
+ еще проверку на левую руку надо делать, чтобы там не было ничего, либо только топор.


acdcee
Neverwinter Script Source
void main()
{
object oPC = GetLastDamager();
int iD = GetTotalDamageDealt();// ??? ??????? ???????? ????? ???-?? ??????

// ?????????? ?????
SetLocalInt(OBJECT_SELF, "DAMAGE", GetLocalInt(OBJECT_SELF, "DAMAGE") + iD);

if(GetLocalInt(OBJECT_SELF, "DAMAGE") >= 20)// ????????? ??? ????? ?????? >= 15
{
CreateItemOnObject("rubin",oPC,1);

}
}


ЭЭЭ ну вот и заработал, если не отрываеться пак плейса то я просто при определенном дамаге создаю итем игроку а вот если сделать его еще и рэндомным то вообще будет замечательно smile.gif
Добавлено в [mergetime]1128075403[/mergetime]
А вот я как то спрашивал не давно как сделать так что бы после смерти игрока оставался его полный труп с доспехами но при этом открывая пак НПС слежащего заместо игрока
QUOTE
Скорее всего не получется. Ведь, для этого нужно существо у которого есть слоты, в которые можно одеть вещи. У трупов в палитре(они плейсы) есть только инвентарь. Может можно где-нить в закрытой локе умертвлять НПС, потом портать этот труп на место смерти игрока и переносить на него одетые на ПС вещи. Но почему-то мне кажется, что так не получется 
Может можно сделать плейс с инвентарем, но это уже в другой форум?


А если за ранее сделать так что бы он появлялся мертвым типа уже с эффектом дамага и 0 хитов,

и в этом случае читать все локалки с игрока и переносить на НПС и еще два момента:

1.Делать проверку на то перс женского пола и мужского,т.е если умерла девушка то труп девушка smile.gif
2.Читая локалки с умершего игрока и раздевая присмерти игрока (все в лут)делать копии и командой одевать труп НПС (только вот я говорю на счет НПС в политре )ведь по моему есть команды и локалки которые это позволяют smile.gif????

Если я не прав то поправте меня!!
Добавлено в [mergetime]1128075852[/mergetime]
А вот я как то спрашивал не давно как сделать так что бы после смерти игрока оставался его полный труп с доспехами но при этом открывая пак НПС слежащего заместо игрока
QUOTE
Скорее всего не получется. Ведь, для этого нужно существо у которого есть слоты, в которые можно одеть вещи. У трупов в палитре(они плейсы) есть только инвентарь. Может можно где-нить в закрытой локе умертвлять НПС, потом портать этот труп на место смерти игрока и переносить на него одетые на ПС вещи. Но почему-то мне кажется, что так не получется 
Может можно сделать плейс с инвентарем, но это уже в другой форум?


А если за ранее сделать так что бы он появлялся мертвым типа уже с эффектом дамага и 0 хитов,

и в этом случае читать все локалки с игрока и переносить на НПС и еще два момента:

1.Делать проверку на то перс женского пола и мужского,т.е если умерла девушка то труп девушка smile.gif
2.Читая локалки с умершего игрока и раздевая присмерти игрока (все в лут)делать копии и командой одевать труп НПС (только вот я говорю на счет НПС в политре )ведь по моему есть команды и локалки которые это позволяют smile.gif????

Если я не прав то поправте меня!!
-fenix-
QUOTE (acdcee @ Sep 30 2005, 14:07)
ЭЭЭ ну вот и заработал, если не отрываеться пак плейса то я просто при определенном дамаге создаю итем игроку а вот если сделать его еще и рэндомным то вообще будет замечательно

Ну это уж, как тебе надо по задумке!

QUOTE (acdcee @ Sep 30 2005, 14:07)
А вот я как то спрашивал не давно как сделать так что бы после смерти игрока оставался его полный труп с доспехами но при этом открывая пак НПС слежащего заместо игрока

Труп ПС в любом случае не льзя заставить лежать труп - это сам ПС, просто в мертвом состоянии, когда ПС рестится, то трупу просто восполняются хиты.

Теперь про создание трупа. Синьку скриптами изменять не льзя!!!! Ты должен будешь создать себе кучу НПС причем еще учесть не только пол, но и расу возможного ПС и дать ему свой РесРеф. И потом функцией CreateObject создавать этого чела на месте смерти ПС, при чем с уникальным тагом и именнем, они будут зависить скорее всего от имени ПС. Все локалки и прочее с НПС можно делать только после его создания!

Когда я говорил, что не получется я вот, что имел ввиду:
Я не слышал, чтоб где нить на шарде такое было(а может я просто не слышал). Просто CreateObject - это очень серьезная функция, она жрет много ресурсов, а умереть может несколько челов, кроме того на шарде и так много чего крутется.

А так, вот маленький скриптик на onEnter тригера для создание дохлого НПС.
Neverwinter Script Source
void main()
{
object oNPC = CreateObject(OBJECT_TYPE_CREATURE, "РесРеф", Location(GetArea(OBJECT_SELF), GetPosition(OBJECT_SELF), GetFacing(OBJECT_SELF)));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_MAGICAL, GetMaxHitPoints(oNPC), DAMAGE_POWER_NORMAL), oNPC);
}
AliceDiren
acdcee , создай в палитре два персонажа с вот таким скиптом на OnSpawn
Neverwinter Script Source
void main()
{
ActionDoCommand(SetIsDestroyable(FALSE));
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),OBJECT_SELF));
}

определяй соответственно, как ты и писал, пол и на место смерти игрока вставляй. А предметы из инвентаря переноси.

А еще можно вот так скопировать твоего героя
Neverwinter Script Source
object oPC = GetLastPlayerDied();
location lPC = GetLocation(oPC);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(50), lPC);
object oCopy1 = CopyObject(oPC, lPC, OBJECT_INVALID, "oPCClone");
ActionDoCommand(AssignCommand(oCopy1, SetIsDestroyable(FALSE)));

И в получившийся oCopy1 переносишь весь инвентарь. И в соответствующие слоты тоже.
Добавлено в 14:51
Во втором примере скрипта забыла добавить строку
Neverwinter Script Source
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDeath(),oCopy1));

Добавлено в 14:53
А реального игрока переносишь в другую локу
acdcee
Пасибо большое yahoo.gif yahoo.gif yahoo.gif yahoo.gif
Добавлено в [mergetime]1128083305[/mergetime]
Кстатеу меня вот еще один вопрос скрипт есть у меня на крафт(хотя их и так много), если не выложил это плохо? Но не в этом дело а дело стоит ли в него вносить проверку скилла крафта оружия или армора...... Т.е типа если не набран уровень скилла то вероятность провала крафта или же просто не доступность крафта?Если у кого то такая идея есть то это чисто случайность у меня не у кого не выдерал smile.gif
-fenix-
В любом случае у мертвой Creater не льзя посмотреть инвентарь. Поэтому рядом на этом же месте надо будет создавать еще и не видимый инвентарь и забирать с собой труп то же через него. А это еще лишний раз CreateObject!!!!!

QUOTE (AliceDiren @ Sep 30 2005, 15:50)
А еще можно вот так скопировать твоего героя

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


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

QUOTE (acdcee @ Sep 30 2005, 16:24)
Т.е типа если не набран уровень скилла то вероятность провала крафта или же просто не доступность крафта?

А зачем еще нужны скилы крафта???

К сведению, тут вопросы чисто по тулсету, как что-нить воплотить или сделать в нем.
А размышления и вопросы о структуре, насыщенности... шарда в других форумах. Скажем Мастерские фентази или Шарды рунета.
AliceDiren
QUOTE
А как потом работать с копией???

А как ты работаешь с объектами? И почему нельзя посмотреть инвентарь? Посмотри первую главу HotU, эта идея реализована там.
Единственная проблема будет при работе с трупом. Тут конечно придется подумать, но если вообще не думать, тогда как делать что-то?
А вообще работать с этой копией можно как с любым существом.
Isendel
Возможно не в тему, но можно ли как-то сделать из нескольких нпс один предмет, да еще и могущий двигаться? Например, чтобы создать впечатление маршерующией армии. unsure.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.