Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
zmey
fenix, спасибо!!! crazy.gif
BoB4ik
Ребята, мне очень нужен Trueseeing скрипт(чтобы допустим ставил вместо него еффект See Invisibility и +20 к споту),я сам скриптить не умею, искал в разных местах, не нашел, а без него, воры у меня на шарде практически не встречаются...
Помогите пожалуйста, буду благодарен.
Batkom
я например заменил трусы на заклинание превращения цели в слабое существо(корова, пингвин, крыса, курица), если не прокинет спас по воле. Имхо так интереснее.
Zirrex
BoB4ik ищи в модуле скрипт "nw_s0_truesee". Изменяем код:

Neverwinter Script Source
#include "x2_inc_spellhook"

void main()
{
    if (!X2PreSpellCastCode())
    {
        return;
    }

    //Declare major variables
    object oTarget = GetSpellTargetObject();
    effect eVis = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT);
    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
//    effect eSight = EffectTrueSeeing();
//->
    effect eSight = EffectSeeInvisible();
//<-
    effect eLink = EffectLinkEffects(eVis, eSight);
    effect eSpot = EffectSkillIncrease(SKILL_SPOT, 20);
    eLink = EffectLinkEffects(eLink, eDur);
//->
    eLink = EffectLinkEffects(eLink, eSpot);
//<-
    //Fire cast spell at event for the specified target
//    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_TRUE_SEEING, FALSE));
//->
    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_SEE_INVISIBILITY, FALSE));
//<-
    int nDuration = GetCasterLevel(OBJECT_SELF);
    int nMetaMagic = GetMetaMagicFeat();

    //Enter Metamagic conditions
    if (nMetaMagic == METAMAGIC_EXTEND)
    {
        nDuration = nDuration * 2; //Duration is +100%
    }
    //Apply the VFX impact and effects
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(nDuration));
}

Стрелочками я указал, что добавил нового в скрипт. А воры почему не встречаются, просто незаметны? biggrin.gif
BoB4ik
Спасибо Тебе, Зиррекс!
Сейчас исправлюsmile.gif
DEM
Вот у меня вопрос... как сделать так, если монстр далеко убежал от определённой точки гоняясь за игроком, предположим на X футов, он вернёться назад.
Можно ли сделать, что бы НеПиСь давал квест на убийство монстра, а этот монстр появился бы в какой нибудь локации (наугад из трёх определённых)...
И как сделать что бу если у героя здоровье 0, он не погибал, а экран темнел и он оказывался в определённой локе (например больница), его вещи находились в определённом ящики и отнялось пару золотых...
Аваддон
QUOTE (DEM @ Jul 24 2005, 20:06)
Вот у меня вопрос... как сделать так, если монстр далеко убежал от определённой точки гоняясь за игроком, предположим на X футов, он вернёться назад. Можно ли сделать, что бы НеПиСь давал квест на убийство монстра, а этот монстр появился бы в какой нибудь локации (наугад из трёх определённых)... И как сделать что бу если у героя здоровье 0, он не погибал, а экран темнел и он оказывался в определённой локе (например больница), его вещи находились в определённом ящики и отнялось пару золотых...

Угу... А еще напишите мне всю эту систему, и скажите что куда поставить чтоб все заработало.
Получая сразу все готовые скрипты - сложно будет научится скриптить. Даже исходя из //комментариев.
Скачай NWScripts Лексикон, чуть-чуть английского и все будет окей.

1.Про расстояние: Проверить расстояние до объекта можно функцией GetDistanceToObject. Между третьими объектами - GetDistanceBetween. Сделай проверку на расстояние до атакера (игрока). Или же окружи монстра триггером и при выходе за зону тригерра - очищай список действий(ClearAllActions), и отправляй его на вэйпоинт (ActionMoveToObject).

2. Чтобы монстр появлялся в разных точках.. Сделай три разных точки. Потом сделай Интегер равный случайному числу (Random(макс. значение)). И делай проверку... Если int равен 1 - монстра в первую точку(JumpToObject на монстра или же CreateObject на той самой точке), если 2, то во вторую итд.

3. Когда у игрока здоровье от 0 до -11 - идет скрипт OnPlayerDying - правь в свойствах модуля. Так же поправь там OnPlayerDeath - некоторые сильные монстры могут так звездануть что игрок скопытится мгновенно.

4. Вещи перебросить можно таким способом. Задаешь циклический алгоритм на перебирание вещей у игрока в инвентаре (в начале функции предмет из инвентаря = GetFirstItemInInventory). Затем - CopyItem в тот самый ящик, и DestroyObject этого предмета в инвентаре у самого игрока. В конце цикла предмент из инвентаря = GetNextItemInInventory.

5. Пару золотых убрать так TakeGoldFromCreature (Кол-во золота, Игрок).

Удачи... Почитай описание функций - разберешься!
DEM
Спасибо... я бы прочитал лексикон, да вот учил не английский black eye.gif swoon.gif this.gif
Аваддон
DEM Учи. Иначе будет тяжко в скриптинге. Да там англ. базовый на уровне 5го класса.
Aiwan
Привет всем. Запарился я тут с одной траблой... Есть книга Итем и есть книга плэйсебл. Я при выкладывании итема книги из инвентаря создаю плэйс на его месте. Так вот. Все работает и прочее. Но когда я выкладываю в сумке, все книги удаляются... Хоть 10 хоть 1. Никак контейнер не реагирует на мой код. Я знаю и таг его и ресреф... Видать это движковое что то. Как обмануть? Скрипт стоит на слоте модуля OnUnAcquireItem.

Neverwinter Script Source
#include "x2_inc_switches"
#include "am_inc_debug"
void main()
{
    object oItem = GetModuleItemLost(); // Сам Item объект
    object oPC = GetModuleItemLostBy(); // Тот кто выложил его
    object oItemBy =  GetItemPossessor(oItem); // Тот кому достается объект
    string sTagItem = GetTag(oItem); // Таг Item-a
    string sTagItemBy = GetTag(oItemBy); // Таг нового хозяина
    // -------------------------------------------------------------------------
    //
    // -------------------------------------------------------------------------
    if (GetStringLeft(sTagItem, 10) =="AM_IT_BOOK") // Первые 10 знаков тага книг
    {
        // ВОТ ТУТ БЫ ПРОВЕРКУ, ЧТО ТИПА ЕСЛИ КНИГА В КОНТЕЙНЕРЕ ТО return;
        location lLoc = GetLocation(oItem);
        if (!GetHasInventory(oItemBy)) // Если нет инвентаря туда, куда кладем
          {
            object oBook = CreateObject(OBJECT_TYPE_PLACEABLE, "am_plc_usedbook1", lLoc);
            // Присвоим стоку равную ResRef-у, что бы потом создать такую же книгу
            SetLocalString(oBook, "PUT_DOWN_BOOK", GetResRef(oItem));
            DestroyObject(oItem);
          }
    }
Zirrex
Aiwan, а ты не хочешь сделать небольшую задержку перед удалением? Причем сделай проверку, если сама вещь лежит именно на локации, то удалить, а если в чем-то, то не трогать.

Простое условие:
Neverwinter Script Source
if (GetBaseItemType(oItem) == BASE_ITEM_LARGEBOX) return;

не действует? Ведь в данном случае ты выкладываешь не книгу, а сумку, и она уже является объектом "oItem".
Aiwan
Zirrex не работает sad.gif я уже пробовал...
Neverwinter Script Source
if (GetBaseItemType(oItem) == BASE_ITEM_LARGEBOX) return;

К тому же если в инвентаре три книги, то скрипт запустится три раза. Где-то ответ должен быть... Не хотелось бы прятать от игрока сумки.
Zirrex
Aiwan, собственно, с какой стати, это же не цикл. У меня в модуле выкладывается тело из инвентаря, и при выкладывании тут же создается невидимый объект, куда тело и вкладывается. Лежит себе спокойно и не удаляется ничего. Правда, у меня условие, что если выкладываются такие-то тэги, то ничего с ними не делать. Но тут ведь первой выкладывается всегда сумка, почему этот скрипт берет в расчет вещи в ней, хм...

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

Забавно, одна только эта команда "!GetHasInventory" уже должна тормозить скрипт, но видимо она тормозит на сумке, но выполняется на остальных вещах. А если делать проверку на сумку не в самом скрипте, а снаружи?

Хотя у меня есть предположение, по какому принципу работают эти команды, которые отвечают за выкладывание вещей, если вещь выкладывается, то она выкладывается, и копия быстро удаляется. Когда же кладешь контейнер, то за ним копируются и все вещи, что в нем, оригиналы же удаляются, отсюда и получается, что вроде бы одна вещь выкладывается столько раз, сколько вещей в контейнере.
Aiwan
Zirrex , спасибо. Я уже сам разобрался. Короче работает это так:
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: OnItemUnAcquireScript  am_mod_unacquire
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  OnItemUnAcquireScript
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 26.07.2005
//:://////////////////////////////////////////////
#include "x2_inc_switches"
#include "am_inc_debug"
void main()
{
    object oItem = GetModuleItemLost(); // Сам Item объект
    object oPC = GetModuleItemLostBy(); // Тот кто выложил его
    object oPossessor = GetItemPossessor(oItem); // Тот кому достается объект
    string sTagItem = GetTag(oItem); // Таг Item-a
    string sTagPossessor = GetTag(oPossessor); // Таг нового хозяина
    // -------------------------------------------------------------------------
    //
    // -------------------------------------------------------------------------
    if (GetStringLeft(sTagItem, 10) =="AM_IT_BOOK") // Первые 10 знаков тага книг
    {
    if (sTagPossessor == GetTag(GetArea(oItem)) ||
        GetObjectType(oPossessor) == OBJECT_TYPE_PLACEABLE)
        {
          return;
        }
          else
        {
          object oBook;
          location lLoc = GetLocation(oItem);
          oBook=CreateObject(OBJECT_TYPE_PLACEABLE, "am_plc_usedbook1", lLoc);
          // Присвоим строку равную ResRef-у, что бы потом создать такую же книгу
          SetLocalString(oBook, "PUT_DOWN_BOOK", GetResRef(oItem));
          DestroyObject(oItem);
        }
    }
}


Как работает этот код я не могу понять, так как определить объект которому принадлежат книги после того как онтейнер выложен НЕВОЗМОЖНО. Мож я туплю dntknw.gif Но шкаф, получаемый книги дебагится, а объект кому отдаем книги кладя на землю сумку нет. Вот от этого и вся байда. Не знаю почему, но работает вот этот код... crazy.gif два дня с утра до вечера я мучался lol.gif lol.gif

Neverwinter Script Source
if (sTagPossessor == GetTag(GetArea(oItem)) ||
        GetObjectType(oPossessor) == OBJECT_TYPE_PLACEABLE)
        {
          return;
        }

Добавлено в [mergetime]1122463094[/mergetime]
Итог: итем можно класть в ящики, сундуки и сумку на локу и просто. Если чисто сам итем кладешь на локу то он десторится и получается плейс. Ну а превратить обратно его в книгу-итем 5 секунд.
Добавлено в [mergetime]1122463375[/mergetime]
Странно, но при такой проверке ареа не пеленгуется как получатель итема... И при поклаже сумки не пеленгуется, но проверяется biggrin.gif Мда.
Добавлено в [mergetime]1122467318[/mergetime]
Neverwinter Script Source
if (sTagPossessor == GetTag(GetArea(oItem)) ||
        GetObjectType(oPossessor) == OBJECT_TYPE_PLACEABLE ||
        GetObjectType(oPossessor) == OBJECT_TYPE_STORE ||
        GetIsAssociate(oPC, oPossessor))
        {
          return;
        }

Еще надо на магазин и хеньчей проверить... Теперь все пахаеть как часы.
-fenix-
У меня почемуто в кутсценке один NPC не хочет говорить фразы. Все действия совершает, а фраза над ним не появляется, однако она отображается в информационном окне(или как оно правельно называется). Пишу через DelayCommand-> AssignCommand-> SpeakString.
Над другими NPC фраза отображается, в чем тут дело?
Привести скрипт не могу, ибо пишу сценку на конкурс.
Zirrex
-fenix-, а ты сделай "ActionSpeakString". И внимательно проверь, верен ли объект, которого ты просишь произнести фразу.

Aiwan, я обычно такое дерево использую, чтобы не строить большое условие:

Neverwinter Script Source
void DropItemDestroy(object oItem)
{
    if (GetIsObjectValid(GetAreaFromLocation(GetLocation(oItem))))
    {
        DestroyObject(oItem);
    }
}

void ActionDropItem(object oItem, object oPC, object oPossessor)
{
    switch (GetObjectType(oPossessor))
    {
        // Передать вещь существу
        case OBJECT_TYPE_CREATURE: break;

        // Продать вещь
        case OBJECT_TYPE_STORE: SetLocalInt(oItem, "ASG_PWCLEANSTORE", TRUE); break;

        // Положить вещь в контейнер
        case OBJECT_TYPE_PLACEABLE: break;

        // Выбросить вещь на локацию
        default:
        if (GetIsObjectValid(GetAreaFromLocation(GetLocation(oItem))))
            DelayCommand(60.0, DropItemDestroy(oItem));
        break;
    }
}

void main()
{
    object oItem = GetModuleItemLost();
    object oPC = GetModuleItemLostBy();
    object oPossessor = GetItemPossessor(oItem);

    ActionDropItem(oItem, oPC, oPossessor);
}
-fenix-
QUOTE (Zirrex @ Jul 27 2005, 21:35)
-fenix-, а ты сделай "ActionSpeakString". И внимательно проверь, верен ли объект, которого ты просишь произнести фразу.

И с ней не делает И тег я раз 10 проверял!
Мефистофель
-fenix-
Сделай лучше так. есть ряд преимуществ. Можно добавить голос, можно добавить анимацию.
диалог заранее напиши. а тег в скрипт поставиш.
DelayCommand(3.5, AssignCommand(oNPC, ActionStartConversation(oNPC, "Тег диалога", FALSE,FALSE)));

Добавлено в [mergetime]1122503616[/mergetime]
Люди помогите позарез нужен скрипт на смерть босса.
Значит так когда босс будет присмерти пойдёт кутсцена.
Zirrex
Мефистофель, самое простое, найти сценку, когда ты сражаешься в одиночной версии игры с Арибет. Помнишь момент, ты ее бьешь, у нее становится мало жизни, и тут она просит о пощаде, бой обрывается, Арибет завязывает диалог. Посмотри, как там сделано, и выполни по оригиналу, только c использованием кутсцены.
-fenix-
QUOTE (Мефистофель @ Jul 28 2005, 01:27)
-fenix- Сделай лучше так. есть ряд преимуществ. Можно добавить голос, можно добавить анимацию. диалог заранее напиши. а тег в скрипт поставиш. DelayCommand(3.5, AssignCommand(oNPC, ActionStartConversation(oNPC, "Тег диалога", FALSE,FALSE)));

Я же говорю, что этот чел совсем отказывается говорить, так же как и челы с его внешностью такое ощущение, что это глюк модели(но такое может быть???). Короче теперь за его спиной стоит нивидимый чел, каторый помогает немому выразить мысли.

Мефистофель использовать ActionStartConversation в кутсценах, можно только иногда. Скажем у меня есть 15 отдельныйх фраз для NPC и там звуки с движениями на них. Это мне нужно сделать 15 веток в разговоре! А если мне вдруг не понравился звук или движение или опечатка в словах - это мне надо выходить в редактор разговора и там все править! К тому же скорость и длительность анимации там установленны кажись по дефолту. Короче уж лучше я все это в коде буду писать, так оно ИМХО удобнее!!!
Zirrex
-fenix- поменяй ему внешность или расу, если думаешь, что проблема в этом. Но на самом деле, это сущий бред, ибо скрипты все едины для любой модели существа, отличаться могут только настройками АИ.

з.ы. если хочешь, можешь прислать мне скрипт, все равно в конкурсе не участвую.
Aiwan
QUOTE (Zirrex @ Jul 28 2005, 00:35)
Aiwan, я обычно такое дерево использую, чтобы не строить большое условие:

Интересное решение wink.gif
QUOTE (-fenix- @ Jul 28 2005, 16:38)
Я же говорю, что этот чел совсем отказывается говорить, так же как и челы с его внешностью такое ощущение, что это глюк модели(но такое может быть???).

Ты случаем скрипты не потер у него в слотах дефолтовые?
QUOTE (-fenix- @ Jul 27 2005, 19:13)
однако она отображается в информационном окне(или как оно правельно называется).

ГЫ, а ты эти фразы не расскарсил часом? Тегами для актиона или проверок скиллов (зелененьким или красненьким)? biggrin.gif Тогда так и будет.
-fenix-
QUOTE (Zirrex @ Jul 28 2005, 19:24)
-fenix- поменяй ему внешность или расу, если думаешь, что проблема в этом. Но на самом деле, это сущий бред, ибо скрипты все едины для любой модели существа, отличаться могут только настройками АИ.

Да я сам думаю, что бред!!! Только этот бред реальный!!! Вот все челы говорят, а этот не говорит. Ставешь чела, он говорит, меняешь ему внешность на немого и этот то же не меет dntknw.gif
Короче большой, большой ХЗ
QUOTE (Zirrex @ Jul 28 2005, 19:24)
поменяй ему внешность или расу

Мне не нужно менять ни того, ни другого.
QUOTE (Zirrex @ Jul 28 2005, 19:24)
если хочешь, можешь прислать мне скрипт, все равно в конкурсе не участвую

Пришлю, но позже.

QUOTE (Aiwan @ Jul 28 2005, 20:57)
Ты случаем скрипты не потер у него в слотах дефолтовые?

НЕТ
QUOTE (Aiwan @ Jul 28 2005, 20:57)
ГЫ, а ты эти фразы не расскарсил часом? Тегами для актиона или проверок скиллов (зелененьким или красненьким)? biggrin.gif Тогда так и будет.

ТОЖЕ НЕТ

Простая строка DelayCommand-> AssignCommand-> SpeakString.
Ни чего сложного!
Zirrex
-fenix- так смени ему внешность, если он только при ней молчит. Это так критично? Хотя, если честно, очень уж странно, как может внешность влиять на скрипты? dntknw.gif
Мефистофель
QUOTE
Мефистофель, самое простое, найти сценку, когда ты сражаешься в одиночной версии игры с Арибет. Помнишь момент, ты ее бьешь, у нее становится мало жизни, и тут она просит о пощаде, бой обрывается, Арибет завязывает диалог. Посмотри, как там сделано, и выполни по оригиналу, только c использованием кутсцены

Да видел и в ХотУ тоже самое, я только понять немогу как туда кут-сцену внедрить, может есть функцыя активации заранее созданной кут-сцены.?
Aiwan
Конечно есть.
Neverwinter Script Source
void ExecuteScript(string sScript, object oTarget)
Мефистофель
Ха ха блин даже смешно, lol.gif ну я такую парашу сделал. crazy.gif .
Neverwinter Script Source
void ExecuteScript(string sScript, object oTarget)
{
object oPC = GetLastKiller();
string sSkript = GetName("Cut_Scene");
}

void main()
{
DelayCommand(3.0, ExecuteScript(oPC));
}

Помогиет мне люди добрые. drag.gif shout.gif
dumbo
QUOTE (Мефистофель @ Jul 31 2005, 02:39)
Ха ха блин даже смешно, lol.gif ну я такую парашу сделал

мдя. nea.gif функции, которые тебе советуют применять, надо не писать, а использовать. если ты не собираешься завтра забросить скриптинг, советую тебе проводить больше времени не за подбором задержек в кут-сценах, а за чтением документации по любому языку программирования(лучше С) - достаточно будет самых азов.

чтобы вызвать из скрипта другой скрипт, нужно просто написать
Neverwinter Script Source
ExecuteScript("имя скрипта", oTarget);
//где oTarget - объект, который будет доступен в вызываемом скрипте под "именем" OBJECT_SELF
...
// пару вариантов использования:
// отложенный по времени вызов
DelayCommand(1.0, ExecuteScript("mymegascript", oPC));
// поставленный в очередь действий
ActionDoCommand(ExecuteScript("kill_me", oNPC));
Мефистофель

dumbo компилется не хочет. а скрипты не брошу они мне как родные. мануал об.прочитю.
Zirrex
Мефистофель что у тебя не хочет компилироваться? Выше описанный скрипт, это сильно this.gif Переписывать уже существующую функцию, причем с такими ошибками, нет слов просто.

Дам тебе совет, скачивай интересные скрипты, изучай их, смотри как они пишутся, а не просто копируй примеры, тогда и понимать научишься. Нельзя заниматься скриптованием, не понимая, что ты делаешь.
Мефистофель
Скриптики я малясик понимаю, вы уж простите вчера пьяный был.
Вот это не компилется.
Neverwinter Script Source
void main()
{
    int nUser = GetUserDefinedEventNumber();
    if (nUser == 1002)
    {
        if (GetLocalInt(OBJECT_SELF,"L") ==0)
        {
            SetLocalInt(OBJECT_SELF,"L",1);
        }
    }
    else
    if(nUser == 1006)
    {
        int nMaxHP = GetMaxHitPoints();
        int nCurrHP = GetCurrentHitPoints();
        if (GetLocalInt(OBJECT_SELF,"L") == 0)
        if((nCurrHP * 3) <= nMaxHP && GetLocalInt(OBJECT_SELF,"Generic_Surrender") == 0)
        {
            SurrenderToEnemies();
            SetLocalInt(OBJECT_SELF,"Generic_Surrender",1)  ;
            SpeakOneLinerConversation();
            SetLocalInt(OBJECT_SELF,"L",1);
        }

    }

}
void Morag_Death(object oPC)
{
DelayCommand(0.0, Morag_Death(oPC));
object oPC = GetLastKiller();
object oVB = GetObjectByTag("BIG_Morag");
effect eBio = EffectVisualEffect(VFX_DUR_GHOST_SMOKE);
effect eBio2 = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBio, OBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eBio2, OBJECT_SELF);


Я тут подумал мож не добовлять
Neverwinter Script Source
void Morag_Death(object oPC)

А просто продлжить скрипт как должное.
помогите Туллсета нет.
Добавлено в [mergetime]1122845354[/mergetime]
ПОМОГИТЕ!! Это очень важно для меня.
Это скрипт битвы с мораг, (с моей мораг), я проверял 100раз всё верно, и тег и фракцыя и точки.
Но на Wp_Morag_War1, войны отказываются прыгать, а на Wp_Morag_War2 всё гладко.
Вот скрипт, вы уж простите если большой.
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: Created By: NedWarN
//:: Created On: Koha
//:://////////////////////////////////////////////
#include "x2_inc_cutscene"
void main()
{
int CUTSCENE_NUMBER = 13;
object oPC = GetPCSpeaker();//Dis_is PC of Playing for Games
object oMorag = GetObjectByTag("GLAV_Morag");//Morag AND Boss for one Modules/
//----------------------------------------------
object oW1 = GetObjectByTag("MS_War1");//Wars1/
object oW2 = GetObjectByTag("MS_War2");//Wars2/
object oW3 = GetObjectByTag("MS_War3");//Wars3/
object oW4 = GetObjectByTag("MS_War4");//Wars4/
object oW5 = GetObjectByTag("MS_War5");//Wars5/
object oW6 = GetObjectByTag("MS_War6");//Wars6/
object oW7 = GetObjectByTag("MS_War7");//Wars7/
object oW8 = GetObjectByTag("MS_War8");//Wars8/ JJJo
object oWboss = GetObjectByTag("JJJo");// JJJo
//Wars13/
//---------------------------------------------
//--/////////////////////////////////////////////////////////
object oBE1 = GetObjectByTag("Wp_Morag_War1");//Object of Beam effect//
object oBE2 = GetObjectByTag("WP_Morag_War2");//Object of Beam effect//
//Object of Beam effect//
//--------------------------------------------
object oWpST1 = GetObjectByTag("MS_LU1");//Object of Beam effect//
object oWpST2 = GetObjectByTag("MS_LU2");//Object of Beam effect//
//--/////////////////////////////////////////////////////////
effect eMo1 = EffectVisualEffect(VFX_FNF_SUMMON_EPIC_UNDEAD);
effect eMo2 = EffectVisualEffect(VFX_FNF_BLINDDEAF);
effect eMo3 = EffectResurrection();
effect eMo4 = EffectDeath();
effect eMo5 = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
//-------------------------------------------
if (GetIsPC(oPC) == FALSE)//fOR PC IT IS! FOR INVISION CUT-SCENE//GetISPC(oPC)= FALSE! fun of PC!
return;
// Minu and du for Disable/ is cut-scene. Go_Morag_War1
//-------------------------------------------one partia//
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eMo5, oPC);
RemoveEffect(oPC,eMo5);
SetCutsceneMode(oPC,FALSE);
DelayCommand(3.0, AssignCommand(oW1, ActionJumpToObject(oBE1)));
DelayCommand(4.0, AssignCommand(oW2, ActionJumpToObject(oBE2)));
DelayCommand(3.5, AssignCommand(oW1, ActionJumpToObject(oBE1,TRUE)));
DelayCommand(3.5, AssignCommand(oW2, ActionJumpToObject(oBE2,TRUE)));
//------------------------------------------Spell Morag of PC
DelayCommand(20.5, AssignCommand(oMorag, ActionCastSpellAtObject(SPELL_SHADES_FIREBALL,oPC, METAMAGIC_ANY, 2)));
//-------------------------------------------two partia//
DelayCommand(71.0, AssignCommand(oW3, ActionJumpToObject(oBE1)));
DelayCommand(72.0, AssignCommand(oW4, ActionJumpToObject(oBE2)));
DelayCommand(74.5, AssignCommand(oW3, ActionJumpToObject(oBE1,TRUE)));
DelayCommand(74.5, AssignCommand(oW4, ActionJumpToObject(oBE2,TRUE)));
//------------------------------------------
DelayCommand(80.5, AssignCommand(oMorag, ActionCastSpellAtObject(SPELLABILITY_BG_CREATEDEAD,oPC, METAMAGIC_ANY, 2)));
//------------------------------------------
DelayCommand(83.0, AssignCommand(oWboss, ActionJumpToObject(oPC)));
DelayCommand(120.0, AssignCommand(oW5, ActionJumpToObject(oBE1)));
DelayCommand(121.0, AssignCommand(oW6, ActionJumpToObject(oBE2)));
DelayCommand(124.5, AssignCommand(oW5, ActionJumpToObject(oBE1,TRUE)));
DelayCommand(124.5, AssignCommand(oW6, ActionJumpToObject(oBE2,TRUE)));
//------------------------------------------
DelayCommand(140.5, AssignCommand(oMorag, ActionCastSpellAtObject(SPELL_WAIL_OF_THE_BANSHEE,oPC, METAMAGIC_ANY, 2)));
//-----------------------------------------
DelayCommand(160.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMo2, oWpST1));
DelayCommand(160.9, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMo2, oWpST2));
DelayCommand(164.0, AssignCommand(oW7, ActionJumpToObject(oWpST1)));
DelayCommand(164.0, AssignCommand(oW8, ActionJumpToObject(oWpST2)));
}
DraX
2 Мефистофель
Меф, лучше используй не объект, как цель прыжка, а место:
Neverwinter Script Source
GetLocation(GetNearestObjectByTag(oBE1))

Будеть меньше глюков, 100% wink.gif
Кстати, чет там у тебя за неразбор со временем. И зачем ты свои воинов доблестных по два раза заставляешь прыгаць. smile.gif Иль так задумано? Если да, то разъясни ситуацию. smile.gif
DEM
Подскажите, какой скрипт делает что бы после смерти и нажатии ОЕСПАВН, мы телепортировались в нужную точку? Просто пробовал использовать простой телепорт в точку, но не получилось.... black eye.gif
Zirrex
DEM пропиши на эвенте модуля OnPlayerRespawn такой скрипт, и тебя будет переносить туда, куда тебе нужно:

Neverwinter Script Source
void Resurrect(object oPC, object oJump)
{
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPC);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC);
    AssignCommand(oPC, ActionJumpToObject(oJump));
}

void main()
{
    object oPC = GetLastRespawnButtonPresser();

    object oJump = GetObjectByTag("wp_respawn");
    Resurrect(oPC, oJump);
}

Только не забудь в нужном месте точку "wp_respawn" поставить.
DraX
2 DEM
Если хочешь, мож добавить к скрипту Zirrex'а проверку на локацию. Допустим, когда с боссом сражаесся, ты убит, а спауна ма! Или ты пришел в другой город в храм к кокому-нибудь монаху, а он дает гарантию, что если ты умрешь в ближайших лес, то твоя душонка (грешная или нет) возвратится в этот храм (возвращение не бесплатное. А как же! biggrin.gif ). Придется менять локации. Вот тебе волшебнай проверка:
Neverwinter Script Source
string sArea = GetTag(GetArea(GetLastDied())); // Вот насчет GetLastDied() точно не помню
                      // чет типа того там есть
  if(sArea == "тег локации")
{
  // А дальше просто меняешь вэйпоинт регенерации
}

Так сказать, маленькое дополнение к скрипту. ГЫ!

2 Zirrex
RESPECT! good.gif
Exectrix
Всем доброго времени суток. У меня вопрос значит такой:
Я хочу шоб когда у игрока хп падает до 20% он превращался в какого-нибудь Зверьтерьера, с утроинными показателями, но нападал на всех подряд, а когда в энном радиусе никого не останется идёт задержка и обратное превращение. Да ещё сначала идёт проверка рассы игрока.

Это вообще реально?
Tiger Greyhawk
Exectrix реально
Вот функции, которые тебе понадобятся (это для сингла):
Neverwinter Script Source
GetCurrentHitPoints(object oObject=OBJECT_SELF) //возращает текущее значение хитов объекта (oObject)

GetMaxHitPoints(object oObject=OBJECT_SELF) //возращает максимальное значение хитов объекта (oObject)

GetAppearanceType(object oCreature) //"вернет" текущий облик создания (oCreature). т.е. надо его "запомнить", чтобы можно было вернуть игрока к начальному виду

SetCreatureAppearanceType(object oCreature, int nAppearanceType) //изменяет внешний вид (nAppearanceType) объекта (oCreature).  (nAppearanceType = APPEARANCE_TYPE_*) - подставляешь тот тип, который тебе нужен.
пример:
SetCreatureAppearanceType (oPC, APPEARANCE_TYPE_DRAGON_GOLD); - превратит игрока (надо зявить object oPC = GetFirstPC()wink.gif в золотого дракона

GetNearestObject(int nObjectType=OBJECT_TYPE_ALL, object oTarget=OBJECT_SELF, int nNth=1) //берет ближайший к oTarget объект типа nObjectType ( соответсвенно тебе нужно: nObjectType=OBJECT_TYPE_CREATURE). если нужен не первый объект, а к примеру, третий, то nNth=3.
пример:
GetNearestObject(OBJECT_TYPE_CREATURE, oPC, 3);

GetObjectSeen(object oTarget, object oSource=OBJECT_SELF) //это видит ли объект (oSource) (oTarget)

GetDistanceToObject(object oObject) //возвращает расстояние до цели (oObject) до предмета, с которого вызыватеся функция. Т.е. здесь делаешь проверку на расстояние.
if (GetDistanceToObject(oNPC) < 5.0) { SetCreatureAppearanceType (oPC, APPEARANCE_TYPE_DRAGON_GOLD);  }

GetRacialType(object oCreature) //возвращает текущу расу
DraX
Exectrix
Вот примерный скрипт. B OnDamage (хотя точно и не уверен) напиши:

Neverwinter Script Source
ExecuteScript("имя скрипта", GetFirstPC());

, где "имя скрипта" имя сохраненного тобой следующего скрипта. Вот он:

Neverwinter Script Source
int nMax = GetMaxHitPoints(OBJECT_SELF);
int nCur = GetCurrentHitPoints(OBJECT_SELF);
int nTwenty = (nMax / 100) * 20// 20%  от общего хит-поинта  biggrin.gif

// Проверка. Тебе нужно 20% - пожалуйста
if(nCur <= nTwenty && GetRacialType(OBJECT_SELF) == НУЖНАЯ_РАССА)
{
  int nAppearance = GetAppearanceType(OBJECT_SELF); // Как сказал товарищ Tiger - запомним  // облик
  object oEnemy = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF);

  if(GetDistanceToObject(oEnemy) < 3.0 && GetIsObjectValid(oEnemy))  // Тут сам смотри какой // радиус тебе нужен
    SetLocalInt(OBJECT_SELF, "START_ATTACK", TRUE);
}


А затем в OnHeartbeat ставим следующее:
Neverwinter Script Source
if(GetLocalInt(OBJECT_SELF, "START_ATTACK") == TRUE)
  {
    object oEnemy = GetNearestObject(OBJECT_TYPE_CREATURE, OBJECT_SELF);

    if(GetDistanceToObject(oEnemy) < 3.0)
    {
          int nAppearance = GetAppearanceType(OBJECT_SELF);
          SetCreatureAppearanceType(OBJECT_SELF, НУЖНЫЙ_ВИД);

          ActionAttack(oEnemy); 
    }
    else
    {
          SetCreatureAppearanceType(OBJECT_SELF, nAppearance);
          ClearAllActions();
          SetLocalInt(OBJECT_SELF, "START_ATTACK", FALSE);
    } 
  }


ЗЫ: Если найдете ошибку, говорите или пишите на mail. Когда я это писал, ей-богу, голова болела страшно shout.gif
Exectrix
Очень благодарен. yes.gif

Ещё одна интересная вещь. У предметов, типа меч... и т.д. есть поддержка визуального эффекта типа горение, холод и т.д. А можно к частям тела дать такой эффект?
DEM
Exectrix, теоретически без хаков нельзя... нет, ну скорее всего можно зделать невидимый объект, его прикрепить слева от перса (или справо, взависимости от того какая рука должна гореть или что там еще делать), а оптом пишешь скрипт. Сам я это слабо представляю и скорее всего не зря smile.gif
Exectrix
Мм... Хорошо. А как на счёт фишек с классами (у монаха глаза горят на 20 уровне, у дракона - крылья и хвост отростают, у кого-то от руки только кости остаются...)? Можно своих фишек добавить?

Айван: еще будешь постить вопросы не по теме, влеплю пред.
DEM
Займис 3d моделированием :yes)
Exectrix
Забавно... Ну а как вообще это работает? Всмысле, где пишется условие и команда, ака "Дать эффект - крылья, хвост"?
dumbo
Exectrix, тебе в другой раздел - 3D MAX, Maya и др.... там сначала читай, что да как, а потом задавай вопросы. к скриптам твои вопросы уже не относятся.
DEM
Exectrix - крылья и хвост? Зайди в внешний вид и там будет в самом низу...
Exectrix
"Дать эффект - крылья, хвост" Меня явно не поняли diablo.gif
Может покажется грубым, НО, объясняю на пальцах: после определённого диалога у героя отростают крылья, скажем демонические... Скрипт к диалогу пожалуйста!!!

Всё, пойду приму валерьянки... нервы, нервы...
dumbo
Exectrix, это ты явно не понял. spiteful.gif вместе с валерьянкой, нервами и пяльцами своими иди на рынок "почем семешки" узнавать. drag.gif

ps. и все же отвечу: нет такой команды/эффекта/заклинания/скрипта - менять части модели штатными средствами во время игры нельзя. точка.
DEM
Exectrix,мне кажеться что я тебя понял... тЫ попробуй мспользовать скрипт на изменение внешнего вида, но как нить измени его и т.д. Что бы он не изменял модель героя, а что бы добавлл крылья...
Valleo
Почему же нельзя... Можно через LetoScript в НВНе, но в любом случае требуется перезаход - так что вотю...
Vhall
Будьте добры, разъясните, что делает этот скрипт:
Neverwinter Script Source
void BlindPC(object oPC)
{
  effect eBlind =  EffectBlindness();
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBlind, oPC, 7.0);
}

void RemoveBlindPC(object oPC)
{
    effect eBad = GetFirstEffect(oPC);
        while(GetIsEffectValid(eBad)) {
        int nEtype=GetEffectType(eBad);
        if (nEtype == EFFECT_TYPE_BLINDNESS) {
            RemoveEffect(oPC, eBad);
        }
        eBad = GetNextEffect(oPC);
    }
}


void main()
{
  object oPC = GetEnteringObject();
  if(GetIsPC(oPC) == TRUE)
  {
    object oWP = GetNearestObjectByTag("wp_bed_in", oPC);
    if(oWP == OBJECT_INVALID)
      AssignCommand(oPC, SpeakString("No wp_bed_in tag nearby."));
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oPC, JumpToObject(oWP));
    DelayCommand(1.0, AssignCommand(oPC, PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 99999.0)));
    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_SLEEP), oPC, 10.0));
    DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_SLEEP), oPC, 10.0));
    DelayCommand(2.0, SetCommandable(FALSE, oPC));
    //DelayCommand(3.0, BlindPC(oPC));
    //DelayCommand(10.0, RemoveBlindPC(oPC));
    DelayCommand(10.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC));
    DelayCommand(10.0, AssignCommand(oPC, SpeakString("You are healed, though you must rest to regain spells.")));
    DelayCommand(9.8, SetCommandable(TRUE, oPC));
  }
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.