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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
 
Ответить в эту темуОткрыть новую тему
> Скрипты для конкурса, Спрашивайте здесь
Chimeric
сообщение Oct 14 2005, 20:01
Сообщение #1


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

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



С благословения Айвана создаю отдельную тему для "срочных" скриптов в конкурсных модулях. И вот сразу вопрос: как сделать так, чтобы рядом с игроком из ниоткуда вызывался (создавался) конкретный сундук с конкретным содержимым?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Oct 14 2005, 20:39
Сообщение #2


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

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



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


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


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

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



Так, потом буду пробовать. Спасибо. Пока вот что:

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

Neverwinter Script Source
void main()
{
object oPC;

oPC = GetItemActivator();

object oTarget;


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

}


proclus - вполне нормальный диалог. Однако почему-то, когда использую специальную возможность предмета, ничего не происходит.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Oct 15 2005, 10:33
Сообщение #4


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

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



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
сообщение Oct 15 2005, 11:04
Сообщение #5


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

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



и чуточку исправим, чтобы таки работало... ;)
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 поставить - некрасиво... ;)

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


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

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



А генератор Лилака даёт тот скрипт, что я вставил, и говорит, что персонаж, мол, на самом деле беседует сам с собой (и видит свой портрет). :unsure:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
-fenix-
сообщение Oct 15 2005, 12:22
Сообщение #7


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

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



QUOTE (Chimeric @ Oct 15 2005, 13:11)
А генератор Лилака даёт тот скрипт, что я вставил, и говорит, что персонаж, мол, на самом деле беседует сам с собой (и видит свой портрет).

Выбрось этот Лилак :D

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

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

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


:oops:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 16 2005, 14:05
Сообщение #8


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

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



Один день остался. Вроде бы успеваю... дайте только вот такой скрипт: проверку на сразу несколько рас + женский пол. То есть если, к примеру, персонаж - женщина, и к тому же эльфийка ИЛИ полуэльфийка, то получи такую-то диалоговую опцию. Скрипт простой, но тот вариант, что у меня есть, отчего-то не работает, а я так закрутился.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 16 2005, 15:56
Сообщение #9


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

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



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
сообщение Oct 16 2005, 23:38
Сообщение #10


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

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



Да... такой же скрипт и у меня. Странно, что ж с ним. Ладно, сейчас буду ставить.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Oct 17 2005, 07:02
Сообщение #11


Level 7
**

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



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]
Хотя помоему разницы никакой :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 17 2005, 08:03
Сообщение #12


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

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



Может, и никакой. Все равно спасибо. Меня немного сбивает с толку двоякое толкование этих скриптов с рядом требований друг за дружкой: то ли читать их как "Если женщина И эльф И полуэльф", то ли "Если женщина И эльф ИЛИ полуэльф". Нужно как раз второе, потому что первое бессмысленно, двух рас сразу не бывает. Ладно, может, я мудрю. Лишь бы работало.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
AliceDiren
сообщение Oct 17 2005, 08:51
Сообщение #13


Level 7
**

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



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
сообщение Oct 17 2005, 09:22
Сообщение #14


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

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



Понятно. Я ведь все-таки учил логику когда-то. Таблицы, деревья, Г. Фреге. %) Ладно, как насчет скрипта для добавления очка к какому-нибудь параметру персонажа насовсем? +1 к Силе и т.п. Скрипт для ApplyEffect у меня есть, но там с иконкой, а мне нужен простой тихий перманент.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 17 2005, 13:40
Сообщение #15


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

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



хм.. варианты:
- через шкурку (те сделай в палитре шкурку, как у монстров и в скрытый слот ее одевай игроку. Или если у него шкурка есть, то добавь ей свойство. Функции добавки свойств вещам есть)
- через эффекты (чтобы не было иконки попробуй наложить постоянный эффект и сразу же временный на 1.0 секунду. У меня бывало, что после того, как 1 сек проходит, иконка пропадает.)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 18 2005, 13:47
Сообщение #16


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

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



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
сообщение Oct 18 2005, 14:11
Сообщение #17


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

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



QUOTE (Chimeric @ Oct 18 2005, 14:47)
if (GetLocalString(oPC, "victorspoken") == "1") return FALSE;

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

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

да.ты смотри, чтобы над строкой твоей, на которой стоит этот скрипт не было строк без условий.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 18 2005, 21:04
Сообщение #18


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

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



Да нет без условий... :unsure: Ладно, сегодня вечером-ночью доделаю все и отправлю.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 21 2005, 06:47
Сообщение #19


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

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



Возможно как-нибудь отключить в пределах зоны тени самого персонажа, не задевая теней мебели и прочего? Дело вот в чем: если вручную изменить интенсивность теней в свойствах зоны, то на тень персонажа это никак не влияет, что дает странный вид.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 21 2005, 08:58
Сообщение #20


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

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



Chimeric сомневаюсь что можно. :no:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Chimeric
сообщение Oct 21 2005, 09:35
Сообщение #21


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

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



Погоди-ка... у меня же Moon: Shadows Enabled в свойствах стоит. А ну уберу...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 22 2005, 09:34
Сообщение #22


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

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



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 расс. :)


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
сообщение Nov 14 2005, 02:06
Сообщение #23


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

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



QUOTE (Lex @ Oct 22 2005, 09:34)
закрываю. Переношу.

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

вот тока зачем..мм..
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
maximal_up
сообщение Nov 17 2005, 08:29
Сообщение #24


Ищущий
*****

Класс: Рейнджер
Характер: Lawful Neutral
Раса: Эльф
ПОДМАСТЕРЬЕ



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

Тьфу ты, а когда работу делал, даже на фоум не заходи и темку не видел... феникса в асе мучал. За помощь по скриптам ГИГАНТСКОЕ СПАСИБО. :Thank: Правда их там особо и не было....
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29th March 2024 - 01:46