Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
Белатрис
Не начинается диалог...
NSS
void main()
{
object oPC = GetEnteringObject();
object oNPC1 = GetObjectByTag("NPC_01"); // Ãëàâàðü
object oNPC2 = GetObjectByTag("NPC_02"); // Ëó÷íèöà
object oNPC3 = GetObjectByTag("NPC_03");
object oNPC4 = GetObjectByTag("NPC_04");
object oWPpc1 = GetWaypointByTag("WP_PC_1");
object oWP1 = GetWaypointByTag("WP_NPC_01");
object oWP2 = GetWaypointByTag("WP_NPC_02");
object oWP3 = GetWaypointByTag("WP_NPC_03");
object oWP4 = GetWaypointByTag("WP_NPC_04");
object oDoor1 = GetObjectByTag("DOOR_01"); // Äâåðü Ãëàâàðÿ
object oDoor2 = GetObjectByTag("DOOR_02"); // Äâåðü ëó÷íèöû
object oDoor3 = GetObjectByTag("DOOR_03"); // Íàøà äâåðü
object oDoor4 = GetObjectByTag("DOOR_04"); // Íàøà äâåðü

if (!GetIsPC(oPC) || GetLocalInt(OBJECT_SELF, "TRIGGER") == 1)
    return;
  {
  SetLocalInt(OBJECT_SELF, "TRIGGER", 1);
  SetCutsceneMode(oPC);
  AssignCommand(oPC, ClearAllActions());
  AssignCommand(oNPC1, ClearAllActions());
  AssignCommand(oNPC2, ClearAllActions());
  AssignCommand(oNPC3, ClearAllActions());
  AssignCommand(oNPC4, ClearAllActions());
ActionDoCommand(AssignCommand(oPC, ActionMoveToObject(oWPpc1)));
ActionDoCommand(AssignCommand(oPC, SetCameraFacing(280.0, 7.0, 45.0, CAMERA_TRANSITION_TYPE_SLOW)));
ActionDoCommand(AssignCommand(oPC, SpeakString("Êàê-òî ñäåñü ìðà÷íî... è... ïîäîçðèòåëüíî òèõî...")));
ActionWait(9.5);
ActionDoCommand(AssignCommand(oDoor1, ActionOpenDoor(OBJECT_SELF)));
ActionDoCommand(AssignCommand(oDoor2, ActionOpenDoor(OBJECT_SELF)));
ActionDoCommand(AssignCommand(oDoor3, ActionOpenDoor(OBJECT_SELF)));
ActionDoCommand(AssignCommand(oDoor4, ActionOpenDoor(OBJECT_SELF)));
ActionWait(1.0);
ActionDoCommand(AssignCommand(oNPC1, ActionForceFollowObject(oWP1)));
ActionDoCommand(AssignCommand(oNPC2, ActionForceFollowObject(oWP2)));
ActionDoCommand(AssignCommand(oNPC3, ActionForceFollowObject(oWP3)));
ActionDoCommand(AssignCommand(oNPC4, ActionForceFollowObject(oWP4)));
ActionWait(4.5);
ActionStartConversation(GetFirstPC(), "bandit1");
}
}

Dik Morris
Белатрис

Строка:
NSS
ActionStartConversation(GetFirstPC(), "bandit1");

Начинает диалог, с самим триггером. К тому же, зачем использовать функцию GetFirstPC() если игрок и так определен ? + Просто-напросто, может отсутствовать диалог.

PS: на будущее, копируй код с элементами русс. речи (комментариями, текстом) на русской раскладке.
Юзверь
Всем привет, Дамы и Господа.
Насколько я понимаю скрипты разбираются здесь.
Дело в том, что на просторах инета я нашел один интересный скриптик. Этот скрипт меняет свойство навыка Animal Empathy у рэйнджэра и друида (вкратце, зверье не привлекается на сторону последних, но и не атакует их). Возникла одна проблема - скрипт идет только под HotU v. 1.66, а с учетом моего соединения скачать 76 Мб нереально.
К тому же хотелось бы вставить подобное нововведение в кампанию, а не только в модули. Простой записи в Оверрайд не только основного файла (выложен файл *.erf), но даже его содержимого не достаточно.
Если кого-то как и меня заинтересует подобное, то ниже ссылка.
nwvault.ign.com

Заранее спасибо за помощь...
Dik Morris
Alaron

В HotU, и 1.66 есть новые фун-ции, и если они используются в скрипте, то тут уже ничего не поделаешь, остаеться только ставить аддон и патчить игру.

QUOTE
Простой записи в Оверрайд не только основного файла (выложен файл *.erf), но даже его содержимого не достаточно.


еrf, не нужно записывать в ovveride, они просто импортируются в модуль.
(File - Import - нужный *erf)
Юзверь
QUOTE
В HotU, и 1.66 есть новые фун-ции, и если они используются в скрипте, то тут уже ничего не поделаешь, остаеться только ставить аддон и патчить игру.

Что это меняет? Даже если пропатчить игру, то вставить скрипты в кампанию не выйдет, т.к. Тулсет просто откажется компилировать содержимое, ссылаясь на пропасть ошибок...

QUOTE
еrf, не нужно записывать в ovveride, они просто импортируются в модуль.
(File - Import - нужный *erf)

Я понимаю, тем не менее должна быть возможность вставить скрипты не в модуль, а в саму кампанию...
Dik Morris
Alaron

QUOTE
Я понимаю, тем не менее должна быть возможность вставить скрипты не в модуль, а в саму кампанию...


Модули компании, лежат в папке nwn, и имеют расширение *NWN, для того чтобы открыть их в тулсете, просто смени расширение на *MOD, перезапиши в moduls, спокойно импортируй скрипт, сохраняй мод, а потом опять меняй расширение на *NWN, и записывай в прежнею папку.
Юзверь
QUOTE
Модули компании, лежат в папке nwn, и имеют расширение *NWN, для того чтобы открыть их в тулсете, просто сменить расширение на *MOD, перезапиши в moduls, спокойно импортируй скрипт, сохраняй мод, а потом опять меняй расширение на *NWN, и записывай в прежнею папку.


Как я уже писал выше, Тулсет сохраняет модули с пропастью ошибок в основном в скриптах. sad.gif
К тому же придется прописывать скрипты ВО ВСЕХ МОДУЛЯХ, а это пи... в общем, крайне нежелательно. suicide2.gif
В любом случае спасибо за совет... declare.gif
Zirrex
Alaron, а что тебе мешает исправить эти ошибки? Ну если ты хочешь изменить что-то в модулях компании, то делать это лучше все же во всех модулях. Да, вот еще что, если ты обратил внимание, то все модули сделаны так, чтобы в них не было ничего от аддона, в котором компания не делалась.
Белатрис
QUOTE(Dik Morris @ Jun 24 2006, 17:27) [snapback]85785[/snapback]

Белатрис

Строка:
NSS
ActionStartConversation(GetFirstPC(), "bandit1");

Начинает диалог, с самим триггером. К тому же, зачем использовать функцию GetFirstPC() если игрок и так определен ? + Просто-напросто, может отсутствовать диалог.

PS: на будущее, копируй код с элементами русс. речи (комментариями, текстом) на русской раскладке.

А написать нельзя? shout.gif

Айван: послушай меня, если тебе надо что бы КТО-ТО написал за тебя скрипт, то просить надо вежливо и низко кланяясь. ТУТ ТЕБЕ НИКТО НИЧЕГО НЕ ДОЛЖЕН. Если не умеешь, сразу и говори Я НЕ НИЧЕГО НЕ УМЕЮ. И люди не будут время тратить на объяснение и идеи.

Я уже устал говорить, что мало что знаю, но народ этого не замечает! Вон, на предыдущей странице(кажется) я написал, что вообще все забыл. Этого не достаточно? Да и к тому же, я не приказываю, просто Дик первым увидел мой пост с 10 вопросами, почему же тогда он не вспомнил, что я ни-ни в скриптах, мне-то всего нужно было написать несколько строчек. Я могу лишь, что-то делать пользуясь чужими матерьялами ("вопросы и ответы" к примеру)..

Дик, прошу прощения, если обидел, я не хотел, честно!
Dik Morris
QUOTE(Alaron @ Jun 25 2006, 01:35) [snapback]85809[/snapback]

Как я уже писал выше, Тулсет сохраняет модули с пропастью ошибок в основном в скриптах. sad.gif
К тому же придется прописывать скрипты ВО ВСЕХ МОДУЛЯХ, а это пи... в общем, крайне нежелательно. suicide2.gif
В любом случае спасибо за совет... declare.gif


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

Белатрис

Во первых, какой вопрос - такой и ответ.
Во вторых, Aiwan уже написал, тебе тут никто ничего не должен.

По вопросу, eсли я правильно понял, то диалог игрок должен начать с одним из NPC, для этого, используй функцию: AssignCommand.
Т.е последняя строчка, будет выглядеть так:

NSS
ActionDoCommand(AssignCommand(Нужный NPC,  ActionStartConversation(oPC, "bandit1")));
Юзверь
QUOTE
Да, вот еще что, если ты обратил внимание, то все модули сделаны так, чтобы в них не было ничего от аддона, в котором компания не делалась.

Да уж. И первые проявления этого - отказы в компилляции... sad.gif

Dik Morris, Zirrex, спасибо.
Пойду искать пропатченную версию в продаже, т.к. скачать 76 мб нереально... sad.gif
Белатрис
Dik Morris, теперь мне понятно! СПАСИБО БОЛЬШОЕ!
Белатрис
А как уничтожить скрипт, который, допустим запускается второй раз (это в диалоге)?
Dik Morris
Белатрис, нужно просто делать проверку на локальные переменные.
По ним читай Здесь, либо в мануале от Aiwan'a.

PS: т.е скрипт у тебя будет иметь такой вид:

NSS
void main()
{
  if (GetLocalInt(OBJECT_SELF, "temp") == 0)
    {
      SetLocalInt(OBJECT_SELF, "temp",1);
      // Код ;
    }
}
Юзверь
Дамы и Господа, помогите, плиз, решить задачку.
Дано:
Файл *.erf в нем *.uti, скрипты и информация для экспорта (кому интересно, ссылка выше на nwvault)
Надо:
Как можно удобнее вставить сие нововведение в кампании (NWN, SoU и HotU)
Решение:
Наиболее вероятным решением всех отозвавшихся является вставка через Аврору перепакованием модулей.
Вопрос:
Можно ли вставить содержимое файла ерф в Оверрайд и как? Если никак, то что еще можете предложить?
Заранее much thanks...
Zirrex
Alaron, без внедрения в модули, у тебя ничего не получится. Скрипты сделаны с таким учетом, что ты их будешь устанавливать именно в модуль, а не отдельно. Отдельно же они даже работать не будут, потому что не понятно к чему относятся.
virusman
ИМХО, можно, только ncs (скомпилированные).
mamuc
QUOTE
почему же тогда он не вспомнил, что я ни-ни в скриптах,

... а почему ОН( или кто-то другой) должен что-то о тебе вспоминать специально? я конечно понимаю, что каждый человек выдающиеся , уникальная ит итп личность, но , скриптеры , как правило , люди занятые своими собственными скриптами и в голове лишнюю информацию не держат..так что , если что-то надо конкретное, то и и писать надо соответственно ибо со чтением чужих мыслей у нас не очень получаеться пока biggrin.gif mosking.gif
п.с. вышесказанное ,кстати, не только к конкретному случаю относиться biggrin.gif
OxCom
Доброго времени суток.
Прошу не посылать читать мануалы.
Те кто пользуются NWNX знаю, что припомощи NWNX можно связать NWN и MySQL. Я связал (все отлично работает), но теперь появились вопросы: как записать данный в таблицу и как их от туда причитать и записать в переменные.
Записать оказалось очень легко, но как от туда их прочитать?

Собственно трока для записи в таблицу
NSS
string sSQL="INSERT INTO nwn(playername, charname, pc_dm, ip_address) "+
      "VALUES('"+sPlayer+"','"+sChar+"','"+sDM+"','"+ip+"')";
        SQLExecDirect(sSQL);

Тут мы записываем в таблицу "nwn" в соответсвующие поля переменные sPlayer, sChar, sDM, ip.
А как, имея уже заполненную таблицу, записать значения каждого соответсв. поля в переменную sPlayer, sChar, sDM, ip?

Поидее мы должны выбрать сделать "SELECT * FROM `nwn_stast` WHERE 'playername' = 'sPlayer'" и т.п., а потом из полученного результата прочитать для каждой переменной значения. Как это сделать?
[MoF]Darth_Nick
я очень давно занимался nwnx'ом и т.д.. по памяти, там есть функции:
QUOTE
SQLFirstRow\SQLFetch <- для чеков
SQLExecDirect <- запрос
SQLGetData <- получение данных
^ помойму что-то типа string sResult = SQLGetData(1); после запроса SELECT


помойму так..
посмотри подфорум - Шарды рунета.. там было про ето
Sharklike
QUOTE(OxCom @ Jul 2 2006, 12:59) [snapback]86839[/snapback]

Записать оказалось очень легко, но как от туда их прочитать?

Собственно трока для записи в таблицу
NSS
string sSQL="INSERT INTO nwn(playername, charname, pc_dm, ip_address) "+
       "VALUES('"+sPlayer+"','"+sChar+"','"+sDM+"','"+ip+"')";
        SQLExecDirect(sSQL);

Тут мы записываем в таблицу "nwn" в соответсвующие поля переменные sPlayer, sChar, sDM, ip.
А как, имея уже заполненную таблицу, записать значения каждого соответсв. поля в переменную sPlayer, sChar, sDM, ip?

Поидее мы должны выбрать сделать "SELECT * FROM `nwn_stast` WHERE 'playername' = 'sPlayer'" и т.п., а потом из полученного результата прочитать для каждой переменной значения. Как это сделать?

следующий код сделает запрос:
NSS
string sPlayer = SQLEncodeSpecialChars("Аккаунт");
string sSQL = "SELECT * FROM nwn_stast WHERE playername='"+ sPlayer +"'";
SQLExecDirect(sSQL);

результатом которого будет набор записей со значением "Аккаунт" в поле playername

функция SQLFetch() позволит продвигаться по результирующему набору от первой записи до последней, возвращая SQL_SUCCES в том случае, если запись существует и SQL_ERROR в противоположном

если SQLFetch() вернула SQL_SUCCES - значит можно получить значения полей текущей записи функцией SQLGetData(), в качестве параметра которой передается номер поля
virusman
Насколько я помню, какие-то примеры должны быть в демо-модуле NWNX-ODBC.
Во-первых, начну с совета. Использовать в запросах заранее неизвестные и задаваемые игроком строки (имя чара, аккаунт и т.д.) следует ТОЛЬКО с функцией SQLEncodeSpecialChars. т.е.:
"SELECT ..... WHERE ...='"+SQLEncodeSpecialChars(sString)+"' ...". То же и при INSERT. В базе эти строки будут закодированными (' заменяется на `~), а при их вытаскивании нужно будет сделать SQLDecodeSpecialChars.
Во-вторых, как вытаскивать записи из базы. Приведу примеры.
Получение номера и прав игрока (нужна одна запись):
NSS
#include "aps_include"
...
string sName = GetName(oPC);
string sAccount = GetPCPlayerName(oPC);
SQLExecDirect("SELECT id, rights FROM nwn WHERE playername='"+SQLEncodeSpecialChars(sAccount)+"' AND charname='"+SQLEncodeSpecialChars(sName)+"'"); //Выполнение запроса
if(SQLFetch()) //если есть хоть одна такая запись
{
    int nID = StringToInt(SQLGetData(1)); //поле 1 - id
    int nRights = StringToInt(SQLGetData(2)); //поле 2 - rights
}

Получение нескольких записей (инициализация заданных переменных - упрощенный вариант):
NSS
#include "aps_include"
SQLExecDirect("SELECT name, val FROM preset_vars"); //запрос
while(SQLFetch()) //пролистывать записи до конца
{
    string sVarName = SQLGetData(1);
    int nVal = StringToInt(SQLGetData(2));
    SetLocalInt(GetModule(), sVarName, nVal);
}

На Экзисе я использую немного изменённую библиотеку, в частности там укорочены имена функций (SQLExec, SQLGet) и улучшена SQLEncodeSpecialChars: в запрос добавляется "\", и декодировать уже ничего не надо.
OxCom
Спасибо разобрался. Теперь такой вопрос:
Поставил скрипт в OnClientLeave. Он не срабатывает когда игрок выходит.
NSS
#инклуды
void main() {
    object oPC = GetExitingObject();
    if (!GetIsPC(oPC)) return;

    #работа с MySQL
}


Если этот же скрипт поставить объекту на OnUse и заменить GetExitingObject(); на GetExitingObject(); то все работает.
virusman
На выходящем игроке некоторые функции не работают. Но это не тот случай, потому что подобный код:
NSS
object oPlayer = GetExitingObject();
int nDM = GetIsDM(oPlayer);
...
if (!nDM) ExecuteScript("lr_talsave_save",OBJECT_SELF);

работает.
Sharklike
В OnClientLeave функция GetIsPC возвращает FALSE.
virusman
Ой, перепутал GetIsPC и GetIsDM. smile.gif
OnClientEnter/OnClientLeave всегда срабатывают только на игроках. Дополнительные проверки тут не нужны.
DarkDeivel
Здраствуйте всем вам. Уезжал на долго не создавал. Весь опыт потерял набираю заново. Как сделать что когда игрок наступает на Триггер на него кастуется 5 заклинаний. Лечение, защита, сила, и еще чтонибудь на ваш вкус только не навороченное. nea.gif
Dik Morris
На onEnter, триггера:

NSS
void main()
{
  object oPC = GetEnteringObject();
  effect eHeal = EffectHeal(GetMaxHitPoints(oPC));
  effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH,1);
  effect eAC = EffectACIncrease(1);
  // Остальные эффекты добавишь сам, ищи в фильтре Effect*

  if (!GetIsPC(oPC))
   return;

  if (GetCurrentHitPoints(oPC) != GetMaxHitPoints(oPC))
   {
     ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC);
   }
  ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStrength, oPC); // Сила повышается на 1. Бесконечно.
  ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oPC); // AC повышается на 1. Бесконечно.

  DestroyObject(OBJECT_SELF, 0.4); // Удали строку если не нужно чтобы скрипт срабатывал 1 раз.
}
Noah
Здрв!Нужен ответ.Как добавить в имя вещи слово,т.Е. Если был "топор" то сделать его "топор хлада" с помощью скрипта.Заране спасибо!%:-)
virusman
SetName(oItem, GetName(oItem)+" of Cold");
Noah
Спасибо,друг virusman!Ты продвинул мою работу на сто,нет на тысячу стае!Еще раз сенкс!
Dik Morris
Хотел уточнить что данная фун-ция, появляется только в версии 1.67. wink3.gif
Zirrex
Кстати, с помощью этой функции можно делать индивидуальные вещи. Т.е. вначале сохранять в строковую переменную название вещи, а уж потом менять в момент создания.
DarkDeivel
Скажите как сделать чтобы при слове "далее" персонаж перемещался к указаному НПС. Тоесть.

ПОдоходит к капитану на одномо острове.

-Переправь меня на другой остров.
- не прооблема давай.
-далее.

и персонаж оказывается возле НПС капитана на другом острове.
Dik Morris
DarkDeivel, подобные ситуации разбираются очень часто, используй поиск.

Нашел, меньше чем за полминуты. Читать.
Noah
QUOTE(DarkDeivel @ Jul 8 2006, 21:20) [snapback]87410[/snapback]

Скажите как сделать чтобы при слове "далее" персонаж перемещался к указаному НПС. Тоесть.

ПОдоходит к капитану на одномо острове.

-Переправь меня на другой остров.Заранее установи точку прыжка(оwp).
- не прооблема давай.
-далее.
Здесь добавь скрипт:assigncommand(oPC,actionjumptoobject(oWp));

и персонаж(oPC) оказывается возле НПС капитана на другом острове(тут wp).

DarkDeivel
QUOTE(Dik Morris @ Jul 8 2006, 21:34) [snapback]87413[/snapback]

DarkDeivel, подобные ситуации разбираются очень часто, используй поиск.

Нашел, меньше чем за полминуты. Читать.

Все нашле СпС.
DARKKK
Я вот недавно сел за Тулсет. и вот.

как сделать чтобы появилось строчка в диалоге при наличии 20 Animal Bone(в рюкзаке).
azathoth
Cтавишь у нужной строки на Text Appears When... скрипт типа такого:
NSS
int Match(a, с)
{
    return (a == с);
}

int GetNumItemsInInventory(object oInventory = OBJECT_SELF, string sTag = "*")
{
    int nNum = 0;
    object oItem = GetFirstItemInInventory(oInventory);
    while (GetIsObjectValid(oItem))
    {
        if (Match(GetTag(oItem), sTag))
        {
            nNum += GetItemStackSize(oItem);
        }

        oItem = GetNextItemInInventory(oInventory);
    }

    return nNum;
}

int StartingConditional()
{
    object oPC = GetPCSpeaker();
    int n = GetNumItemsInInventory(oPC, "ТЭГ_ЭТОЙ_САМОЙ_КОСТИ");
    return (n >= 20);
}


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

----

P.S. Глюка smile.gif
пишу: int Match(a, в);
выдает: int Match(a, dirol.gif;
Aiwan
Да, там смайлы не парсятся, точнее парсятся... Как лечить я хз pardon.gif
DarkDeivel
QUOTE(Dik Morris @ Jul 7 2006, 15:30) [snapback]87334[/snapback]

На onEnter, триггера:

NSS
void main()
{
  object oPC = GetEnteringObject();
  effect eHeal = EffectHeal(GetMaxHitPoints(oPC));
  effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH,1);
  effect eAC = EffectACIncrease(1);
  // Остальные эффекты добавишь сам, ищи в фильтре Effect*

  if (!GetIsPC(oPC))
   return;

  if (GetCurrentHitPoints(oPC) != GetMaxHitPoints(oPC))
   {
     ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oPC);
   }
  ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStrength, oPC); // Сила повышается на 1. Бесконечно.
  ApplyEffectToObject(DURATION_TYPE_PERMANENT, eAC, oPC); // AC повышается на 1. Бесконечно.

  DestroyObject(OBJECT_SELF, 0.4); // Удали строку если не нужно чтобы скрипт срабатывал 1 раз.
}


Слухай у меня все работает. А как сделать к этому еще визуальные эффекты??
Dik Morris
С помощью 2 фун-ций:

NSS
// 1:
// Apply eEffect to oTarget.
void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)

// 2:
// * Create a Visual Effect that can be applied to an object.
// - nVisualEffectId
// - nMissEffect: if this is TRUE, a random vector near or past the target will
//   be generated, on which to play the effect
effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE)

// + констант:
DURATION_TYPE_INSTANT ;
DURATION_TYPE_PERMANENT ;
DURATION_TYPE_TEMPORARY.


Константы, виз. эффектов начинаются с VFX_* (Рисунки см. в Лексиконе)

PS: Т.е получится, например так:
NSS
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oPC);
virusman
Лучше всего залинковать эффекты бонусов с визуальными эффектами (см. скрипт любого спелла).
DarkDeivel
QUOTE(Dik Morris @ Jul 9 2006, 12:00) [snapback]87436[/snapback]

С помощью 2 фун-ций:

NSS
// 1:
// Apply eEffect to oTarget.
void ApplyEffectToObject(int nDurationType, effect eEffect, object oTarget, float fDuration=0.0f)

// 2:
// * Create a Visual Effect that can be applied to an object.
// - nVisualEffectId
// - nMissEffect: if this is TRUE, a random vector near or past the target will
//  be generated, on which to play the effect
effect EffectVisualEffect(int nVisualEffectId, int nMissEffect=FALSE)

// + констант:
DURATION_TYPE_INSTANT ;
DURATION_TYPE_PERMANENT ;
DURATION_TYPE_TEMPORARY.


Константы, виз. эффектов начинаются с VFX_* (Рисунки см. в Лексиконе)

PS: Т.е получится, например так:
NSS
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oPC);


Понятно ща попробую. declare.gif

Aiwan: слушай, у нас не форум розовых дневничков, где спамят лишь бы постов набрать. Больше такого содержательного постинга что бы не было. Устный пред.
Noah
Всем mass heal & level up!:)*как мне организовать скрипт на он персепт нпс чтобы он брал мои деиствия и реагировал.Например если он видит что рс в режиме parry,то он отбегает и лечиться!Ответ очень нужен!
Zirrex
Noah, простой скрипт, взята функция "Талента" лечения из инклуда "x0_i0_talent":

NSS
if (GetActionMode(oPercep, ACTION_MODE_PARRY) == TRUE)
{
    if (TalentHealingSelf())
    {
        // Подлечиться;
    }
}

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

All

Всем, кто программирует, известен цикл "for", позволяющий сделать счетчик из числа, границы которого для Вот сложения, вычитания, и т.д., описываются в шапке цикла. Есть универсальный цикл для снятия вещей с персонажа:
NSS
for (i = 0; i < NUM_INVENTORY_SLOTS; i++)
{
    oItem = GetItemInSlot(i, oPC);

    if (GetIsObjectValid(oItem))
        AssignCommand(oPC, ActionUnequipItem(oItem));
}

Сам цикл работает без проблем, к нему претензий нет, но не срабатывает при каждом новом проходе функция, ради который весь цикл и создавался, "ActionUnequipItem" (выполняется только 4 раза). Экспериментальным путем удалось установить, что в стэке может одновременно находиться лишь 4 действия. Т.е., если эти действия еще не выполнились, то все последующие окажутся вне стэка, и соответственно, не выполнятся. Что же делать? Ведь данный цикл раньше работал отлично. Тогда я решил немного перехитрить скрипт, заставив цикл выполняться не 1 раз, а 4 раза. Как бы проверяя, а точно ли все вещи сняты?! В итоге получилось следующее:
NSS
void TakeItemsFromPC(object oPC)
{
    int k = GetLocalInt(oPC, "DropThings");

    if (k > 3)
    {
        DeleteLocalInt(oPC, "DropThings");
        AssignCommand(oPC, ClearAllActions());
        return;
    }

    int i;
    object oItem;

    for (i = 0; i < 14; i++)
    {
        oItem = GetItemInSlot(i, oPC);

        if (GetIsObjectValid(oItem))
        {
            AssignCommand(oPC, ActionUnequipItem(oItem));
        }
    }
    SetLocalInt(oPC, "DropThings", ++k);
    DelayCommand(0.2, TakeItemsFromPC(oPC));
}

void main()
{
    TakeItemsFromPC(GetPCSpeaker());
}

Не уверен, что это лучшее решение, но вещи снимаются все, правда не за 1 цикл. У меня возник вопрос, можно ли как-нибудь эту операцию осуществить иначе?
Noah
Спасиб,Zirrex!1.B скриптах для новичков Айван приводил подобный скрипт,глянь.2.Как скриптом добавить крылья,хвост или костяну руку?Иль отобрать!Или это только через 2dа?
azathoth
В стеке может находиться достаточно много действий, чтобы забыть об их количестве, если дело не касается катсценок, попробуй очистить стэк существа перед перебором.

По другому - копировать вещи CopyItem'ом в инвернтарь существа, а из слотов - удалять. Действия - побоку.
Aiwan
Вообще в стеке может быть 75 действий. Просто сам скрипт может в одном из блоков очищать акции. РС надо время на то что бы снять предмет. Попробуй накидать акций, повесить на каждую задержку в полсекунды и закройстек РС.
Dik Morris
QUOTE(Noah @ Jul 12 2006, 05:43) [snapback]87624[/snapback]

2.Как скриптом добавить крылья,хвост или костяну руку?Иль отобрать!Или это только через 2dа?


Читать эту ссылку.


От себя, как известно такие свойства появляются на эпическом уровне, у определенных классов, (например, светящиеся глаза, у монаха) значит попробуй добавить NPC несколько лишних уровней.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.