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

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

 Правила этого форума ПРАВИЛА РАЗДЕЛА
147 страниц V  « < 9 10 11 12 13 > »   
Ответить в эту темуОткрыть новую тему
> Скрипты, Все вопросы и ответы по скриптам
Tarre Talliorne
сообщение Aug 6 2004, 18:47
Сообщение #236


Level 8
***

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



Цитата
http://www.wrg.ru/forums/index.php?showtopic=370 <== тяпать сюда ....

Пости сюда все скрипты. Если хочешь создать отдельную комнату для своей команды - обращайся к Айвану.

Цитата
ЕСТЬ НОВАЯ ИДЕЯ!!! Игрок берёт в аренду здание под магазин, Нанемает продавца, пишет ему текст диалога, но вот как сделать так, шобы продавец продовал то, что игрок ему передаст из своего инвентаря (с учётом того, шо продавец ничего не скупает!) ПОМОГИТЕ!!!

Самая простая реализация - ПС оставляет в сундуке то, что должен получить НПС - продавец.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Aug 15 2004, 00:41
Сообщение #237


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

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



Цитата

Окей, скажем так - есть некоторые скрипты, которые больше не используются и не обновляются с тех пор, как в них исчезла нужда (например, система помощников была полностью заменена как в SoU, так и в HotU). Я перекомпилировал все те скрипты, что поставлялись с "ордами", перед выпуском, чтобы удостовериться, что все необходимые скрипты компилируются без проблем. Проблема в 99.9% всех случаев "Я не могу скомпилировать из-за этого include-файла" - из-за перезаписанных стандартных скриптов в модуле или каталоге override. Если один скрипт где-нибудь внизу лестницы зависимостей перезаписан в модуле, он не будет обновляться, когда игра патчится, если вы вручную его не удалите, тем самым ломая все зависящие от него скрипты. В общем, вам лучше не менять include-файлы Bioware, если вы не знаете, что это за собой повлечёт. Если вы настаиваете на использовании старых наборов скриптов (напрмер, старого ИИ наёмников/помощников), вам придётся переписать всю цепочку зависимостей в модуле.

(IMG:style_emoticons/kolobok_light/pleasantry.gif) Мы это съели и выплюнули чуть не подавившись год назад...
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gor
сообщение Sep 13 2004, 23:11
Сообщение #238


Level 3
*

Класс: Рейнджер
Характер: Lawful Good
Раса: Человек
NWN: Маппинг



Кто-нибудь делал марширующий взвод солдат? :)
В смысле, чтобы ровно передвигались и не спотыкались
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Sep 14 2004, 08:51
Сообщение #239


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

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



У... Это очень сложно. :job: Помоему почти нельзя, только если натыкать кучу вейпов и пинать каждого к следующему, но это мега геммор ИМХО.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Dark Lord
сообщение Sep 14 2004, 13:19
Сообщение #240


Level 11
***

Класс: Страж Тьмы
Характер: Lawful Evil
Раса: Человек
NWN: Контент



Брр... Сделать всех одним кричем. Лучше плайсом и его двигать. Вот и усе. Не конечно если надо чтобы каждый еще и диалог имел - то ето другое. Ну а так то....
Добавлено в [mergetime]1095157295[/mergetime]
Только анимацию сложно делать, и - учитывая что в НВН поворот осужествляется наскоко я помню *без* анимации - очень интересно посмотреть как такой крич будет поворачиваться :crazy: А если просто прошагать да по красной плозади клонной - тада именно - одним кричем или плайсом всех солдат.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Аваддон
сообщение Sep 14 2004, 16:03
Сообщение #241


Level 10
***

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



А мона сделать много тригеров и вейпов. И как солдать на него наступает - проверять че за солдат и направлять его к определенному вейпу
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Sep 14 2004, 17:51
Сообщение #242


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



Брррр... Гемор. Не стоит свеч. Имхо.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Sep 14 2004, 18:59
Сообщение #243


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

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



Самый наименее геморный способ - ActionForceFollowObject
Добавлено в [mergetime]1095177569[/mergetime]
качество не охти, но зато никаких трудностей
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Sep 14 2004, 19:31
Сообщение #244


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



В ногу они все равно шагать не будут :D.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
gor
сообщение Sep 22 2004, 03:17
Сообщение #245


Level 3
*

Класс: Рейнджер
Характер: Lawful Good
Раса: Человек
NWN: Маппинг



QUOTE
Сделать всех одним кричем. Лучше плайсом и его двигать.


Что есть "кричем?"

QUOTE
А мона сделать много тригеров и вейпов. И как солдать на него наступает - проверять че за солдат и направлять его к определенному вейпу


Хм, наверное, так что-то получится. Да, геморно :yes:

QUOTE
Брррр... Гемор. Не стоит свеч. Имхо.


СтОит. Заходишь в город, а там сурово - война, все идут на фронт. Сразу настраивает на нужный лад.

QUOTE
Самый наименее геморный способ - ActionForceFollowObject


Нет. Будут спотыкаться, споткнувшись тормозить и стоять на месте.
Надо, чтобы просто шла вооруженная группа и было видно, что это организованная единица. Навороченной анимации - не обязательно.

2DBColl. Насчет карты, как в Леворе. Можно сделать так? На плане карта боя, кругом войска - их мышкой перекидываешь, в общем, стратегия. К примеру, оборона города во второй части ХотУ - с такойкартойбысмотрелась






Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Sep 22 2004, 10:42
Сообщение #246


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



QUOTE (gor @ Sep 22 2004, 03:17)
Что есть "кричем?"

Creature.
QUOTE (gor @ Sep 22 2004, 03:17)
Хм, наверное, так что-то получится. Да, геморно

Не получится. Все равно будет сбоить. :this:
QUOTE (gor @ Sep 22 2004, 03:17)
СтОит. Заходишь в город, а там сурово - война, все идут на фронт. Сразу настраивает на нужный лад.

Можно не толпой отправлять. А по частям. По 3 чела допустим. Тогда можно хорошо сделать. И лад тоже будет нужный ;). Если еще экран взрывами потрясывать.
Есть на самом деле куча способов ОБОЗНАЧИТЬ военные действия и утыкаться в то, что практически не реализуемо не стоит. Лучше подумать хорошенько и попробовать другие методы ;).
QUOTE (gor @ Sep 22 2004, 03:17)
Надо, чтобы просто шла вооруженная группа и было видно, что это организованная единица. Навороченной анимации - не обязательно.

Имхо, как сказал Dark Lord это получится только если делать ВСЮ толпу одним кричем с одинаковой анимацией... Но смотреться будет не лучшим образом, когда при наведении мыши будет подсвечиваться ВСЯ толпа... Потому ЛУЧШЕ забить на это. Пробовать другие способы. :yes:
QUOTE (gor @ Sep 22 2004, 03:17)
2DBColl. Насчет карты, как в Леворе. Можно сделать так? На плане карта боя, кругом войска - их мышкой перекидываешь, в общем, стратегия. К примеру, оборона города во второй части ХотУ - с такой картой бы смотрелась

Не знаю... А оно надо? Хех. Может и можно как-то сделать, если подумать. Но я бы не стал гемориться со стратегией... НВН не для того заточен :buba:.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Shad
сообщение Sep 24 2004, 01:32
Сообщение #247


Level 3
*

Класс: Обыватель
Характер: Lawful Good
Раса: Человек



Вот, несколько вопросов возникло... под пол-ворого ночи. Кто знает - подскажите:
1. Как в скрипте восстановить количество кастов спелла.//: функцию IncrementRemainingFeatUses() нашёл, есть также DecrementRemainingFeatUses() и DecrementRemainingSpellUses(), а вот IncrementRemainingSpellUses() - такой или подобной почему-то нет, в т. ч. не нашёл и в стандартных инклудах.
2. Как сделать AreaOfEffect, не подверженную диспеллу?// Прописывание её при наложении как ExtraordinaryEffect не помогает...
3. Как сделать, чтобы Item свободно левитировал в воздухе, и чтобы его из воздуха можно было взять?//Редакторе висит, в игре падает вниз.
4. Как сделать, чтобы работали фиты на Creature Weapon - Improved Critical, Overwhelming Critical, например. У меня не работают.
5. Как сделать, чтобы Creature Weapon наносил одновременно разные типы физического урона (Режущий и колющий и дробящий сразу).// Когда ставлю такие свойства на оружме, или эффект на существо - урон растет но остаетья того же типа, что на базовом предмете оружии.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Twin
сообщение Oct 1 2004, 04:47
Сообщение #248


Level 5
**

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



У меня не работает DelayCommand, если я вызываю его из onDeath и указанное время больше чем примерно 5.0f. Попробуйте вписать себе в onDeath любого НПС следующее:

Neverwinter Script Source
#include "x2_inc_compon"
#include "x0_i0_spawncond"

void DoSpawn2();

void main()
{
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    object oKiller = GetLastKiller();

    // If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    if ( nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL) )
    {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
    }

    // Call to allies to let them know we're dead
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);

    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    DelayCommand( 20.0f, DoSpawn2());
    SendMessageToPC(GetFirstPC(), "debug 1");

    // NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    if ( GetSpawnInCondition(NW_FLAG_DEATH_EVENT) )
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1007));
    }

    craft_drop_items(oKiller);
}

void DoSpawn2()
{
    SendMessageToPC(GetFirstPC(), "debug2");
}


Смысловой нагрузки в DoSpawn2() нет, т.к. у нас идет типа отладка. Проблема в том, что у меня "debug2" не пишет, если понизить время в DelayCommand до 5.0f то напишет, но мне то нужно таймер больше чем минуты делать. Почему так происходит я не знаю, еще очень мало работаю с тулсетом. Может кто подскажет как мне реализовать таймер после убийства НПС, причем я должен иметь доступ к свойствам убиваемого НПС (только для чтения, не для записи:)).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 1 2004, 05:38
Сообщение #249


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

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



Твоя функция вызывается скорее всего ПОСЛЕ разрушения твоего НПС. Вот посему он ее и не находит после 5 секунд.
Добавлено в [mergetime]1096598585[/mergetime]
Если ты хочешь какой то набор действий, то лучше запускай через DelayCommand отдельный скрипт.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Twin
сообщение Oct 1 2004, 07:24
Сообщение #250


Level 5
**

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



Aiwan
Ок, на счет разрушения. Если ты говоришь так, значит так. Я это допускал. Но объясни мне, как может DelayCommand зависить от существования OBJECT_SELF'а? Это же бред. 5 секунд, примерно изчезают останки с карты и появляется лут, видимо этот отрезок и является ключевым. Но его править не размуно. Опять же, выходит такой кривой движок, если DelayCommand перестает работать после уничтожения объякта, вызвавшего его? Ведь DoSpawn2() никакого отношения к OBJECT_SELF'у не имеет. Не приятно, что через такую жопу всё... :swoon:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 1 2004, 09:25
Сообщение #251


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

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



Ты вешаень на НПС команду с зедержкой на 20 сек. А если через 20 сек нет этого НПС, то все. Твоя команда потерялась, так как нет объекта, к которому была привязка..все логично
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Oct 1 2004, 10:33
Сообщение #252


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



Лекс, абсолютно прав в своем ответе. И все действительно ЛОГИЧНО.
QUOTE (Twin @ Oct 1 2004, 04:47)
Проблема в том, что у меня "debug2" не пишет, если понизить время в DelayCommand до 5.0f то напишет, но мне то нужно таймер больше чем минуты делать. Почему так происходит я не знаю, еще очень мало работаю с тулсетом. Может кто подскажет как мне реализовать таймер после убийства НПС, причем я должен иметь доступ к свойствам убиваемого НПС (только для чтения, не для записи).

А вот в этом случае я бы тебе советовал делать перед смертью
SetDestroyable(OBJECT_SELF, ...); - чтобы не пропадал труп!
Весь инвентарь выкидывал в какой-то лут-контейнер рядом... И уже на этот контейнер можно повесить конструкцию:

AssignCommand(oLoot, DelayCommand(30.0, действие));

Затем сразу можно Destroy'ить тело ;).
<small>Добавлено в 10:38</small>
QUOTE
DelayCommand( 20.0f, DoSpawn2());

QUOTE (Twin @ Oct 1 2004, 07:24)
Опять же, выходит такой кривой движок, если DelayCommand перестает работать после уничтожения объякта, вызвавшего его? Ведь DoSpawn2() никакого отношения к OBJECT_SELF'у не имеет. Не приятно, что через такую жопу всё...

Это как это НЕ ИМЕЕТ??? :swoon: ИМЕЕТ! :yes:
Замени свою конструкцию на
Neverwinter Script Source
AssignCommand(oKiller, DelayCommand(20.0, ExecuteScript("скрипт с DoSpawn2()")));

...и увидишь разницу. ;)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 1 2004, 11:31
Сообщение #253


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

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



QUOTE (Twin @ Oct 1 2004, 10:24)
Я это допускал. Но объясни мне, как может DelayCommand зависить от существования OBJECT_SELF'а? Это же бред.

Ты не прав. Посмотри, твоя команда
Neverwinter Script Source
DelayCommand( 20.0f, DoSpawn2());

Вызывает функцию, которая прописана в скрипте объекта OBJECT_SELF.
ТЫ ВЫЗЫВАЕШЬ эту функцию через 10 секунд, например, а функции УЖЕ НЕТ! Так как она была прописана на НПС а он дестроился. Все это будет работать так скрипт с именем DoSpawn2:
Neverwinter Script Source
void DoSpawn2()
{
    SendMessageToPC(GetFirstPC(), "debug2");
}


Будет запускаться таким образом:

Neverwinter Script Source
#include "x2_inc_compon"
#include "x0_i0_spawncond"

void DoSpawn2();

void main()
{
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(OBJECT_SELF);
    object oKiller = GetLastKiller();

    // If we're a good/neutral commoner,
    // adjust the killer's alignment evil
    if ( nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL) )
    {
        AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5);
    }

    // Call to allies to let them know we're dead
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);

    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);

    DelayCommand( 20.0f,  ExecuteScript("DoSpawn2", GetFirstPC()));
    SendMessageToPC(GetFirstPC(), "debug 1");

    // NOTE: the OnDeath user-defined event does not
    // trigger reliably and should probably be removed
    if ( GetSpawnInCondition(NW_FLAG_DEATH_EVENT) )
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1007));
    }

    craft_drop_items(oKiller);
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Lex
сообщение Oct 1 2004, 18:59
Сообщение #254


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

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



на такую халаву все горазды отвечать (и я в том числе).
А вот на 5 вопросов Shadа никто ответить даже не пытался..признаюсь, что некоторые (вопросы) ставят меня в тупик.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Twin
сообщение Oct 2 2004, 01:43
Сообщение #255


Level 5
**

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



Ох, сорри. ;) Просто мне очень хотелось верить в то что DelayCommand работает на низком уровне и уж априори не является свойством объекта. Ну нет так нет. :) Я в тулсете ноль, хотя после ваших ответов уже с палочкой. :yes: Спасибо.

2 DBColl:
Я писал авто-респаун НПСей для PW не через энкаунтеры, а по событию смерти. Лут их мне не был нужен, лиш resref и тэг. В итоге так и реализовал, как ты советывал, вешая DelayCommand на "системный" плэйс (чтоб ДМ мог его разломать и все респауны прекратились :lol:).
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 2 2004, 08:30
Сообщение #256


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

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



Shad Пропустил твой пост... тока нашел...
QUOTE (Shad @ Sep 24 2004, 04:32)
3. Как сделать, чтобы Item свободно левитировал в воздухе, и чтобы его из воздуха можно было взять?//Редакторе висит, в игре падает вниз.

Никак. Вся инфа об итемах и простых предметах на арене находится в вайлах локации. А изменение координаты Z можно лишь через тулсет. Но можно сделать невидимый объект на уровне тайлов, с возможностью ходить по нему. Тогда это будет невидимый объект - пъедестал, который будет тормозом для игрока. Есть еще способ, он проще но есть но. Делаешь в Махе два предмета с разными координатами и размерами. Например как картины в НВН. Основание далеко внизу а макушка видимая вверху, в виде pls объекта. Затем дестрой-крет в инвентаре твой итем. Но Объект будет активным скорее всего весь, так что тут свои изъяны.
А вообще, сделать что то в НВН красиво и без изврата не возможно.
QUOTE (Shad @ Sep 24 2004, 04:32)
4. Как сделать, чтобы работали фиты на Creature Weapon - Improved Critical, Overwhelming Critical, например. У меня не работают.
5. Как сделать, чтобы Creature Weapon наносил одновременно разные типы физического урона (Режущий и колющий и дробящий сразу).// Когда ставлю такие свойства на оружме, или эффект на существо - урон растет но остаетья того же типа, что на базовом предмете оружии.

Это все редактирование 2Да. Что именно и возможно ли все что ты просишь я не знаю. Но из логики работы с редактором могу сказать только одно. Любое действие, то бишь тот же урон, есть такой же Action как и многое другое. Следовательно он становится в очередь при механике боя, при расчете кубиков. И поэтому он возможен только один, а не вся куча критикалов. Ведь правила ДнД вшиты круто в движок и многое не выдрать.

И скажу на последок вот что. Многие вопросы твои сложны, но для модуля они не нужны. можешь спорить со мной можешь не спорить. Это вопросы человека залезшего в тулсет и решившего поковырять его круто для себя. Но реально они игроку будут до жопы. Ему наплвать на все критикалы и прочее, ему подавай атмосферу, сюжет, красивости и прочее. Те вещи что ты ковыряешь съедают львиную долю возможностей твоих как изготовоителя модуля. В итоге не останется сил на завершение и ты можешь погрязнуть в неосуществимых мечтах и планов. Подумай десять раз, стоит ли твой гемморой стольких свечь или нет?

п.с. Не обижайся, если я резковато ответил :yes: А вообще, чем занят? ;) Может поделишься инфой?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Elven king
сообщение Oct 4 2004, 17:53
Сообщение #257


Level 12
****

Класс: Мастер Оружия
Характер: Lawful Good
Раса: Эльф
NWN: Маппинг



Такая прозьбы, для опытных мастеров:
Кто исправит мой скрипт для отдыха, а то я уже голову сломал и так, и эдак пробовал, но нифига не выходит :( Помогите!
Вот собстна сам скрипт:
rest
CODE
void DestroyFirecamp(object oCampFire=OBJECT_SELF)
{
// Создаем обгорелое пятно на месте костра и гасим костер
 object oLandMark=CreateObject(OBJECT_TYPE_PLACEABLE,"plc_weathmark",GetLocation(oCampFire));
// Пятно исчезает через 120 секунд (2 реальных минуты, 1 игровой час). Менять по вкусу
 AssignCommand(oLandMark,DelayCommand(120.0,DestroyObject(oLandMark)));
 DestroyObject(oCampFire);
}

void ApplyRestEffect(object oTarget=OBJECT_SELF)
{
// Создаем эффекты сна. Функцию править по вкусу.
 effect eSleep=EffectBlindness();

 if (GetRacialType(oTarget)==RACIAL_TYPE_ELF)
 {
// Эльфы едят и пьют другое
object FindFood(object oTarget=OBJECT_SELF)
{
 object oEnum=GetFirstItemInInventory(oTarget);
 while (GetIsObjectValid(oEnum) && (GetTag(oELEnum)!="FOODELVEN"))
     oEnum=GetNextItemInInventory(oTarget);
 return oEnum;
}
object FindWater(object oTarget=OBJECT_SELF)
{
 object oELWATER=GetFirstItemInInventory(oTarget);
 while (GetIsObjectValid(oELWATER) && (GetTag(oELWATER)!="WATERELVEN"))
     oEnum=GetNextItemInInventory(oTarget);
 return oELWATER;
}


     // Эффект сна на 30 секунд. Менять по желанию.
 ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSleep,oTarget,30.0);
}

object FindFood(object oTarget=OBJECT_SELF)
{
 object oEnum=GetFirstItemInInventory(oTarget);
 while (GetIsObjectValid(oEnum) && (GetTag(oEnum)!="FOOD"))
     oEnum=GetNextItemInInventory(oTarget);
 return oEnum;
}
object FindWater(object oTarget=OBJECT_SELF)
{
 object oWATER=GetFirstItemInInventory(oTarget);
 while (GetIsObjectValid(oEnum) && (GetTag(oEnum)!="WATER"))
     oWATER=GetNextItemInInventory(oTarget);
 return oEnum;
}


makecamp (вешать на OnUsed дров)
CODE
#include "rest"

void main()
{
 object oPC=GetLastUsedBy();
 if (!GetIsPC(oPC)) return;
 object oTorch=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
 if (GetIsObjectValid(oTorch) &&
        (GetTag(oTorch) == "NW_IT_TORCH001") &&
// Флаг, висящий на области (например в таверне) и позволяющий отдыхать бесплатно
        (GetLocalInt(GetArea(oPC),"NoCampArea") != TRUE)) {
     object oFire=CreateObject(OBJECT_TYPE_PLACEABLE,"campfire",GetLocation(OBJECT_SELF));
     DestroyObject(OBJECT_SELF);
// Огонь гаснет через 900 секунд (15 реальных минут или 7,5 игровых часов)
// Менять по желаю
     AssignCommand(oFire,DelayCommand(900.0,DestroyFirecamp(oFire)));
 } else {
     CreateItemOnObject("wood",oPC);
     DestroyObject(OBJECT_SELF);
 }
}


dropwood (вешать OnUnAquiredItem модуля)
CODE
void main()
{
 object oPC=GetModuleItemLostBy();
 if (!GetIsPC(oPC)) return;
 object oItem=GetModuleItemLost();
 if (!GetIsObjectValid(oItem)) return;
 string sResRef=GetTag(oItem);
 if (sResRef=="WOOD")
 {
     if (GetIsObjectValid(GetAreaFromLocation(GetLocation(oItem)))) {
         CreateObject(OBJECT_TYPE_PLACEABLE,"woodpile",GetLocation(oItem));
         DestroyObject(oItem);
     }
 }
}

resteffect (вешать на OnRested модуля)

CODE
#include "rest"

void main()
{
 object oPC=GetLastPCRested();
 if (GetCurrentAction(oPC)!=ACTION_REST) return;
 int iFreeRest=GetLocalInt(GetArea(oPC),"FreeRestArea");
 if (iFreeRest) ApplyRestEffect(oPC);
 else {
     object oCampFire=GetNearestObjectByTag("campfire",oPC);
// нельзя отдыхать дальше 3 метров от костра (расстояние менять по вкусу)
     if (GetIsObjectValid(oCampFire) && (GetDistanceBetween(oPC,oCampFire)<=3.0))
{
         object oFood=FindFood(oPC);
         if (GetIsObjectValid(oFood)) {
             DestroyObject(oFood);
             ApplyRestEffect(oPC);
         } else {
             FloatingTextStringOnCreature("Мне надо перекусить",oPC,FALSE);
             AssignCommand(oPC,ClearAllActions());
         }
     } else {
         FloatingTextStringOnCreature("Я не могу отдыхать далеко от костра",oPC,FALSE);
         AssignCommand(oPC,ClearAllActions());
     }
 }
object oWATER=FindWater(oPC);
         if (GetIsObjectValid(oWATER)) {
             DestroyObject(oWATER);
             ApplyRestEffect(oPC);
         } else {
             FloatingTextStringOnCreature("Мне надо попить",oPC,FALSE);
             AssignCommand(oPC,ClearAllActions());
         }
     } else {
         FloatingTextStringOnCreature("Я не могу отдыхать далеко от костра",oPC,FALSE);
         AssignCommand(oPC,ClearAllActions());
     }
 }
}
object oELFood=FindFood(oPC);
         if (GetIsObjectValid(oFood)) {
             DestroyObject(oELFood);
             ApplyRestEffect(oPC);
         } else {
             FloatingTextStringOnCreature("Мне надо перекусить",oPC,FALSE);
             AssignCommand(oPC,ClearAllActions());
         }
     } else {
         FloatingTextStringOnCreature("Я не могу отдыхать далеко от костра",oPC,FALSE);
         AssignCommand(oPC,ClearAllActions());
     }
 }
object oELWATER=FindELWater(oPC);
         if (GetIsObjectValid(oELWATER)) {
             DestroyObject(oELWATER);
             ApplyRestEffect(oPC);
         } else {
             FloatingTextStringOnCreature("Мне надо попить",oPC,FALSE);
             AssignCommand(oPC,ClearAllActions());
         }
     } else {
         FloatingTextStringOnCreature("Я не могу отдыхать далеко от костра",oPC,FALSE);
         AssignCommand(oPC,ClearAllActions());
     }
 }
}
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
DBColl
сообщение Oct 4 2004, 21:06
Сообщение #258


4-х Кубовый
Иконки Групп

Класс: Некромант
Характер: Lawful Evil
Раса: Человек
NWN: Скриптинг [Sn]
Проклятие Левора



Хех, ты бы хоть написал, что ты от него хочешь... Хехехе... Во дал! А то, "кто исправит"! Я балдю! :lol: :lol: :crazy:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Aiwan
сообщение Oct 4 2004, 21:23
Сообщение #259


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

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



Алучше сделай тестовый модуль и выложи его. С итемами и скриптами. :yes:
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Elven king
сообщение Oct 4 2004, 22:55
Сообщение #260


Level 12
****

Класс: Мастер Оружия
Характер: Lawful Good
Раса: Эльф
NWN: Маппинг



Вобщем скрип на отдых...
Смысл скрипта вот в чем: игрок кладет из инвентаря дрова, на землю потом поджигает их факелом - появляется модель костра, потом возле костра игрок нажимает rest и тогда скрипт проверяет есть ли у PC еда и вода, если PC эльф, то скрипт проверяет есть ли эльфийская вода или эльфийский паек...
ЗЫ. Выложить модуль пока времени нету... Но постараюсь найти его. :)
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

147 страниц V  « < 9 10 11 12 13 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 8th July 2025 - 00:25