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

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

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


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

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



Как же все-таки заставить NPC бормотать фразы-линии?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 9 2005, 23:41
Сообщение #1577


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

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



Задержки ставь свои.
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.")));
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 10 2005, 00:22
Сообщение #1578


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

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



Кстати, вот еще вопрос: как запретить Respawn в сингле? Наверняка в архивах уже есть ответ, но местная функция поиска, мягко говоря, оставляет желать лучшего. Просматривать две нитки по 60 страниц каждая - извините... Тем более, что Мастерам скриптов мне подсказать ничего не стоит. Итак: как сделать так, чтобы при смерти персонажа не появлялось обычной панели с кнопками? Или пусть появляется, но без опции "Respawn", если это возможно. Хочу дать понять игроку, что чем нарываться на неприятности и врагов в расчете на воскрешение, лучше сохраняться почаще и разумно оценивать свои возможности.

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

P.S. Спасибо, Айван. Эти реплики будут крутиться до бесконечности? И куда ставить скрипт - в OnPerception?

Сообщение отредактировал Chimeric - Oct 10 2005, 00:26
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Вишес
сообщение Oct 10 2005, 01:41
Сообщение #1579


Level 13
****

Класс: Ниндзя
Характер: Chaotic Evil
Раса: Танар'ри



Chimeric

QUOTE
как запретить Respawn в сингле?


Очень просто.
В событиях модуля убери скрипты из строчек
onPlayerDeath
onPlayerdying
OnPlayerRespawn

И герой будет валяться мертвый до второго пришествия или пока не подойдет кто-то и оживит. (это кстати неплохая фишка - хенчмен оживляет игрока.)

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

Добавлено в 01:45
У меня тут возникла интересная идея. Хочу сделать фит, позволяющий метать сразу несколько ножей или сюрикенов в одного противника за одну атаку. Честно говоря, даже представить не могу, как будет выглядеть скрипт для этого фита. Может, кто-нибудь другой может?

Сообщение отредактировал Вишес - Oct 10 2005, 01:53
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 10 2005, 02:59
Сообщение #1580


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

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



Проблема:


CODE
void main()
{

object oPC = GetLastUsedBy();

object oTarget = GetObjectByTag("hallwaysecretrope");

if (!GetIsPC(oPC)) return;

if (GetAbilityScore(oPC, ABILITY_DEXTERITY)>= 13)
  {

     oTarget = GetWaypointByTag("shrine");

  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
  {
  eEffect = EffectDamage(3, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_NORMAL);

  ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);

  oTarget = oPC;

  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));

  }

}



Падаем и ударяемся, но только - VARIABLE DEFINED WITHOUT TYPE. Те же грабли, черт! Никак я не догоню. Подсобите, люди. И еще вот странное дело: если я в линии c DelayCommand заменю текст на другой - на одно слово из моего собственного другого скрипта, то компилятор не жалуется, а с этой фразой почему-то выдает UNKNOWN STATE IN COMPILER. Не в длине же дело, всего-то одно предложение. :this:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Oct 10 2005, 07:26
Сообщение #1581


Level 7
**

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



Neverwinter Script Source
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); //!!! location
  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);
  //!!! effect
  ApplyEffectToObject(DURATION_TYPE_INSTANT, eEffect, oPC);
  oTarget = oPC;
  int nInt = GetObjectType(oTarget);//!!! int
  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));
  }
}

ИМХО так.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Oct 10 2005, 12:31
Сообщение #1582


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

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



Chimeric
QUOTE (Chimeric @ Oct 9 2005, 23:26)
Как же все-таки заставить NPC бормотать фразы-линии?

http://www.wrg.ru/forums/index.php?showtop...875&#entry52274
чтоб не "бормотал", когда в локе нет игрока, поставить первой строкой в скрипте
Neverwinter Script Source
if (GetAILevel() == AI_LEVEL_VERY_LOW) return;
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
NedWarN
сообщение Oct 10 2005, 16:16
Сообщение #1583


Level 5
**

Класс: Маг
Характер: Lawful Good
Раса: Тварь



-fenix-
Не кричи ты, знаю я прикрасно как с if обращатся, я тока напутал ибо пиво. сорри. :D
а вообще пасиба. :yes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 10 2005, 16:31
Сообщение #1584


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

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



dumbo, а что АI скидывается до минимума еслим РС нет в локе?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
dumbo
сообщение Oct 10 2005, 17:04
Сообщение #1585


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

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



Aiwan, насколько я помню(довольно давно и нетщательно тестировал это дело), именно так и есть. тонкостей регулирования движком уровня AI, правда, не расскажу... при установке "руками" уровня, движок перестает контроллировать его до тех пор, пока не поставишь обратно на AI_LEVEL_DEFAULT.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
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
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

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

 



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