Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты для конкурса
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Chimeric
С благословения Айвана создаю отдельную тему для "срочных" скриптов в конкурсных модулях. И вот сразу вопрос: как сделать так, чтобы рядом с игроком из ниоткуда вызывался (создавался) конкретный сундук с конкретным содержимым?
-fenix-
QUOTE (Chimeric @ Oct 14 2005, 21:01)
С благословения Айвана создаю отдельную тему для "срочных" скриптов в конкурсных модулях. И вот сразу вопрос: как сделать так, чтобы рядом с игроком из ниоткуда вызывался (создавался) конкретный сундук с конкретным содержимым?

Делаешь в палитре нужный сундук, с нужным содержимым и потом функцией
Neverwinter Script Source
// Create an object of the specified type at lLocation.
// - nObjectType: OBJECT_TYPE_ITEM, OBJECT_TYPE_CREATURE, OBJECT_TYPE_PLACEABLE,
//  OBJECT_TYPE_STORE, OBJECT_TYPE_WAYPOINT
// - sTemplate
// - lLocation
// - bUseAppearAnimation
// - sNewTag - if this string is not empty, it will replace the default tag from the template

object CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="")

создаешь предмет - предмет создается по РесРефу, а не по ТАГУ!!!!

функцией
Neverwinter Script Source
// Get the location of oObject.
location GetLocation(object oObject)

Определяешь положение игрока, а можно другой функцие создать рандомную точку на расстоянии от игрока.

Вот скрипт та OnEnter тригера
Neverwinter Script Source
location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE)
{
if(!bOnLine)
fRadius=IntToFloat(Random(FloatToInt(fRadius)));

float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget)));
float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget)));
float fRndomAngle=IntToFloat(Random(360));
location lNEW = Location(GetArea(oTarget), Vector(iXO+fRadius*cos(fRndomAngle), iYO+fRadius*sin(fRndomAngle)), 360.0);
return lNEW;
}

void main()
{
object oPC = GetEnteringObject();
location lRLoc = CreateRandomLocation(oPC, 2.0);//2.0 - это радиус, на котором от ПС будет создаваться точка появления сундука

CreateObject(OBJECT_TYPE_PLACEABLE, "РесРеф сундука", lRLoc);
}
Chimeric
Так, потом буду пробовать. Спасибо. Пока вот что:

Поставил в OnActivateItem модуля:

Neverwinter Script Source
void main()
{
object oPC;

oPC = GetItemActivator();

object oTarget;


AssignCommand(oTarget, ActionStartConversation(oPC, "proclus"));

}


proclus - вполне нормальный диалог. Однако почему-то, когда использую специальную возможность предмета, ничего не происходит.
-fenix-
Chimeric, а кто такой object oTarget;???

Neverwinter Script Source
void main()
{
object oPC = GetItemActivator();
object oTarget = GetItemActivated();//вот теперь ясно, что это!

//если у тебя несколько активируемых предметов, то нужно сделать проверку на ТАГ

if(GetTag(oTarget) == "ТАГ нужного итема")
{
    AssignCommand(oTarget, ActionStartConversation(oPC, "proclus"));
}
else
{
    return;
}
}
dumbo
и чуточку исправим, чтобы таки работало... wink.gif
QUOTE
PCs can have dialogue with NPCs, placeables, triggers and doors. Items cannot converse (but invisible placeables with the same name as an item can).


итак, сначала делаем "Invisible Object" плэйс. кстати, неплохо сделать ему нужный портрет, чтобы не разговаривать с черным квадратом малевича.
а потом:
Neverwinter Script Source
void main()
{
  object oPC = GetItemActivator();
  object oItem = GetItemActivated();
  if (GetTag(oItem)=="ТЭГ айтема")
  {
    object oCnv = CreateObject(OBJECT_TYPE_PLACEABLE,
                    "РЕЗРЕФ нашего невидимого плэйса", GetLocation(oPC));
    DelayCommand(1.0, AssignCommand(oCnv,
      ActionStartConversation(oPC, "proclus", TRUE)));
  }
}


без секундной задержки будет глючить, ибо игроку нужно закончить анимацию активации предмета.

edit: ой, забыл закрывающий тэг /nss поставить - некрасиво... wink.gif
Chimeric
А генератор Лилака даёт тот скрипт, что я вставил, и говорит, что персонаж, мол, на самом деле беседует сам с собой (и видит свой портрет). unsure.gif
-fenix-
QUOTE (Chimeric @ Oct 15 2005, 13:11)
А генератор Лилака даёт тот скрипт, что я вставил, и говорит, что персонаж, мол, на самом деле беседует сам с собой (и видит свой портрет).

Выбрось этот Лилак biggrin.gif

Будет болтать со своим портретом!
Neverwinter Script Source
void main()
{
object oPC = GetItemActivator();

AssignCommand(oPC, ActionStartConversation(oPC, "untitled008"));
}

QUOTE (dumbo @ Oct 15 2005, 12:04)
и чуточку исправим, чтобы таки работало
...


blush.gif
Chimeric
Один день остался. Вроде бы успеваю... дайте только вот такой скрипт: проверку на сразу несколько рас + женский пол. То есть если, к примеру, персонаж - женщина, и к тому же эльфийка ИЛИ полуэльфийка, то получи такую-то диалоговую опцию. Скрипт простой, но тот вариант, что у меня есть, отчего-то не работает, а я так закрутился.
Lex
Neverwinter Script Source
int StartingConditional()
{
object oPC =  GetPCSpeaker();
if (GetGender(oPC)!=GENDER_FEMALE) return FALSE// если не девушка, строку не даем
if (GetRacialType(oPC)==RACIAL_TYPE_ELF) return TRUE; // если эльф - даем
if (GetRacialType(oPC)==RACIAL_TYPE_HALFELF) return TRUE; // если полуэльф - даем
return FALSE; // иначе не даем
}

ставь на строку, которая должна появиться у девушки эльфийки или полуэльфийки.
Chimeric
Да... такой же скрипт и у меня. Странно, что ж с ним. Ладно, сейчас буду ставить.
AliceDiren
Chimeric, если не нравится такой, попробуй так, как делаю я:
Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();
int iSpam = GetRacialType(oPC) == RACIAL_TYPE_ELF || GetRacialType(oPC) == RACIAL_TYPE_HALFELF;
return iSpam && GetGender(oPC) == GENDER_FEMALE;
}

Добавлено в [mergetime]1129521816[/mergetime]
Хотя помоему разницы никакой smile.gif
Chimeric
Может, и никакой. Все равно спасибо. Меня немного сбивает с толку двоякое толкование этих скриптов с рядом требований друг за дружкой: то ли читать их как "Если женщина И эльф И полуэльф", то ли "Если женщина И эльф ИЛИ полуэльф". Нужно как раз второе, потому что первое бессмысленно, двух рас сразу не бывает. Ладно, может, я мудрю. Лишь бы работало.
AliceDiren
Chimeric, может и не стоит, но чтобы было понятнее:
Neverwinter Script Source
int StartingConditional()
{
object oPC =  GetPCSpeaker();
//Результат работы функции определяется по формуле:
//bResult = A и (B или C),
//где A - это результат проверки на пол (девушка),
//а B или C - проверки по рассовому типу (Эльфийка, Полуэльфийка).

//Начинаем складывать значения, если результат проверки на пол неудачен, то
//сразу же возвращаем ЛОЖЬ. FALSE && ... всегда равно FALSE
//В случае удачи считаем A = TRUE
if (GetGender(oPC)!=GENDER_FEMALE) return FALSE;

//Следующие две строки соответственно проверка на расу
//Если одна из них ПРАВДА, то возвращаем TRUE
//Выражение TRUE || ... , а так же наоборот ... || TRUE возвращает TRUE
//Формула принимает следующий вид:
//bResult = TRUE(девушка) && (TRUE || FALSE), если эльфийка
if (GetRacialType(oPC)==RACIAL_TYPE_ELF) return TRUE;
//bResult = TRUE(девушка) && (FALSE || TRUE), если полуэльфийка
if (GetRacialType(oPC)==RACIAL_TYPE_HALFELF) return TRUE;
//Если обе проверки провалились, то возвращаем FALSE, так как формула принимает вид:
//bResult = TRUE && (FALSE || FALSE)
return FALSE;
}
Chimeric
Понятно. Я ведь все-таки учил логику когда-то. Таблицы, деревья, Г. Фреге. wacko.gif Ладно, как насчет скрипта для добавления очка к какому-нибудь параметру персонажа насовсем? +1 к Силе и т.п. Скрипт для ApplyEffect у меня есть, но там с иконкой, а мне нужен простой тихий перманент.
Lex
хм.. варианты:
- через шкурку (те сделай в палитре шкурку, как у монстров и в скрытый слот ее одевай игроку. Или если у него шкурка есть, то добавь ей свойство. Функции добавки свойств вещам есть)
- через эффекты (чтобы не было иконки попробуй наложить постоянный эффект и сразу же временный на 1.0 секунду. У меня бывало, что после того, как 1 сек проходит, иконка пропадает.)
Chimeric
Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();

if (GetLocalString(oPC, "victorspoken") == "1") return FALSE;

if (GetGender(oPC) != GENDER_FEMALE) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_DWARF) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_GNOME) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_HALFLING) return FALSE;

return TRUE;
}


Должно работать, так? Если НЕ говорила с NPC, то коли относится к одной из этих рас, получи вариант. Верно? То ли я не на ту строчку диалога проверку ставлю. Более поздние диалоговые опции наверху, начальные внизу списка, так?
Lex
QUOTE (Chimeric @ Oct 18 2005, 14:47)
if (GetLocalString(oPC, "victorspoken") == "1") return FALSE;

интересно.. а смысл локальной строки, которая хранит такого типа строчку?
не проще делать локальную инту?
(LocalInt)

QUOTE (Chimeric @ Oct 18 2005, 14:47)
Должно работать, так? Если НЕ говорила с NPC, то коли относится к одной из этих рас, получи вариант.

да.ты смотри, чтобы над строкой твоей, на которой стоит этот скрипт не было строк без условий.
Chimeric
Да нет без условий... unsure.gif Ладно, сегодня вечером-ночью доделаю все и отправлю.
Chimeric
Возможно как-нибудь отключить в пределах зоны тени самого персонажа, не задевая теней мебели и прочего? Дело вот в чем: если вручную изменить интенсивность теней в свойствах зоны, то на тень персонажа это никак не влияет, что дает странный вид.
Aiwan
Chimeric сомневаюсь что можно. nea.gif
Chimeric
Погоди-ка... у меня же Moon: Shadows Enabled в свойствах стоит. А ну уберу...
Lex
QUOTE (Chimeric @ Oct 18 2005, 14:47)
if (GetRacialType(oPC) != RACIAL_TYPE_DWARF) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_GNOME) return FALSE;

if (GetRacialType(oPC) != RACIAL_TYPE_HALFLING) return FALSE;

до меня тока щас дошло, что это неправильно. игрок значит должен быть сразу 3 расс. smile.gif


Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();

if (GetLocalString(oPC, "victorspoken") == "1") return FALSE;

if (GetGender(oPC) != GENDER_FEMALE) return FALSE;

if (GetRacialType(oPC) == RACIAL_TYPE_DWARF) return TRUE;

if (GetRacialType(oPC) == RACIAL_TYPE_GNOME) return TRUE;

if (GetRacialType(oPC) == RACIAL_TYPE_HALFLING) return TRUE;

return FALSE;
}

Добавлено в [mergetime]1129962918[/mergetime]
закрываю. Переношу.
Lex
QUOTE (Lex @ Oct 22 2005, 09:34)
закрываю. Переношу.

открываю, возвращаю..

вот тока зачем..мм..
maximal_up
Лекс. Будет тема по помощи к конкурсам. Всем. Открываться будет только с конкурсами. yes.gif

Тьфу ты, а когда работу делал, даже на фоум не заходи и темку не видел... феникса в асе мучал. За помощь по скриптам ГИГАНТСКОЕ СПАСИБО. thank_you.gif Правда их там особо и не было....
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.