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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 63 64 65 66 67 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Lemegeton
сообщение Oct 10 2005, 17:59
Сообщение #1586


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

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



QUOTE (Chimeric @ Oct 10 2005, 02:59)
Падаем и ударяемся, но только - VARIABLE DEFINED WITHOUT TYPE. Те же грабли, черт! Никак я не догоню. Подсобите, люди.

Все дело в том, что при первом упоминании переменной в скрипте нужно указывать ее тип.
Neverwinter Script Source
void main() {
object oPC = GetFirstPC();
// Обрати внимание на слово object. Здесь указывается, что переменная oPC
// содержит в себе объект (в данном случае, непосредственно первый игрок).
location lPC = getLocation(oPC);
// Обрати внимание на слово location. Здесь указывается, что переменная lPC
// содержит в себе координаты (в данном случае - первого игрока).

// В дальнейшем (в той же ф-ции!!!), указывать тип переменной не нужно.
oPC = GetPCSpeaker(); // Не нужно указывать, т.к. тип переменной указан выше.
...
}

Для избежания подобных ошибок, можно объявить все переменные ДО их использования. Следующий код полностью идентичен предыдущему:
Neverwinter Script Source
void main() {
// Сначала можно заняться объявлением переменных,
object oPC; 
location lPC;

// а уж потом работой с ними (с их значениями):
oPC = GetFirstPC();
lPC = GetLocation (oPC)
oPC = GetPCSpeaker();

...
}


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

Все то же самое касается и других типов переменных. Таких как string, int, vector...
QUOTE (Chimeric @ Oct 10 2005, 02:59)
И еще вот странное дело: если я в линии c DelayCommand заменю текст на другой - на одно слово из моего собственного другого скрипта, то компилятор не жалуется, а с этой фразой почему-то выдает UNKNOWN STATE IN COMPILER. Не в длине же дело, всего-то одно предложение.  :this:
Только текст внутри двойных кавычек, или вообще всю строку? (Если можно, приведи текст).

Сообщение отредактировал Lemegeton - Oct 10 2005, 18:14
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 10 2005, 21:51
Сообщение #1587


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



1) Плюсую Лемегетона и Алису. Заработало вроде бы. Но только та же странность со словами продолжается: вот код.

CODE
void main()
{
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 13)
{
 oTarget = GetWaypointByTag("shrine");
 location lTarget = GetLocation(oTarget);
 if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
 oTarget=GetFirstFactionMember(oPC, FALSE);
 while (GetIsObjectValid(oTarget))
 {
   AssignCommand(oTarget, ClearAllActions());
   AssignCommand(oTarget, ActionJumpToLocation(lTarget));
   oTarget=GetNextFactionMember(oPC, FALSE);
 }}
else
 {
 effect eEffect = EffectDamage(3, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);
 ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
 oTarget = oPC;
 int nInt = GetObjectType(oTarget);
 if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), oTarget);
 else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
 eEffect = EffectDazed();
 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 30.0f);
 AssignCommand(OBJECT_SELF, FadeToBlack(oPC, FADE_SPEED_MEDIUM));
 AssignCommand(OBJECT_SELF, ActionWait(2.0));
 AssignCommand(OBJECT_SELF, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
 DelayCommand(3.0, FloatingTextStringOnCreature("1", oPC));
 }
}


Код работает, спасибо Алисе, и исправно выдает над головой число 1, которое я поставил просто так, для пробы. Но вот тот же самый код с другой фразой:

CODE
void main()
{
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 13)
{
 oTarget = GetWaypointByTag("shrine");
 location lTarget = GetLocation(oTarget);
 if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
 oTarget=GetFirstFactionMember(oPC, FALSE);
 while (GetIsObjectValid(oTarget))
 {
   AssignCommand(oTarget, ClearAllActions());
   AssignCommand(oTarget, ActionJumpToLocation(lTarget));
   oTarget=GetNextFactionMember(oPC, FALSE);
 }}
else
 {
 effect eEffect = EffectDamage(3, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);
 ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
 oTarget = oPC;
 int nInt = GetObjectType(oTarget);
 if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), oTarget);
 else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
 eEffect = EffectDazed();
 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 30.0f);
 AssignCommand(OBJECT_SELF, FadeToBlack(oPC, FADE_SPEED_MEDIUM));
 AssignCommand(OBJECT_SELF, ActionWait(2.0));
 AssignCommand(OBJECT_SELF, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
 DelayCommand(3.0, FloatingTextStringOnCreature("void main()
{
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 13)
{
 oTarget = GetWaypointByTag("shrine");
 location lTarget = GetLocation(oTarget);
 if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
 oTarget=GetFirstFactionMember(oPC, FALSE);
 while (GetIsObjectValid(oTarget))
 {
   AssignCommand(oTarget, ClearAllActions());
   AssignCommand(oTarget, ActionJumpToLocation(lTarget));
   oTarget=GetNextFactionMember(oPC, FALSE);
 }}
else
 {
 effect eEffect = EffectDamage(3, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);
 ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
 oTarget = oPC;
 int nInt = GetObjectType(oTarget);
 if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), oTarget);
 else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
 eEffect = EffectDazed();
 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 30.0f);
 AssignCommand(OBJECT_SELF, FadeToBlack(oPC, FADE_SPEED_MEDIUM));
 AssignCommand(OBJECT_SELF, ActionWait(2.0));
 AssignCommand(OBJECT_SELF, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
 DelayCommand(3.0, FloatingTextStringOnCreature("Ëåãêàÿ ÷åðåïíî-ìîçãîâàÿ òðàâìà (èëè åå ìûñëåííûé ýêâèâàëåíò)", oPC));
 }
}


Фраза про то, что вы, дескать, грохнулись и ушиблись. Ничего особенного. Однако не компилируется. :unsure:

2) Мне тут дали маленький скриптик, так вроде бы не хватает функции main, но и с ней почему-то не складывается:

CODE
void EndGame(
   string sEndMovie
);


3) Какой командой можно заставить персонажа застонать? Кхмм, то есть крякнуть от боли?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Oct 10 2005, 22:44
Сообщение #1588


Level 7
**

Класс: Маг
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [Sn]



1.Chimeric, честно говоря я ничего не понимаю - попробовала самым простым способом, т.е. просто скопировала твой скрипт в тулсет и все работает :xz:

2.
Neverwinter Script Source
void EndGame(string sEndMovie);

Это не скрипт, это декларация функции. Скрипт вот:
Neverwinter Script Source
void main()
{
string sEndMovie = "Игра окончена";
EndGame(sEndMovie);
}


3. Первое что приходит в голову - это
Neverwinter Script Source
object oPC = GetFirstPC();
AssignCommand(oPC, PlaySound("..."));

Добавлено в [mergetime]1128973644[/mergetime]
Я просто не знаю названия этого звука :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Oct 11 2005, 01:39
Сообщение #1589



Иконки Групп

Класс: Обыватель
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



QUOTE (Chimeric @ Oct 10 2005, 22:51)
Фраза про то, что вы, дескать, грохнулись и ушиблись. Ничего особенного. Однако не компилируется.

Там, наверное, есть какое-нибудь слово с буковой "я". Убери "я" или поставь патч dumbo.
Добавлено в [mergetime]1128984561[/mergetime]
З.Ы. Естественно, это не решение возможной проблемы по моему предположению, а проверка-подсказка нахождения проблемы. Решение (если действительно эта проблема) ищи в "Вопросы и Ответы" ;)

QUOTE
ОТВЕТ
Neverwinter Script Source
//================  Буква Я в стрингах (Автор Lex) ============================
string ya = GetName(GetWaypointByTag("YA")); // "+ya+" - так ее использовать
//================  Буква Я в стрингах (Автор Lex) ============================

DelayCommand(5.0, SpeakString("Да. Ключика у теб"+ya+" нет."));

Для работы этой схемы необходимо, чтобы в модуле был waypoint с tagом "YA" и именем "я"
--------------------------------------------------
в скриптах я делаю так:
- пишу сначала весь тест, какой должен быть в скрипте с буквами я.
- запускаю find and replace и меняю я на "+ya+"
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 11 2005, 06:31
Сообщение #1590


Level 11
***

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



Напишите скрипт плиз... что бы так - как только появляется игрок(ну в начале, я имею ввиду), появлялся диалог, как в "Орды Андердака"?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Oct 11 2005, 07:06
Сообщение #1591


Level 7
**

Класс: Маг
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [Sn]



Белатрис, делаешь невидимый объект с диалогом. Потом на OnEnter локи, при входе в которую тебе нужен диалог, вешаешь вот такой скрипт:
Neverwinter Script Source
void main()
{
object oPC = GetEnteringObject();
if(!GetIsPC(oPC) && !GetIsDM(oPC))
  return;
location lLoc = GetLocation(oPC);
object oDialog = CreateObject(OBJECT_TYPE_PLACEABLE, "Таг твоего объекта", lLoc);
AssignCommand(oPC, ClearAllActions());//На всякий пожарный случай
AssignCommand(oDialog, ActionStartConversation(oPC));
}


Сообщение отредактировал AliceDiren - Oct 11 2005, 07:06
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 11 2005, 07:08
Сообщение #1592


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



Проклятье, как я ненавижу всю эту цифирь... Почему генератор так ограничен? >:0 Спасибо большое всем, особенно за совет насчет "я". Теперь компилируется, только я опять все спутал, когда добавлял функции. Вот скрипт:


CODE
void main()
{
string ya = GetName(GetWaypointByTag("ya"));
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 15)
{
 oTarget = GetWaypointByTag("shrine");
 location lTarget = GetLocation(oTarget);
 if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
 oTarget=GetFirstFactionMember(oPC, FALSE);
 while (GetIsObjectValid(oTarget))
 {
   AssignCommand(oTarget, ClearAllActions());
   AssignCommand(oTarget, ActionJumpToLocation(lTarget));
   oTarget=GetNextFactionMember(oPC, FALSE);
 }}
else
 {
 effect eEffect = EffectDamage(3, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_NORMAL);
 ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
 oTarget = oPC;
 object oTarget;
oTarget = oPC;



 int nInt = GetObjectType(oTarget);
 if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), oTarget);
 else if (GetGender(oPC)==GENDER_MALE)
  {
  AssignCommand(oPC, PlaySound("vs_nbeggam2_hit2"));

  }
else
  {
  AssignCommand(oPC, PlaySound("vs_nbeggam2_hit2"));

  }

}

 ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
 AssignCommand(OBJECT_SELF, FadeToBlack(oPC, FADE_SPEED_FAST));





oTarget = oPC;

int nInt = GetObjectType(oTarget);
nInt = GetObjectType(oTarget);
 AssignCommand(oPC, SetCameraFacing(30.0, 6.0, 40.0, CAMERA_TRANSITION_TYPE_SNAP));
 eEffect = EffectDazed();
 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 30.0f);
 eEffect = EffectKnockdown();
 ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 8.0f);
 AssignCommand(OBJECT_SELF, ActionWait(3.0));
 AssignCommand(OBJECT_SELF, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
 ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oTarget));
 DelayCommand(3.0, FloatingTextStringOnCreature("Ëåãêà"+ya+" ÷åðåïíî-ìîçãîâà"+ya+" òðàâìà (èëè åå ìûñëåííûé ýêâèâàëåíò)", oPC));
 }


Должен при использовании предмета-веревки:

1) Проверять ловкость, если 15 или больше, то телепортировать в shrine.
2) Если меньше 14, то падаем навзничь на 8 секунд, ошеломление на 30 секунд, урон ударного типа 3 очка, быстрое затемнение на 3 секунды - для всех; кроме того, если мужчина, то такой-то звук, если женщина, то другой (сейчас одинаковые, потом впишу); дальше для всех просветление средней скорости, эффект сотрясения экрана, появляется надпись над головой.
3) Кроме того, нужно куда-то в середину (после затемнения, но до просветления) воткнуть телепортацию в пункт ropefall без визуального эффекта. Это в той же зоне. (Там в прыжке рушишься с веревки, так что имеет смысл оказаться чуть в стороне.)

Как видите, получилась какая-то тарабарщина. :ph34r:

P.S. Взялся просматривать сообщение перед отправкой и увидел, что Алиса уже ответила. Снова спасибо. Глянь на этот, более сложный вариант, ладно?

Сообщение отредактировал Chimeric - Oct 11 2005, 07:08
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 11 2005, 07:24
Сообщение #1593


Level 11
***

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



AliceDiren, тэг объекта - lLoc?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Oct 11 2005, 07:33
Сообщение #1594


Level 7
**

Класс: Маг
Характер: True Neutral
Раса: Эльф
NWN: Скриптинг [Sn]



Chimeric, вроде работает:
Neverwinter Script Source
void main()
{
string ya = GetName(GetWaypointByTag("ya"));
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");

if (!GetIsPC(oPC))
return;

if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 15)
{oTarget = GetWaypointByTag("shrine");
location lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID)
  return;

oTarget=GetFirstFactionMember(oPC, FALSE);
while (GetIsObjectValid(oTarget))
  {AssignCommand(oTarget, ClearAllActions());
  AssignCommand(oTarget, ActionJumpToLocation(lTarget));
  oTarget=GetNextFactionMember(oPC, FALSE);}
}
else
{effect eEffect = EffectDamage(3, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_NORMAL);
  ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
  eEffect = EffectDazed();
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 30.0f);
  eEffect = EffectKnockdown();
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 8.0f);
  ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oPC));

  FadeToBlack(oPC, FADE_SPEED_FAST);
  AssignCommand(oPC, JumpToObject(GetWaypointByTag("ropefall")));
  AssignCommand(oPC, SetCameraFacing(30.0, 6.0, 40.0, CAMERA_TRANSITION_TYPE_SNAP));
  DelayCommand(3.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));

  if (GetGender(oPC)==GENDER_MALE)
  AssignCommand(oPC, PlaySound("vs_nbeggam2_hit2"));
  else
  AssignCommand(oPC, PlaySound("vs_nbeggam2_hit2"));

DelayCommand(3.0, FloatingTextStringOnCreature("...", oPC));
}
}

Добавлено в [mergetime]1129005621[/mergetime]
Белатрис, нет таг невидимого объекта :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Tiger Greyhawk
сообщение Oct 11 2005, 07:53
Сообщение #1595



Иконки Групп

Класс: Обыватель
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



Chimeric
Основное, что мне бросилось в глаза: ты задаешь
Neverwinter Script Source
object oTarget = GetObjectByTag("hallwaysecretrope");
...
object oTarget;

QUOTE (Lemegeton @ Oct 10 2005, 18:59)
Обрати внимание, что тип переменных должен задаваться один и только один раз в области действия переменной (внутри функции, в основном).

Да и вообще как-то с oTarget получается сильно завернуто. :crazy: В самом начале - один объект, через пару строчек уже другой. При том, что первый объект нигде не применялся:
Neverwinter Script Source
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 15)
{
oTarget = GetWaypointByTag("shrine");
Но весь код не еще успел посмотреть :(

PS плз, пользуйся кнопкой NSS, а не Код для скриптов.

+ утебя нигде не задан тип переменной: eEffect = EffectDazed();
т.е. effect eEffect = EffectDazed(); - должно быть.
+ называй лучше переменные осмысленно. А то у тебя счас все переменные типа effect названы eEffect переменные типа Int - iInt и т.п. Оно, конечно, может работать нормально, но запутаться проще простого. Ты же меняешь в процессе значение переменной:
oTarget = GetWaypointByTag("shrine");
oTarget=GetFirstFactionMember(oPC, FALSE);
oTarget=GetNextFactionMember(oPC, FALSE);
oTarget = oPC;
и т.д. каждый раз соответственно скрипт ссылается на НОВОЕ (последнее) значение. Не спорю, может и нужное на текущий момент.

Сообщение отредактировал Tiger Greyhawk - Oct 11 2005, 10:55
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Белатрис
сообщение Oct 11 2005, 09:10
Сообщение #1596


Level 11
***

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



AliceDiren, делал делал, так нифига не наделал. Пожалуйсто объясни каждый шаг. Например: Нажми туда, сделай это, поставь такой то таг...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 11 2005, 09:10
Сообщение #1597


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

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



Chimeric пользуйся NSS кнопкой а не КОД
CODE

void main()
{
string ya = GetName(GetWaypointByTag("ya"));
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 15)

Neverwinter Script Source
void main()
{
string ya = GetName(GetWaypointByTag("ya"));
object oPC = GetLastUsedBy();
object oTarget = GetObjectByTag("hallwaysecretrope");
if (!GetIsPC(oPC)) return;
if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 15)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 11 2005, 09:36
Сообщение #1598


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



Сейчас, Алиса, я буду торжественно тестировать твою версию кода. Я умащу своё тело благовонными маслами, я вознесу молитвы четырем углам земли, я заколю барашка с белоснежным руном. Если все заработает, персонаж упадет на попа как ему положено и застонет по половому признаку, то я проведу завтра десять минут в глубокой медитации, направляя в твою сторону отборные положительные флюиды. :wizard:

Вообще всем спасибо. Я так не напирал бы со скриптами (ишь сколько вывалил), если бы не конкурс квестов. У меня и так будет маленький, зато атмосферный. В начале я хотел что-то минималистское в духе Марселя Марсо. Одна комната без звука и музыки, три истукана, беседуешь с ними поочередно. Потом понял, что заскучаю сам, прежде чем сделаю, и вот взялся взамен за этот проект. Уже сделал бы, но так надолго застреваю на скриптах, что боюсь вообще не успеть. %)

Учитывая спешку, помогите, пожалуйста, еще вот с этим. Вопрос все тот же: нужно, чтобы NPC говорили линии с интервалом в несколько секунд, и закольцевать все это дело, чтобы крутилось. Вот предложенный Айваном вариант:

Neverwinter Script Source
object oUbo = GetObjectByTag("AM_CUT2_UBO");
    object oHalib = GetObjectByTag("AM_CUT2_HAL");

    DelayCommand(17.0, AssignCommand(oHal, SpeakString("Фраза #1.")));
    DelayCommand(18.5, AssignCommand(oUbo, SpeakString("Фраза #2.")));
    DelayCommand(20.0, AssignCommand(oHal, SpeakString("Фраза #3")));
    DelayCommand(22.0, AssignCommand(oHal, SpeakString("Фраза #4.")));


Но тут, кажется, для двух людей сразу, и потом я опять собьюсь с толку, вставляя все это и компилируя. (Плюс в том, что я с вашей помощью собираю базу скриптов, так что на будущее у меня есть заготовки для типовых действий.) К тому же это, кажется, скрипт не личный, а для OnEnter. В принципе это все равно, а вот то, что не закольцовано, это хуже. Так что нужно? Ситуация такая: в одной комнате стоят несколько NPC и бормочут. Они разговаривают не друг с другом, а просто так. Бормотать они должны, завидев персонажа, с интервалом в 10 секунд или около того. Заодно в тот же скрипт желательно вставить неподвижность NPC, чтобы не шевелились, не поворачивались и вообще реагировали самым минимальным образом. Я пробовал CutsceneParalyze, но не пошло.

P.S. Скажите, а можно как-нибудь сделать NPC полупрозрачным?

P.P.S. Зависит ли способность говорить у NPC от AppearanceType? Я поставил одно существо, внешне монструозное, но вообще-то в ним можно нормально потолковать. Отключил агрессивность и поменял подходящие параметры, но вот уже который набор голосовых реплик для него тасую, а он так и не говорит "привет". И если нападаешь на него - дерется, а молчит. Я вроде бы уже и полные наборы беру, где есть звуки для приветствий, ну а "Я тебя закопаю!" и т.п. и вовсе присутствуют в каждом. Непонятно.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lemegeton
сообщение Oct 11 2005, 16:55
Сообщение #1599


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

Класс: Монах
Характер: Lawful Good
Раса: Человек
NWN: Контент



QUOTE (Chimeric @ Oct 11 2005, 09:36)
P.S. Скажите, а можно как-нибудь сделать NPC полупрозрачным?

Пихай в OnSpawn крича:
Neverwinter Script Source
object oPC = OBJECT_SELF; // Либо как-нибудь по-другому =)
// Создаем экстраординарный эффект (его нельзя расколдовать)
effect eGhost = ExtraordinaryEffect(EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE));
// Можно попробовать другие константы:
// VFX_DUR_GHOSTLY_PULSE
// VFX_DUR_GHOST_TRANSPARENT

// Накладываем эффект навсегда
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oPC, 0.0f);


Вопрос о том, как снять этот эффект будет? >:/

QUOTE (Chimeric @ Oct 11 2005, 09:36)
P.P.S. Зависит ли способность говорить у NPC от AppearanceType? Я поставил одно существо, внешне монструозное, но вообще-то в ним можно нормально потолковать. Отключил агрессивность и поменял подходящие параметры, но вот уже который набор голосовых реплик для него тасую, а он так и не говорит "привет". И если нападаешь на него - дерется, а молчит. Я вроде бы уже и полные наборы беру, где есть звуки для приветствий, ну а "Я тебя закопаю!" и т.п. и вовсе присутствуют в каждом. Непонятно.

Все, что делает непись прописано в его onheartbeat и onperceprion событиях. Если их убрать, это будет пугало огородное.

QUOTE (Chimeric @ Oct 11 2005, 09:36)
Учитывая спешку, помогите, пожалуйста, еще вот с этим. Вопрос все тот же: нужно, чтобы NPC говорили линии с интервалом в несколько секунд, и закольцевать все это дело, чтобы крутилось. Вот предложенный Айваном вариант:

Зачит так. Все эффекты на объектах происходят (или не происходят) раз в шесть секунд. Соответственно, можно в userdefined событии сделать что-то вроде:
Neverwinter Script Source
void main()
{
    int nEvent = GetUserDefinedEventNumber();
    if (nEvent == 1002) //  Проверяем на OnPerception
    {
      // Проверка на видимость.
      if (GetLastPerceptionSeen()) // Если увидел,
        GetLocalInt(OBJECT_SELF, "Whisper", 1) // говорить.
      else if (GetLastPerceptionVanished()) // Если исчез
        GetLocalInt(OBJECT_SELF, "Whisper", 0) // молчать.
    } else
    if (nEvent == 1001) // Проверяем на Heartbeat
    {
        if (GetLocalInt(OBJECT_SELF, "Whisper") // Проверяем лок. переменную
          {
            int iSpk = GetLocalInt(OBJECT_SELF, "sturn");
            switch (iSpk) {
            case 0:
                SpeakString("О, горе мне!");
                break;
            case 1:
                SpeakString("Позор на мои седины...");
                break;
            case 2:
                SpeakString("Бедный я, бедный...");
                break;
            case 3:
                SpeakString("Я проклят всеми...");
                break;
            default:
                // Если не попадает в одно из условий, обнуляем. =)
                iSpk = -1;
                // Ставим равным -1, поскольку после switch'а увеличим на 1
                break;
            };
            SetLocalInt(OBJECT_SELF, "sturn", iSpk+1);
          }
    }
}

Этот скрипт требует стандартных неписевых OnHeartbeat и OnPerception событий.
Если надо реже говорить, можно вставить пустые case. ;)

Если не нужны стандартые OnHeartbeat и OnPerception, можно сделать два скрипта. Тогда пропадет почти весь стандартный AI, и непись превратится в истукана, периодически что-то бормочущего. Ни поговорить сним, ни подраться...

Можно еще глобальнее подойти к этому делу. =)

Сообщение отредактировал Lemegeton - Oct 11 2005, 18:00
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 11 2005, 20:08
Сообщение #1600


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



Не компилируется, Лем. Пишет, что недостает точки с запятой на линии после первого Whisper. Добавляю - продолжает писать то же самое. К тому же с какой-то радости отказывается признавать еще и букву "р". Черт, не успеваю... :swoon:

Neverwinter Script Source
void main()
{
    string ya = GetName(GetWaypointByTag("ya"));
    string Yac = GetName(GetWaypointByTag("yac"));
    int nEvent = GetUserDefinedEventNumber();
    if (nEvent == 1002)
    {

      if (GetLastPerceptionSeen())
        GetLocalInt(OBJECT_SELF, "Whisper", 1)
      else if (GetLastPerceptionVanished())
        GetLocalInt(OBJECT_SELF, "Whisper", 0)
    } else
    if (nEvent == 1001)
    {
        if (GetLocalInt(OBJECT_SELF, "Whisper")
          {
            int iSpk = GetLocalInt(OBJECT_SELF, "chloe");
            switch (iSpk) {
            case 0:
                SpeakString("Ia?caaao! Ii i?aaii?ae iieo?eou ii? a nieio, ?ai iioaeiaaou iai"+ya+".");
                break;
            case 1:
                SpeakString("Noieuei eao aie?oa aa ieiei.");
                break;
            case 2:
                SpeakString("Eaeeenoa aii"+ya+"ea ian iaieo aac eiioa ca i?iaoeoaie ia Iiaue ?uiie, eae au iie n Iieee?aoii oi?aaeeenu a eaaea aac ian?");
                break;
            case 3:
                SpeakString("Aio i?eoiaeeinu ?eoaou o?uaeaie.");
                break;
            case 4:
                SpeakString("+yac+" ana-oaee aiaeeanu io iaai eieuoa e ee"+ya+"oau a O?aia E?ieee. Eae ?ac ca o?e ai"+ya+" ai yoiai o?ana.");
                break;
            case 5:
                SpeakString("+yac+" neacaea aio, ?oi oi?o nia?aea iaeu?eea, a iioii aaai?eo.");
                break;



            default:

                iSpk = -1;

                break;
            };
            SetLocalInt(OBJECT_SELF, "chloe", iSpk+1);
          }
    }
}


P.S. Рано мне отсылать Алисе флюиды. Ее вариант скрипта работает только наполовину, эффекты вообще не применяются, к тому же прежде всего должно начинаться затемнение. Сейчас буду все править.

Так, разобрался, почему "р" не признает. Это потому, что в Ворде редактировал, а надо бы в Блокноте. :rolleyes: Ворд еще и кавычки какие-то не те ставит. Тем не менее, проблема с точкой с запятой остается.

Не разобрался зато с веревочным скриптом. Не работает алисин скрипт, то есть эффекты не запускает. :(

Сообщение отредактировал Chimeric - Oct 11 2005, 21:57
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 12 2005, 00:35
Сообщение #1601


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

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



На вскидку, что нашел...
Neverwinter Script Source
if (GetLastPerceptionSeen())
        SetLocalInt(OBJECT_SELF, "Whisper", 1) // Set
      else if (GetLastPerceptionVanished())
        SetLocalInt(OBJECT_SELF, "Whisper", 0)
    } else
    if (nEvent == 1001)
    {
        if (GetLocalInt(OBJECT_SELF, "Whisper")) // Второая скобка

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 12 2005, 03:57
Сообщение #1602


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



Вот весь скрипт целиком в настоящем виде с учетом второй скобки. Понятия не исею, почему теперь-то не компилируется. Может, стоит скопировать его и попробовать в редакторе? Вдруг это у меня файл глючит, был же этот внезапный фокус с нечитаемой "р".

Neverwinter Script Source
void main()
{
  string ya = GetName(GetWaypointByTag("ya"));
  string yac = GetName(GetWaypointByTag("yac"));
int nEvent = GetUserDefinedEventNumber();
    if (nEvent == 1002)
    {

      if (GetLastPerceptionSeen())
        GetLocalInt(OBJECT_SELF, "Whisper", 1);
      else if (GetLastPerceptionVanished())
        GetLocalInt(OBJECT_SELF, "Whisper", 0);
    } else
    if (nEvent == 1001)
    {
        if (GetLocalInt(OBJECT_SELF, "Whisper"))
{
            int iSpk = GetLocalInt(OBJECT_SELF, "chloe");
            switch (iSpk) {
            case 0:
                SpeakString("Ìåðçàâåö! Îí ïðåäïî÷åë ïîëó÷èòü íîæ â ñïèíó, ÷åì ïîöåëîâàòü ìåí"+ya+".");
                break;
            case 1:
                SpeakString("Ñòîëüêî ëåò âîêðóã äà îêîëî.");
                break;
            case 2:
                SpeakString("Êàëëèñòà ãîí"+ya+"ëà íàñ îáîèõ áåç êîíöà çà ïðîäóêòàìè íà Íîâûé ðûíîê, êàê áû îíè ñ Ïîëèêðàòîì óïðàâèëèñü â ëàâêå áåç íàñ?");
                break;
            case 3:
                SpeakString("Åìó ïðèõîäèëîñü ÷èòàòü óðûâêàìè.");
                break;
            case 4:
                SpeakString(""+yac+" âñå-òàêè äîáèëàñü îò íåãî êîëüöà è êë"+ya+"òâû â Õðàìå Êðîéëè. Êàê ðàç çà òðè äí"+ya+" äî ýòîãî óæàñà.");
                break;
            case 5:
                SpeakString(""+yac+" ñêàçàëà åìó, ÷òî õî÷ó ñíà÷àëà ìàëü÷èêà, à ïîòîì äåâî÷êó.");
                break;



            default:
            iSpk = -1;

                break;
            }
            ;
            SetLocalInt(OBJECT_SELF, "chloe", iSpk+1);
          }
    }
}

}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Oct 12 2005, 08:52
Сообщение #1603


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

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



Chimeric, учись чистоскриптописанию, а то понять и разобрать сложно :)

Сравни, правдо нагляднее?
Neverwinter Script Source
void main()
{
string ya = GetName(GetWaypointByTag("ya"));
string yac = GetName(GetWaypointByTag("yac"));
int nEvent = GetUserDefinedEventNumber();


    if (nEvent == 1002)
    {

      if (GetLastPerceptionSeen())
        GetLocalInt(OBJECT_SELF, "Whisper");//тут у тебя Get использовался, как Set
      else
        if (GetLastPerceptionVanished())
        GetLocalInt(OBJECT_SELF, "Whisper");//тут у тебя Get использовался, как Set
    }
    else
    if (nEvent == 1001)
    {
        if (GetLocalInt(OBJECT_SELF, "Whisper"))
            {
                int iSpk = GetLocalInt(OBJECT_SELF, "chloe");

                switch (iSpk)
                {
                case 0:
                  SpeakString("");
                    break;
                case 1:
                    SpeakString("");
                    break;
                case 2:
                    SpeakString("");
                    break;
                case 3:
                    SpeakString("");
                    break;
                case 4:
                    SpeakString("");
                    break;
                case 5:
                    SpeakString("");
                    break;
                default:
                    iSpk = -1;
                    break;
                }
            SetLocalInt(OBJECT_SELF, "chloe", iSpk+1);
            }
    }
}

У тебя ошибки в стрингах, со скобками, приведи нормальную строку(не на каракулях) - можно скопировать скрипт в блокнот, а потом на форум.
Еще ты в скобках запутался.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 12 2005, 11:21
Сообщение #1604


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



Теперь уже нельзя каракули расшифровать, они только в том скрипте и остались. Скопирую в блокнот - будет то же самое. Если твой скрипт без ошибок, то сейчас испытаю. Кстати, я правильно сделал, что отдельно прописал заглавную Я?

(Блин, ну я фанат. Плэйсеблы таскал последние 8 часов подряд. :mamba: Время на часах - 4:23 утра. :mamba:)
Добавлено в [mergetime]1129107515[/mergetime]

Проверил твой вариант, заменив реплики просто на 1, 2 и 3. Компилируется, но не работает.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 12 2005, 12:04
Сообщение #1605


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

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



Если хочешь скопировать с тулсета русский текст, переключи раскладку на русский и тогда скопируется не твои крякозябра и нормальный, пацанский базар. :yes:
Добавлено в [mergetime]1129107970[/mergetime]
QUOTE (Chimeric @ Oct 12 2005, 14:21)
Проверил твой вариант, заменив реплики просто на 1, 2 и 3. Компилируется, но не работает.

А ты мой верхний пост смотрел? Если не видишь разницы то закинь скриптинг, сядь мапить. Я же указал ошибку и пометил в скобках.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 13 2005, 01:37
Сообщение #1606


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



Вижу я, нечего грубить. Как будто не ясно, что я прошу о помощи только потому, что сам не разбираюсь в скриптах и не особенно горю желанием разбираться. Скрипты - это логика, а логика и математика мне попендикулярны. От фигурных скобок хочется лечь на землю. Диалоги - другое дело, маппинг тоже ничего, но я не могу заняться только им, потому что должен доделать модуль, а работаю над ним сам, один, это временный и проходной проект. Для большинства вещей достаточно сиреневого генератора, кое-какие функции я знаю, но часто торможу, поэтому и спрашиваю совета. Зато вам, мастерам, это ничего не стоит, и я вам благодарен. К тому же другие уже указали на Set/Get, и я услышал.

Да, я исправил это дело, где подписано, и заменил фразы на обычные цифры, чтобы безо всяких там букв "я", каракулей и прочего. Пусть хотя бы простые номера бормочут. Результат: скрипт компилируется, а непись молчит.

Сообщение отредактировал Chimeric - Oct 13 2005, 01:42
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Oct 13 2005, 02:15
Сообщение #1607


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

Класс: Фея
Характер: Chaotic Evil
Раса: Тварь
NWN: Скриптинг [PW]



измучили гуманитария уже... :drag:

а вот некоторым товарищам, которые пропагандируют использование OnUserDefined слота и не упоминают про то, что его надо "активизировать", все таки надо дать коленом, надо... :yes:
в скрипте OnSpawn раскомментируй эти строки:
Neverwinter Script Source
...
//SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT);
//SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT);
...


правильный(вроде) скрипт, который теперь должен начать шевелиться в OnUserDefined:
Neverwinter Script Source
void main()
{
  string ya = GetName(GetWaypointByTag("ya"));
  // большая Я не вызывает ошибок.
  //string yac = GetName(GetWaypointByTag("yac"));
  int nEvent = GetUserDefinedEventNumber();
  if (nEvent == EVENT_PERCEIVE) // EVENT_PERCEIVE
  {
    object oPerceived = GetLastPerceived();
    if (GetLastPerceptionSeen() && GetIsPC(oPerceived))
      SetLocalObject(OBJECT_SELF, "PC", oPerceived);
  }
  else
    if (nEvent == EVENT_HEARTBEAT) // EVENT_HEARTBEAT
    {
      object oPC = GetLocalObject(OBJECT_SELF, "PC");
      if (oPC == OBJECT_INVALID) return;
      if (!GetObjectSeen(oPC))
      {
        DeleteLocalObject(OBJECT_SELF, "PC");
        return;
      }
      int iSpk = GetLocalInt(OBJECT_SELF, "chloe");
      switch (iSpk)
      {
      case 0:
        SpeakString("");
        break;
      case 1:
        SpeakString("");
        break;
      // ...
      default:
        iSpk = -1;
        break;
      }
      SetLocalInt(OBJECT_SELF, "chloe", iSpk+1);
    }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 13 2005, 05:41
Сообщение #1608


Пушкин
Иконки Групп

Класс: Обыватель
Характер: Chaotic Neutral
Раса: Гигант
NWN: Тексты



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

Neverwinter Script Source
void main()
{
string ya = GetName(GetWaypointByTag("ya"));
object oPC = GetLastUsedBy();
object oTarget = GetWaypointByTag("winter1");

if (!GetIsPC(oPC))
return;

if

(GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 15)
{

location lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID)
  return;

oTarget=GetWaypointByTag("winter1");
AssignCommand(oPC, ClearAllActions());

AssignCommand(oPC, ActionJumpToLocation(lTarget));
}

else




  FadeToBlack(oPC, FADE_SPEED_MEDIUM);
  DelayCommand(4.0, ActionJumpToObject(GetWaypointByTag("ropefall")));
  DelayCommand(4.0, SetCameraHeight(oPC, 6.0));

  effect eEffect = EffectDamage(3, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_NORMAL);
  DelayCommand(4.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC));
  eEffect = EffectDazed();
  DelayCommand(4.0, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oPC, 30.0f));
  eEffect = EffectKnockdown();
  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oPC, 10.0f);

  if (GetGender(oPC)==GENDER_MALE)
  AssignCommand(oPC, PlaySound("vs_nbeggam2_hit2"));
  else
  {
  AssignCommand(oPC, PlaySound("vs_nbeggam2_hit2"));
  }


  DelayCommand(6.0, FadeFromBlack(oPC, FADE_SPEED_MEDIUM));
  DelayCommand(7.0, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SCREEN_SHAKE), GetLocation(oPC)));

DelayCommand(8.0, FloatingTextStringOnCreature("1", oPC));
DelayCommand(10.0, FloatingTextStringOnCreature("2", oPC));

}


В-общем, ловкачи телепортируются куда надо, в winter1, а для кривопалых должно сначала наступать затемнение на несколько секунд, потом (пока темно) крик - разный, в принципе, для мужчин и женщин - и тогда же KnockDown, Daze, 3 очка урона и телепорт на соседнюю точку ropefall. Все это в течение 5 или около того темных секунд. Потом свет, экран сотрясается и выплывают с небольшим интервалом два сообщения над головой.

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

Neverwinter Script Source
void main()
{

object oPC = GetEnteringObject();
string ya = GetName(GetWaypointByTag("ya"));


if (!GetIsPC(oPC)) return;

SetCameraFacing(270.0, 3.0, 20.0, CAMERA_TRANSITION_TYPE_SNAP);

if (GetLocalInt(oPC, "bedroomfirstenter")== 0)
  {


  SetLocalInt(oPC, "bedroomfirstenter", 1);

  object oTarget;
  oTarget = oPC;

  effect eEffect;
  eEffect = EffectFrightened();

  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 180.0f);

  eEffect = EffectMovementSpeedDecrease(60);

  ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, 180.0f);

  DelayCommand(3.0, FloatingTextStringOnCreature("Где это я?", oPC));

  DelayCommand(5.0, FloatingTextStringOnCreature("Как здесь страшно и т.п.", oPC));

  DelayCommand(7.0, FloatingTextStringOnCreature("Надо выбираться!", oPC));


  }
}



Добавлено в 06:07
Проверил. "Раскомментировал" те строчки, вставил твой скрипт в OnUsedDefined. Не работает-с.

Ой, я не могу. :lol: :lol: :lol: Сколько уже? Пять дней подряд лучшие Мастера Скриптов бьются над этой задачкой и никак не могут ее решить. Как говорится, были выдвинуты различные теории. :lol: Нет, я очень всем благодарен за усилия, серьёзно, народ. Хотя я ничего и не добился за эти дни, зато начал какие-то азы скриптовые усваивать. Но неужели же никто, никогда и ни в одном модуле не делал NPC, бубнящих фразы через интервал времени? Куда уж зауряднее идея! Я еще в Торменте помню таутов, рекламировавших свои услуги, и проституток, и уличного поэта-декламатора, и бог знает кого еще. А то ведь была Infinity Engine, я немножко её помню изнутри, колупался в скриптах в свое время, потом забыл и забросил... И там все было чуть ли не один к одному, только возможностей, понятно, меньше (с другой стороны, как помнится, что-то было доступно там, чего нельзя здесь - диалоги на расстоянии, например). Короче, при таком сходстве мне остаётся только удивляться.

Сообщение отредактировал Chimeric - Oct 13 2005, 06:11
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
_kaa_
сообщение Oct 13 2005, 08:40
Сообщение #1609


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

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



QUOTE (Chimeric @ Oct 13 2005, 06:41)
Ой, я не могу. :lol: :lol: :lol: Сколько уже? Пять дней подряд лучшие Мастера Скриптов бьются над этой задачкой и никак не могут ее решить. Как говорится, были выдвинуты различные теории. :lol: Нет, я очень всем благодарен за усилия, серьёзно, народ. Хотя я ничего и не добился за эти дни, зато начал какие-то азы скриптовые усваивать. Но неужели же никто, никогда и ни в одном модуле не делал NPC, бубнящих фразы через интервал времени?

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

ps. учи мат.часть :DB:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 13 2005, 12:59
Сообщение #1610


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

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



QUOTE (Chimeric @ Oct 13 2005, 08:41)
Проверил. "Раскомментировал" те строчки, вставил твой скрипт в OnUsedDefined. Не работает-с.

То ли лыжи не едут... То ли одно из двух. :ROFL:
QUOTE (Chimeric @ Oct 13 2005, 08:41)
Ой, я не могу.    Сколько уже? Пять дней подряд лучшие Мастера Скриптов бьются над этой задачкой и никак не могут ее решить. Как говорится, были выдвинуты различные теории.  Нет, я очень всем благодарен за усилия, серьёзно, народ. Хотя я ничего и не добился за эти дни, зато начал какие-то азы скриптовые усваивать. Но неужели же никто, никогда и ни в одном модуле не делал NPC, бубнящих фразы через интервал времени?

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

Neverwinter Script Source
//:://////////////////////////////////////////////
//:: OnUserDefined
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 13.10.2005
//:://///////////////////////////////////////////
void main()
{
  int nEvent = GetUserDefinedEventNumber();
  if (GetArea(OBJECT_SELF)!=GetArea(GetFirstPC())) return;
  if (GetIsDead(OBJECT_SELF)==TRUE) {return;} // Если он помер, то пусть молчит

/* Открой спавн скрипт объекта и разкомментируй эту строку:
   SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT)         */


if (nEvent == EVENT_HEARTBEAT) // Сигнал поступает с HeartBeat слота.
   {
//------------------------------------------------------------------------------
   if (GetLocalInt(OBJECT_SELF, "SPEAK") == FALSE)
      {
      if (GetIsInCombat() || IsInConversation(OBJECT_SELF)
                          || GetLocalInt(OBJECT_SELF, "SPEAK"))
         {
            return;
         }
        SetLocalInt(OBJECT_SELF, "SPEAK", TRUE);
        ClearAllActions();

        /* f - Промежутки между фразами. Учитывай что хертбит срабатывает раз
         в шесть секунд. Соотвественно к цифре задержки прибавляй в уме 6 сек */

        float f = IntToFloat(Random(30)); // Тут выпадает число из 30.

        switch(Random(9)+1) // Генерирует случайную фразу
        {
        case 1: {DelayCommand(f, SpeakString("Фраза #1")); break;}
        case 2: {DelayCommand(f, SpeakString("Фраза #2")); break;}
        case 3: {DelayCommand(f, SpeakString("Фраза #3")); break;}
        case 4: {DelayCommand(f, SpeakString("Фраза #4")); break;}
        case 5: {DelayCommand(f, SpeakString("Фраза #5")); break;}
        case 6: {DelayCommand(f, SpeakString("Фраза #6")); break;}
        case 7: {DelayCommand(f, SpeakString("Фраза #7")); break;}
        case 8: {DelayCommand(f, SpeakString("Фраза #8")); break;}
        case 9: {DelayCommand(f, SpeakString("Фраза #9")); break;}
        case 10: {DelayCommand(f, SpeakString("Фраза #10")); break;}
       }
       DelayCommand(f, SetLocalInt(OBJECT_SELF, "SPEAK", FALSE));
      }
    }
//------------------------------------------------------------------------------
}

Добавлено в [mergetime]1129197871[/mergetime]
QUOTE (Chimeric @ Oct 13 2005, 04:37)
Как будто не ясно, что я прошу о помощи только потому, что сам не разбираюсь в скриптах и не особенно горю желанием разбираться.

:D Все просто выстроились в очередь после таких строк и мечтают помочь тебе. Скрипт форума не успевает обрабатывать запросы к базе, все пишут тебе скрипты. :D
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 63 64 65 66 67 > » 
Ответить в эту темуОткрыть новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 2nd May 2025 - 04:37