Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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
DroWishSoul
QUOTE (-fenix- @ Jul 20 2005, 08:21)
Тут вот в прохождении спрашивали, что значит меч +1 и у меня возникло массу других вопросов, что значит...
Есть какой-нить хелп, FAQ, по этому поводу? Наверное в лицензионных играх есть статьи, где объясняются все параметры и скилы, но в пиратке этого нет. Где можно это достать?

Откуда можно это достать, я не знаю, всё узнавал по собственному опыту.
Если надо, то попробуй поискать на яндексе. Хотя, я почти уверен, что такие FAQ есть на какой-нибудь игромании в архивах или на ЛКИ.
Добавлено в 12:53
Помогите еще раз со скриптом... мне надо, чтобы в определенный промежуток времени (например, с 21 вечера до 6 утра) объект (например, NPC с тагом "tag") делал определенные действия (например, сидел (то есть, анимация, а не отдых))
вот так... да, и куда этот скрипт всунуть? dntknw.gif
Daemonix
DroWishSoul
Если не ошибаюсь, было в базе скриптов. Но где-то точно было.
Добавлено в [mergetime]1121863071[/mergetime]
Вот, у меня тоже вопрос. Как сделать так:
вот непись, а вот его вэйпоинты. Сначала он идёт на первый WP, ждёт 10 сек, потом на второй, ждёт 10 сек и т.д. Где-то это было, но я ОЧЕНЬ ограничен во времени сидения в инете, чтобы искать.
-fenix-
DroWishSoul, вот самое простое, ставим на OnHeartbeat

Neverwinter Script Source
void main()
{
object oNPC = OBJECT_SELF;

if (GetTimeHour() >= 21 || GetTimeHour() <=6) // проверяем время

    {
    AssignCommand(oNPC,ActionPlayAnimation(ACTION_SIT, 1.0, 10.0)); // совершаем любое действие
    }

    else
    {
    // иначе что-то еще
    }
}
Dik Morris
Вот и ответ на твой вопрос, просто нарисуй триггер (надеюсь ты знаешь что это такое) и на onEnter поставь вот этот скриптик
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
object oNPC = GetObjectByTag("Тэг твоего NPC");
object oWP_1 = GetWaypointByTag("Тэг первого вайпоинта");
object oWP_2 = GetWaypointByTag("Тэг второго вайпоинта");
object oWP_3 = GetWaypointByTag("Тэг третьего вайпоинта");

if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
return;
SetLocalInt(OBJECT_SELF,"TRIGGER",1);

ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oWP_1)));
ActionWait(10.0);
ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oWP_2)));
ActionWait(10.0);
ActionDoCommand(AssignCommand(oNPC, ActionMoveToObject(oWP_3)));
ActionWait(10.0);
}

P.S: обрати внимание что ты сам можешь указать время, (ActionWait) добавить анимацию, фразы…
DroWishSoul
Благодарю.
Добавлено в 16:49
есть ещё вопросы:
fenix, можно ли подобное сотворить НЕ через HeartBeat, а, например, с наступлением определенного времени NPC должен делать действие?
а ACTION_SIT - это имеется ввиду сидение на стуле? Мне нужно, как при отдыхе... Но когда я ставлю ACTION_REST, он почему-то заваливается на спину с громким хлопком, а не садится на пол (а при ACTION_SIT не происходит ничего).
-fenix-
QUOTE (DroWishSoul @ Jul 20 2005, 16:16)
а ACTION_SIT - это имеется ввиду сидение на стуле? Мне нужно, как при отдыхе... Но когда я ставлю ACTION_REST, он почему-то заваливается на спину с громким хлопком, а не садится на пол (а при ACTION_SIT не происходит ничего).


Да, это я ступил надо вот, что писать ANIMATION_LOOPING_SIT_CROSS.

QUOTE (DroWishSoul @ Jul 20 2005, 16:16)
можно ли подобное сотворить НЕ через HeartBeat, а, например, с наступлением определенного времени NPC должен делать действие?


На сколько я знаю, специального слота, для ночного и дневного события нет!
Так, что проверяем это через хертбит каждые 6 секунд.
Если беспокоит, что он ночью каждые 6 секунд приказы отдает то можно так сделать.
Neverwinter Script Source
void main()
{
object oNPC = OBJECT_SELF;

if (GetTimeHour() >= 21 && GetLocalInt(oNPC, "Ночь") == 0 ||
    GetTimeHour() <=6 && GetLocalInt(oNPC, "Ночь") == 0)

    {
    AssignCommand(oNPC,ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 10.0));
    SetLocalInt(oNPC, "Ночь", 1);
    }

    else
    {
    if (GetLocalInt (oNPC, "Ночь") == 1)
        SetLocalInt(oNPC, "Ночь", 0);
    }
}
DroWishSoul
fenix, большое спасибо.
Zirrex
-fenix- ну и нагромоздил же ты скрипт, а не проще ли написать так:

Neverwinter Script Source
void main()
{
    if (GetLocalInt(OBJECT_SELF, "Night") == FALSE)
    {
        if (GetTimeHour() >= 21 || GetTimeHour() <= 6)
        {
            AssignCommand(OBJECT_SELF, PlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 9999.0));
            SetLocalInt(OBJECT_SELF, "Night", TRUE);
        }
    }
    else
    {
        SetLocalInt(OBJECT_SELF, "Night", FALSE);
    }
}

И делать это надо не на хартбит, а на эвент OnRested. На эвенте хартбита при определенных условиях просто заставлять использовать функцию сна, в скрипте которого уже будет прописан сей скрипт. Желательно также сделать условия, что если с НПС заговорили, то переменную стереть, но пока он говорит, не садиться, и т.п.

Dik Morris, не совсем понял, зачем триггер? Достаточно указать НПС, что от него требуется, и он уже сам будет делать то что надо. Скрипт же можно изобразить гораздо проще. Тем более есть такие возможности. Правим код на хартбите:

Neverwinter Script Source
WalkWayPoints(FALSE, 10.0);

На OnSpawn убираем или комментируем "WalkWayPoints();"
-fenix-
QUOTE (Zirrex @ Jul 20 2005, 20:43)
а не проще ли написать так:

Проще, ну дак я сам только учусь smile.gif
Zirrex, а зачем на OnRested, я че та не совсем допер, растолкуй плизз dntknw.gif

З.Ы Дошла моя кутсценка dntknw.gif
Daemonix
Спасибо Dik Morrsу и Zirrexу!
Кто-нибудь знает как на OnDeath непися постаить добавление записи в журнал игрока?
DroWishSoul
Daemonix, наверное, вот так:
Neverwinter Script Source
void main()
{
  object oPC = GetLastKiller();
  AddJournalQuestEntry("TAG", ID, oPC); // вводим вместо TAG тэг квеста в журнале, а вместо ID - ID записи (это все вводится в Journal Editore)
}

PS Это если на случай, что ты его убил... эхм... а если его убьет твой фамилиар... мда... меня лучше не слушать swoon.gif
-fenix-
Не много дополню
QUOTE (Daemonix @ Jul 20 2005, 20:56)
Кто-нибудь знает как на OnDeath непися постаить добавление записи в журнал игрока?

Есть функция
Цитата из перевода Valleo
Neverwinter Script Source
void AddJournalQuestEntry(string szPlotID, int nState, object oCreature, int bAllPartyMembers=TRUE, int bAllPlayers=FALSE, int bAllowOverrideHigher=FALSE)

string szPlotID - это плот ID, который создается при создании записи в toolset&#39;s Journal Editor
int nState - номер статейки, которую надо записать в ваш журнал, тоже найдете в toolset&#39;s Journal Editor
object oCreature - каму добавится запись в журнал
int bAllPartyMembers - если TRUE - запись добавится всем партийцам
int bAllPlayers - если TRUE - запись добавится ВСЕМ в этом МИРЕ
int bAllowOverrideHigher - если TRUE - вы сможете установить номер записи, меньшИй, чем текущий. То есть если номер текущей записи в квесте szPlotId - N, то с этой опцией вы сможете установить любой номер, меньший N. Это полезно в случае отката квеста на некоторое время назад, либо при множественном выборе номер, когда точно неизвестно, будет ли номер больше текущего, либо меньше.
Zirrex
Daemonix при смерти НПС добавляешь запись в журнал персонажа. Правда, НПС должен быть уникальным:

Neverwinter Script Source
void main()
{
    object oKiller = GetLastKiller();

    if (GetIsPC(oKiller) && (GetLocalInt(oKiller, "NW_JOURNAL_ENTRYJOUR_Save") < 10))
    {
        AddJournalQuestEntry("JOUR_Save", 10, oPC, TRUE, TRUE);
    }
}

Строчка "(GetLocalInt(oKiller, ""NW_JOURNAL_ENTRYJOUR_Save") < 10)", если у тебя не одна запись, и в данном случае добавляется первая.

На будущее, если есть какой-то вопрос, попробуй что-то подобное найти в одиночных модулях игры, там примеров просто море.

DroWishSoul, так надо выделить, кто убивает НПС.

-fenix-, да, сценка дошла, немного повозился с ней, скоро пришлю. Ты там очень много поставил таких вещей, как "ActionDoCommand", когда внутренняя функция уже имела "Action...".
Aiwan
Не надо изобретать велосипедов. Все уже давно написано за вас и не так криво...
Neverwinter Script Source
void WalkWayPoints(int nRun = FALSE, float fPause = 1.0)

Стандартная функция Биовар. Если прописать так:
Neverwinter Script Source
WalkWayPoints(FALSE, 10.0);

То будет ходить по поинтам и ждать ровно 10 секунд. Если повесить на поинт локалку X2_L_WAYPOINT_SETFACING становится лицом в сторну вепоинта.

QUOTE (DroWishSoul @ Jul 20 2005, 11:29)
Помогите еще раз со скриптом... мне надо, чтобы в определенный промежуток времени (например, с 21 вечера до 6 утра) объект (например, NPC с тагом "tag") делал определенные действия (например, сидел (то есть, анимация, а не отдых))
вот так... да, и куда этот скрипт всунуть?

То же самое, читаем спавн скрипт на НПС по дефолту. Там написано что надо разкомментировать, что бы НПС ходил домой ночью. И даже как назвать скрипт что будет запускаться когда он дойдет до ночного поинта отдыха. А что он будет делать, решать вам.

LocalString X2_S_SLEEP_AT_NIGHT_SCRIPT == "имя_скрипта_на_ночь" - Стринг на модуле - запускает скрипт ночью на НПС надо NW_FLAG_SLEEPING_AT_NIGHT
Neverwinter Script Source
SetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT);

Zirrex
Aiwan, так он же хочет, чтобы он не уходил, а просто сидел ночью. Чтобы НПС ушел, это не сложно, а вот чтобы сидел в определенный промежуток времени, надо бы уже иначе.

-fenix-, потому что, чем меньше подобных скриптов на хартбите, тем лучше. Если не указать определенных условий, он будет делать подобное, в данном случае, сидеть, когда ему захочется этого, точнее велит сам скрипт. Если не хартбите сделать команду отдыха, когда НПС в режиме покоя, т.е. с ним никто не разговаривает, не бьет, или он сам не сражается, причем не "ActionRest", а "ForceRest", чтобы он сел отдыхать, при этом будет выполняться соответствующий скрипт.

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

Непись:
- Пошёл отсюда!

Герой(вар.1):
<убеждение> Успокойся, я хочу помочь!

Герой(вар.2):
Ладно, пойду.

При первом варианте может быть так:

Непись(вар.1)
<успех>Да, ты прав... Мне надо расслабиться...

<неудача> Нет, я тебе не верю. Вали прочь!


Так вот, с появлением фразы
QUOTE

<убеждение> Успокойся, я хочу помочь!

я уже разобрался, а как далее?
Puh
Имеешь в виду как сделать проверку на скил, т.е. если достаточно, то вариант <успех>, а если не хватает, то второй вариант? Если да, то на вариант ответа неписи "Да, ты прав..." вешай что-нибудь типа такой фигни:
(во вкладке "надпись появляется при")

int StartingConditional ()
{
object oPC = GetPCSpeaker ();
if (!(GetAbilityScore(oPC, ABILITY_INTELLIGENCE) >= 15'к примеру')) return FALSE;
return TRUE;
}

на второй вариант можешь повесить почти тоже самое, только измени знаки >= на <, хотя это делать не обязательно(в смысле вешать второй скрипт yes.gif ).

ЗЫ: если я неправильно понял твой вопрос, то извини...
Aiwan
Daemonix открой любой диалог в ПЛ к примеру и посмотри как сделано. Все описывать тебе просто замучаешься... Там все просто. Я лично разбирался глядя на диалоги Биовар.
DroWishSoul
Эх... еще вопрос... как NPC заберет у меня 5 предметов с одним тагом во время диалога?
PS Уже стыдно спрашивать blush.gif
zmey
Люди добрые! (Гномы, эльфы и иже с ними) помогите ради всех богов! Нужно мне несколько спутников взять с собой. (2- 5) а больше одного не получается. Чего им нужно, блин? diablo.gif
Daemonix
QUOTE
zmey
Люди добрые! (Гномы, эльфы и иже с ними) помогите ради всех богов! Нужно мне несколько спутников взять с собой. (2- 5) а больше одного не получается. Чего им нужно, блин?


Всмысле каких спутников? Чтобы неписи просто шли за тобой или их морды появлялись в правом верхнем углу?(фамилиары) В последнем случае более одного никогда не видел... swoon.gif
zmey
для daemonix: а в hordes? там было двое!
-fenix-
DroWishSoul, тут не давно было, вылелось в функцию
Neverwinter Script Source
int removeStackItems(object oInventory, string sItem, int nNum)
{
  object oItem = GetFirstItemInInventory(oInventory);
  int nCount = nNum; // столько итемов осталось удалить
  while(GetIsObjectValid(oItem) && (nCount > 0))
  {
    if(GetTag(oItem) == sItem)
    {
      int nStack = GetItemStackSize(oItem);
      if (nStack <= nCount)    // ЕСЛИ в стопке предметов меньше,
      {                        // чем нам нужно удалить:
        DestroyObject(oItem);  // - удаляем все стопку
        nCount-=nStack;        // - уменьшаем счетчик на кол-во уд-х пред-ов
      } else                     
      { // ИНАЧЕ сокращ. размер стопки и обнуляем счетчик
        SetItemStackSize(oItem, nStack-nCount);
        nCount = 0;
      }
    }
    oItem = GetNextItemInInventory(oInventory);
  }
  return nNum - nCount; // возвращаем кол-во уд-х пред-ов
}

zmey, на сколько я понимаю, то только в хорде так и можно делать, а вообще то же где-то это было.
Где-то нужно поставить максимум хенчменов, посмотри в темках.
DroWishSoul
Не пойму никак... где же тут указывается таг вещей?
Аваддон
QUOTE (DroWishSoul @ Jul 21 2005, 13:03)
Не пойму никак... где же тут указывается таг вещей?

В параметрах вещи.
-fenix-
Neverwinter Script Source
int removeStackItems(object oInventory, string sItem, int nNum)

object oInventory - объект в инвентаре которого нужно удалить вещь.
string sItem - тег вещи, которую надо удалить.
int nNum - кол-во, сколько надо удалить.


DroWishSoul
QUOTE (Аваддон @ Jul 21 2005, 13:09)
В параметрах вещи.

Я имел ввиду скрипт.
-fenix-
Это функция, кОторая это делает, что тебе надо
Neverwinter Script Source
int removeStackItems(object oInventory, string sItem, int nNum)

object oInventory - объект в инвентаре которого нужно удалить вещь.
string sItem - тег вещи, которую надо удалить.
int nNum - кол-во, сколько надо удалить.


Это так сказать объяснение, что это функция делает
Neverwinter Script Source
{
  object oItem = GetFirstItemInInventory(oInventory);
  int nCount = nNum; // столько итемов осталось удалить
  while(GetIsObjectValid(oItem) && (nCount > 0))
  {
    if(GetTag(oItem) == sItem)
    {
      int nStack = GetItemStackSize(oItem);
      if (nStack <= nCount)    // ЕСЛИ в стопке предметов меньше,
      {                        // чем нам нужно удалить:
        DestroyObject(oItem);  // - удаляем все стопку
        nCount-=nStack;        // - уменьшаем счетчик на кол-во уд-х пред-ов
      } else                   
      { // ИНАЧЕ сокращ. размер стопки и обнуляем счетчик
        SetItemStackSize(oItem, nStack-nCount);
        nCount = 0;
      }
    }
    oItem = GetNextItemInInventory(oInventory);
  }
  return nNum - nCount; // возвращаем кол-во уд-х пред-ов
}

Чтобы воспользоваться функцией надо все, что я написал в первом ответе кинуть в файл скрипта и в нужном месте просто пользоваться функцией.

З.Ы описание должно быть до использование функции, лучше всего в самом начале.
З.З.Ы а еще лучше скинуть ее в отдельный файл и подключить его как инклюд!
DroWishSoul
Ладно, я уже по-другому сделал, спасибо.
Daemonix
QUOTE
zmeyдля daemonix: а в hordes? там было двое!

Хм, просто я не играл в Hordes. У меня только Shadows of Undertide есть. Но скоро куплю.
Добавлено в [mergetime]1121977284[/mergetime]
З.Ы. Думаете, есть смысл делать мод для непрокачанного героя?
dumbo
QUOTE (zmey @ Jul 21 2005, 11:25)
больше одного не получается. Чего им нужно, блин?

в скрипт OnModuleLoad добавь строку:
Neverwinter Script Source
SetMaxHenchmen(5);
Dik Morris
Daemonix ты имеешь в виду мод для героя первого уровня? Дык конечно лучше делать, чтобы начинать первоуровневым игроком, а потом прокачать его (по ходу игры) скажем до 20 biggrin.gif. Лично я так и делаю, у себя.
Добавлено в [mergetime]1122021364[/mergetime]
QUOTE
Хм,.. инетресно. А кто-нибудь в курсах, как можно при разговоре с неписём:

Непись:
- Пошёл отсюда!

Герой(вар.1):
<убеждение> Успокойся, я хочу помочь!

Герой(вар.2):
Ладно, пойду.



Daemonix! Наверно скорее всего я опоздал dntknw.gif … Но если нет, или если ты до конца не понял тогда смотри:

Пример:
NPC: Привет игрок! У меня есть деньги!
Игрок: (убеждение) Не поделишься богатством?
1) Вариант ответа NPC, при срабатывании убеждения:
Конечно на, я не жадный!
2) Вариант ответа NPC, при провале убеждения:
Нет! Пошел ты!
Дык вот, Первый вариант появляется если в закладку ПОЯВЛЯЕТСЯ ПРИ, добавить этот скрипт:
Neverwinter Script Source
#include "nw_i0_tool"

int StartingConditional()
{
    if(!(AutoDC(DC_EASY, SKILL_PERSUADE, GetPCSpeaker())))
        return FALSE;

    return TRUE;
}

Ты можешь сам делать такие скрипты, просто в Мастере скриптов (Это в редакторе диалога, ты наверное знаешь) ПОЯВЛЯЕТСЯ ПРИ -> МАСТЕР СКРИПТОВ -> КРИТЕРИЙ УМЕНИЙ и проверяешь убеждение…
P.S: У меня стоит Hordes of the Underdark, а у тебя ведь Shadows of Undrentide может что не сойдется…но вроде и должно.
Daemonix
Спасибо, Dik Morris!


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

Объяснение просто:
Берём непися, создаём ему разговор: а там, в разговоре делаем ему 4(можете сколько угодно) разных приветствия.
Я пробовал на таких:
-Привет!
-Тебе нравится наш город!
-Похоже ты не местный!
-Я бы посоветовал тебе пойти в таверну!

И привязываем к каждому приветствию условие появления:
CODE
int StartingConditional()
{

// Вместо 4 ставим своё кол-во реплик
if(Random(4) >= 1)
 return FALSE;

return TRUE;
}

Вот. Я всё проверил и вроде пашет. Но лучше всего увеличьте число реплик с 4 до 8-10.
Dik Morris
Daemonix попробовал я твой скрипт yes.gif, все вроде нормально но вот иногда НПС молчит и приходится повторно щелкать, напрягает знаете ли unsure.gif ...Но можно делать проверкой, случайно (ТЕКСТ ПОЯВ. ПРИ СЛУЧАЙНО) так тоже нечего, и не надо каждый раз другие скрипты делать т.к не у всех ведь неписей одинаковое кол-во фраз, у кого-то больше, у кого-то меньше.
Daemonix
Да, это верно. Надеюсь, можно будет что-нибудь доработать. А такой простой скрипт можно и в ScriptWizard'е сделать.
Zirrex
Daemonix хм... а зачем же "Random(4) >= 1"? У тебя получается, что говорить НПС будет только в одном случае. Лучше уж сделать тогда один скрипт, а диалог выполнить на токене. В скрипте расписать переключатель, и каждый раз НПС будет говорить разные фразы, причем молчать не будет никогда.
Daemonix
QUOTE
ZirrexЛучше уж сделать тогда один скрипт, а диалог выполнить на токене. В скрипте расписать переключатель, и каждый раз НПС будет говорить разные фразы, причем молчать не будет никогда.


В смысле? Пожалуйста, расскажи поподробнее.
Добавлено в [mergetime]1122056496[/mergetime]
З.Ы. Не очень хорошо разбираюсь в токенах.
Добавлено в [mergetime]1122056598[/mergetime]
З.З.Ы. Так и думал, что все сразу раскритикуют.
Dik Morris
Daemonix,
QUOTE
Так и думал, что все сразу раскритикуют.

Критика то необходима... куда уж без нее.
И вообще лучше делать не просто безмозглые фразы, а фразы со смыслом, пусть и не большим biggrin.gif .
Простой пример:
"Немедленно оденьтесь!" (Текст появ. при - вы без одежды)
"Господи! Да вы ранены!" (Текст появ. при - вы ранены)
"Нечего себе мускулы!" (Текст появ. при, проверка на силу)
"Ух, да ты еще совсем молодой!" (Текст появ. при - проверка на возраст)
"Здорово орк!" (Текст появ. при - раса)
"Привет варвар!" (Текст появ. при - класс)
Все это очень легко, и делается в визарде, и несомненно приукрасит диалог...
З.Ы: если нужны скрипты на одежду и ранение тогда скажи.
Валеско
QUOTE
"Ух, да ты еще совсем молодой!"


я бы заменил на что-то типа:
"Ей, парень, привет!"
"Юноша, отойдите с дороги"
и "Куда прешь, дедуган?!" при большом возрасте.
Daemonix
Dik Morris,
QUOTE
З.Ы: если нужны скрипты на одежду и ранение тогда скажи.


Да, кстати, пригодились бы, и вообще, хорошая идея!
Dik Morris
Daemonix!
Блин я тогда напутал что то извини в общем, дал тебе два одинаковых скрипта crazy.gif , сорри, вот исправил:
Вот скрипт если игрок ранен: (ставится на Текст. появ при)
Neverwinter Script Source
int StartingConditional()
{
    if ((GetLocalInt(OBJECT_SELF,"counter")!=3) && (GetLocalInt(OBJECT_SELF,"counter")!=1))
    {
        int roll=d100();
        if (roll>60)
        {
            int CurrentHP=GetCurrentHitPoints(GetPCSpeaker());
            int MaxHP=GetMaxHitPoints(GetPCSpeaker());
            if ((MaxHP/2)>=(CurrentHP))
            {
                return TRUE;
            }
            return FALSE;
        }
        return FALSE;
    }
    return FALSE;
}

А, скрипт если игрок не одет: (ставится на Текст. появ при)
Neverwinter Script Source
int StartingConditional()
{
    if ((GetLocalInt(OBJECT_SELF,"counter")!=1) && (GetLocalInt(OBJECT_SELF,"counter")!=2))
    {
        int roll=d100();
        if (roll>33)
        {
            object oItem=GetItemInSlot(INVENTORY_SLOT_CHEST,GetPCSpeaker());
            if(!GetIsObjectValid(oItem))
            {
                return TRUE;
            }
            return FALSE;
        }
        return FALSE;
    }
    return FALSE;
}

Daemonix
Dik Morris!

А не знаешь, как вообще сделать так, чтобы непись, которого ты побьёшь, переставал драться и начинал диалог? black eye.gif
Добавлено в [mergetime]1122113847[/mergetime]
Кстати говоря, спасибо!
Zirrex
Daemonix, необходимо, чтобы он перед боем сохранял на переменную значение твоей полной жизни, и когда ее бы оставалось мало, то твоей персонаж автоматически падал бы на колени, а НПС через некоторое время заводил диалог.

Посмотри здесь скрипт Айвана Скрипты. Том III.

Самый простой способ вывести сообщение по токену:

Neverwinter Script Source
int StartingConditional()
{
    string sMessage;
    int iRandom = d6();

    switch (iRandom)
    {
        case 1: sMessage = "Сообщение 1"; break;
        case 2: sMessage = "Сообщение 2"; break;
        case 3: sMessage = "Сообщение 3"; break;
        case 4: sMessage = "Сообщение 4"; break;
        case 5: sMessage = "Сообщение 5"; break;
        case 6: sMessage = "Сообщение 6"; break;
    }

    SetCustomToken(10000, sMessage);
    return TRUE;
}

В Диалоге НПС создаешь его ответ таким образом:

Neverwinter Script Source
<CUSTOM10000>

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

Dik Morris, а зачем ты постоянно в скриптах используешь переменные? Они у тебя хоть изменяются или так и остаются равными нулю? Если остаются, какой в них прок, только усложнение простого скрипта. Те же скрипты, только проще:

Neverwinter Script Source
int StartingConditional()
{
    object oPC = GetPCSpeaker();

    int CurrentHP = GetCurrentHitPoints(oPC);
    int MaxHP = GetMaxHitPoints(oPC) / 2;

    if (d100() > 60)
    {
        if (MaxHP >= CurrentHP)
        {
            return TRUE;
        }
        return FALSE;
    }
    return FALSE;
}

Neverwinter Script Source
int StartingConditional()
{
    object oPC = GetPCSpeaker();
    object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);

    if (d100() > 33)
    {
        if (!GetIsObjectValid(oItem))
        {
            return TRUE;
        }
        return FALSE;
    }
    return FALSE;
}
Daemonix
Спасибо, Zirrex, потом попробую.... А никто не знает, как делать диалог неотменяемым, т.е. жмёшь на ESC и всё равно остаёшься в нём? А то его очень надо дослушать.
-fenix-
Daemonix, ставишь в св-вах непися прям на первой заклатке, на против диалога, галочку "без прерывания".
Аваддон
-fenix- Ух ты! А я думал это для того, чтобы другим игрокам во время диалога, при кликах на НПС писалось что объект занятsmile.gif
Daemonix
Во, класс! А я чё-то ещё не могу найти в предметах, интерьере, ландшафтах такую фигню: большие ворота (локация типа "деревенский"). Не подскажете, где мне их найти?
Добавлено в [mergetime]1122227532[/mergetime]
Такие ворота были и в Игре в эпизоде 3 (если не ошибаюсь) на входе в город Лускан.
Aiwan
QUOTE (-fenix- @ Jul 24 2005, 21:18)
Daemonix, ставишь в св-вах непися прям на первой заклатке, на против диалога, галочку "без прерывания".

И что? Хочешь сказать не будет прерываться? biggrin.gif Будет. Надо принудилово ставить катсцену и стартовать диалог. Потом отменять в диалоге катсцену. Если уж учите чему, то проверяйте хотя бы. nea.gif
-fenix-
В особенностях есть несколько ворот!
QUOTE (Daemonix @ Jul 24 2005, 20:51)
Такие ворота были и в Игре в эпизоде 3 (если не ошибаюсь) на входе в город Лускан.

Это где, в ПЛ? Тогда наверно там они в хаке.

QUOTE (Aiwan @ Jul 24 2005, 21:35)
что? Хочешь сказать не будет прерываться? biggrin.gif Будет. Надо принудилово ставить катсцену и стартовать диалог. Потом отменять в диалоге катсцену. Если уж учите чему, то проверяйте хотя бы.

Я дог глубины души был уверен, что он не будет прерываться sad.gif (хотя не когда не пробовал smile.gif )
Daemonix
QUOTE
адо принудилово ставить катсцену и стартовать диалог. Потом отменять в диалоге катсцену.


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