Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights Aurora Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74
Лито
Просто после моей личной провери была еще одна - тестировали двое, я и игрок. тогда я игрока выкинул из локи...Может эвент OnExit не срабатывает ни на ком, когда "выходящего" выкидывает ДМ из локи
Ferst
Срабатывает.

Что может быть проще, чем повесить на онЕнтер и онЕксит по строчке коментария в шаут и тестить?
SpeakString("ENTER", TALKVOLUME_SHOUT);
SpeakString("EXIT", TALKVOLUME_SHOUT);

Или вот так на каждого игрока не в шаут(менять по вкусу):

Neverwinter Script Source
object oPC   = GetExitingObject();
void main()
{
AssignCommand(oPC, SpeakString("EXIT"));
}


Сразу подводный камень:
При вселении в фамильяра(а также ДМом в непися) событие онЕксит срабатывает, а вот при вылизании онЕнтер не срабатывает!
Алексашка
Можно ли через скрипт присвоить фит? dntknw.gif
Вопрос не совсем по теме, но я уже замучился. У меня нет в папке NWN ни одного файла с расширением .2da Версия платинум лицензионка 1.63.8048 diablo.gif
Lex
1. нет
2. Я же говорил что в этом случае делать ужа наверное раза 3. Вскрывать бифы (все равно лучше работать на 2дашка оттуда, чем на тех, что в сорсах)

Открой НВН_экслорер (ссылка в теме "Ссылки"), там GameData ну дальше найдешь. 2да биф тебе нужен. Экспортируй оттуда все в папочку и усе. Работай
][umepa
А КАК МОЖНО ЗАМЕДЛИТЬ ХЕНЧМАНОВ , МОИ ХЕНЧМАНЫ ЭТО ЗОМБИ,НО ОНИ ОЧЕНЬ БЫСТРО ХОДЯТ Я БЫ СКАЗАЛ БЕГАЮТ biggrin.gif . В СВО-ВАХ СУЩЕСТВА СКОРОСТЬ ИЗМЕНИЛ НО ВСЁ РАВНО БЕГАЕТ КАК ЕГО ЗАМЕДЛИТЬ?
Lex
1. капс это некультурно.
2.
Neverwinter Script Source
effect EffectMovementSpeedDecrease(
    int nPercentChange
);

3. Они все равно на определенном растоянии будут к тебе джампаться. (там потому что ФорсФоллоу стоит)
Amellun
Срочно нужны скрипты, которые описаны ниже...
У кого есть какие-нибудь скрипты из ниже перечисленных, проше написать мне их в пм..
Скрипты:
1.Смерть. (когда умираешь, появляется табличка, ждать, респаун и выйти из игры. Если жать респаун снимается какое-то количество экспы и он воскрешается в какой-то точке) Как только чар умирает из него выпадает 1-а (Random) вещь которая в это время на него была надета..
2.Лут. Делается лока там 4-е сундука.., нужен скрипт для каждого сундука..
Мол, в первом вещи плохие, во втором лучше и т.д.. И когда вставляешь скрипт кого-то сундука в NPC (монстра), он автоматически выбирает 1-3 вещи
из этого сундука (которого скрипт вставлен) выподают в луте.. (Т.е. на выпадении вещей стоит Random, но выбирает их, из того сундука, которого скрипт вставлен в NPC (Монстра))
3.Палочка ДМ-а
4.Респаун монстров (через какое-то время)
5.Отдых (Для отдыха нужна 1-а тарелка еды + костер. Что бы развести костер нужны дрова и факел, факел может поджигать дрова, + при срубке дерева на котором опр. скрипт, появляются дрова..)
Заранее блогадарю..
Алексашка
QUOTE (Lex @ Apr 7 2005, 21:46)

2. Я же говорил что в этом случае делать ужа наверное раза 3. Вскрывать бифы (все равно лучше работать на 2дашка оттуда, чем на тех, что в сорсах)


Спасибо. Я потом понял где искать, но нечем было Биф распаковать. Сообщений так много, что найти нужное очень тяжело, даже с поисковиком. Даже если оно раза три повторялосьswoon.gif А вообще СПАСИБО ВАМ ВСЕМ!!! За этот сайт. Я тут столько нужной мне информации нашел.И еще больше той которую даже не искал потому, что не знал о ней. biggrin.gif
][umepa
lex а куда эту команду ставить?
как заставить непися переходит из локации в локацию(через тригер)?

Добавлено в [mergetime]1112984114[/mergetime]
и что такое ЮД?
Алексашка
QUOTE (][umepa @ Apr 8 2005, 21:10)
как заставить непися переходит из локации в локацию(через тригер)?

Добавлено в [mergetime]1112984114[/mergetime]
и что такое ЮД?

Непися или хенча? И зачем такая надобность? ЮД Это скрипт Userdeff
Lex
QUOTE (Amellun @ Apr 8 2005, 20:46)
Срочно нужны скрипты, которые описаны ниже...

перенес в эту тему. smile.gif
Читай правила раздела перед тем, как почтить или создавать темы.
Лито
][umepa Знаешь как заставить ходить НПС по вэйпоинтам в одной локации?
Делаешь точно так же, только эти же вэйпоинты расставляешь в разных локах. wink.gif
][umepa
эээ Лито не уловил swoon.gif в одной локе я умею ставить вэйпоинты а как в другую вейпоинт этого же непися вставить swoon.gif ? а можно ли заставить непися ходить по вэйпоитнам с замедлением т е подошел к вэйпоинту постоял определённое время и дальше?
Nokoll
Помогите народ, у меня скрипт, такой маленький злой карлик, спрятан за стеной, поставлен правильно лицом на ПК, я его даже скриптом поверачивал, никак!!Помогите он джампится и стоит боком, всёвремя боком. как его поставить в нужную сторону.
Чуть не забыл вот скрипт.
Neverwinter Script Source
void main()
{
object oPC = GetPCSpeaker();
object oPivi = GetObjectByTag("Piviga");
//--------------------------------------
effect eCutIn = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY);
effect eE1 = EffectVisualEffect(VFX_FNF_UNDEAD_DRAGON);
effect eE2 = EffectVisualEffect(VFX_FNF_SUMMONDRAGON);
effect eSt = EffectParalyze();
//---------------------------------------
object oCam2 = GetWaypointByTag("era2");
object oCam3 = GetWaypointByTag("era3");
//--------------------------------------
object oEFE = GetObjectByTag("EFFECT");
object oSU1 = GetWaypointByTag("SU1");
object oSU2 = GetWaypointByTag("SU2");
object oSU3 = GetWaypointByTag("SU3");
//-------------------------------------
DelayCommand(2.0, AssignCommand(oPC, ActionJumpToObject(oCam2)));
DelayCommand(2.0, AssignCommand(oPC, SetCameraFacing(90.0, 0.0, 90.0, CAMERA_TRANSITION_TYPE_MEDIUM)));
DelayCommand(3.0, AssignCommand(oPC, ActionForceMoveToObject(oSU1)));
DelayCommand(4.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,eE1,oEFE));
DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,eE2,oEFE));
DelayCommand(9.0, AssignCommand(oPivi, ActionJumpToObject(oEFE)));
DelayCommand(11.5,AssignCommand(oPivi,ActionSpeakString("Чиво зырете падлы ща всех драть буду мразюги")));
DelayCommand(16.0, AssignCommand(oPC, ActionJumpToObject(oCam3)));
DelayCommand(17.0, AssignCommand(oPC, SetCameraFacing(270.0, 0.0, 70.0, CAMERA_TRANSITION_TYPE_SNAP)));
DelayCommand(16.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,eSt,oPivi));
ActionDoCommand(AssignCommand(oPivi, SetFacingPoint(GetPosition(oPC))));
DelayCommand(19.5, AssignCommand(oPC, ActionStartConversation(oPC, "givi_talk2", FALSE,TRUE)));
}
Lex
вместо
Neverwinter Script Source
ActionDoCommand(AssignCommand(oPivi, SetFacingPoint(GetPosition(oPC))));


Эта строчка выбивается из скрипта. Откуда вообще этот бред?

меня на
Neverwinter Script Source
DelayCommand(12.0,AssignCommand(oPivi,ActionDoCommand(SetFacingPoint(GetPosition(oPC)))));



100 раз уже говорили что такое Action и как с ним работать. И тебе не раз объясняли...не надоело на одни и те же грабли наступать?
Лито
2][umepa, а ты создай нужное кол-во вэйпоинтов в одной локации, а потом по порядку переноси в нужные локи biggrin.gif
Лито
Я так и не разобрался с температурным скриптом Mileza
Может я им не так пользуюсь?
Ставлю на OnEnter локи скрипт. На локацию вешаю переменную int с названием Temperature и стоимостью -18(чтобы холодно было)
+
В скрипте написано 0 заменить на -1, это я тоже делаю, но все равно система не пашет censored.gif
ПОмогите разобраться. Да и другим будет полезно.
Lex
Так..поехали.
1. Я потестил скрипт и у меня сложилось впечатление, что он не работает.
2. Я слегка модифицировал сам скрипт, добавил пару моментов и вот что получилось:
- у костра теперь можно греться. Постоял рядом и ДС мороза упало
- при переходах между локами счетчик температуры не сбрасывается. Он сбрасывается при смене температурного режима. (холод-жара)

Neverwinter Script Source
void DealTemperatureDamage(object oPC)

{
   // Игрок без сознаниЯ
   if (GetCurrentHitPoints(oPC)<1) return;
   // Где находитсЯ игрок?
   object oArea=GetArea(oPC);
   // И какаЯ там температура?
   int iT=GetLocalInt(oArea,"Temperature");
   // Температура комфортабельна или не установлена
   // (значение 0 рассматриваетсЯ как неустановленнаЯ температура. Вместо 0 ставьте -1)
   if (((iT<=32) && (iT>=4)) || (iT==0))  return;
   // ОпределЯем переменные
   int iDamType;
   int iDamAmount;
   int iSaveType;
   float iInterval;
   object oFire;
   int iSlow=FALSE;
   int iFortSave;
   int i;
   effect eDam;
   // Носим тЯжелую броню и/или плащ?
   int iArmor  =  GetItemACValue(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))>5;
   int iCloak  =  GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC));
   // Сколько раз мы уже "стучали" по игроку?
   int iTimes=GetLocalInt(oPC,"TemperatureDamageTimer");
   int iDC=15+iTimes; // Подсчет DC
   if (iT>32)
        { // Жарко!
        FloatingTextStringOnCreature("Мне жарко!",oPC);
        iDamType=DAMAGE_TYPE_FIRE;
        if (GetLocalInt(oPC,"TemperatureType")==2)
            {
            iTimes = 0;
            iDC = 15;
            }
        SetLocalInt(oPC,"TemperatureType",1); // HOT
        iSaveType=SAVING_THROW_TYPE_FIRE;
        iDamAmount=d4();
        if (iArmor) iDC=iDC+4;
        if (iCloak) iDC=iDC+4;
        if (iT>60)
            {
            eDam=EffectDamage(d6(),iDamType);
            ApplyEffectToObject(DURATION_TYPE_INSTANT,eDam,oPC);
            DelayCommand(2.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eDam,oPC));
            DelayCommand(4.0,ApplyEffectToObject(DURATION_TYPE_INSTANT,eDam,oPC));
            iSlow=TRUE;
            }
        else if (iT>43)
            { // Очччень жарко!
            FloatingTextStringOnCreature("Очччень жарко!",oPC);
            iSlow=TRUE;
            }
        else
            { // Просто жарко
            iInterval=120.0;
            }
        }
    else if (iT<4)
       {
       oFire=GetNearestObjectByTag("ku_campfire",oPC);
       if ((GetIsObjectValid(oFire)) && (GetDistanceBetween(oFire,oPC)<5.0))
           {
           iDC=0;
           if (iTimes>=3)
               SetLocalInt(oPC,"TemperatureDamageTimer",iTimes-3);
           FloatingTextStringOnCreature("Отогреваюсь",oPC);
           }
       else
           {
           if (GetLocalInt(oPC,"TemperatureType")==1)
               {
               iTimes = 0;
               iDC = 15;
               }
           SetLocalInt(oPC,"TemperatureType",2); // COLD
           iDamType=DAMAGE_TYPE_COLD;
           iSaveType=SAVING_THROW_TYPE_COLD;
           iDamAmount=d6();
           FloatingTextStringOnCreature("Мне холодно!",oPC);
           if (iT<-18)
               { // Жуткий мороз
               if (iArmor) iDC=iDC+4;
               if (iCloak) iDC=iDC-4;
               iSlow=TRUE;
               }
           else
               { // Very cold
               if (iCloak) iDC=0;
               }
           }
       }
   if (iDC>0)
       {
       iFortSave=FortitudeSave(oPC,iDC,iSaveType);
       SetLocalInt(oPC,"TemperatureDamageTimer",iTimes+1);
       if (iFortSave==0)
           {
           ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(iDamAmount,iDamType),oPC);
           if (iSlow) ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSlow(),oPC,6.2);
           }
       }
}

void main()
{
   object oPC=GetFirstPC();
   AssignCommand(oPC,DealTemperatureDamage(oPC));
}

Ставится на ХБ МОДУЛЯ. (или какого-нить особого объекта)

Не забудте поставить на локациях локалки Temperature со значениями.
Лито
Сенкс Lex.
Полет нормальный...
Правда не понял, как можно спастись от мороза, одеждой...

Мне интересно, можно ли наложить на игрока эффект ранение.
То есть есть проклятый меч. игрок берет его в руки и ему наносится урон...но я не нашел эффекта ранения, константы тоже нет, хотя я мог проглядетьunsure.gif
Lex
QUOTE (Лито @ Apr 12 2005, 13:30)
Правда не понял, как можно спастись от мороза, одеждой...

правь это по своему усмотрению
Ferst
QUOTE
Ставится на ХБ МОДУЛЯ. (или какого-нить особого объекта)

Даже если все верно работает, то вариант совершенно не приемлем для онлайн модулей.

А жаль. Я смогу его переделать, если мне понадобится, но вот остальные, как понял, с трудом... Сам не смогу пока смотреть как переделать - море и так скриптов smile.gif
Lex
Да, это не для мультиплеер модулей, это вариант ессно для сингла. (я не шардовик)
И ессно что этот скрипт нуждается в корректировке и улучшении в части одежды. Я не ставил себе целью его кардинально улучшить, надо было сделать его рабочим. smile.gif
Переделать под мультик можно, надо просто подумать немного.
Даже если и переделать, то имхо (я не шардовик, повторюсь. Это только мое предположение) грузновато для серевера такое делать. Всех игроков просчитывать и дамажить, если надо. Притом делать это довольно часто..

ГЫ: поправил баг с бюпом денег у торговца?
Алексашка
У меня в тулсете помимо свойства "Активировать предмет", "Использовать собственную силу" есть еще "Поговорить с предметом" biggrin.gif Пробовал при этом свойстве предмета готовый скрипт, который работает при активации предмета, не пашет. Какая комнда этим свойством управляет? dntknw.gif
Aiwan
Алексашка у тебя какой-то перевод. Говори на английском все подскажем. Русский тулсет закинь, если не хочешь мертвого модуля по прошествии времени...
Лито
Можно наверное сделать суб-арею для каждой локи...но это слишком муторно...
Можно и на OnEnter повесить снова, по другому я не знаю как улучшить.
][umepa
ээээ Лито я слишком ещё новичок но я не знаю как переносить вэйпойнты из локу в локу мож поможешь? swoon.gif
Lex
ctrl+c
ctrl+v
Добавлено в [mergetime]1113408477[/mergetime]
Не, ну народ вы хоть сами думайте чуток. biggrin.gif biggrin.gif
][umepa
сенки biggrin.gif
Алексашка
QUOTE (Aiwan @ Apr 12 2005, 22:46)
Алексашка у тебя какой-то перевод. Говори на английском все подскажем. Русский тулсет закинь, если не хочешь мертвого модуля по прошествии времени...

Свойство предмета: Cast spell: Talk to(Unlimited Uses\Day) Пробовал скрипт на OnActivateItem, не работает. Скрипт ниже.

Neverwinter Script Source
object oItem = GetItemActivated();
object oActivator = GetItemActivator();
object oUser = oActivator;
object oTarget = GetItemActivatedTarget();
string sRes = GetResRef(oItem);
location lLoc = GetItemActivatedTargetLocation();
location lTarget = lLoc;
void main()
{
if (GetIsPC(oActivator)&&(GetTag(oItem)=="az_sword1"))
  {
        if (GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oActivator)!=oItem)
            AssignCommand(oActivator,ActionEquipItem(oItem,INVENTORY_SLOT_RIGHTHAND));
        DelayCommand(1.0,ExecuteScript("sword_skript2",oActivator));
  }
}


P.S. Больше года уже. 23мб, 130000 слов, больше 1000 скриптов (5\6 "косых" остальные ненужные) biggrin.gif Пока жив модуль. Это же только диалог русский, а все остальное "родное". yes.gif
Добавлено в [mergetime]1113420384[/mergetime]
Взял готовый скрипт отдыха в полевых условиях. (Аваддон) Немножко подредактировал под свои нужды.
Все работает ОК. Сначала я добавил отдыхать только в рест зонах все работало нормально, но герои начали разводить костер в гостиницах biggrin.gif Куда строчку впихнуть проверяющую условие гостиница или улица? Скрипт вписать не могу, я с чужого компа. Он есть на вашем сайте. Я изменял только эффекты и внес строку
Neverwinter Script Source
if(GetLocalInt(oPC, "RESTZONE") !=1)

Ну и далее отмена отдыха с фразой типа: "Найди место поприличнее"
Lex
QUOTE (Алексашка @ Apr 13 2005, 23:14)
Свойство предмета: Cast spell: Talk to(Unlimited Uses\Day)

поставь уникальное свойство, точно будет работать.

2. Я бы проверял наличие в локации валидного вэйпоинта
Neverwinter Script Source
if (GetIsObjectValid(GetNearestObjectByTag("WP_TAVERNREST",oPC))) // если в таверне
Ferst
QUOTE (Aiwan @ Apr 12 2005, 22:46)
Русский тулсет закинь, если не хочешь мертвого модуля по прошествии времени...

Это к чему?
Алексашка
QUOTE (Lex @ Apr 13 2005, 23:08)
поставь уникальное свойство, точно будет работать.

2. Я бы проверял наличие в локации валидного вэйпоинта 
Neverwinter Script Source
if (GetIsObjectValid(GetNearestObjectByTag("WP_TAVERNREST",oPC))) // если в таверне

С уникальным свойством у меня работает. Мне было интересно, что с этим можно сделать. yes.gif

Что писать я знаю, я спрашивал где вписать. yes.gif Впрочем это уже неважно. Нашел второй скрипт Аваддона, на отдых в гостинице. Слепил из двух один. Красиво отдыхают. biggrin.gif Мне бы еще кто -нибудь скрипт на крафтинг так доходчиво расписал. Интересно же не просто скопировать, а понять, для чего строчки написаны. yes.gif Работающий скрипт привожу ниже. Может быть кому сгодиться. yes.gif
Neverwinter Script Source
////////////////////////////////////
//////Created By: Avaddon///////////
//////Date: 04. 12. 2004////////////
//////Подкорректирован Алексашка////
///////Дата: 14.04.2005/////////////
///////////////////////////////////
#include "nw_i0_tool"
#include "nw_i0_generic"
#include "lib_colortext"
void main()
{
effect eBlack = EffectVisualEffect(VFX_DUR_BLACKOUT);
effect eZzz =  EffectVisualEffect(VFX_IMP_SLEEP);
effect eSlow = EffectSlow();

object oPC = GetLastPCRested();


object oBed = GetNearestObjectByTag("BED",oPC);


object oSleep = GetNearestObjectByTag("SLEEP",oPC);


object oArmor =GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
object oBoots = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
object oHelmet = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
object oBelt = GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
object oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
object oArms = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);


string sFree = GetTag(GetArea(oPC));
string sArmor = GetLocalString(oPC,"armor");
string sRightHand = GetLocalString(oPC,"right");
string sLeftHand = GetLocalString(oPC,"left");
string sHelmet = GetLocalString(oPC,"helmet");
string sBoots = GetLocalString(oPC,"boots");
string sBelt = GetLocalString(oPC,"belt");
string sCloak = GetLocalString(oPC,"cloak");
string sArms = GetLocalString(oPC,"arms");


    if(GetStringLeft(sFree,4)=="free")
    {

        if(GetLocalInt(GetLastPCRested(),"on_bed")!=1)
        {

        SetLocalString(oPC,"armor",GetTag(oArmor));
        SetLocalString(oPC,"right",GetTag(oRightHand));
        SetLocalString(oPC,"left",GetTag(oLeftHand));
        SetLocalString(oPC,"helmet",GetTag(oHelmet));
        SetLocalString(oPC,"boots",GetTag(oBoots));
        SetLocalString(oPC,"belt",GetTag(oBelt));
        SetLocalString(oPC,"cloak",GetTag(oCloak));
        SetLocalString(oPC,"arms",GetTag(oArms));


        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oArmor)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oRightHand)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oLeftHand)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oHelmet)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oBoots)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oBelt)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oCloak)));
        DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oArms)));


            if (GetLastRestEventType()==REST_EVENTTYPE_REST_STARTED)
            {

            AssignCommand(oPC,ClearAllActions());


            AssignCommand(oPC,ActionMoveToObject(oBed));


            DelayCommand(2.0,AssignCommand(oPC,ActionJumpToObject(oSleep)));


            DelayCommand(2.5,SetLocalInt(oPC,"on_bed",1));


            DelayCommand(3.0,AssignCommand(oPC,ActionRest()));


            DelayCommand(3.5,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eZzz,oPC,10.0));
            DelayCommand(4.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBlack,oPC,60.0));
            }
        }
    }
    else
    {
    object oPC = GetLastPCRested();
    object oCamp = GetNearestObjectByTag("camp",oPC);
    object oBedroll = GetNearestObjectByTag("krovatka",oPC);
    effect eSleep = EffectVisualEffect(VFX_IMP_SLEEP);
    effect eBlind = EffectBlindness();
    effect eDisease = EffectDisease(DISEASE_SOLDIER_SHAKES);

  if (GetLocalInt(oPC, "RESTZONE") != 1)
  {
    AssignCommand(oPC,ClearAllActions());
    FloatingTextStringOnCreature("Это неудачное место для лагеря. Нужно поискать место поукромнее.",oPC,FALSE);
    }
    else
    {
if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
{
if(GetIsObjectValid(oCamp)!=TRUE)
{
  FloatingTextStringOnCreature("Надо бы развести костер",oPC,FALSE);
  AssignCommand(oPC,ClearAllActions());
}
  else
  {
  if(GetDistanceBetween(oPC,oCamp)>3.0)
  {
  FloatingTextStringOnCreature("Зачем тогда костер? Если ты отправляешь меня спать так далеко от него.",oPC,FALSE);
  AssignCommand(oPC,ClearAllActions());
  }
  else
  {
if (HasItem(oPC,"bedroll")==TRUE)
{
if (HasItem(oPC,"NW_IT_MMIDMISC05")==TRUE)
{
CreateObject(OBJECT_TYPE_PLACEABLE,"krovatka",GetLocation(oPC));
DestroyObject(GetItemPossessedBy(oPC,"NW_IT_MMIDMISC05"));
DestroyObject(GetItemPossessedBy(oPC,"bedroll"));
SetLocalInt(oPC,"slept",1);
DelayCommand(1.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSleep,oPC,30.0));
DelayCommand(2.0, FadeToBlack(oPC, FADE_SPEED_SLOW));
}
else
{
FloatingTextStringOnCreature("Есть охота! На голодный желудок не уснешь.",oPC,FALSE);
AssignCommand(oPC,ClearAllActions());
}
}
else
{
FloatingTextStringOnCreature("Куда делась моя подстилка? На голой земле я спать не буду.",oPC,FALSE);
AssignCommand(oPC,ClearAllActions());
}
}
  }
}
if (GetLastRestEventType() == REST_EVENTTYPE_REST_FINISHED)
  {
  FadeFromBlack(oPC, FADE_SPEED_SLOW);
  SetLocalInt(oPC,"slept",0);
  CreateItemOnObject("bedroll", oPC,1);
  SetTime(GetTimeHour() + 8, GetTimeMinute(), GetTimeSecond(), GetTimeMillisecond());
  DelayCommand(1.0, AssignCommand(oPC, SpeakString(colorText("Прошло 8 часов", TXT_COLOR_GREEN))));
  DelayCommand(1.5, DestroyObject(oCamp));
  DelayCommand(2.5, DestroyObject(oBedroll));
  if (GetWeight(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))>20)
  {
  effect eDamage = EffectDamage(d20(1) + 20);
  ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oPC);
  FloatingTextStringOnCreature("Спать в доспехах было плохой идеей.",oPC,FALSE);

  }
  }

}
}


  //////////////////////////////////////////////////////////////////////
  /*Если Отдых Окончен или Прерван в арене с тегом начинающимсЯ с "free"
  и игрок находитсЯ на кровати.*/
/////////////////////////////////////

    if(GetStringLeft(sFree,4)=="free" && GetLocalInt(oPC,"on_bed")==1)
    {
        //Если Отдых Завершен
        if (GetLastRestEventType()==REST_EVENTTYPE_REST_FINISHED)
        {
        //Одеваем игрока обратно (теги предметов бывших на нем одетыми читаем из локалок игрока)
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sArmor), INVENTORY_SLOT_CHEST)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sRightHand), INVENTORY_SLOT_RIGHTHAND)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sLeftHand), INVENTORY_SLOT_LEFTHAND)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sBoots), INVENTORY_SLOT_BOOTS)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sHelmet), INVENTORY_SLOT_HEAD)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sBelt), INVENTORY_SLOT_BELT)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sCloak), INVENTORY_SLOT_CLOAK)));
        DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sArms), INVENTORY_SLOT_ARMS)));

        //Встаем с кровати
        AssignCommand(oPC,ActionJumpToObject(oBed));

        //Стираем с игрока все локалки предметов и того что он был на кровати.
        DeleteLocalInt(oPC,"on_bed");
        DeleteLocalString(oPC,"armor");
        DeleteLocalString(oPC,"right");
        DeleteLocalString(oPC,"left");
        DeleteLocalString(oPC,"helmet");
        DeleteLocalString(oPC,"boots");
        DeleteLocalString(oPC,"belt");
        DeleteLocalString(oPC,"cloak");
        DeleteLocalString(oPC,"arms");

        //Убираем эффекты сна
        RemoveEffect(oPC,eBlack);
        SetTime(GetTimeHour() + 8, GetTimeMinute(), GetTimeSecond(), GetTimeMillisecond());
        DelayCommand(1.0, AssignCommand(oPC, SpeakString(colorText("Прошло 8 часов", TXT_COLOR_GREEN))));

        }//Заканчиваем условие "Если Отдых Завершен

}
}
fali
Давно не была, решила заглянуть. =)
Заодно и вопросы новые задать, пока еще не заснула. %)

Надеюсь, что не ошибаюсь с темой... Итак. :)

Вопросы:
1. Как сделать переключатель музыки на локации? Минимум -- включить/выключить музыку, максимум -- с выбором из нескольких заранее определенных мелодий. :) Лучше всего было бы в двух вариантах -- для предмета в инвентаре и для переключателя на локации. =) Хотя и за один, любой, буду благодарна. :)
2. Как сделать "предмет", с помощью которого можно было бы провести что-то вроде соревнования? Объясняю на примере. :) Есть мишень. Есть несколько лучников. Каждый выпускает по стреле, а мишень в ответ выдает результат -- чей выстрел точнее. Такое можно сделать? :)
3. Продолжение второго. =) То же самое, но, к примеру, стол для борьбы... Эмс... Как там она называется... Ну, когда руку противника к столу припечатать стараются. %) В обчем, на силу проверка идет. Это чтобы сообразить, чем такие соревновательные предметы будут отличатся между собой. :)
4. Не знаю даже, возможно ли такое. =) Тоже переключатель, навроде первого пункта. Но при переключении изменяется не музыка, а сама локация. Например, добавляются столы-стулья, иллюминация разная. =) Впрочем, музыку тоже сюда можно приделать. =) Это возможно? :)

Заранее благодарю за любую помощь. :)
Buldog
1. С музыкой еще не работал, сказать затрудняюсь.
2. Ну с мишенью можно по количеству дамага попробовать сделать, а так в НВН либо попал, либо нет...
3. Армреслинг она называется smile.gifХм, тут даж незнаю, можно попробовать на стол вешать как локал обжект одного из соревнующихся, и когда подойдет второй сравнить их силу, у кого больше, тот и соответственно победил, можно еще довавить кубик, тот же д20, всетаки не всегда решает только сила. Ну еще поставить проверку на расстояние, что бы не соревновались участники в разных локациях smile.gif
4. Это можно, заготовить необходимых плэйсейблов и места, куда их расставлять, а потом, при использовании рычага, объеты "расставлять" куда надо.

Скриптов приложить не могу, ничего такова еще не делал smile.gif
Lex
QUOTE (fali @ Apr 15 2005, 06:06)
1. Как сделать переключатель музыки на локации? Минимум -- включить/выключить музыку, максимум -- с выбором из нескольких заранее определенных мелодий. smile.gif Лучше всего было бы в двух вариантах -- для предмета в инвентаре и для переключателя на локации. pardon.gif Хотя и за один, любой, буду благодарна. smile.gif

вроде бы нельзя. Гляну что там по этому поводу.
QUOTE (fali @ Apr 15 2005, 06:06)
2. Как сделать "предмет", с помощью которого можно было бы провести что-то вроде соревнования? Объясняю на примере. smile.gif Есть мишень. Есть несколько лучников. Каждый выпускает по стреле, а мишень в ответ выдает результат -- чей выстрел точнее. Такое можно сделать? smile.gif

только если дамаж смотреть, но это не очень верно. Так как сила разная.
QUOTE (fali @ Apr 15 2005, 06:06)
3. Продолжение второго. pardon.gif То же самое, но, к примеру, стол для борьбы... Эмс... Как там она называется... Ну, когда руку противника к столу припечатать стараются. wacko.gif В обчем, на силу проверка идет. Это чтобы сообразить, чем такие соревновательные предметы будут отличатся между собой. smile.gif

Buldog хороший вариант привел.
QUOTE (fali @ Apr 15 2005, 06:06)
4. Не знаю даже, возможно ли такое. pardon.gif Тоже переключатель, навроде первого пункта. Но при переключении изменяется не музыка, а сама локация. Например, добавляются столы-стулья, иллюминация разная. pardon.gif Впрочем, музыку тоже сюда можно приделать. pardon.gif Это возможно? smile.gif

Можно, но немного мутновато и с ограничениями.

Вариант 1 как описал Buldog, те креатить плейсы в поинтах. Но это мутно.

Вариант 2 - обставь локу как надо. Плейсы все, что нужны. Теперь те, которые должны появиться позже уничтожь (в предмете закладка advanced там есть состояния. В тч там есть и destroyed). Они окажутся под локацией, нивидимые для игроков. Теперь когда надо, вытаскиваем их оттуда посредством например ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE)
Friedrich
2 fali

1. Для смены музыки используй
void MusicBackgroundChangeDay(object oArea, int nTrack);
void MusicBackgroundChangeNight(object oArea, int nTrack);
и проч. Music* функции.
oArea - арена на которой нужно поменять музыку.
nTrack - номер трека, соответствует номеру строки в ambientmusic.2da, также можно использывать константы TRACK_*.

2-3. Ничего удовлетворительного на ум не приходит. Чеки, конечно, можно какие угодно накидать, но обставить хоть сколь-либо вразумительной анимацией...
Как например такой вариант. Сделать, типа, цепь с динамометром. Участники по очереди тянут цепь, а в локалки записывается результат:
d20()+GetAbilityModifier(ABILITY_STRENGTH, oUser);
У кого больше, тот и выиграл.

4.
QUOTE (Lex @ Apr 15 2005, 17:56)
(в предмете закладка advanced там есть состояния. В тч там есть и destroyed). Они окажутся под локацией, нивидимые для игроков. Теперь когда надо, вытаскиваем их оттуда посредством например ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE)

Классная вещь! А как ты об этом узнал? И эти "уничтоженные" объекты спокойно находится посредством, н.п. GetObjectByTag()?

Похоже, это будет оптимальный вариант. И, чтобы лишний раз не напрягаться, лучше, наверное, дать всем таким скрытым объектам один и тот же тег и актировать их из цикла:
Neverwinter Script Source
string sTag = "SOME_HIDDEN_OBJECT";
int i = 0;
object oPlc;
while( GetIsObjectValid(oPlc = GetObjectByTag(sTag, i++)) )// wink.gif
{
   AssignCommand(oPlc, ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));
}

Добавлено в 20:52
Кстати, нечто подобное (изменение музыки, наложение визуальных эффектов, добавление плейсаблов) делали биовары в 3-й главе HotU, при одевании игроком кольца спящего человека. См. скрипт OnPlayerEquipItem модуля XP2_Chapter3 и инклюд hx_inc_ring (кажется).
Там они, вроде, расставляли вейпоинты и давали им имена объектов, которые нужно будет креэйтить:
CreateObject(OBJECT_TYPE_PLACEABLE, GetName(oWP), GetLocation(oWP));
Lex
QUOTE (Friedrich @ Apr 15 2005, 21:39)
void MusicBackgroundChangeDay(object oArea, int nTrack);
void MusicBackgroundChangeNight(object oArea, int nTrack);

Буду знать.

QUOTE (Friedrich @ Apr 15 2005, 21:39)
И эти "уничтоженные" объекты спокойно находится посредством, н.п. GetObjectByTag()?

да.
fali
Прошу прощения, что не сразу отвечаю -- не получилось раньше. :)

Мм... Наверное, нужно было таки в другой теме спрашивать. =) Я ведь скриптами не занимаюсь в общем-то... Самое большое, могу по аналогии переделать какой-то уже готовый скрипт, а написать свой, пусть даже на основании уже данных переменных и функций (или как это называется), у меня вряд ли получится. :) Я, конечно, попробую разобраться, что и как с уже данными ответами можно сделать... Но если кто-то сможет дать уже готовый скрипт, как пример -- я буду весьма и весьма благодарна. =)

Про соревнования... Анимация, в общем-то, не нужна. Можно и просто обычную цель поставить для антуражу, пусть стреляють. =) Главный вопрос в том, как именно определить наиболее меткого. :) По наносимому урону... Так вроде это не совсем меткость, хотя и от нее зависит... Есть ведь дайсометы разные, которые бросают чеки на проверку способностей и навыков. Что в данном случае лучше проверять? И как эту проверку сделать, чтобы её было удобно делать и чтобы всем результат был виден? Впрочем, вариант с цепью тоже вполне может подойти. Выстрелил по цели, дернул цепь -- результат показан, а игроки уже сами цифры сравнят, чтобы решить, кто был точнее. =)
Со столом... В общем-то, тоже не обязательно проверялось наличие рядом двух соперников. Игроки могут и сами между собой разобраться, кто подойдет и на словах обыграть борьбу. Но им в помощь нужно дать возможность бросать чеки на силу/ловкость/тренированность (или что еще можно задействовать?), которые могли бы подсказать им, как идет борьба. :) К примеру, каждый делает несколько таких чеков во время борьбы, отыгрывая результаты, а на последнем уговоренном (третьем или пятом, к примеру, или после какого-то критического броска) -- считают борьбу уже завершенной.

Про изменение локации... Большое и искреннее сенькс. =) Действительно, такой логичный и простой на вид вариант. %) Ещё бы кто-нибудь дал готовый скрипт, который все эти уничтоженные объекты делал видимыми... =)

Большущее спасибо всем уже ответившим. :) Даже если и не получится сейчас со скриптами, я все это сохраню, и потом попробую разобраться, как это делается. Всё равно, наверняка, когда-нибудь нападёт охота изучить скриптописание, хотя бы основы... Если не сейчас, так тогда разберусь. =)
Lex
Хм...с лучниками можно так.
Есть мишень и кто-то в нее стреляет. (кстати надо еще подумать и о дистанции). Результат - мишень выдает кол-во очков, которые набрал игрок. Можно их например суммировать. И сравнивать с суммами других игроков....
Думаю, что с мишенями я сделаю системку...самому как раз что-то такое надо.

С силовыми упражнениями думаю модификатор силы, половина модификатора ловкости, половина модификатора инты и модификатор (тут надо придумать, как считать) дисциплины ну и дайс.
Те подходит игрок к столу, щелкает на него, теперь щелкает второй. Пишем результат и какой-нить интересный комент. (типа невероятным усилием игрок А поверг игрока Б и прочее..можно и юморные комменты замутить). Каждому участнику отправить лог с суммой его, чтобы знал smile.gif

Изменение локации - сделаю тебе минимодуль, глянешь, как там все.

Aiwan
QUOTE (fali @ Apr 17 2005, 16:49)
Большущее спасибо всем уже ответившим. smile.gif Даже если и не получится сейчас со скриптами, я все это сохраню, и потом попробую разобраться, как это делается. Всё равно, наверняка, когда-нибудь нападёт охота изучить скриптописание, хотя бы основы... Если не сейчас, так тогда разберусь. pardon.gif

Ну вот так всегда biggrin.gif Мы то надеялись...
Алексашка
QUOTE (Lex @ Apr 17 2005, 14:56)
Хм...с лучниками можно так.
Есть мишень и кто-то в нее стреляет. (кстати надо еще подумать и о дистанции). Результат - мишень выдает кол-во очков, которые набрал игрок. Можно их например суммировать. И сравнивать с суммами других игроков....

У меня есть готовый скрипт. Написан правда для другого был, но принцип похожий. Можно переделать под свои нужды. Мишень как создание. С эффектом парализации. А то бывали смешные случаи, когда мишень начала гоняться за игроком. biggrin.gif Скрипт писал давно, когда русского языка в тулсете небыло. Нуждается в оптимизации, но руки не доходят. Считает именно попадания, а не повреждения.
Neverwinter Script Source
#include "nw_i0_tool"
void main()
{
    object oAttacker = GetLastAttacker();

//* Should only register if hit with a ranged weapon
if( GetIsPC(oAttacker))
  {

    if(GetWeaponRanged(GetLastWeaponUsed(oAttacker)))
    {
        SpeakOneLinerConversation();

            if(GetDistanceToObject(oAttacker) > 12.0)
            {
                if(GetLocalInt(GetModule(),"archer_trening")< 100)
                {
                    SetLocalInt(GetModule(),"archer_trening",(GetLocalInt(GetModule(),"archer_trening")+1));
                    if(GetLocalInt(GetModule(),"archer_trening")== 100)
                  {

                    effect eDamage = EffectDamage(5000);
                    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, OBJECT_SELF));

                    SetLocalInt(GetModule(), "archer_trening", 0);

                    RewardPartyXP(500, oAttacker);
                  }
                }
                else
                {

                }
                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("arch_uspeh",oAttacker));

            }
            else
            {
                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("blisko",oAttacker));
            }
            }
            else
            {
                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("bow",oAttacker));
            }
            }
        else
            {
                {
        int nHeal = GetMaxHitPoints(OBJECT_SELF) - GetCurrentHitPoints(OBJECT_SELF);
        effect eHeal = EffectHeal(nHeal);
        {
        if (nHeal > 0)
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, OBJECT_SELF);
        }
        }

                AssignCommand(GetNearestObjectByTag("Olodrin"),SpeakOneLinerConversation("signboard11",oAttacker));
            }

        }

Добавлено в [mergetime]1113747557[/mergetime]
Подскажите, как правильно сделать проверку по времени. Я подхожу к неписю, а он говорит приходи через 3 часа. Как запомнить время в которое он мне это сказал и как проверить, что три часа прошло. shout.gif
Добавлено в [mergetime]1113748392[/mergetime]
Можно например поставить переменную на 20 попаданий. Чья мишень первой получает 20 попаданий присваивает переменную 1, кто второй переменную два и т.д. На полу я опытным путем рисовал черту на дистанции 15 и если игрок был на шаг ближе, то попадание не засчитывалось, а тренер кричал: "Отойди подальше". Да там еще строка лишняя есть. Я ее делал, чтобы хенчманы, по скудоумию своему, зря в мишень не бились. lol.gif
Tiger Greyhawk
QUOTE (Алексашка @ Apr 17 2005, 18:15)
Подскажите, как правильно сделать проверку по времени. Я подхожу к неписю, а он говорит приходи через 3 часа. Как запомнить время в которое он мне это сказал и как проверить, что три часа прошло.

Есть функция int GetTimeHoure(). А потом делаешь проверку через переменную.
Есть ведь Lexicon на это. Или я совсем не так понял твою "проблему" blush.gif
Ты, вроде, более-менее разбираешься же. По таким вопросам предлагаю в чат. Гораздо операивнее решится.
Lex
в пределах одного дня через GetTimeHoure(), но если чел придет на сдел. день в тот же час, то облом.

Надо преобразовывать месяц, день и час в часы и запомнить. Потом сравнивать с тамки же преобразованием. Разница больше 3-х значить прошло более 3-х часов.
У меня в Тсурле все временные штуки на этом построены
RiPPeR
Возникла проблема с "порядком действий"
Чтобы я и не делал, нифига не работает!
Еа 99% уверен что это баг NWN, на как его обойти?

oPC и oTarget правильные объекты 100%
Строка об атаке не работает sad.gif.
Хотя катсцен работает.

Neverwinter Script Source
effect eCutS = EffectCutsceneDominated();
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); // что-нибудь
                                                                                                            // красивое
effect eLink = EffectLinkEffects(eMind, eCuts);

object oTarget = GetAttackTarget(oPC);

ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.00);

//DelayCommand(6.00,AssignCommand(oPC,ClearAllActions(TRUE)));
AssignCommand(oPC,DelayCommand(6.00,ActionAttack(oTarget)));
Lex
\\ перенес в соотв. тему

Всех предупреждаю последний раз. Кто не видел, не мои проблемы.

КТО НЕ ОЗНАКОМИТСЯ С ПРАВИЛАМИ И НАЧНЕТ ПОСТИТЬ И СОЗДАВАТЬ ТОПИКИ ПОЛУЧИТ ПРЕД.
RiPPeR
Извиняюсь, но тут вопросы по скриптам, а у меня скорее баг движка.
Lex
нет. Никто за несколько лет работы там новых багов не нашел. smile.gif (известные баги описаны в лексиконе. И это не движковые баги, а просто кривая работа нескольких функций)
Скрипт скорее всего криво написан. smile.gif
Ты напиши, где стоит, что он должен делать и что происходит. И по подробнее. smile.gif

RiPPeR
Задержка на 6 сек, потом атака того, кого бил до этого
Добавлено в [mergetime]1113832097[/mergetime]
Все блин, методом встраивания проверок локал интов, брания локал обжектов и других премудростей в скрипт default, все таки заработало. crazy.gif crazy.gif crazy.gif
Алексашка
QUOTE (Lex @ Apr 18 2005, 08:31)
в пределах одного дня через GetTimeHoure(), но если чел придет на сдел. день в тот же час, то облом.

Надо преобразовывать месяц, день и час в часы и запомнить. Потом сравнивать с тамки же преобразованием. Разница больше 3-х значить прошло более 3-х часов.
У меня в Тсурле все временные штуки на этом построены

Понял свою проблему. biggrin.gif "Три часа" я писал для примера. У меня было 18 часов. И проблемка была именно с переходами в следующий день. Нужно было всего лишь скопировать инклюд из Левора yes.gif и все заработало. Lex "виноват" yes.gif Тсурл никак не начну проходить. Времени не хватат. dntknw.gif
Лито
Пожертвуйте в базу скриптов, систему опыта blush.gif . Со всякими коэффицентами для разных классов. Наверняка кто нибудь писал для своих модулей

Еще хотелось бы знать, можно ли редактировать стандартную НВН-скую систему опыта(только не надо мне говорить про ползунок в св-ах модуля.)

З.Ы. Айван нарисуй *умоляющий* смайлик smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.