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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 91 92 93 94 95 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Kavin
сообщение Jun 2 2006, 21:15
Сообщение #2301


Level 8
***

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



Lex, попробовал - не сработало. Если верить лексикону, то получается, что PlaySound() не выполняется до тех пор, пока в стеке что-то есть. Глюк биоваревский. Т.е. очередь действий кончилась - начался звук.
Поэтому нужно делать так, чтобы PlaySound срабатывал, когда стек пуст, а затем он начинал заполняться. Разница в доли секунды получится, и глазу юзера будет незаметна.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
..::SERGO::..
сообщение Jun 6 2006, 16:35
Сообщение #2302


Level 3
*

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



NSS
void ANIMATION(object oD)

    {
    int A=0;
    float T,S;
    switch (Random(8)+1)
      {
      case 2: A=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T=3.0;S=1.0;break;
      case 3: A=ANIMATION_FIREFORGET_TAUNT;T=3.0;S=1.0;break;
      case 4: A=ANIMATION_FIREFORGET_PAUSE_BORED;S=1.0;break;
      case 5: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      case 6: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      }
    if (A==0) return;
    AssignCommand(oD,PlayAnimation(A,S,T));
    }

void DIALOG(object oD1,object oD2)
    {
    string s1="",s2="";
    string ya = GetName(GetObjectByTag("ya"));
    switch (Random(30))
        {
        case 0: s1="×òî ìû òåïåðü äåëàòü-òî áóäåì?";s2=" Íåçíàé! Âðåìÿ ïîêàæåò...";break;
        case 1: s1="À ó íàñ åñòü ÷å ïîåñòü òî, à?";s2="Ñõîäèì â òàâåðíó, òàì äîëæíû áûòü áîè, íàâåðíÿêà ìîíåòêè òî ïîñûïÿòñÿ íà çåìëþ, õåõå...";break;
        case 2: s1="Ó ìåíÿ â æèâîòå óð÷èò";s2="Òàê ñõîäè, ïîåøü, ñòàðóøêà äðÿõëàÿ ìîÿ!";break;
        case 3: s1="À íàøà äî÷êà íàâåðíî æèâåò ñ÷àñòëèâîé æèçíü...";s2="Ïðèøåë áû ÿ äîìîé íà ïÿòü ìèíóò ðàíüøå, ÿ áû èç Ñàí÷åçà âñþ äóðü òî âûáèë!! Ýõ ÿ åìó...";break;

        }
    AssignCommand(oD1,SpeakString(s1));
    AssignCommand(oD2,DelayCommand(5.0,SpeakString(s2)));
    }

void main()
{
object oPC = GetFirstPC();
if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return;
object oD1 = GetNearestObjectByTag("oldman1");
object oD2 = GetNearestObjectByTag("oldwoman1");
if (GetIsInCombat(oD1)) return;
if (GetIsInCombat(oD2)) return;
if ( (IsInConversation(oD1)) || (IsInConversation(oD2)) ) return;
if (GetDistanceToObject(oPC)>10.0) return;
AssignCommand(oD1,SetFacingPoint(GetPosition(oD2)));
AssignCommand(oD2,SetFacingPoint(GetPosition(oD1)));
DIALOG(oD1,oD2);
ANIMATION(oD1);
ANIMATION(oD2);
}

Два вопроса.
1 - почему не составляется(хотя в игре все ОК)
2 - почему НПСы болтают вроде бы, но не слова не появляется!?
PS 1 - при английских словах все ОК
2 - при английских словах такаяже лажа(IMG:style_emoticons/kolobok_light/sad.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jun 6 2006, 17:04
Сообщение #2303


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

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



1.
Избавляйся от маленькой буквы я, либо ставь патч от dumbo.

NSS
...
"Избавл"+ya+"йся"
...


2.
Ты точно указал таги NPC ?

Сообщение отредактировал Dik Morris - Jun 6 2006, 17:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 6 2006, 17:11
Сообщение #2304


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

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



QUOTE(..::SERGO::.. @ Jun 6 2006, 17:35) [snapback]83853[/snapback]
switch (Random(30))

а кейса 4. У тебя вероятность 4 к 30 что раз в 6 секунд они что-то скажут.
+ смотри, там же стоит проверка на дистанцию: те если игрок далеко, то фраз видно не будет.
ЗЫ: хм.. лучше поменять очередность.. анимация, потом проверка на дистанцию, потом слова. Так реалистичнее
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jun 7 2006, 06:37
Сообщение #2305


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

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



QUOTE(..::SERGO::.. @ Jun 6 2006, 17:35) [snapback]83853[/snapback]
Два вопроса.
1 - почему не составляется(хотя в игре все ОК)
2 - почему НПСы болтают вроде бы, но не слова не появляется!?
PS 1 - при английских словах все ОК
2 - при английских словах такаяже лажа

SERGO, у тебя не правильно составлены стринги. Смотри как надо, и правь последнею строку сам. Если скрипт стоял на ХБ перса, то скрипт поэтому и не работал, он написан у тебя для работы с третьего перса. Маленький совет: копируй скрипт при русском шрифте в обоих редакторах, как в редакторе скриптов, так и в текстовом редакторе, должен стоять русский шрифт.

NSS
void ANIMATION(object oD)

    {
    int A=0;
    float T,S;
    switch (Random(5)+1)
      {
      case 2: A=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T=3.0;S=1.0;break;
      case 3: A=ANIMATION_FIREFORGET_TAUNT;T=3.0;S=1.0;break;
      case 4: A=ANIMATION_FIREFORGET_PAUSE_BORED;S=1.0;break;
      case 5: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      case 6: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      }
    if (A==0) return;
    AssignCommand(oD,PlayAnimation(A,S,T));
    }

void DIALOG(object oD1,object oD2)
    {
    string s1="",s2="";
    string ya = GetName(GetObjectByTag("ya"));
    switch (Random(30))
        {
        case 0: s1="Что мы теперь делать-то будем? ";s2="Не знаю! Врем"+ya+" покажет…";break;
        case 1: s1="А у нас есть че поесть-то, а? ";s2="Сходим в таверну, там должны быть бои, навер"+ya+"ка монетки-то посып"+ya+"тс"+ya+" на землю, хе-хе…";break;
        case 2: s1="У мен"+ya+" в животе урчит… ";s2="Так сходи, поешь, старуха др"+ya+"хла"+ya+" мо"+ya+"!";break;
        case 3: s1="А наша дочка наверно живет счастливой жизнью… ";s2="Пришел бы Я домой на пЯть минут раньше, Я бы из Санчеса всю дурь то выбил!! Эх Я ему…";break;

        }
    AssignCommand(oD1,SpeakString(s1));
    AssignCommand(oD2,DelayCommand(5.0,SpeakString(s2)));
    }

void main()
{
object oPC = GetFirstPC();
if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return;
object oD1 = GetNearestObjectByTag("oldman1");
object oD2 = OBJECT_SELF;
if (GetIsInCombat(oD1)) return;
if (GetIsInCombat(oD2)) return;
if (IsInConversation(oD1) || IsInConversation(oD2)) return;
if (GetDistanceToObject(oPC)>10.0) return;
AssignCommand(oD1,SetFacingPoint(GetPosition(oD2)));
AssignCommand(oD2,SetFacingPoint(GetPosition(oD1)));
DIALOG(oD1,oD2);
ANIMATION(oD1);
ANIMATION(oD2);
}


Сообщение отредактировал gennady - Jun 7 2006, 15:17
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
..::SERGO::..
сообщение Jun 7 2006, 12:04
Сообщение #2306


Level 3
*

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



QUOTE
object oD2 = OBJECT_SELF;

Так я же ставил на "ХБ невидимого обьекта между ними"

Не пашет, все есть, токо слов не видно(IMG:style_emoticons/kolobok_light/sad.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 7 2006, 14:35
Сообщение #2307


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

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



QUOTE(gennady @ Jun 7 2006, 07:37) [snapback]83894[/snapback]
Если скрипт стоял на ХБ перса, то скрипт поэтому и не работал, он написан у тебя для работы с третьего перса

он написан для стороннего контроллера и на его (контроллера) ХБ и стоит.
QUOTE(..::SERGO::.. @ Jun 7 2006, 13:04) [snapback]83897[/snapback]
Не пашет, все есть, токо слов не видно

я тебе сказал, в чем дело скорее всего. У тебя 4 пары фраз? Ну так ставь Рандом(5) а не 30.

____
кстати делай фразы покороче. Большие объемы текста выглядят не очень.

QUOTE(gennady @ Jun 7 2006, 07:37) [snapback]83894[/snapback]
if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return; // Эта проверка здесь лишнЯЯ. Есть проверка дистанции…

не лишняя. Проверка дистанции, если игрок не в локации, даст -1.0, а это меньше 10. Так что проверка на своем месте. Тем более читай выше (поставить проверку дистанции после анимации, но до текста)

__
ЗЫ: у меня в Тсурле этот скрипт и его модификации различные пашут без проболем. Если проблема не в том, что я написал выше, у тебя верные тэги и условия соблюдены, в ХБ неписей ничего сбивающего не стоит, то я хз, почему у тебя не работает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jun 7 2006, 14:51
Сообщение #2308


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

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



QUOTE(..::SERGO::.. @ Jun 7 2006, 13:04) [snapback]83897[/snapback]
Так я же ставил на "ХБ невидимого обьекта между ними"

Не пашет, все есть, токо слов не видно

У меня скрипт пахал на ХБ перса, по скрипту я понял, что у тебя он стоял на невидимом объекте, для данного скрипта он в принципе лишний. Можешь вернуть
NSS
object oD2 = GetNearestObjectByTag("oldwoman1");

Будет усё пахать, только правильно настрой свойства невидимого объекта.
Поставь галку - сюжет
Убери галку - статик
Убери галку – используемый
Но может и глючить, желательно все же ставить «используемый», т.ч. лучше выкидай этот объект.
Проверка дистанции, если игрок не в локации, даст -1.0, а это меньше 10. Точно, Лекс прав. Ну, и голова!

Сообщение отредактировал gennady - Jun 7 2006, 15:14
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 7 2006, 14:59
Сообщение #2309


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

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



можно просто без галки статик, у меня все контроллеры такие. Используемый - не обязательно совершенно. Не глючит при этом никогда.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
..::SERGO::..
сообщение Jun 8 2006, 10:59
Сообщение #2310


Level 3
*

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



АА! в задницу все! (IMG:style_emoticons/kolobok_light/declare.gif) Можно ли это заточить только под одного персонажа(типа торговца, который выкрикивает весь день)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dik Morris
сообщение Jun 8 2006, 11:35
Сообщение #2311


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

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



NSS
void ANIMATION(object oD)
{
    int A=0;
    float T,S;
    switch (Random(5)+1)
      {
      case 2: A=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T=3.0;S=1.0;break;
      case 3: A=ANIMATION_FIREFORGET_TAUNT;T=3.0;S=1.0;break;
      case 4: A=ANIMATION_FIREFORGET_PAUSE_BORED;S=1.0;break;
      case 5: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      case 6: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      }
    if (A==0) return;
    AssignCommand(oD,PlayAnimation(A,S,T));
}

void DIALOG(object oD1)
{
    string s1="";
    string ya = GetName(GetObjectByTag("ya"));
    switch (Random(4)+1)
        {
        case 1: s1="text"; break;
        case 2: s1="text"; break;
        case 3: s1="text"; break;
        case 4: s1="text"; break;
        }
    AssignCommand(oD1,SpeakString(s1));
}

void main()
{
object oPC = GetFirstPC();
if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return;
object oD2 = OBJECT_SELF;
if (GetIsInCombat(oD2)) return;
if (IsInConversation(oD2)) return;
if (GetDistanceToObject(oPC)>10.0) return;
DIALOG(oD2);
ANIMATION(oD2);
}


Сообщение отредактировал Dik Morris - Jun 8 2006, 11:40
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 8 2006, 13:11
Сообщение #2312


Level 3
*

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



NSS
void main()
{
    object oPC = OBJECT_SELF;



  if ((GetLevelByClass(CLASS_TYPE_PALEMASTER, oPC)>0))

  {
    int nLevel = GetLevelByClass(CLASS_TYPE_PALEMASTER, OBJECT_SELF);
    effect eSummon;
    float fDelay = 3.0;
    int nDuration = nLevel;
    if (nLevel >= 7)
        eSummon = EffectSummonCreature("NW_S_DOOMKGHT",VFX_FNF_SUMMON_UNDEAD);
    else
        eSummon = EffectSummonCreature("NW_S_GHAST",VFX_FNF_SUMMON_UNDEAD);

    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), HoursToSeconds(nDuration));
    }


Привожу скипт для объяснения ситуации, сам скрипт работает, но у меня проблемы вот с чем. Хочется внести своего самона, ну например чтобы при 10 лвлах ПМа вылезал Командир Дум Найтов. Когда я ставлю его со стандартным его тегом, он вылезает, однако на нем нету скриптов хенчмана(или как их правильно назвать), поэтому управлять им не возможно. Я добавляю ему их, меняю таг, соответствено он перемещается из стандартных монстров, в сделаных мной, и когда я добавляю его в этот скрипт вместо командира вылезает голый дварф с 1 хп и без имени, мобы на него не реагируют (IMG:style_emoticons/kolobok_light/declare.gif) Объясните пожалуйста как с этим быть.

P.S. Если запостил не в тот раздел, прошу прощения, пока еще не разобрался с форумом.

Сообщение отредактировал Mandrake - Jun 8 2006, 13:25
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 8 2006, 16:05
Сообщение #2313


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

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



все, что тебе нужно это указать резреф твоего ДумКнайта в функции EffectSummonCreature. (резреф, не тэг. Это важно.) те что-то такое
NSS
void main()
{
    object oPC = OBJECT_SELF;



  if ((GetLevelByClass(CLASS_TYPE_PALEMASTER, oPC)>0))

  {
    int nLevel = GetLevelByClass(CLASS_TYPE_PALEMASTER, OBJECT_SELF);
    string sSummon;
    float fDelay = 3.0;
    int nDuration = nLevel;
    if (nLevel >= 10) // с 10 левела твой командир
        sSummon = "твой резреф";
    else if (nLevel >= 7) // с 7 по 10 просто думкнайт
        sSummon = "NW_S_DOOMKGHT";
    else  // до 7го гаст.
        sSummon = "NW_S_GHAST";


    ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectSummonCreature(sSummon,VFX_FNF_SUMMON_UNDEAD), GetSpellTargetLocation(), HoursToSeconds(nDuration));
    }
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 8 2006, 20:02
Сообщение #2314


Level 3
*

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Огромное спасибо (IMG:style_emoticons/kolobok_light/thank_you.gif) Теперь все стало работать. Я просто думал раз стандартные мобы указаны через тэги, то и мои должны быть через них (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 8 2006, 20:06
Сообщение #2315


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

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



у стандартных совпадаюи тэги и рефы. Тебе тоже стоит делать, чтобы совпадали. Обычно правило такое: реф маленькими буквами, тэг - большими. (и одинаковые по содержанию)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 8 2006, 20:16
Сообщение #2316


Level 3
*

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Спасибо, запомню.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
mamuc
сообщение Jun 9 2006, 11:29
Сообщение #2317


Лорд AxisTown'a
Иконки Групп

Класс: Монах
Характер: Lawful Good
Раса: Дварф
NWN: Маппинг



(IMG:style_emoticons/kolobok_light/biggrin.gif)
QUOTE
у стандартных совпадаюи тэги и рефы. Тебе тоже стоит делать, чтобы совпадали. Обычно правило такое: реф маленькими буквами, тэг - большими. (и одинаковые по содержанию)


добавлю и я свои 5 юаней (IMG:style_emoticons/kolobok_light/biggrin.gif)
..а еще лучше -делай кустомные итемы с одинаковым, полностью совпадающим, тэгом и ресрефом( оба маленькими латинскими буквами и не длинее 16 симболов) - тогда не прийдеться задумываться при всяких сравнениях, созданиях и проч (IMG:style_emoticons/kolobok_light/yes3.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 9 2006, 20:07
Сообщение #2318


Level 3
*

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Еще один вопрос, я теме для новичков просил помочь, но наверное не заметили там. Если не трудно, просьба помочь. Ситуация такая, хочу в своем модуле создать локации что-то типа "Дом Теней", где мобы были бы ШД. Соотвествено нужно на onSpawn, onHeartbeet и onCombatRoundEnd поставить скрипты. Я руководствуясь логикой сделал нечто подобное(скрипт на комбат раунд энд):
NSS
object oTarget = OBJECT_SELF;
object oEnemy = GetLastAttacker();

if (GetStealthMode(oTarget) == STEALTH_MODE_DISABLED)
{
ActionMoveAwayFromObject(oEnemy, TRUE, 10.0f);
AssignCommand(oTarget, UseStealthMode());
DelayCommand(5.2,AssignCommand(oTarget, ActionWait(3.0)));
DelayCommand(7.1, AssignCommand(oTarget, ActionAttack(oEnemy)));
}

Это один из вариантов, я пробывал ставить ClearAllActions() в начале, я пробывал и без отбегания от объекта, но не выходит (IMG:style_emoticons/kolobok_light/aggressive.gif) Чего я смог достичь, так это только того чтобы моб уходил в хайд при виде игрока, а потом атаковал. А также во время атаки он как бы уходить в хайд пытался, но сразу же атаковал. В общем полная неразбериха. (IMG:style_emoticons/kolobok_light/vava.gif)
Помогите пожалуйста разобраться с ситуацией, может кто работал с подобными скриптами или же может я не с теми функциями работаю. Буду весьма признателен.

P.S. Есть задумка, что нужно как то делать, чтобы в конце каждого раунда моб из режима атаки переходил в состояние покоя, т.к. когда я становлюсь для него не видимым он выполняет задание отбежать от меня на 10 метров =)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 9 2006, 20:33
Сообщение #2319


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

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



Что то я не понял. (IMG:style_emoticons/kolobok_light/unknw.gif) Mandrake, видишь ли, кроме твоих скриптов работает тонна скриптов биовар, это надо учитывать. Опиши финальную задачу. ЗАЧЕМ ТЕБЕ ЭТО. Опиши задачу конкретно от А до Я. Что делает НПС, что РС.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 9 2006, 21:05
Сообщение #2320


Level 3
*

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



Хорошо.
Задача РС понятно, убить НПС =) Мне это нужно, чтобы разнообразить деятельность мобов, а также воплатить в реальность задумку о териториях, скажем домах или лесах, где приключенца ждали бы хайдеры(ну скажем дом теней, действующие персонажи: души бывших убийц, игрок попав в такой дом должен быть все время готов нарваться на ловушку, встретиться врага появляющегося из тени и т.д.)
К самому главному, задача НПС.
Я не хочу удалять скрипты биоварей из выше указаных мной ситуациях,я просто хочу добавить к ним следующие вещи. Задачи НПС которые мне хочется воплоить в жизнь.
1. Спаун в хайде
2. В случае обнаружения игрока также атака из хайда
3. Во время боя после сника уход обратно в режим хайда, для реалистичности, чтобы нпс отбегал на расстояние и как бы на бегу пропадал, ну это так опционально, достаточно, чтобы просто после 1го сника он опять ушел в хайд.
4. После допустим убийста игрока, опять уход в хайд и продолжать жить дальнейшей жизнью.


Надеюсь теперь мои мысли понятны (IMG:style_emoticons/kolobok_light/unsure.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
azathoth
сообщение Jun 10 2006, 03:42
Сообщение #2321


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

Класс: Оборотень
Характер: Chaotic Neutral
Раса: Нежить
NWN: Скриптинг [Sn]



-- AssignCommand(oTarget, UseStealthMode()); не заставляет НПС входить в хайд
кстати, вот что он делает:
NSS
// If stealth mode is active, turn on the appropriate skills.
void UseStealthMode()
{
//        SetActionMode(OBJECT_SELF,ACTION_MODE_STEALTH,TRUE);
}

попробуй
NSS
void ActionUseSkill(int nSkill, object oTarget, int nSubSkill=0, object oItemUsed=OBJECT_INVALID )


-- ActionMoveAwayFromObject(oEnemy, TRUE, 10.0f); - если игрок последует за монстром (а это наверняка так и будет), то экшн может не завершиться, и следующий экшн (по, собственно, уходу в хайд) не начаться.
попробуй
NSS
АctionMoveAwayFromLocation(GetLocation(GetLastAttacker()), TRUE, 10.0f);


--
QUOTE
1. Спаун в хайде

хайд при спауне.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jun 10 2006, 09:07
Сообщение #2322


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

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



QUOTE(Mandrake @ Jun 9 2006, 21:07) [snapback]84280[/snapback]
Еще один вопрос, я теме для новичков просил помочь, но наверное не заметили там. Если не трудно, просьба помочь. Ситуация такая, хочу в своем модуле создать локации что-то типа "Дом Теней", где мобы были бы ШД. Соотвествено нужно на onSpawn, onHeartbeet и onCombatRoundEnd поставить скрипты. Я руководствуясь логикой сделал нечто подобное(скрипт на комбат раунд энд):

Если я правильно вас понял, то вам нужна подлая атака из невидимого положения, по типу скрытых атак Baldur’s Gate. Завалялось тут у меня пара скриптов… Один на OnSpawn, другой на ХБ персонажа, начально персонаж фракции «Простолюдин».
на OnSpawn
NSS
// ***  ТЕНЕВАЯ АТАКА  *** OnSpawn
void main()
{
object oTarget = OBJECT_SELF;
effect eCUT = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCUT, oTarget);
}

на ХБ персонажа
NSS
// ***  ТЕНЕВАЯ АТАКА  ***
// Снимаем эффект
void DelEffectOnPC(object oObject)
{
effect eOne = GetFirstEffect(oObject);
while (GetIsEffectValid(eOne))
{
  RemoveEffect(oObject, eOne);
  eOne = GetNextEffect(oObject);
}
}
// Генерируем случайную точку
location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE)
{
if(!bOnLine)
fRadius=IntToFloat(Random(FloatToInt(fRadius)));
float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget)));
float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget)));
float fRndomAngle=IntToFloat(Random(360));
location lNEW=Location(GetArea(oTarget),Vector(iXO+fRadius*cos(fRndomAngle),iYO+fRadius*sin(fRndomAngle)),360.0);
return lNEW;
}
//:://///////////////////////////////////////////
void main()
{
object oPC = GetFirstPC();
object oTarget = OBJECT_SELF;

if (GetDistanceBetween(oPC, oTarget) > 10.0) return;
else if (GetLocalInt(oTarget, "ATTACK") == 0)
{
  location lFree = CreateRandomLocation(oTarget, 5.0); // Генерим точку в радиусе 5 метров
  effect eCUT = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
  effect eDamage = EffectDamage(GetCurrentHitPoints(oPC)/7);
  ChangeToStandardFaction(oTarget, STANDARD_FACTION_HOSTILE); // Менaем фракцию на враждебный;
  AssignCommand(oTarget, ClearAllActions(TRUE));
  AssignCommand(oTarget, ActionJumpToObject(oPC, TRUE));
  DelayCommand(1.0, AssignCommand(oTarget, ActionAttack(oPC)));
  DelayCommand(1.0, DelEffectOnPC(oTarget)); // Снимаем эффект
  DelayCommand(1.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC)); // Наносим удар
  DelayCommand(1.5, SendMessageToPC(oPC, "<cу  >ВАМ НАНЕСЛИ ПОДЛЫЙ УДАР</c>"));
  DelayCommand(2.0, AssignCommand(oPC, ActionAttack(oTarget)));
  DelayCommand(9.0, SurrenderToEnemies());   // Снимаем атаку
  //DelayCommand(9.3, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectInvisibility(INVISIBILITY_TYPE_NORMAL), oTarget));
  DelayCommand(9.3, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eCUT, oTarget));
  DelayCommand(9.5, AssignCommand(oTarget, ActionMoveToLocation(lFree, TRUE)));
  SetLocalInt(oTarget,"ATTACK", 1);
  DelayCommand(18.5, SetLocalInt(oTarget,"ATTACK", 0));
}
}

Если хотите, то можете поставить другую невидимость, по своему вкусу.

Сообщение отредактировал gennady - Jun 10 2006, 09:09
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 10 2006, 09:11
Сообщение #2323


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

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



Mandrake, не поверишь (IMG:style_emoticons/kolobok_light/smile.gif) ВСЕ ЭТО ДААВНО НАПИСАНО БИОВАР и работает. Если тебе не в лом, глянь мой скрипт спавна. Могу тут поместить. Настрой его по уму, не поленись прочти комменты. И все о чем ты мечтаешь будет работать. Патрулирование в хайде по точкам, атака из хайда. И прочее. Я его где-то уже выкладывал, но этот я малость доработал.
NSS
//::///////////////////////////////////////////////
//:: Name x2_def_spawn
//:: Copyright © 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Default On Spawn script

    2003-07-28: Georg Zoeller:
    If you set a ninteger on the creature named
    "X2_USERDEFINED_ONSPAWN_EVENTS"
    The creature will fire a pre and a post-spawn
    event on itself, depending on the value of that
    variable
    1 - Fire Userdefined Event 1510 (pre spawn)
    2 - Fire Userdefined Event 1511 (post spawn)
    3 - Fire both events
*/

//:://////////////////////////////////////////////
//:: Created By: Keith Warner, Georg Zoeller
//:: Created On: June 11/03
//:://////////////////////////////////////////////

const int EVENT_USER_DEFINED_PRESPAWN = 1510;
const int EVENT_USER_DEFINED_POSTSPAWN = 1511;
#include "x0_i0_anims"
#include "x0_i0_treasure"
#include "x2_inc_switches"
void main()
{
    // User defined OnSpawn event requested?
    int nSpecEvent = GetLocalInt(OBJECT_SELF,"X2_USERDEFINED_ONSPAWN_EVENTS");
    // Pre Spawn Event requested
    if (nSpecEvent == 1  || nSpecEvent == 3  )
    {
    SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_PRESPAWN ));
    }
    /*  Fix for the new golems to reduce their number of attacks */
    int nNumber = GetLocalInt(OBJECT_SELF,CREATURE_VAR_NUMBER_OF_ATTACKS);
    if (nNumber >0 )
    {
        SetBaseAttackBonus(nNumber);
    }
//::====================== Add By Aiwan / WRG! Team / ==========================
//:://////////////////////////////////////////////
//:: OnSpawn  am_csp_common
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  Добавляем стандартные свойства НПС, модифицируя
  скрипт NW_C2_DEFAULT9.

                  КОММЕНТАРИИ

  Каждому свойству принадлежит локальная переменная,
  которую необходимо установить на НПС в редакторе.
  Все они начинаются на "FLAG_+Спавн_Свойство_НПС"
  Далее...

  * Если на модуль повесить LocalInt
  "X2_SWITCH_CROSSAREA_WALKWAYPOINTS" равную TRUE;
  то все НПС ходят по вейпам из локации в локацию.
  В противном случае только по вейпоинтам в одной
  локации.

  * Если повесить на дневной пост POST_ или ночной
  пост NIGHT_ локальную переменную LocalInt
  "X2_L_WAYPOINT_SETFACING" равную TRUE, то НПС
  становится лицом в сторну вепоинта. И возвращется
  в ту сторону даже после диалога/боя.

*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Original idea By: DBColl
//:: Created On: 06.07.2005
//:://////////////////////////////////////////////
    //--------------------------------------------------------------------------
    // Запускает скрипты на объект при локальном стринге
    //--------------------------------------------------------------------------
    string sRunScript = GetLocalString(OBJECT_SELF, "RUN_SCRIPT");
    if(sRunScript!="")
    {
      ExecuteScript(sRunScript, OBJECT_SELF);
    }
//==============================================================================
//              Стандартные еванты скрипта NW_C2_DEFAULT9
//==============================================================================
    if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_STEALTH) == TRUE)
      {SetSpawnInCondition(NW_FLAG_STEALTH);}
    if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_SEARCH) == TRUE)
      {SetSpawnInCondition(NW_FLAG_SEARCH);}
    if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_AMBIENT_IMMOBILE) == TRUE)
      {SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);}
    if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_USE_SPAWN_AMBIENT) == TRUE)
      {SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);}
    //--------------------------------------------------------------------------
    // НПС ходит скрытно, когда выполняется WalkWaypoints(). Хорошо для убийц.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_STEALTH") == TRUE)
      {SetSpawnInCondition(NW_FLAG_STEALTH);}
    //--------------------------------------------------------------------------
    // То же самое, только в режиме поиска. Хорошо для стражи.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_SEARCH") == TRUE)
      {SetSpawnInCondition(NW_FLAG_SEARCH);}
    //--------------------------------------------------------------------------
    // НПС появится используя "EffectAppear", т.е. Свалится с неба.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_APPEAR_ANIMATION") == TRUE)
      {SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION);}
    //--------------------------------------------------------------------------
    // НПС будет постоянно воспроизводить анимацию, даже если игрок уйдет из его
    // поля зрения.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_CONSTANT") == TRUE)
      {SetSpawnInCondition(NW_ANIM_FLAG_CONSTANT);}
    //--------------------------------------------------------------------------
    //  Цивилизованные творения взаимодействуют с placeables в их области, что
    //  имеют таг "NW_INTERACTIVE"
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_CIVILIZED") == TRUE)
      {SetAnimationCondition(NW_ANIM_FLAG_IS_CIVILIZED);}
    //--------------------------------------------------------------------------
    //  НПС с бродячей анимацией ходят бродят по городу часто возвращаясь в свой
    //  SPAWN пункт, арену в которой они спавнятся (желательно внутреннюю) и
    //  которая содержит один из тагов: "NW_HOME", "NW_TAVERN", "NW_SHOP"
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_CLOSE_RANGE") == TRUE)
      {SetAnimationCondition(NW_ANIM_FLAG_IS_MOBILE_CLOSE_RANGE);}
    //--------------------------------------------------------------------------
    //  При наступлении ночи, запускает скрипт сна на НПС. Имя скрипта вешается
    //  на модуль, как LocalString "X2_S_SLEEP_AT_NIGHT_SCRIPT" равное имени
    //  скрипта "имя_скрипта_на_ночь".
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_SLEEPING_AT_NIGHTT") == TRUE)
      {SetSpawnInCondition(NW_FLAG_SLEEPING_AT_NIGHT);}
    //--------------------------------------------------------------------------
    //  НПС поднимает тревогу, сообщит при атаке всем не враждебным НПС.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_WARNINGS") == TRUE)
      {SetSpawnInCondition(NW_FLAG_SET_WARNINGS);}
    //--------------------------------------------------------------------------
    //  Ходит на ночные/дневные поинты. Днем ходит по стандартным поинтам, ночью
    //  "WN_" + NPC Tag + "_##. Ночной пост - "NIGHT_" + NPC tag.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_DAY_NIGHT_POSTING") == TRUE)
      {SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING);}
    //--------------------------------------------------------------------------
    //  НПС болтает с дружественными НПС, воспроизводит анимацию, эмитирует
    //  оживление и активность.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_IMMOBILE_ANIMATIONS") == TRUE)
      {SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS);}
    //--------------------------------------------------------------------------
    // Почти то же что и выше, за исключением того, что НПС бродит по округе.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_AMBIENT_ANIMATIONS") == TRUE)
      {SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS);}

//==============================================================================
//      Атакующие свойства НПС - устанавливается ТОЛЬКО ОДНО ИЗ НИХ!
//==============================================================================
    //--------------------------------------------------------------------------
    //  Старается атаковать издали, дальнобойным оружием.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_RANGED") == TRUE)
        {SetCombatCondition(X0_COMBAT_FLAG_RANGED);}
    //--------------------------------------------------------------------------
    //  Использует защитные фиты и паррирование
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_DEFENSIVE") == TRUE)
        {SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE);}
    //--------------------------------------------------------------------------
    //  Будет невидимым и попытается атаковать, выйдет из невидимости и снова
    //  будет пытаться атаковать.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_AMBUSHER") == TRUE)
        {SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER);}
    //--------------------------------------------------------------------------
    //  При атаке убегает
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_COWARDLY") == TRUE)
        {SetCombatCondition(X0_COMBAT_FLAG_COWARDLY);}
//==============================================================================
//        Защитныеые свойства НПС - устанавливается ТОЛЬКО ОДНО ИЗ НИХ!
//==============================================================================
    //--------------------------------------------------------------------------
    // НПС Убегает в точку и возвращается через короткое время позже.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_ESCAPE_RETURN") == TRUE)
        {SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN);}
    //--------------------------------------------------------------------------
    // Убегает в точку и не возвращается.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_ESCAPE_LEAVE") == TRUE)
        {SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE);}
    //--------------------------------------------------------------------------
    // Телепортируется в безопасность и не возвращается.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_TELEPORT_LEAVE") == TRUE)
        {SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE);}
    //--------------------------------------------------------------------------
    // Телепортируется в безопасность и возвращается через короткое время.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_TELEPORT_RETURN") == TRUE)
        {SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN);}
//==============================================================================
//            Добавляем свои настройки для персональных нужд.
//==============================================================================
    //--------------------------------------------------------------------------
    // Создаем автоматически группы разговаривающих рандомно НПС, используя
    // библиотеку SlavaZ-а. Теперь создавая поинты фразы, учитывайте, что группы
    // НПС будут Speaker+Локалтьная переменная "FLAG_WP_SPEAK". Если
    // Она будет ровна 3, то значение (Value) строки на Waypoint с именем
    // "NAME_wp_speak" должны начинаться с Speaker3. Читайте мануал Славы...
    //--------------------------------------------------------------------------
    int iSpeaker = GetLocalInt(OBJECT_SELF, "FLAG_WP_SPEAK");
    if (iSpeaker >= 1) // Если локалка равна 1 или больше, то...
      {
      /* Присвоим этого НПС к группе Speaker+локалка "FLAG_WP_SPEAK" */
      SetLocalString(OBJECT_SELF, "SpeakGroup", "Speaker"+(IntToString(iSpeaker)));
      }
    //--------------------------------------------------------------------------
    //  Садим на стул или закрываем стэк команд. + UserDefained скрипт сидения.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == TRUE)
      {
        SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
        ActionSit(GetNearestObjectByTag("SIT_CHAIR"));
        }
        if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == 2)
          {
          ActionSit(GetNearestObjectByTag("SIT_CHAIR"));
          SetCommandable(FALSE);
          }
    //--------------------------------------------------------------------------
    //  Садим НПС на землю. + UserDefained скрипт сидения.
    //--------------------------------------------------------------------------
    if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CROSS") == TRUE)
      {
        SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
        SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);
        SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);
        ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 99999.9);
        }
    //--------------------------------------------------------------------------
    //  Присваиваем НПС координаты, что бы он стоял лицом в одном направлении.
    //--------------------------------------------------------------------------
    if (GetLocalFloat(OBJECT_SELF,"initFacing") == 0.0)
    {
        location loc = GetLocation(OBJECT_SELF);
        SetLocalFloat(OBJECT_SELF, "initFacing", GetFacingFromLocation(loc));
        SetLocalLocation(OBJECT_SELF, "initLoc", loc);
    }
//==============================================================================
//                  Запускаем стандартные еванты на НПС
//==============================================================================
    //--------------------------------------------------------------------------
    // Если вы присвоите локальную переменную "FLAG_USER_DEFINED_EVENT" равную
    // TRUE, то все еванты присвоятся сразу. В противном случае присваивайте
    // По одному для каждого события.
    //--------------------------------------------------------------------------
    int iUserDef = GetLocalInt(OBJECT_SELF, "FLAG_USER_DEFINED_EVENT");

    // * Fire User Defined Event 1001 in the OnHeartbeat
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_HEARTBEAT") == TRUE)
        {SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);}

    // * Fire User Defined Event 1002
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_PERCIEVE") == TRUE)
        {SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);}

    // * Fire User Defined Event 1003
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_END_COMBAT_ROUND") == TRUE)
        {SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT);}

    // * Fire User Defined Event 1004
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_ON_DIALOGUE") == TRUE)
        {SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT);}

    // * Fire User Defined Event 1005
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_ATTACK") == TRUE)
        {SetSpawnInCondition(NW_FLAG_ATTACK_EVENT);}

    // * Fire User Defined Event 1006
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_DAMAGED") == TRUE)
        {SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);}

    // * Fire User Defined Event 1007 (Считается ненадежным BioWare)
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_DEATH") == TRUE)
        {SetSpawnInCondition(NW_FLAG_DEATH_EVENT);}

    // * Fire User Defined Event 1008
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_DISTURBED") == TRUE)
        {SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT);}

    // * Fire User Defined Event
    if (iUserDef==TRUE || GetLocalInt(OBJECT_SELF, "FLAG_SPELL_CAST_AT") == TRUE)
        {SetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT);}
    //--------------------------------------------------------------------------
    // Создает небольшую сумму сокровища в инвентаре
    //--------------------------------------------------------------------------
    if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE)  &&
        (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE)  )
    {
        CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF);
    }
    //--------------------------------------------------------------------------
    SetListeningPatterns();
    //--------------------------------------------------------------------------
    // nRun - если нужно что бы стражник бегал или ждал на поинтах больше чем по
    // умолчанию, то присвойте нужные значения на OBJECT_SELF.
    // LocalInt "FLAG_WALK_RUN" - равная TRUE, заставит НПС бегать по точкам.
    // LocalFloat "FLAG_WALK_PAUSE" - время паузы на поинтах. По умолчанию f1.0
    // Для верной работы надо править еще эту функцию на HertBeat скрипте и в
    // после завершения диалога с НПС. Иначе все настройки будут по умолчанию
    // после первого боя или диалога.
    //--------------------------------------------------------------------------
    int nRun = GetLocalInt(OBJECT_SELF, "FLAG_WALK_RUN");
    float fPause = GetLocalFloat(OBJECT_SELF, "FLAG_WALK_PAUSE");
    if (fPause == 0.0f)
    {
        fPause = 1.0f;
    }
    WalkWayPoints(nRun, fPause);
//=========================== End Aiwan's Edition ==============================
    //Post Spawn event requeste
    if (nSpecEvent == 2 || nSpecEvent == 3)
    {
      SignalEvent(OBJECT_SELF,EventUserDefined(EVENT_USER_DEFINED_POSTSPAWN));
    }
}

В слоте хертбит ищем функцию:
NSS
// If we have the 'constant' waypoints flag set, walk to the next
    // waypoint.
    else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
    {
        WalkWayPoints();
    }

Заменяем на это:
NSS
//======================== Add By Aiwan / WRG! Team / ==========================
    // Если НПС ходит по вейпоинтам, то он отправится на следующий.
    //--------------------------------------------------------------------------
    // nRun - если нужно что бы стражник бегал или ждал на поинтах больше чем по
    // умолчанию, то присвойте нужные значения на OBJECT_SELF.
    // LocalInt "FLAG_WALK_RUN" - равная TRUE, заставит НПС бегать по точкам.
    // LocalFloat "FLAG_WALK_PAUSE" - время паузы на поинтах. По умолчанию f1.0
    //-------------------------------------------------------------------------
    else if ( GetWalkCondition(NW_WALK_FLAG_CONSTANT) )
    {
    int nRun = GetLocalInt(OBJECT_SELF, "FLAG_WALK_RUN");
    float fPause = GetLocalFloat(OBJECT_SELF, "FLAG_WALK_PAUSE");
      if (fPause == 0.0f) // Значит ее нет на объекте
      {
        fPause = 1.0f; // Присвоим паузу по умолчанию 1.0 секунду
      }
      WalkWayPoints(nRun, fPause);
    }
//=================================== End ======================================

И все. Настрой и сохрани скрипты с другими именами, не правь стандартные. Некоторые строки тебе не нужны. Например деления на спекеров, сидение и прочее. Это надо мне. Думаю выкинешь сам. Локалки вешаются в редакторе на НПС.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Mandrake
сообщение Jun 10 2006, 10:43
Сообщение #2324


Level 3
*

Класс: Волшебник
Характер: Neutral Evil
Раса: Человек



azathoth, gennady спасибо большое, сейчас буду примеряться (IMG:style_emoticons/kolobok_light/smile.gif)

Aiwan, спасибо и тебе большое. (IMG:style_emoticons/kolobok_light/thank_you.gif) Насчет Биоварей скажу, что пока не научился полностью понимать ими написаное, поэтому в большинстве случаев стараюсь придумать уже давно придуманое (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)

Добавил:

Поизучал я твой спаун скрипт Aiwan, действительно все что хотел по поводу хайдеров сделал (IMG:style_emoticons/kolobok_light/good.gif) Тут мой пытливый ум решил поэксперементировать дальше и у меня возникли кое какие наблюдения.
1. Это с так называемыми гвардами, которые в режиме поиска. Они когда видят меня почему то не сбрасывают режим, а как инвалиды медлено в мою сторону ползут. Режим естестсвенно скидывается после попадания по мне, т.е. будуч магом можно запросто порхать даже без хаста вокруг них и пулять спелами =)
2. Это теже гварды, которые не возвращаются к режиму поиска после атаки.
3. Это хайдеры, которые идут медлено в хайде к тебе, если ты их атакуешь из лука или спелами(допустим у игрока трусинг или же высокий спот\листен) (IMG:style_emoticons/kolobok_light/vava.gif)

Подскажите пожалуйста, чего я в очередной раз не увидел или пропустил и как эти глюки у мобов исправить (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)

Сообщение отредактировал Mandrake - Jun 10 2006, 12:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Vhall
сообщение Jun 13 2006, 10:00
Сообщение #2325


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

Класс: Обыватель
Характер: True Neutral
Раса: Дварф
NWN: Контент



Скажите пожалуйста, можно ли выдать фиты персу (и будут ли они работать) без выполнения всех требований к фиту?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 28th March 2024 - 19:08