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

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

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


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

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



http://download.wrg.ru/public_wrg/toolset/...ra_tutorial.exe


QUOTE(Noah @ May 30 2006, 00:41) [snapback]83142[/snapback]
А нет ли анимаций сидячим нпс?

Вот скрипт, думаю разберешься.
NSS
//:://////////////////////////////////////////////
//:: OnUserDefaine  am_cud_sit
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
  Скрипт садит НПС на стул или на землю.
    SIT_CHAIR - таг стула для сидения.
*/

//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 07.07.2005
//:://///////////////////////////////////////////


void main()
{
  object oPC = GetFirstPC();
  if (GetIsDead(OBJECT_SELF)==TRUE) return; // Если он помер, то пусть молчит
  if (GetArea(OBJECT_SELF)!=GetArea(oPC)) return;
  if (GetLocalInt(OBJECT_SELF, "STOP")) return; // Отключаем если нам это надо
  if (GetIsInCombat(OBJECT_SELF))  return;
  if (IsInConversation(OBJECT_SELF)) return;
  int nEvent = GetUserDefinedEventNumber();
//=========================== HEARTBEAT EVENT ==================================
if (nEvent == EVENT_HEARTBEAT) // Сигнал поступает с HeartBeat слота.
  {
//------------------------------------------------------------------------------
  if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CROSS") == TRUE)
      {
      if (GetLocalInt(OBJECT_SELF, "DISTURBED")) return;

          ClearAllActions();
          SetLocalInt(OBJECT_SELF, "DISTURBED", TRUE);
          ActionMoveToLocation(GetLocalLocation(OBJECT_SELF, "initLoc"));
          ActionDoCommand(SetFacing(GetLocalFloat(OBJECT_SELF, "initFacing")));
          ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 99999.9);
          return;
      }
//------------------------------------------------------------------------------
  if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == TRUE)
      {
      if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == 2)
          return;

    if (GetCurrentAction() == ACTION_SIT) return;
    if (GetCurrentAction() == ACTION_MOVETOPOINT) return;

          object oChair = GetNearestObjectByTag("SIT_CHAIR");
          if (GetIsObjectValid(oChair))
          {
              ClearAllActions();
              ActionSit(oChair);
              ActionDoCommand(SetLocalLocation(OBJECT_SELF, "initFacing", GetLocation(OBJECT_SELF)));
          }
      }
  }
//============================= DIALOGUE EVENT =================================
  if (nEvent == EVENT_DIALOGUE)  // Стандартный сигнал
    {
      SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE);
    }
//============================= PERCIEVE EVENT =================================
  if (nEvent == EVENT_PERCEIVE)  // Стандартный сигнал
    {
    if (GetIsPC(GetLastPerceived()))
      {
        SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE);
      }
    }
//========================== END COMBAT ROUND EVENT ============================
  if (nEvent == EVENT_END_COMBAT_ROUND)  // Стандартный сигнал
    {
    SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE);
    }
//------------------------------------------------------------------------------
}


Скрипт ставится на слот UserDef
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jun 1 2006, 06:07
Сообщение #2287


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

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



QUOTE(Noah @ May 29 2006, 22:41) [snapback]83142[/snapback]
А нет ли анимаций сидячим нпс?


Если я правильно понял вопрос, то вам нужна дополнительная анимация сидящим персам? Недавно этот вопрос обсуждался, читайте статью Лекса ЗДЕСЬ.
Если задействована ActionSit, то наложение анимации поднимет перса со стула. Можно совместить с ANIMATION_LOOPING_SIT_CHAIR кое-что из анимаций, но вот стул под перса не подставишь (или я это тупо делал). А вот на CROSS, можно все свободно вешать. Вот простой скрипт на ХБ-ит перса. Если нужно, чтобы перс смотрел в определенную сторону, то задайте точку "V_ + тэг перса."

NSS
void main()
{
  object oWay = GetWaypointByTag("V_" + GetTag(OBJECT_SELF));
  vector vFace = GetPosition(oWay);
if(GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return; // если ПС нет локе
if (!IsInConversation(OBJECT_SELF))
  {
   SetFacingPoint(vFace);
   switch (Random(3)+1)
   {
    case 1:
    if(Random(100) >= 50)
    ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS);
    else
    ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK);
    break;
    case 2:
    if(Random(100) >= 50)
    ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD);
    else
    ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK);
    break;
    case 3:
    if(Random(100) >= 50 && GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 17)
    ActionPlayAnimation(ANIMATION_FIREFORGET_READ);
    else
    {
     if (GetGender(OBJECT_SELF)==GENDER_MALE)
     PlaySound("as_pl_yawningm1");
     else
     PlaySound("as_pl_yawningf1");
     ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD);
    }
    break;
   }
   ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 6.0);
  }
}
/* Персонаж сидит на земле, пьет и чешет голову.
Если интеллект выше 17, то еще и читает. Слот HB */


Спасибо метрам за подсказку! Учту в дальнейшем. (IMG:style_emoticons/kolobok_light/thank_you.gif)

Сообщение отредактировал gennady - Jun 1 2006, 12:41
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 1 2006, 08:23
Сообщение #2288


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

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



gennady, есть смысл добавить проверку РС в локации. Что бы НПС все это делал только если в локации есть игрок.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jun 1 2006, 11:49
Сообщение #2289


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

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




QUOTE(Aiwan @ Jun 1 2006, 09:23) [snapback]83448[/snapback]
gennady, есть смысл добавить проверку РС в локации. Что бы НПС все это делал только если в локации есть игрок.


Aiwan, если можно киньте оную. Вообще я подметил, что ХБ начинает работать в определенном радиусе от героя, или я не прав? Тут у меня назрел вопрос по скриптам на OnSpawn, ведь насколько я понял локалки в вышеприведенном вами скрипте, вешаются именно там. Просто у меня было несколько проколов. Все работает 10-20 раз, а на тридцатом, бах висяк! Пришлось переписать и бросить все ХБ, т.к. с сюжетным персам это непозволительно. Теперь трижды думаю, стоит ли ставить что на OnSpawn. Непонятно…, или это только у меня такие приколы? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 1 2006, 11:57
Сообщение #2290


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

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



QUOTE(gennady @ Jun 1 2006, 12:49) [snapback]83468[/snapback]
Вообще я подметил, что ХБ начинает работать в определенном радиусе от героя, или я не прав?

хб работают везде, во всех локациях. Но там, где нет игрока - чуть медленнее (бывает 7-8-9 секунд 1 такт)
NSS
// если игрок не в одной локе с НПС - выйти из скрипта
if( GetArea(GetFirstPC())!=GetArea(OBJECT_SELF)) return;
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 1 2006, 21:15
Сообщение #2291


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

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



QUOTE(gennady @ Jun 1 2006, 14:49) [snapback]83468[/snapback]
Тут у меня назрел вопрос по скриптам на OnSpawn, ведь насколько я понял локалки в вышеприведенном вами скрипте, вешаются именно там. Просто у меня было несколько проколов. Все работает 10-20 раз, а на тридцатом, бах висяк! Пришлось переписать и бросить все ХБ, т.к. с сюжетным персам это непозволительно.

Ни разу не произошло ни одного сбоя. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) приведи код скрипта сюда.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gennady
сообщение Jun 2 2006, 06:13
Сообщение #2292


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

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




QUOTE(Aiwan @ Jun 1 2006, 22:15) [snapback]83524[/snapback]
Ни разу не произошло ни одного сбоя. приведи код скрипта сюда.


Коды как мои, так и базовые, в том числе Леворовские. Неверский я видно тупо использовал, ребята спавнили перса в процессе игры, у меня же перс при загрузке уже находился в локе. Т.ч. есть рифы, и о них надо помнить. Да, забыл, были банальные баги при раздачи уровня. (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)

Доморощенный код (последний баг, сработал 50/50, стал только сюжетным)
NSS
void main()
{
DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT,
SupernaturalEffect(EffectPetrify()), OBJECT_SELF));
DelayCommand(1.5, SetPlotFlag(OBJECT_SELF, TRUE)); // сюжет
}


os_died (кусок кода из скрипта Левора, стоял полный код)
NSS
void main()
{
    SetLocalInt(OBJECT_SELF, "SPAWNED_DEAD", 1);
    SetIsDestroyable(FALSE, FALSE, FALSE);
    effect eDeath = EffectDeath();
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, OBJECT_SELF);
}


nw_c2_j_assvict1 (базовый неверский код)
NSS
#include "NW_I0_GENERIC"
void main()
{
    SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); 
    SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT);
    SetListeningPatterns();    // Goes through and sets up which shouts  the NPC will listen to.
    WalkWayPoints();          // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0)
                              // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them
                              // 2. If the tag of the Way Point is  "POST_" + NPC TAG the creature will return this way point after
                              //    combat.
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Jun 2 2006, 10:38
Сообщение #2293


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

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



Команда Делей не всегда корректно, а скажем почти всегда неккоректно работает с OBJECT_SELF. Делай так:
NSS
object oSelf = OBJECT_SELF;


NSS
void main()
{
    object oNpc = OBJECT_SELF;
    SetIsDestroyable(FALSE,FALSE,FALSE);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE,TRUE), oNpc);
}

Вообще не рекомендую тереть скрипты спавновские полностью, если НПС должен что то делать. Если он мертвый то три. Код выше.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Jun 2 2006, 18:15
Сообщение #2294


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

Класс: Воин
Характер: Lawful Good
Раса: Человек
NWN: Скриптинг [Sn]



Делай лучше вообще не использовать в спауне, как раз всякие баги и 50/50 и вылезают.
Особенно, когда мод грузится, при загрузке лок либо нет такого, либо баги реже/меньше, но при загрузке мода 100% бяки вылезают.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Jun 2 2006, 18:56
Сообщение #2295


Level 8
***

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



Возникла следующая проблема:
На одну из ветвей диалога вешаю вот такой скрипт:
NSS
const float SND_DURATION=5.0;

void main()
{
ClearAllActions();
ActionWait(1.5);
ActionDoCommand(PlaySound("sound_2"));
ActionWait(SND_DURATION);
ActionStartConversation(GetPCSpeaker(), "dialog_name", FALSE, FALSE);

}

По идее, NPC должен чуть подождать (1.5 сек), проиграть звук, а потом начать диалог.
А он ждет 5 секунд (SND_DURATION), а затем начинает диалог и параллельно проигрывает звук. Где у меня неправильно?..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
kreon
сообщение Jun 2 2006, 20:27
Сообщение #2296


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

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



NSS
const float SND_DURATION=5.0;

void main()
{
ClearAllActions();
DelayCommand(1.5, ActionDoCommand(PlaySound("sound_2")));
DelayCommand(SND_DURATION+1.5, ActionStartConversation(GetPCSpeaker(), "dialog_name", FALSE, FALSE));
}

Ждет полторы секунды, играет звук, ждет 5 секунд, начинает диалог.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Jun 2 2006, 20:43
Сообщение #2297


Level 8
***

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



kreon, прикинь - не работает!
А вот что написано в лексиконе:
QUOTE
This might not be an actual bug, but though PlaySound isn't an action (you don't get the little yellow square on the screen), if you assign a PlaySound to someone, it will wait for their current action queue to finish before playing.


Сейчас буду извращаться на тему...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
kreon
сообщение Jun 2 2006, 20:45
Сообщение #2298


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

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



Гмм.. ща тоже чего-нить попробую... Я думал что ошибка в ActionWait(), т.к. действия воспроизведения звука не вейтятся вроде...
.
А, идея повяилась... Сделать SetCommandable(FALSE) (нечего будет ждать), воспроизвести звук и потом дать команду диалога.

Сообщение отредактировал kreon - Jun 2 2006, 20:47
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Kavin
сообщение Jun 2 2006, 20:56
Сообщение #2299


Level 8
***

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



Итак, злобно извратившись, я добился того, чего хотел.
Вот так:

Родительский скрипт:
NSS
void main()
{
object oSelf=OBJECT_SELF;

ClearAllActions();
DelayCommand(1.5, PlaySound("sound_1"));
DelayCommand(1.5, ExecuteScript("play1", oSelf));

}


Скрипт play1:
NSS
const float SND_DURATION=3.0;

void main()
{
ActionWait(SND_DURATION);
ActionStartConversation(GetPCSpeaker(), "dialog_1", FALSE, FALSE);
}


Сообщение отредактировал Kavin - Jun 2 2006, 20:56
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Jun 2 2006, 21:01
Сообщение #2300


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

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



а нафига так то?
NSS
void main()
{
ClearAllActions();
DelayCommand(1.5, PlaySound("sound_1"));
ActionWait(SND_DURATION + 1.5);
ActionStartConversation(GetPCSpeaker(), "dialog_1", FALSE, FALSE);
}

те звук через делей, остальное в стек.
ну или взять вариант Креона и выкинуть там ActionDoCommand, ибо в том варианте под задержкой он нафиг не нужен.
В стек стремно по 1 причине - можно сбить. Поэтому можно подстраховаться и стек закрыть (IMG:style_emoticons/kolobok_light/smile.gif)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
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) Можно ли это заточить только под одного персонажа(типа торговца, который выкрикивает весь день)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



Текстовая версия Сейчас: 29th April 2025 - 00:28