Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 89 90 91 92 93 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Nashman
сообщение May 16 2006, 01:09
Сообщение #2251


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



Привет,
пытался уже многими способами сделать но не получилось, помогите!
Ситуация:
- Появляется ПС, на тригере, далее включается КаСцена и начинается разговор с НПС, после того как ПС проговорит определенные фразы, то в зависимости от выбраного диалога ПС и НПС должны пойти в куда-то. При выборе первого варианта в точку А, при выборе второго в точку Б.

ПС: Два дня и 0, жуть! Быть может кто-то поможет..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
StalkerDtN
сообщение May 16 2006, 03:42
Сообщение #2252


Level 5
Иконки Групп

Класс: Волшебник
Характер: Chaotic Good
Раса: Дракон
NWN: Скриптинг [Sn]



QUOTE(Nashman @ May 16 2006, 06:09) [snapback]81934[/snapback]
Появляется ПС, на тригере, далее включается КаСцена и начинается разговор с НПС
под точкой появления ПС рисуем триггер, на его onEnter вешаем скрипт
NSS
object oPC = GetEnteringObject();
    object oNPC = GetObjectByTag("TAGNPC");

    if (!GetIsPC(oPC)) return;

    SetCutsceneMode(oPC);
    if (GetPlotFlag(oPC)) SetPlotFlag(oPC, FALSE); // на всякий случай, чтобы ПС не становился в режим бога
    AssignCommand(oPC, ActionStartConversation(oNPC, "dialog"));

QUOTE(Nashman @ May 16 2006, 06:09) [snapback]81934[/snapback]
При выборе первого варианта в точку А, при выборе второго в точку Б.
На варианте выбора
NSS
object oPoint = GetObjectByTag("POINT_A"); // тоже и с поинтом Б
    object oNPC = OBJECT_SELF;
    object oPC  = GetLastSpeaker();

    AssignCommand(oNPC, ActionMoveToObject(oPoint));
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSlow(), oPC);   // просто, чтобы не бегал
    DelayCommand(2.0f, AssignCommand(oPC , ActionMoveToObject(oPoint)));

Если все равно не работает проверяй теги

Сообщение отредактировал StalkerDtN - May 16 2006, 04:10
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nashman
сообщение May 16 2006, 11:09
Сообщение #2253


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



А идет сама проверка какую фразу ПС сказал, а то я что-то не вижу...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение May 16 2006, 11:25
Сообщение #2254


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



Nashman

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

NSS
// Set oObject's local integer variable sVarName to nValue
void SetLocalInt(object oObject, string sVarName, int nValue)


NSS
// Get oObject's local integer variable sVarName
// * Return value on error: 0
int GetLocalInt(object oObject, string sVarName)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nashman
сообщение May 16 2006, 11:33
Сообщение #2255


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



Я делал так:
на определенной строке диалога я ставил переменную, но потом не знаю как ее использовать в катсцене, тоесть у меня может быть два варианта а как тогда мне определить конец диалога?
IsInConversation(object OObject) что она должна вернуть если диалог закончен?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение May 16 2006, 11:42
Сообщение #2256


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE(Nashman @ May 16 2006, 14:33) [snapback]81952[/snapback]

тоесть у меня может быть два варианта а как тогда мне определить конец диалога?


А какие проблемы то... ?
Юзай слот ActionTakens и будет тебе счастье... (IMG:style_emoticons/kolobok_light/smile.gif)

PS:

QUOTE
IsInConversation
This function returns TRUE or FALSE based on the conversation state of the target. Use this function to conditionally execute behavior based on the target's conversation status.


Сообщение отредактировал Dik Morris - May 16 2006, 11:49
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
StalkerDtN
сообщение May 16 2006, 12:20
Сообщение #2257


Level 5
Иконки Групп

Класс: Волшебник
Характер: Chaotic Good
Раса: Дракон
NWN: Скриптинг [Sn]



QUOTE(Nashman @ May 16 2006, 16:09) [snapback]81948[/snapback]

А идет сама проверка какую фразу ПС сказал, а то я что-то не вижу...

Хех, Nashman, берешь, просто, на обе ветки диалога ставишь по скрипту. В первом скрипте будет
NSS
object oPoint = GetObjectByTag("POINT_A");

в другом
NSS
object oPoint = GetObjectByTag("POINT_B");
и будет все работать (IMG:style_emoticons/kolobok_light/smile.gif)

PS: хотя интереснее как предложил Dik Morris
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
virusman
сообщение May 16 2006, 14:30
Сообщение #2258


Level 17
Иконки Групп

Класс: Волшебник
Характер: Neutral Good
Раса: Человек
NWN: Скриптинг [PW]
Axistown SR 1.9
NWNX



QUOTE(Nashman @ May 16 2006, 12:33) [snapback]81952[/snapback]

Я делал так:
на определенной строке диалога я ставил переменную, но потом не знаю как ее использовать в катсцене, тоесть у меня может быть два варианта а как тогда мне определить конец диалога?
IsInConversation(object OObject) что она должна вернуть если диалог закончен?

В настройках любого диалога можно установить 2 скрипта: на нормальное завершение диалога и на прерывание (нажатие Esc). Если нужно поставить переменные в каждой ветке - сделай там соответствующие скрипты. А на скрипт завершения диалога можно вешать всё остальное...

Сообщение отредактировал virusman - May 16 2006, 14:34
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение May 16 2006, 14:37
Сообщение #2259


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Nashman, все очень просто. Для начала запустим кат сценку:
NSS
void main()
{
object oNPC = GetObjectByTag("PERS");
object oPC = GetEnteringObject();
if (!GetIsPC(oPC)) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
SetCutsceneMode(oPC, TRUE);
DelayCommand(0.1,AssignCommand(oPC, SetCameraFacing(330.0, 15.0, 50.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
DelayCommand(1.0,AssignCommand(oNPC,ActionForceMoveToObject(oPC, FALSE)));
DelayCommand(7.0, AssignCommand(oNPC, ActionStartConversation(oPC)));
}


Запустили диалог перса. Идем дальше, есть один нюанс: убери все скрипты, в панели редактора диалога, на вкладке «Текущий Файл», и включи галку «Прекращение увеличения», для того, чтобы не мотало камеру. Затем присвой переменные на ветки диалога. У тебя в модуле должны уже быть такие на определение последовательности диалога. Ели нет, то сделай.
Пример:
NSS
SetLocalInt(GetPCSpeaker(),"D1_"+GetTag(OBJECT_SELF), 1);
SetLocalInt(GetPCSpeaker(),"D2_"+GetTag(OBJECT_SELF), 1);

Дальше работает один скрипт на обе ветви диалога. В зависимости от выбранной ветви в диалоге, персы идут к нужной точке.
NSS
void main()
{
object oPoint1 = GetObjectByTag("POINT_A");
object oPoint2 = GetObjectByTag("POINT_B");
object oNPC = OBJECT_SELF;
object oPC = GetPCSpeaker();
object oByTag = GetObjectByTag("Nashman_TRIGER");

AssignCommand(oPC, ClearAllActions());
AssignCommand(oNPC, ClearAllActions());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oPC, 10.0); // просто, чтобы не бегал

if(GetLocalInt(GetPCSpeaker(), "D1_"+GetTag(OBJECT_SELF)) == 1)
{
AssignCommand(oNPC, ActionMoveToObject(oPoint1));
AssignCommand(oPC, ActionMoveToObject(oPoint1));
}
if(GetLocalInt(GetPCSpeaker(), "D2_"+GetTag(OBJECT_SELF)) == 1)
{
AssignCommand(oNPC, ActionMoveToObject(oPoint2));
AssignCommand(oPC, ActionMoveToObject(oPoint2));
}
DestroyObject(oByTag); // удалим триггер
DelayCommand(10.0, SetCutsceneMode(oPC, FALSE));
}


Сообщение отредактировал gennady - May 16 2006, 14:40
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Nashman
сообщение May 16 2006, 17:06
Сообщение #2260


Level 8
***

Класс: Тайный Лучник
Характер: Lawful Good
Раса: Эльф



gennady , спасибо это то, что нужно было, только вопрос:
Как убрать имунитет к замедлению? Если он есть
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение May 16 2006, 17:34
Сообщение #2261


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



gennady
QUOTE
DestroyObject(oByTag); // удалим триггер


ИМХО, стоит ввести небольшую задержку в 0.3, 0.5 - вдруг триггер удалится раньше. (IMG:style_emoticons/kolobok_light/smile.gif)

Nashman

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

NSS
void RemoveEffectImmunity(object oCreature){
   effect eEffect = GetFirstEffect(oCreature);
    while (GetEffectType(eEffect) == EFFECT_TYPE_IMMUNITY){   
     eEffect = GetNextEffect(oCreature);
      if (GetIsEffectValid(eEffect)){
       RemoveEffect(oCreature, eEffect);}}}


PS: код ставь перед основной фун-цией. (void main() ), заместо oCreature ставь игрока.

Сообщение отредактировал Dik Morris - May 16 2006, 18:14
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение May 16 2006, 20:37
Сообщение #2262


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



QUOTE(Nashman @ May 16 2006, 20:06) [snapback]81970[/snapback]
Как убрать имунитет к замедлению? Если он есть

Вот тебе функция. Узнай есть ли на нем такой эффект и убери. Уберешь так:

NSS
RemoveTypeEffect(oPC, EFFECT_TYPE_SLOW);


NSS
// УДАЛЯЕМ ВЫБРАННЫЙ ТИП ЕФФЕКТОВ iType(EFFECT_TYPE_ ) НА ОБЪЕКТЕ oCreature
void RemoveTypeEffect(object oCreature, int iType);

void RemoveTypeEffect(object oCreature, int iType)
{
    effect eEffect = GetFirstEffect(oCreature);
    while(GetIsEffectValid(eEffect))
    {
    if (GetEffectType(eEffect) == iType)
      {
        RemoveEffect(oCreature, eEffect);
      }
        eEffect = GetNextEffect(oCreature);
    }
}


Блин я не совсем вкурил вопрос, но думаю ты разберешься с кодом. Тебе ИММУН надо...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 16 2006, 21:23
Сообщение #2263


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



нееее... Айв, речь совсем не о том.
Вот, нашел в закромах

NSS
//******************************************************************************
// inc_effects
// Effects Library
// Lex, -=WRG!=- Team 2004
//******************************************************************************

// удаление всех эффектор по длительности (DURATION_TYPE)
void E_DeleteEffectsByDuration(object oObject, int nDuration);
// удаление всех эффектов, наложенных oCreator'ом
void E_DeleteEffectsByCreator(object oObject, object oCreator);
// удаление всех эффектов определенного типа (EFFECT_TYPE_*)
void E_DeleteEffectsByType(object oObject, int nType);
// удаление всех эффектов определенного подтипа (SUBTYPE_*)
void E_DeleteEffectsBySubType(object oObject, int nSubType);
// удаление особого эффекта, соотв. всем параметрам (создатель, длительность, тип, подтип)
// nAllEffects = TRUE - будут удалены все эффекты, попадающие под условия. FALSE - только первый
void E_DeleteSpecificEffect(object oObject, object oCreator = OBJECT_INVALID,int nEffectType = -1,int nEffectSubType = -1,int nEffectDurationType = -1, int nAllEffects = FALSE);

//******************************************************************************

void E_DeleteEffectsByDuration(object oObject, int nDuration)
{
effect eOE = GetFirstEffect(oObject);
while (GetIsEffectValid(eOE))
   {
   if (GetEffectDurationType(eOE)==nDuration)
       {
       RemoveEffect(oObject,eOE);
       }
   eOE = GetNextEffect(oObject);
   }
}
//******************************************************************************
void E_DeleteEffectsByCreator(object oObject, object oCreator)
{
effect eOE = GetFirstEffect(oObject);
while (GetIsEffectValid(eOE))
   {
   if (GetEffectCreator(eOE)==oCreator)
       {
       RemoveEffect(oObject,eOE);
       }
   eOE = GetNextEffect(oObject);
   }
}
//******************************************************************************
void E_DeleteEffectsByType(object oObject, int nType)
{
effect eOE = GetFirstEffect(oObject);
while (GetIsEffectValid(eOE))
   {
   if (GetEffectType(eOE)==nType)
       {
       RemoveEffect(oObject,eOE);
       }
   eOE = GetNextEffect(oObject);
   }
}
//******************************************************************************
void E_DeleteEffectsBySubType(object oObject, int nSubType)
{
effect eOE = GetFirstEffect(oObject);
while (GetIsEffectValid(eOE))
   {
   if (GetEffectSubType(eOE)==nSubType)
       {
       RemoveEffect(oObject,eOE);
       }
   eOE = GetNextEffect(oObject);
   }
}
//******************************************************************************
void E_DeleteSpecificEffect(object oObject, object oCreator = OBJECT_INVALID,int nEffectType = -1,int nEffectSubType = -1,int nEffectDurationType = -1, int nAllEffects = FALSE)
{
effect eEffect = GetFirstEffect(oObject);
int PassCreator = (oCreator==OBJECT_INVALID);
int PassEffectType = (nEffectType==-1);
int PassEffectSubType = (nEffectSubType==-1);
int EffectDurationType = (nEffectDurationType==-1);

while (GetIsEffectValid(eEffect))
   {
   if ((GetEffectCreator(eEffect)==oCreator)||(PassCreator))
       {
       if ((GetEffectType(eEffect)==nEffectType)||(PassEffectType))
           {
           if ((GetEffectSubType(eEffect)==nEffectSubType)||(PassEffectSubType))
               {
               if ((GetEffectDurationType(eEffect)==nEffectDurationType)||(EffectDurationType))
                   {
                   RemoveEffect(oObject,eEffect);
                   if (!nAllEffects)
                        return;
                   }
               }
           }
       }
   eEffect = GetNextEffect(oObject);
   }
}
//******************************************************************************
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение May 17 2006, 05:55
Сообщение #2264


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



QUOTE(Dik Morris @ May 16 2006, 18:34) [snapback]81977[/snapback]
ИМХО, стоит ввести небольшую задержку в 0.3, 0.5 - вдруг триггер удалится раньше.

Дик, задержка не нужна - триггер уже свое отработал. Первый скрипт стоит на триггере, а второй в диалоге перса, и последние команды идут из стека этого перса.

Вопрос к Aivan. Вы недавно приводили интересный скрипт секретного объекта. На версии 1.32, проверка локалки не работает, пробовал подобрать проверку на эффект GetEffectType(), не смог подобрать нужный. Замучили буквоеды! Так какая включается локалка в режиме обнаружения, или какой налагается эффект замедления на героя?

NSS
if(GetGameDifficulty() == GAME_DIFFICULTY_EASY || !GetLocalInt(GetModule(), "DEBAG_PC"))
SendMessageToPC(oPC, "<cу >ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.</c>");
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение May 17 2006, 07:12
Сообщение #2265


Миловидный Бегрюссунг
Иконки Групп

Класс: Воин
Характер: Chaotic Good
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Генадий, это просто я сделал для своих тестеров для дебага. Вы можете удалить кусок кода с локалкой:
NSS
if(GetGameDifficulty() == GAME_DIFFICULTY_EASY)
SendMessageToPC(oPC, "<cу >ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.</c>");

Тогда предупреждение будет выдавать только игрокам играющим на сложности EASY. Можете вообще убрать.
Если вы спрашиваете в каком режиме это происходит, то при спавне по умолчанию забанена кнопка F2.
По поводу того что может не работать... Дело в том что написано это на 1.66, соотвесвенно может некоторые функции имеют другие внутренние механизмы движка или их вообще нет. Но это вряд ли, тогда бы не скомпелировался код. Насколько я понимаю, у вас СОУ, соотвественно вы задать локалки или стринги на триггере заранее НЕ МОЖЕТЕ. Значит скрипт настроить нормально вашими средствами нельзя. Ставьте ХОТУ. (IMG:style_emoticons/kolobok_light/yes3.gif)

2 Лекс. Сенькс, за код, надо библу себе добить будет (IMG:style_emoticons/kolobok_light/biggrin.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение May 17 2006, 09:39
Сообщение #2266


Level 9
Иконки Групп

Класс: Обыватель
Характер: Lawful Good
Раса: Человек
NWN: Модмейкер
Рыцарская Сага



Спасибо вам Aiwan за ответ. Скрипт конечно не компелировался, пришлось выкинуть все локалки и стринги, и заточить под собственные нужды. Фразу - «ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.», оставил при любом режиме, пусть колбасит игрока, но это немного некорректно, когда этот режим включен. Перейти на 1.66 нет возможности, да и нет необходимости, пока игра не дописана. Поэтому пробовал через эффект, но не нашел оный. Спасибо Лексу за библиотеку. Интересно, никто не делал библиотеку эффектов? Я попытался, описал полторы сотни, работает нормально, но не все еще внес. Если еще подключить библиотеку Лекса, то это облегчит работу по скриптам с эффектами. В общем идея такая:

NSS
// *********** БИБЛИОТЕКА ЭФФЕКТОВ ************    #include "effect_one"

effect e1i = EffectVisualEffect(VFX_FNF_DISPEL);
// Воронка синего тумана 1
effect e2i = EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION);
// Воронка синего тумана 2
effect e3i = EffectVisualEffect(VFX_FNF_DISPEL_GREATER);
// Воронка синего тумана 3
effect e4i = EffectVisualEffect(VFX_FNF_IMPLOSION);
// ЖелтаЯ воронка
effect e5i = EffectVisualEffect(VFX_FNF_LOS_EVIL_10);
// НегативнаЯ энергиЯ Красный круг 1
effect e6i = EffectVisualEffect(VFX_FNF_LOS_EVIL_20);
// НегативнаЯ энергиЯ Красный круг 2
effect e7i = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
// НегативнаЯ энергиЯ Красный круг 3
effect e8i = EffectVisualEffect(VFX_FNF_LOS_HOLY_10);
// круг желтый 1
effect e9i = EffectVisualEffect(VFX_FNF_LOS_HOLY_20);
// круг желтый 2
effect e10i = EffectVisualEffect(VFX_FNF_LOS_HOLY_30);
// круг желтый 3
effect e11i = EffectVisualEffect(VFX_FNF_NATURES_BALANCE);
// Зеленый круг животных
effect e12i = EffectVisualEffect(VFX_FNF_PWKILL);
// Красный круг пентаграммы
effect e13i = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
// ФиолетоваЯ спираль и круг
effect e14i = EffectVisualEffect(VFX_FNF_HOWL_MIND);
// Страх синий круг
effect e15i = EffectVisualEffect(VFX_FNF_HOWL_ODD);
// Страх фиолетовый круг
effect e16i = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY);
// Страх белый круг
  effect e17i = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
// Огненный импульсный круг
  effect e18i = EffectVisualEffect(VFX_IMP_PULSE_COLD);
// синий импульсный круг

// ***********  ИНТЕРЕСНЫЕ  **********
effect e19i = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
// ГолубаЯ  звезда под ногами
effect e20i = EffectVisualEffect(VFX_FNF_WORD);
// БольшаЯ желтаЯ звезда под ногами
effect e21i = EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL);
// Врата Призыва синий луч
effect e22i = EffectVisualEffect(VFX_FNF_SUMMON_GATE);
// Врата Призыва огненный взрыв
effect e23i = EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES);
// Девка
effect e24i = EffectVisualEffect(VFX_FNF_WEIRD);
// Змей двуглавый
effect e25i = EffectVisualEffect(VFX_IMP_DISPEL);
// Голубое облако
  effect e26 = EffectVisualEffect(VFX_DUR_PROT_PREMONITION);
// Глазастое синее облако

// ***********  ВЗРЫВНЫЕ  **********
effect e27i = EffectVisualEffect(VFX_FNF_FIREBALL);
// Большой огненный взрыв
effect e28i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID);
// Взрыв газа зеленый
effect e29i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_EVIL);
// Взрыв газа красный
effect e30i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_FIRE);
// Огненный взрыв
effect e31i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_GREASE);
// Взрыв газа черный
effect e32i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_MIND);
// Взрыв газа синий
effect e33i = EffectVisualEffect(VFX_FNF_BLINDDEAF);
// Большой серебристый взрыв
effect e34i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_NATURE);
// Взрыв газа болотный
effect e35i = EffectVisualEffect(VFX_FNF_LOS_NORMAL_10);
// Звуковой взрыв 1
effect e36i = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20);
// Звуковой взрыв 2
effect e37i = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
// Звуковой взрыв 3
effect e38i = EffectVisualEffect(VFX_FNF_SOUND_BURST);
// Большой звуковой взрыв
effect e39i = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_1);
// Серебристый взрыв
effect e40i = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
// Серебристый малый взрыв и голос страха
effect e41i = EffectVisualEffect(VFX_COM_CHUNK_RED_LARGE);
// Большой взрыв красные кости
effect e42i = EffectVisualEffect(VFX_COM_CHUNK_RED_MEDIUM);
// взрыв красные кости
effect e43i = EffectVisualEffect(VFX_COM_CHUNK_RED_SMALL);
// взрыв красные кости
effect e44i = EffectVisualEffect(VFX_COM_CHUNK_GREEN_MEDIUM);
// Взрыв зеленые кости
effect e45i = EffectVisualEffect(VFX_COM_CHUNK_GREEN_SMALL);
// Взрыв зеленые кости
effect e46i = EffectVisualEffect(VFX_COM_CHUNK_YELLOW_MEDIUM);
// Взрыв желтые кости
effect e47i = EffectVisualEffect(VFX_COM_CHUNK_YELLOW_SMALL);
// Взрыв желтые кости
effect e48i = EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM);
// Взрыв костей нежить
effect e49i = EffectVisualEffect(VFX_COM_HIT_ACID);
// Малый зеленый взрыв
effect e50i = EffectVisualEffect(VFX_COM_HIT_FIRE);
// МалаЯ огненнаЯ вспышка
effect e51i = EffectVisualEffect(VFX_DUR_CALTROPS);
// Взрыв ежиков

// ***********  ЗАКЛИНАНИЕ  ***********
effect e52i = EffectVisualEffect(VFX_FNF_HORRID_WILTING);
// Увeдание Аб-ма
effect e53i = EffectVisualEffect(VFX_FNF_ICESTORM);
// Ледeной шторм
effect e54i = EffectVisualEffect(VFX_FNF_METEOR_SWARM);
// Метеорный дождь
effect e55i = EffectVisualEffect(VFX_FNF_FIRESTORM);
// Огненный шторм
effect e56i = EffectVisualEffect(VFX_FNF_TIME_STOP);
// Часы
effect e57 = EffectVisualEffect(VFX_DUR_BIGBYS_CLENCHED_FIST);
// Рука Бигли
effect e58 = EffectVisualEffect(VFX_DUR_BIGBYS_CRUSHING_HAND);
// Захват Бигли
effect e59 = EffectVisualEffect(VFX_DUR_BIGBYS_INTERPOSING_HAND);
// Вращ рука Бигли
effect e60 = EffectVisualEffect(VFX_DUR_WEB);
// Паутина удержание
effect e61 = EffectVisualEffect(VFX_DUR_WEB_MASS);
// Паутина удержание под ногами
effect e62 = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN);
// Кожа кора
effect e63 = EffectVisualEffect(VFX_DUR_PETRIFY);
// КаменнаЯ кожа
effect e64 = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR);
// ЧернаЯ кожа
effect e65 = EffectVisualEffect(VFX_DUR_GHOSTLY_PULSE);
// Теневой режим
effect e66 = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE);
// Призрачный вид
  effect e67 = EffectVisualEffect(VFX_DUR_ETHEREAL_VISAGE);
// Фиолетовый вид
  effect e68 = EffectVisualEffect(VFX_DUR_BLUR);
// Телесное мерцание
effect e69i = EffectVisualEffect(VFX_FNF_SCREEN_BUMP);
// Толчки 1
effect e70i = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
// Толчки 2
effect e71i = EffectVisualEffect(VFX_IMP_KNOCK);
// ПульсирующаЯ голубаЯ звезда  (взлом замка)

// ***********  ЛУЧИ  ***********
effect e72i = EffectVisualEffect(VFX_FNF_SUNBEAM);
// Большой желтый луч
effect e73i = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE);
// Огненный луч
effect e74i = EffectVisualEffect(VFX_IMP_HEALING_X);
// Синий луч
effect e75i = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
// Молнии луч

// ***********  ПОД НОГАМИ  ***********
effect e76i = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
// Доспехи супер героЯ
effect e77 = EffectVisualEffect(VFX_DUR_ANTI_LIGHT_10);
// Чернота под ногами (тьма)
effect e78 = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
// Огненный круг под ногами
effect e79 = EffectVisualEffect(VFX_DUR_SPELLTURNING);
// Синий круг под ногами
effect e80 = EffectVisualEffect(VFX_DUR_FREEDOM_OF_MOVEMENT);
// Зеленый круг под ногами
effect e81i = EffectVisualEffect(VFX_COM_SPARKS_PARRY);
// Искры у ног
effect e82i = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
// Малый взрыв электричества под ногами
effect e83 = EffectVisualEffect(VFX_DUR_TENTACLE);
// Черные нити
effect e84 = EffectVisualEffect(VFX_DUR_ENTANGLE);
// Папоротник
effect e85i = EffectVisualEffect(VFX_FNF_SMOKE_PUFF);
// Пар
effect e86 = EffectVisualEffect(VFX_DUR_FLAG_BLUE);
// Флаг синий
effect e87 = EffectVisualEffect(VFX_DUR_FLAG_GOLD);
// Флаг фиолетовый
effect e88 = EffectVisualEffect(VFX_DUR_FLAG_PURPLE);
// Флаг желтый
effect e89 = EffectVisualEffect(VFX_DUR_FLAG_RED);
// Флаг красный

// ***********  У ГОЛОВЫ  ***********
effect e90 = EffectVisualEffect(VFX_DUR_BARD_SONG);
// Музыка и ноты
effect e91i = EffectVisualEffect(VFX_IMP_DOOM);
// Гроза над головой
effect e92i = EffectVisualEffect(VFX_IMP_HEAD_ACID);
// Зеленый взрыв над головой
effect e93i = EffectVisualEffect(VFX_IMP_HEAD_COLD);
// Голубой взрыв над головой
effect e94i = EffectVisualEffect(VFX_IMP_HEAD_ELECTRICITY);
// Электрический взрыв над головой
effect e95i = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
// Красный взрыв над головой
effect e96i = EffectVisualEffect(VFX_IMP_HEAD_FIRE);
// Огненный взрыв над головой
effect e97i = EffectVisualEffect(VFX_IMP_HEAD_HEAL);
// Сине-желтый взрыв над головой
effect e98i = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
// Желтый взрыв над головой
effect e99i = EffectVisualEffect(VFX_IMP_HEAD_MIND);
// Фиолетовый взрыв над головой
effect e100i = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
// Желто-зеленый взрыв над головой
effect e101i = EffectVisualEffect(VFX_COM_HIT_FIRE);
// Малый oгненный взрыв у головы
effect e102i = EffectVisualEffect(VFX_COM_BLOOD_SPARK_LARGE);
// Радужные брызги у головы
effect e103i = EffectVisualEffect(VFX_COM_BLOOD_SPARK_MEDIUM);
// Радужные брызги
effect e104i = EffectVisualEffect(VFX_COM_BLOOD_CRT_RED);
// Красный шар взрыв у головы
effect e105i = EffectVisualEffect(VFX_COM_BLOOD_CRT_YELLOW);
// Желтый шар взрыв у головы
effect e106i = EffectVisualEffect(VFX_IMP_STUN);
// Ледeной взрыв над головой
effect e107i = EffectVisualEffect(VFX_IMP_HEALING_G);
// Маг радужное облако
effect e108 = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT);
// Замешательство облако
effect e109 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
// Замешательство птички
effect e110 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED);
// Замешательство нимб голубой
effect e111 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR);
// Страх
effect e112 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
// Замешательство спираль
effect e113 = EffectVisualEffect(VFX_DUR_PARALYZED);
// Замешательство круг кинжалов

// ***********  ПРОЧИЕ  ***********
effect e114i = EffectVisualEffect(VFX_FNF_PWSTUN);
// КраснаЯ спираль
effect e115 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD);
// БольшаЯ белаЯ спираль
effect e116 = EffectVisualEffect(VFX_DUR_AURA_COLD);
// Аура голубаЯ
effect e117i = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
// ОгненнаЯ спираль
effect e118i = EffectVisualEffect(VFX_IMP_HEALING_L);
// Фонтан голубой спиральный
effect e119i = EffectVisualEffect(VFX_IMP_HEALING_M);
// Малый столб света
effect e120i = EffectVisualEffect(VFX_IMP_HEALING_S);
// МалаЯ голубаЯ спираль
effect e121 = EffectVisualEffect(VFX_DUR_DARKNESS);
// МалаЯ тьма
effect e122 = EffectVisualEffect(VFX_DUR_GLOBE_INVULNERABILITY);
// Маг сфера
effect e123 = EffectVisualEffect(VFX_DUR_GLOBE_MINOR);
// ПризрачнаЯ маг сфера
effect e124 = EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE);
// Маг рваннаЯ сфера
effect e125 = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MAJOR);
// Красный дождь
effect e126 = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR);
// Малый красный дождь
effect e127 = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR);
// Желтый дождь
effect e128 = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR);
// Малый желтый дождь
effect e129 = EffectVisualEffect(VFX_DUR_SANCTUARY);
// БольшаЯ синеЯ спираль
effect e130 = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS);
// Желтый маг дождь
effect e131 = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_15);
// Свет желтый
effect e132 = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_15);
// Свет белый
effect e133 = EffectVisualEffect(VFX_DUR_LIGHT_RED_15);
// Свет красный
effect e134 = EffectVisualEffect(VFX_DUR_LIGHT_BLUE_15);
// Свет голубой
effect e135 = EffectPetrify();
// Окаменение - статуЯ
effect e136 = EffectAppear();
// Прыжок с неба
effect e137 = EffectDisappear();
// Прыжок в небо и уничтожение объекта
effect e138 = EffectCharmed();
// Эффект зачаровывает цель - (не может говорить)
effect e139 = EffectCutsceneParalyze();
// Эффект парализации
effect e140 = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
// ПолнаЯ невидимость
effect e141i = EffectDeath();
// Эффект смерти
effect e142 = EffectHaste();
// Эффект ускорение
effect e143 = EffectEntangle();
// Эффект запутывание
effect e144i = EffectResurrection();
// Эффект воскрешениe
effect e145 = EffectSleep();
// Эффект сон
effect e146 = EffectVisualEffect(VFX_IMP_SLEEP);
// Эффект сон
effect e147 = EffectSlow();
// Эффект замедление - цель затормаживает на 50%
effect e148 = EffectCurse(3,3,3,3,3);
// ПРОКЛЯТИЕ
//**************************
//=============== НАЛОЖИТЬ ЭФФЕКТ ==============================================
void EffectOnPC(object oObject, effect eOne, float iTime, int iNUM)
{
location lEffect = GetLocation(oObject);
if (iNUM == 1) ApplyEffectToObject(DURATION_TYPE_INSTANT, eOne, oObject);
if (iNUM == 2) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eOne, oObject, iTime);
if (iNUM == 3) ApplyEffectToObject(DURATION_TYPE_PERMANENT, eOne, oObject);
if (iNUM == 4) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eOne), oObject, iTime);
if (iNUM == 5) ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eOne), oObject);
if (iNUM == 6) ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eOne, lEffect);
}
//=============== СНЯТЬ ВСЕ ЭФФЕКТЫ ============================================
void DelEffectOnPC(object oObject)
{
effect eOne = GetFirstEffect(oObject);
while (GetIsEffectValid(eOne))
{
  RemoveEffect(oObject, eOne);
  eOne = GetNextEffect(oObject);
}
}
//=============== СНЯТЬ ЭФФЕКТ =================================================
void DelOneEffectOnPC(object oObject, int iOne)
{
effect eEffect = GetFirstEffect(oObject);
while (GetIsEffectValid(eEffect))
{
  if (GetEffectType(eEffect) == iOne)
  RemoveEffect(oObject, eEffect);
  eEffect = GetNextEffect(oObject);
}
//  int iOne -  EFFECT_TYPE_...
}


Эффекты сгруппировал по визуальному восприятию, если кого не устраивает описание, пишите свое. Если после номера эффекта стоит «i» - то этот эффект только «INSTANT» (может где и ошибся, извиняйте).

Сообщение отредактировал gennady - May 21 2006, 06:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Noah
сообщение May 17 2006, 11:06
Сообщение #2267


Level 5
**

Класс: Убийца
Характер: Chaotic Neutral
Раса: Полуэльф



Привет!Пытаюсь сделать триггер для повышения навыка(любого),типа вы скрылись в тени бонус к hide+6,а когда выидешь,чтобы бонус исчезал. Кроме того нужно чтоб бонусы не складывались.Кто знает как напишите.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение May 17 2006, 11:27
Сообщение #2268


Level 5
Иконки Групп

Класс: Обыватель
Характер: Lawful Neutral
Раса: Человек
NWN: Модмейкер
Проклятие Левора
Порядок Времени



Триггер скиловой модификации. Для всех, и игрока и НПС.
(по аналогии можно сделать и модификацую атаки, АС и прочее)

lx_ten_skillmod - на ентер триггера

NSS
void main()
{
int mod = GetLocalInt(OBJECT_SELF,"MOD");
if (mod == 0) return;
object oPC = GetEnteringObject();
int skill = GetLocalInt(OBJECT_SELF,"SKILL");

string Comment = GetName(OBJECT_SELF);
effect eEffect;
if (mod > 0)
    {
    eEffect = SupernaturalEffect(EffectSkillIncrease(skill,mod));
    }
else
    {
    eEffect = SupernaturalEffect(EffectSkillDecrease(skill,-mod));
    }
if (GetLocalInt(OBJECT_SELF,"MSG"))
    SendMessageToPC(oPC,"*"+Comment+"*");
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEffect,oPC);
}




lx_tex_skillmod на экзит триггера
NSS
#include "inc_effects" // библа написана выше на пару постов
void main()
{
int mod = GetLocalInt(OBJECT_SELF,"MOD");
if (mod == 0) return;
object oPC = GetExitingObject();
int TYPE = 0;
if (mod > 0)
    {
    TYPE = EFFECT_TYPE_SKILL_INCREASE;
    }
else
    {
    TYPE = EFFECT_TYPE_SKILL_DECREASE;
    }
E_DeleteSpecificEffect(oPC,OBJECT_SELF,TYPE,SUBTYPE_SUPERNATURAL,DURATION_TYPE_PERMANENT);
}


делаем триггер, ставим эти 2 скрипта в слоты. Вешаем локалки
MOD, которая хранит значение модификации. Модификация может быть как положительной так и отрицательной.
MSG Это флаг того, будет ли выдаваться игроку сообщение (сообщение при входе это имя триггера).
SKILL номер скила, который меняется

int SKILL_ANIMAL_EMPATHY = 0;
int SKILL_CONCENTRATION = 1;
int SKILL_DISABLE_TRAP = 2;
int SKILL_DISCIPLINE = 3;
int SKILL_HEAL = 4;
int SKILL_HIDE = 5;
int SKILL_LISTEN = 6;
int SKILL_LORE = 7;
int SKILL_MOVE_SILENTLY = 8;
int SKILL_OPEN_LOCK = 9;
int SKILL_PARRY = 10;
int SKILL_PERFORM = 11;
int SKILL_PERSUADE = 12;
int SKILL_PICK_POCKET = 13;
int SKILL_SEARCH = 14;
int SKILL_SET_TRAP = 15;
int SKILL_SPELLCRAFT = 16;
int SKILL_SPOT = 17;
int SKILL_TAUNT = 18;
int SKILL_USE_MAGIC_DEVICE = 19;
int SKILL_APPRAISE = 20;
int SKILL_TUMBLE = 21;
int SKILL_CRAFT_TRAP = 22;
int SKILL_BLUFF = 23;
int SKILL_INTIMIDATE = 24;
int SKILL_CRAFT_ARMOR = 25;
int SKILL_CRAFT_WEAPON = 26;
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение May 17 2006, 14:35
Сообщение #2269


Level 8
***

Класс: Паладин
Характер: Lawful Good
Раса: Полуэльф
ПОДМАСТЕРЬЕ



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

NSS
//Событие, отправляющее овцу поближе к пастуху и укладывающее ее спать.
if (nEvent==EVENT_S_SLEEP)
    {
    if (GetLocalInt(oSelf, "int_EVENT")==EVENT_S_SLEEP)
        return;
    SetLocalInt(oSelf, "int_EVENT", EVENT_S_SLEEP);
    float fDist=(Random(8)+1)*1.0;
    ActionMoveToObject(oPastuh, FALSE, fDist);
    effect eSleep=EffectSleep();
    ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSleep, oSelf));
};

//Событие, которое "будит" овцу.
if (nEvent==EVENT_S_WAKEUP)
    {
    SetLocalInt(oSelf, "int_EVENT", EVENT_S_WAKEUP);
    //Снимаем эффект сна.
    effect eEffect=GetFirstEffect(oSelf);
    while (GetIsEffectValid(eEffect))
        {
        if (GetEffectType(eEffect)==EFFECT_TYPE_SLEEP)
            RemoveEffect(oSelf, eEffect);
        eEffect=GetNextEffect(oSelf);
        };
    ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));
    };

//Событие, которое заставляет овцу шляться по локации (типа пастись).
if (nEvent==EVENT_S_WALK)
    {
    SetLocalInt(oSelf, "int_EVENT", EVENT_S_WALK);
    ClearAllActions();
    location lWalkTo=RandomLocation(oPastuh, 20.0, FALSE);
    ActionMoveToLocation(lWalkTo, FALSE);
    ActionWait(3.0);
    ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));
    };


При таком раскладе команд событие EVENT_S_WALK после пробуждения не наступает ВООБЩЕ.
Т.е. строка "ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));" не срабатывает.
Пробовал менять код вот так:
NSS
//Событие, которое "будит" овцу.
if (nEvent==EVENT_S_WAKEUP)
    {
    SetLocalInt(oSelf, "int_EVENT", EVENT_S_WAKEUP);
    //Снимаем эффект сна.
    SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK));
    effect eEffect=GetFirstEffect(oSelf);
    while (GetIsEffectValid(eEffect))
        {
        if (GetEffectType(eEffect)==EFFECT_TYPE_SLEEP)
            RemoveEffect(oSelf, eEffect);
        eEffect=GetNextEffect(oSelf);
        };
    };

При этом овца вскакивает после сна, пробегает до заданной location, а потом опять застывает и стоит.
Т.е. строка "ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));" опять-таки не срабатывает, но на этот раз в событии EVENT_S_WALK.
ClearAllActions() в разных местах не помогает.
Что делать?..

.......................................

Блин, понял сам, в чем дело. Все симптомы навели на то, что блокирован стек действий персонажа. А посему исправил код вот так:
NSS
if (nEvent==EVENT_S_WAKEUP)
    {
    SetLocalInt(oSelf, "int_EVENT", EVENT_S_WAKEUP);
    effect eEffect=GetFirstEffect(oSelf);
    while (GetIsEffectValid(eEffect))
        {
        if (GetEffectType(eEffect)==EFFECT_TYPE_SLEEP)
            RemoveEffect(oSelf, eEffect);
        eEffect=GetNextEffect(oSelf);
        };
    SetCommandable(TRUE, oSelf);//Разблокируем командный стек.
    ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));
    };

Все заработало. Ларчик просто открывался... Но как-то странно. Это что, глюк движка?..

Сообщение отредактировал Kavin - May 17 2006, 14:36
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
..::SERGO::..
сообщение May 23 2006, 12:29
Сообщение #2270


Level 3
*

Класс: Паладин
Характер: Lawful Good
Раса: Человек



Тут такая трабла. Перс при заходе в модуль ничего не одевает, но все вещи есть в инвентаре, и он может все носить!
NSS
void main()
{
object oMod = GetModule();
object oPC = GetEnteringObject();

if (!GetIsPC(oPC) || GetLocalInt(oMod, "START_GAME"))
       {return;}
       {
       SetLocalInt(oMod, "START_GAME", TRUE); //Only one use!
     TakeGoldFromCreature(GetGold(oPC),oPC,TRUE); //Get All Money
       object oItem = GetFirstItemInInventory(oPC); //Take off the hole inventory!
        while(GetIsObjectValid(oItem)) //If there is an object
        {
            DestroyObject(oItem);  //Destroy it
            oItem = GetNextItemInInventory(oPC); //Next object!
        }
        int i=0;//destory amunition
        while(i<14)
        {
        DestroyObject(GetItemInSlot(i, oPC));
        i++;
        }
          GiveGoldToCreature(oPC, 3000);  //GiveGold
         CreateItemOnObject("LO", oPC, 1);  //Objects
         CreateItemOnObject("DO", oPC, 1);
         CreateItemOnObject("HO", oPC, 1);
         CreateItemOnObject("MO", oPC, 1);
         CreateItemOnObject("AO", oPC, 72);
         object oItemCr = GetFirstItemInInventory(oPC);
         while(GetIsObjectValid(oItemCr))
             {
             SetIdentified(oItemCr,TRUE);
             oItemCr = GetNextItemInInventory(oPC);
             }
             AssignCommand(oPC, ActionEquipMostEffectiveArmor());//Put on everything
       }
}


LEX: перенес в соот. тему. Но вообще ты должен сам понимать, что скрипты больше пары строк это уже не по скриптам вопрос, а не для новичков.

По теме: одевая с задержкой и отчисть стек акций до этого. У тебя мб просто шмотки создаться не успевают. И оденется не все, а только армор.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
LokiJ_Tzn
сообщение May 23 2006, 12:58
Сообщение #2271


Level 1


Класс: Страж Тьмы
Характер: Chaotic Good
Раса: Полуэльф



Кто-нить знает, как можно сделать, чтобы труп, остающийся после смерти создания, реагировал на щелчок по нему мышью иначе, чем обычно? (не открывал лут, а исполнял какой-нить скрипт)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение May 23 2006, 13:27
Сообщение #2272


Вечно меняющийся
Иконки Групп

Класс: Монах
Характер: True Neutral
Раса: Человек
NWN: Скриптинг [Sn]



LokiJ_Tzn

Имхо, лучше сделать проще - после смерти NPC создавать невидимый плейс и уже ему вешать на onUsed нужный скрипт.


..::SERGO::..

Попробуй ввести задержку на создание предметов, например так:
NSS
// Перед началом оснв. фун-ции: (тобишь void main())
void ActionCreateItem(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1)
{
    CreateItemOnObject(sItemTemplate, oTarget, nStackSize);
}

Работает аналогично CreateItemOnObject(""), но может ставиться в очередь действий или делей.

QUOTE
Перс при заходе в модуль ничего не одевает


Одевается только одежда, для оружия можно юзать, ActionEquipMostDamagingMelee и ActionEquipMostDamagingRanged.

Сообщение отредактировал Dik Morris - May 23 2006, 13:39
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
LokiJ_Tzn
сообщение May 24 2006, 11:35
Сообщение #2273


Level 1


Класс: Страж Тьмы
Характер: Chaotic Good
Раса: Полуэльф



QUOTE(Dik Morris @ May 23 2006, 16:27) [snapback]82548[/snapback]

LokiJ_Tzn

Имхо, лучше сделать проще - после смерти NPC создавать невидимый плейс и уже ему вешать на onUsed нужный скрипт.



Спасибо, я уже разобрался (IMG:style_emoticons/kolobok_light/smile.gif) посидел ночью и модифицировал x0_i0_corpse, чтоб он создавал кастомный плейс невидимого объекта вместо лутабельного трупа.
Это для скиннинга (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DarkDeivel
сообщение May 24 2006, 14:44
Сообщение #2274


Level 3
*

Класс: Паладин
Характер: Lawful Good
Раса: Человек



В игре максимум 20 лвл. Как сделать чтобы был максимальный 100. Если скрипт скажите плиз. (IMG:style_emoticons/kolobok_light/declare.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
kreon
сообщение May 24 2006, 14:49
Сообщение #2275


Level 8
Иконки Групп

Класс: Некромант
Характер: Chaotic Evil
Раса: Дракон
NWN: Скриптинг [PW]



2DarkDeivel: это тебе это читать надо (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 89 90 91 92 93 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29th March 2024 - 10:48