Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
sKaa
попробуй так
Neverwinter Script Source
float fDelay;
nDam1 = d10(20);
nDam2 = d10(5);
fDelay = IntToFloat(Random(2+1));
eDam = EffectDamage(nDam1, DAMAGE_TYPE_FIRE);
eDam2 = EffectDamage(nDam2, DAMAGE_TYPE_MAGICAL);
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
fDelay = IntToFloat(Random(2+1));
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam2, oTarget));
Rowan
Здравствуйте! Я в скриптинге совсем новичок, поэтому, возможно, спрошу глупость, но я пытаюсь разобраться с этим уже второй день и ничего не получается crazy.gif Гугл перерыла, туториалы перебрала, уже сил нет... короче, мне надо заставить непися (НВН1) спавниться с EffectKnockdown -

Код
effect eEffect;
eEffect = EffectKnockdown();

ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, oTarget);


- как-то так.
Это вроде как-то можно сделать через опцию Variables (правой кнопкой по имени непися)? В конце дефолтного скрипта onSpawn я этот код пробовала дописывать, не срабатывает, непись появляется стоя. Надо user defined писать? Или как-то еще?..

То же самое и с сидением, кстати. Не могу заставить непися появиться сидя sad.gif У меня есть вот такой user defined скрипт

Код
//::///////////////////////////////////////////////
//:: Name x2_def_userdef
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Default On User Defined Event script
*/
//:://////////////////////////////////////////////
//:: Created By: Keith Warner
//:: Created On: June 11/03
//:://////////////////////////////////////////////
const int EVENT_USER_DEFINED_PRESPAWN = 1510;
const int EVENT_USER_DEFINED_POSTSPAWN = 1511;
void main()
{
    int nUser = GetUserDefinedEventNumber();
    if(nUser == EVENT_HEARTBEAT ) //HEARTBEAT
    {
    }
    else if(nUser == EVENT_PERCEIVE) // PERCEIVE
    {
    }
    else if(nUser == EVENT_END_COMBAT_ROUND) // END OF COMBAT
    {
    }
    else if(nUser == EVENT_DIALOGUE) // ON DIALOGUE
    {
    }
    else if(nUser == EVENT_ATTACKED) // ATTACKED
    {
    }
    else if(nUser == EVENT_DAMAGED) // DAMAGED
    {
    }
    else if(nUser == 1007) // DEATH  - do not use for critical code, does not fire reliably all the time
    {
    }
    else if(nUser == EVENT_DISTURBED) // DISTURBED
    {
    }
    else if (nUser == EVENT_USER_DEFINED_PRESPAWN)
    {
    ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 99999.9);
    }
    else if (nUser == EVENT_USER_DEFINED_POSTSPAWN)
    {
    ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 99999.9);
    }

}

Но один он тоже не срабатывает, неписи стоя спавнятся. Где-то что-то еще надо прописать?..
Спасибо большое!
shadowdweller
Rowan, попробуй вот это на OnSpawn
Neverwinter Script Source
#include "x0_i0_corpses"

void main()
{
    effect eKnock = EffectKnockdown();
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eKnock, OBJECT_SELF);
}

Если при этом бухается на колени, а тебе нужно, чтобы лежал, просто поверни под другим углом.
Что касается спавна сидя, можно на OnPerception попробовать так:
Neverwinter Script Source
//Goes OnPerceived of a creature

void main()
{

object oPC = GetLastPerceived();

if (!GetIsPC(oPC)) return;

if (!GetLastPerceptionSeen()) return;
ClearAllActions();

ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0f, 9000.0f);

}

Он все равно спавнится стоя, потом сразу садится. Но чтобы этого в игре не было видно, выстави ему в свойствах - вкладка Advanced - Perception Range - Long.
Rowan
Все протестила.
EffectKnockdown опять не отработал, непись спавнится стоя. Я подумала - это не может быть потому, что где-то еще у него прописан скрипт, который заставляет его стоять? На OnPerception у него, к примеру, стоит дефолтное x2_def_percept
Код
void main()
{
    ExecuteScript("nw_c2_default2", OBJECT_SELF);
}

Этот nw_c2_default2 не может перебивать те команды (лежать в данном случае), который пытаюсь назначить неписю я?

Кстати, #include "x0_i0_corpses" - это он не мертвым появиться должен? Мне нужен живым ))

И насчет сидячего нпс. Задумка такая, что при желании его можно выбрать в спутники. Perception Range - Long в таком случае будет ему лишним, нет?
shadowdweller
Вот комплекс скриптов, которые стоят у меня на неписе, у которого эффект Knockdown прекрасно работает:
Код
OnBlocked - x2_def_onblocked
OnCombatRoundEnd - x2_def_endcombat
OnConversation - x2_def_onconv
OnDamaged - x2_def_ondamage
OnDeath - x2_def_ondeath
OnDisturbed - x2_def_ondisturb
OnHeartbeat - x2_def_heartbeat
OnPerception - x2_def_percept
OnPhysicalAttacked - x2_def_attacked
OnRested - x2_def_rested
OnSpawn - тот скрипт, который я тебе кинула
OnSpellcast - x2_def_spellcast
OnUserdefined - x2_def_userdef

При таком комплекте скриптов работает прекрасно. Попробуй те скрипты, которые стоят у непися, поменять на эти.
Код
#include "x0_i0_corpses"
- не будет он мертвым. У меня, во всяком случае, живехонек. smile.gif
Если НПС хенчмен в перспективе - попробуй усадить его на триггере. У хенчмена совершенно другой комплект скриптов, называется "set_xp1_henchmen", и менять дефолтный скрипт OnSpawn на другой не стоит, равно как и OnPerception.
Rowan
Цитата
Попробуй те скрипты, которые стоят у непися, поменять на эти.

Ничего не понимаю. У меня все тоже самое, но непись, зар-раза, спавнится стоя ((((

А почему неписю нельзя менять дефолтные скрипты, пока он не хенчмэн? Если я правильно тебя поняла, весь набор все равно заменится, когда непись перейдет в разряд спутников, нет?
gennady
Цитата
А почему неписю нельзя менять дефолтные скрипты, пока он не хенчмэн? Если я правильно тебя поняла, весь набор все равно заменится, когда непись перейдет в разряд спутников, нет?

Набор скриптов не заменится, нужно хенчу все сразу ставить, + если хотите в дальнейшем поднимать уровни, то у хенча должен стоять только первый… И вообще что за дилемма со скриптами на загрузку? Зачем туда переть эффекты? При первом клике сидячий НПС поднимется и будет стоять все время… Кому это надо? Такие скрипты нужно ставить на ХБ, примеров было уже море. К тому же скрипты на загрузку имеют тенденцию не сработать при загрузке мода. Их лучше непосредственно использовать при вызове существа из палитре уже во время игры…

См. скрипты в этой теме по поиску, или откройте базу скриптов, или эту тему Монстры
shadowdweller
Спавнится стоя и потом так и стоит?? shok.gif Ничччего не понимаю. Он у меня спавнится стоя, признаюсь, но стоит какую-то долю секунды, потом падает, в принципе, даже не успеваешь ничего заметить.
Насчет хенча - это один из самых серьезных моментов игры. Хенча надо долго и тщательно настраивать. Комплект скриптов, необходимых для хенча, выставляется ему сразу же, вручную. Так что если ты хочешь, чтобы потенциальный хенч у тебя сидел, лучше сделай это как триггер. Попробуй так
Neverwinter Script Source
//Put this script OnEnter
void main()
{

object oPC = GetEnteringObject();

if (!GetIsPC(oPC)) return;

int DoOnce = GetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF));
if (DoOnce==TRUE) return;

SetLocalInt(OBJECT_SELF, GetTag(OBJECT_SELF), TRUE);
object oTarget;
oTarget = GetObjectByTag("HENCH");

AssignCommand(oTarget, ClearAllActions());
AssignCommand(oTarget, ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0f, 6000.0f));

}

По идее, как только игрок будет входить на триггер, НПС будет садиться. А триггер тем и хорош, что его можно разместить в локации где угодно smile.gif
azathoth
пара подводных камней:

-- если на персонаже Plot флаг, то на него не действуют негативные эффекты, в т.ч Knockdown
-- onPerception черт его знает как работает при спавне и когда точка старта модуля около монстра.
Zirrex
Стоит наложить эффект невидимости на НПС в момент его создания, и пока он будет невидим, успеет сесть на стул или свалиться на пол из-за эффекта "Сбивание с ног". Игроку такой персонаж предстанет уже в том действии, какого вы от него хотите. Эффект лучше брать из серии Кутсцен. Т.е. нужно использовать "VFX_DUR_CUTSCENE_INVISIBILITY", чтобы не сработало заклинание Истинное зрение или Видеть невидимое.
Rowan
gennady
Цитата
Такие скрипты нужно ставить на ХБ

*опечаленно* На что?..
За ссылку спасибо огромное)

azathoth
Ыыы! Я вас люблю! ))) У меня таки стояла птичка на Plot, вот почему оно не работало, оказывается ))) Боже мой, счастье есть )))
Цитата
onPerception черт его знает как работает при спавне и когда точка старта модуля около монстра

Около монстра - это насколько близко? Метров 5 - это близко?

shadowdweller
Оно не работало из-за птички на Plot )) Сняла - все заработало ))) С триггером попробую, спасибо за помощь ) На потенциального хенчмэна его же можно вешать, да?

Zirrex
А сколько будет длиться такой эффект? (я так поняла, он нужен, чтобы нпс на глазах игрока не пикировал на пол умирающим лебедем, да?)
shadowdweller
Цитата(Rowan @ Sep 13 2007, 17:09) *
С триггером попробую, спасибо за помощь ) На потенциального хенчмэна его же можно вешать, да?

Да. Только триггер вешается не на хенчмена, а на земле рисуется. smile.gif А скрипт ставится на OnEnter в свойствах.
Rowan
Цитата
Только триггер вешается не на хенчмена, а на земле рисуется

*умиленно* Ну не болван ли я )))
Corvin
Кто-нибудь пробовал делат скриптами предметы с аурой? Например, я года полтора назад делал плащик, который давал всем союзникам вокруг в радиусе 10 футов 10% magic resistance + визуальные эффекты. Получилось, только скрипт был очень громоздким и корявым, потому как практически идентичные строчки повторялись много раз. Можно ли с помощью циклов осуществить то же самое?
Jadent
Мне пришел в голову вот такой вариант:

скрипт вешается на ХБ игрока ("default") и работает при надетом на персонаже плаще с тегом "auracloak":
Neverwinter Script Source
void main()
{
    if (GetTag(GetItemInSlot(INVENTORY_SLOT_CLOAK))=="auracloak")
    {
        float fRadius = 10.0;
        object oFriend = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
        while (GetIsObjectValid(oFriend))
        {
            if (GetIsFriend(oFriend) && oFriend!=OBJECT_SELF)
            {
                effect eSpell = EffectDamageImmunityIncrease(DAMAGE_TYPE_MAGICAL, 10);
                effect eVisual = EffectVisualEffect(VFX_COM_HIT_DIVINE);
                effect eEffect = EffectLinkEffects(eVisual, eSpell);

                if (GetLocalInt(oFriend, "auracloak_affected"))
                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpell, oFriend, 6.0);
                else
                    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oFriend, 6.0);

                DelayCommand(4.0, SetLocalInt(oFriend, "auracloak_affected", 1));
                DelayCommand(8.0, SetLocalInt(oFriend, "auracloak_affected", 0));
            }
            oFriend = GetNextObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
        }
    }
}

Если визуальный эффект должен висеть постоянно, а не применяться 1 раз, то скрипт будет еще проще:
Neverwinter Script Source
void main()
{
    if (GetTag(GetItemInSlot(INVENTORY_SLOT_CLOAK))=="auracloak")
    {
        float fRadius = 10.0;
        object oFriend = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
        while (GetIsObjectValid(oFriend))
        {
            if (GetIsFriend(oFriend) && oFriend!=OBJECT_SELF)
            {
                effect eSpell = EffectDamageImmunityIncrease(DAMAGE_TYPE_MAGICAL, 10);
                effect eVisual = EffectVisualEffect(VFX_DUR_BLUR);
                effect eEffect = EffectLinkEffects(eVisual, eSpell);

                ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oFriend, 6.0);
            }
            oFriend = GetNextObjectInShape(SHAPE_SPHERE, fRadius, GetLocation(OBJECT_SELF));
        }
    }
}

Если нужно применять эффект ауры на самого игрока, то лучше это делать отдельно в событиях OnItemEquip/Unequip.
Lex
я бы подругому сделал:
1. прописал кастомную ауру в 2дашке с нужными настроками (радиус, размер, имя скрипта onEnter, onExit)
2. В скрипте onEnter вешал бы нужные эффекты (проверяя, что входящий объект находится в партии игрока)
3. В скрипте onExit снимал бы эффект
4. Сам эффект ауры вешал бы на Equip.
Taiko
Цитата(Lex @ Sep 14 2007, 15:02) *
я бы подругому сделал:
1. прописал кастомную ауру в 2дашке с нужными настроками (радиус, размер, имя скрипта onEnter, onExit)
2. В скрипте onEnter вешал бы нужные эффекты (проверяя, что входящий объект находится в партии игрока)
3. В скрипте onExit снимал бы эффект
4. Сам эффект ауры вешал бы на Equip.

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

зы: а через что данный эффект - не важно. У меня слетали эффекты от применения спец. способностей, там завязки на эквип не было.
Corvin
Цитата(Lex @ Sep 14 2007, 17:02) *
я бы подругому сделал:
1. прописал кастомную ауру в 2дашке с нужными настроками (радиус, размер, имя скрипта onEnter, onExit)

Проблема в том, что я не умел работать с 2da файлами (и сейчас не умею). smile.gif
Taiko
Раскопал в x2_s0_cldbewld.nss (это спелл Cloud of Bewilderment), что для вызова тумана, там используется эфект VFX_IMP_DUST_EXPLOSION, который, как раз мне и был нужен.Теперь вопрос: Почему, в моём скрипте, этот визуальный эфект виден не, как поднимающийся туман, а как обычный раскат пыли по земле.Меня даже этот вариант более устраивает, т.к. выглядит реалистично, но вот узнать ответ на этот вопрос очень хочется. Сразу оговорюсь, что значения "длительности" эфекта я менял, результат - без изменений.
Neverwinter Script Source
//:://////////////////////////////////////////////
//:: Created By: Taiko
//:: Created On: 14.09.2007
//:://////////////////////////////////////////////
void main()
{   
//Объекты   
object      oItem    = GetItemActivated(); //предмет, который активировали   
object      oPC      = GetFirstPC(); //первый игрок в списке   
//Локации   
location    lLoc    = GetItemActivatedTargetLocation(); //точка-цель, активированного предмета   
location    lPC_Loc  = GetLocation(oPC); //точка на которой игрок стоит   
//Эфекты   
effect      eFlyOut  = EffectDisappearAppear(lLoc, 1);  //игрок взлетает, чтобы приземлиться в lLoc   
effect      eSmock  = EffectVisualEffect(VFX_IMP_DUST_EXPLOSION); //визиуальный эфект "тумана"   

if (GetResRef(oItem)=="vn_drag_fly000") //если активирован нужный предмет   
    {
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFlyOut, oPC, 5.0); //игрок взлетает и приземляется в указанном месте через 5 секунд       
      DelayCommand(1.2, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSmock, lPC_Loc, 5.0)); //эфект взлета       
      DelayCommand(6.5, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSmock, lLoc, 5.0)); //эфект приземления   
    }
}
Zirrex
Rowan, чтобы НПС не "пикировал" на точку появления, необходимо у функции:

Neverwinter Script Source
bject CreateObject(int nObjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="")

не использовать опцию "bUseAppearAnimation". Тогда все НПС или монстры будут появляться сразу же на локации, а не "припархивать" smile.gif

Эффект же нужен для того, чтобы НПС успел сделать то, что ты от него хочешь. И при этом игрок не видел, что НПС упал или сел на стул после создания.
Белатрис
rolleyes.gifМожно ли при выполнении сего скрипта НПС сидели на пятых точках. Такой скрипт стоит у нпс, но из-за размещенного ниже скрипта они подымаются и начинают беседу.
Neverwinter Script Source
//::///////////////////////////////////////////////
//:: Name lm_2speakers
//:: Copyright © 2004 -=WRG!=-
//:://////////////////////////////////////////////
/*
скрипт разговора 2-х НПС. Шаблон.
*/

//:://////////////////////////////////////////////
//:: Created By: Lex
//:: Created On: Agust 2004
//:://////////////////////////////////////////////

void ANIMATION(object oD)
/// Рандомная анимация во время разговора. настраивайте сами.
    {
    int A=0;
    float T,S;
    switch (Random(8)+1)
      {
      case 2: A=ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD;T=3.0;S=1.0;break;
      case 3: A=ANIMATION_FIREFORGET_TAUNT;T=3.0;S=1.0;break;
      case 4: A=ANIMATION_FIREFORGET_PAUSE_BORED;S=1.0;break;
      case 5: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      case 6: A=ANIMATION_LOOPING_LISTEN;T=5.0;S=1.0;break;
      }
    if (A==0) return;
    AssignCommand(oD,PlayAnimation(A,S,T));
    }

void DIALOG(object oD1,object oD2)
    {
    string s1="",s2="";
    string ya = GetName(GetObjectByTag("ya")); // "+ya+"
    switch (Random(30))
        {
        case 0: s1="Как дела, друг?";s2="Да идут по маленьку..";break;
        case 1: s1="И как она? Симпатична"+ya+"?";s2="А как же! Ты мен"+ya+" обижаешь!";break;
        /// и так далее 20 фраз типа вопрос-выссказывание и ответ на это дело
        }
    AssignCommand(oD1,SpeakString(s1)); /// первый НПС говорит фразу
    AssignCommand(oD2,DelayCommand(5.0,SpeakString(s2))); /// второй отвечает
    }

void main()
{
object oPC = GetFirstPC();
if (GetArea(oPC)!=GetArea(OBJECT_SELF)) return; // если нет игрока, то молчим
object oD1 = GetNearestObjectByTag("SPEAKING_NPC_1"); // первый НПС
object oD2 = GetNearestObjectByTag("SPEAKING_NPC_1"); // второй НПС
if (GetIsInCombat(oD1)) return; // если первый НПС дерется то молчим
if (GetIsInCombat(oD2)) return; // если второй НПС дерется то молчим
if ( (IsInConversation(oD1)) || (IsInConversation(oD2)) ) return; /// если один из НПС разговаривает с игроком
if (GetDistanceToObject(oPC)>10.0) return; // если игрок далеко (больше 10 футов) то он как будто ничего не слышит.
AssignCommand(oD1,SetFacingPoint(GetPosit ion(oD2))); // повернуться навтречу друг другу
AssignCommand(oD2,SetFacingPoint(GetPosition(oD1))
;
DIALOG(oD1,oD2);
ANIMATION(oD1);
ANIMATION(oD2);
}
Lex
убрать анимацию, тогда подыматься не будут.
Белатрис
А как добавить свою озвучку? К диалогам? И как ее потом в этот скрипт запихнуть?.. э... сорри за такой, может, широкий вопрос... vava.gif
Lex
свою озвучку это в Контент (если по простому - музыка + 2дашка, там вроде бы просто, но я не делал никогда).
А в скрипт ее через PlaySound
Белатрис
Хм... а это не заткнет фоновую музыку? rolleyes.gif

П.С. Можно ли каки-либо способом управлять цветом/количеством тумана? Дождем/молниями? С помощью скриптов, естественно... Хотелось бы написать скрипт с несколькими видами погоды, а потом, чтобы они воспроизводились в случайном порядке и на какое-то время... declare.gif
Lex
Цитата(Белатрис @ Sep 27 2007, 11:14) *
а это не заткнет фоновую музыку?

смотря как настроишь.
Цитата(Белатрис @ Sep 27 2007, 11:14) *
П.С. Можно ли каки-либо способом управлять цветом/количеством тумана? Дождем/молниями? С помощью скриптов, естественно... Хотелось бы написать скрипт с несколькими видами погоды, а потом, чтобы они воспроизводились в случайном порядке и на какое-то время...

скриптами можно. Все функции есть. (для тумана ищи по Fog, для погоды по weather)
Белатрис
Хм... ну нашел... правда не очень помогло. Собственно, как объявить этот тумаН? Тут, нечто сложное... А цвет задавать в RGB(и, кстати, как, просто "=" )?
Заранее спасибо. unsure.gif
Lex
есть контснты цвета, а дальше.. дома посмотрю библу для тумана, у меня есть, там вроде не совсем РГБ, а что-то хитрое.
Белатрис
Ждем-с...

П.С. А как проверить наличие определенного кол-ва золота?
П.С. Где-то встречал такой вопрос, но ответ на него не помню... Как с помощью скриптов повысить силу/ловкость/ и т.д.?
Заранее спасибо =)
Lex
Цитата(Белатрис @ Sep 28 2007, 07:22) *
П.С. А как проверить наличие определенного кол-ва золота?

фе, батенька, такие вещи впору уже самому знать. функция GetGold или что-то похожее. Поиск в фильтре функций по слову "gold" поможет.

Цитата(Белатрис @ Sep 28 2007, 07:22) *
Как с помощью скриптов повысить силу/ловкость/ и т.д.?

тоже баян. 2 способа:
- эффектами. EffectAbilityIncrease (в правильности написания не слова "абилити" уверен). Наложение эффекта - ApplyEffectToObject
- шкуркой. Создание в палитре шкурки (на нивидимый "животный" слот), одевание ее на игрока в начале модуля и добавление на нее свойств по мере необходимости. AddItemProperty - наложение свойства, а задачу самого свойства я не помню, поищи по "Property".
Белатрис
Neverwinter Script Source
фе, батенька, такие вещи впору уже самому знать. функция GetGold или что-то похожее. Поиск в фильтре функций по слову "gold" поможет.

Ну, дать одно - проверить наличие... немного другое. МОжет, все же напишешь? Плз =)
П.С. Вот у меня такая штука завелась... млин... в общем, в инвентаре волка есть когти, шкура и что-нибудь еще. Если, к примеру, переменная i равна нулю, а остальные(зависит от чего-то в инвентаре) 1, то шкурки в инвентаре не видно... О, в голову пришла идея... А что, если на onDeath поставить проверку. Типа, если переменная i равна нулю, то дестроить боъект?... гы... crazy.gif
gennady
Цитата(Белатрис @ Sep 28 2007, 09:29) *
Ну, дать одно - проверить наличие... немного другое. МОжет, все же напишешь? Плз =)

Пжалуйста:
Neverwinter Script Source
void main()
{
object oPC = GetFirstPC();
int iGold = GetGold(oPC);
effect eSTR = EffectAbilityIncrease(ABILITY_STRENGTH, 1);

// Проверить золото
if(iGold > 100) {/*Что делаем... */}

// Накладываем эффекты
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSTR, oPC);
// или чтобы не снималсЯ
ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eSTR), oPC);
}


Lex
Цитата(Белатрис @ Sep 28 2007, 09:29) *
Ну, дать одно - проверить наличие... немного другое. МОжет, все же напишешь? Плз =)

я ж тебе выше написал, функция GetGold

Цитата(Белатрис @ Sep 28 2007, 09:29) *
П.С. Вот у меня такая штука завелась... млин... в общем, в инвентаре волка есть когти, шкура и что-нибудь еще. Если, к примеру, переменная i равна нулю, а остальные(зависит от чего-то в инвентаре) 1, то шкурки в инвентаре не видно... О, в голову пришла идея... А что, если на onDeath поставить проверку. Типа, если переменная i равна нулю, то дестроить боъект?... гы... crazy.gif

проще на смерть волка определять что нужно и это создавать.
Белатрис
gennady, спасибо! Огромное!

Цитата
проще на смерть волка определять что нужно и это создавать.

Спасибо, но я уже сделал. rolleyes.gif

А вот еще вопрос. Я сколько не шарил в базе - не нашел. Я бы хотел сделать рассписание НПС. Что он будет делать, допустим, в два - пойдет к костру и будет сидеть до следующего действия... Но вот как это осуществить не представляю...
Lex
Цитата(Белатрис @ Sep 27 2007, 15:18) *
ут, нечто сложное... А цвет задавать в RGB(и, кстати, как, просто "=" )?
не нашел я функцию, где раскладывался RGB. В общем там да, цвет задается числом от 000000 до ffffff. Только в десятичном виде (те белый там что-то около 167к)
Цитата(Белатрис @ Sep 29 2007, 11:45) *
А вот еще вопрос. Я сколько не шарил в базе - не нашел. Я бы хотел сделать рассписание НПС. Что он будет делать, допустим, в два - пойдет к костру и будет сидеть до следующего действия... Но вот как это осуществить не представляю...
для базы это слишком сложные скрипты. Хотя фактически это просто система анимации с условиями на игровое время. О системе анимации читать тут: http://www.wrg.ru/index.php?method=reviews...d=14&sub=do (до половины идут принципе построения самой анимации, дальше разбор моей системы анимирования НПС)
Белатрис
Цитата
не нашел я функцию, где раскладывался RGB. В общем там да, цвет задается числом от 000000 до ffffff. Только в десятичном виде (те белый там что-то около 167к)
Т.е. из 16-ой просто перевести в 10-ую?.. Мда... А как насчет того, чтобы ответить на сий вопросик:
Цитата
Собственно, как объявить этот тумаН? Тут, нечто сложное...


Хм... подправьте кто-нибудь:
Neverwinter Script Source
void main()
{
    object oENTER = GetEnteringObject();
    object oDEKAR = GetObjectByTag("dekar");
    if ( oENTER != oDEKAR )
            return;
    else
          SetLocalInt(oDEKAR, "RUN", 1);

}
Lex
лучше так:
Neverwinter Script Source
void main()
{   
  object oENTER = GetEnteringObject();   
  if GetTag(oENTER) == "dekar"
          SetLocalInt(oENTER, "RUN", 1);
}


Цитата(Белатрис @ Sep 29 2007, 12:11) *
Мда... А как насчет того, чтобы ответить на сий вопросик:

я ж тебе сказал, фильтр функций по слову FOG.
Neverwinter Script Source
// Sets the fog color in the area specified.
void SetFogColor(int nFogType,int nFogColor,object oArea = OBJECT_INVALID);
Белатрис
Цитата
лучше так:

Спасибки =)


Э... извини... я, если честно, плохо понимаю эти "подсказки"... в комментариях написанно для чего, а чем помогает эта строчка:
Neverwinter Script Source
void SetFogColor(int nFogType,int nFogColor,object oArea = OBJECT_INVALID);

я пока не понимаю. Объяснишь?

Еще раз прошу прощения за назойливость... unsure.gif
Lex
омг.. Тебе тады в Вопросы Новичков.
Neverwinter Script Source
void main()
{
    object oArea = GetArea(GetFirstPC());
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_RED, oArea);
}

Этот скрипт сделает цвет тумана в локации красным. Можно поставить куда угодно.
Белатрис
Спасибо, теперь я понял, наконец. rolleyes.gif
Белатрис
Собственно, я хочу, чтобы туман увеличивался постепенно. А он сразу - БАХ и много =( и дождь вместе с ним сразу начинает лить... А звук задерживается... вот...
Neverwinter Script Source
void main()
{
    int i;
    object oArea = GetArea(GetFirstPC());
    // Цвет тумана
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_GREY, oArea);
    // Постепенное увеличение тумана
    for( i = 5; i < 91; i++ )
    {
        SetFogAmount(FOG_TYPE_SUN, i, oArea);
            ActionWait(0.5);
    }
    // Сейчас пойдет дождик =)
    ActionWait(5.0);
    SetWeather(oArea, WEATHER_RAIN);
}
Lex
мдя... ессно он сразу и много.
через DelayCommand делать нужно. Да и даже если бы работало, полсекунды - мало.

зы: Actions идут в стек и выполняются по очереди и имеют некую длительность, а команды (в тч и SetColorFog) исполняются почти сразу и все.
зыы: и грузить акшн-лист игрока для переключения тумана - не фонтан smile.gif

Neverwinter Script Source
void main()
{
    int i;
    object oArea = GetArea(GetFirstPC());
    // Цвет тумана
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_GREY, oArea);
    // задержка
    float fDelay = 0.0;
    // Постепенное увеличение тумана
    for( i = 5; i < 91; i++ )
    {
        DelayCommand(fDelay,SetFogAmount(FOG_TYPE_SUN, i, oArea));
        fDelay = fDelay + 1.0;
    }
    // Сейчас пойдет дождик
    DelayCommand(fDelay,SetWeather(oArea, WEATHER_RAIN));
}
Белатрис
Хм... Извини, я немного подкорректировал. Выглядит довольно реалистично. rolleyes.gif
Neverwinter Script Source
void main()
{
    int i;
    object oArea = GetArea(GetFirstPC());
    // Цвет тумана
    SetFogColor(FOG_TYPE_ALL, FOG_COLOR_GREY, oArea);
    // задержка
    float fDelay = 0.0;
    // Постепенное увеличение тумана
    for( i = 5; i < 61; i++ )
    {
        DelayCommand(fDelay,SetFogAmount(FOG_TYPE_SUN, i, oArea));
        fDelay = fDelay + 0.2;
        if( i == 18 )
        {
            // Сейчас пойдет дождик
            DelayCommand(fDelay,SetWeather(oArea, WEATHER_RAIN));
        }
    }
}

Из-за большого значения туман мигает. Т.е. пропадает, появляется(больше на единицу), пропадает, появляет и т.д.

П.С. А как перевести из float в int и наоборот?
Lex
Цитата(Белатрис @ Sep 30 2007, 13:08) *
Хм... Извини, я немного подкорректировал. Выглядит довольно реалистично.

да мне пофиг, я твой скрипт поменял чтобы он работал, а "красиво выглядит" это уже не моя забота, а твоя.
Цитата(Белатрис @ Sep 30 2007, 13:08) *
как перевести из float в int и наоборот?

IntToFloat, FloatToInt. Порабы знать.

зы: и начинай уже сам пользоваться фильтром функций для поиска нужных функций по ключевым словам.
Белатрис
Не сердись. Спасибо.
Белатрис
Млин, помогайте. Я уже запарился. Как сделать, чтобы в три часа, к примеру, выполнялись действия. Как проверить время?... unsure.gif
Lex
Neverwinter Script Source
int GetTimeHour()


в любой периодическии исполняемый скрипт (например heartbeat модуля) ставишь проверку на время и нужные действия

зы: поиск функций по слову "Time"
зыы: функции работы с днем/месяцем/годом находятся по слову "calendar"
Белатрис
Так?
Neverwinter Script Source
........
int i;
i = GetTimeHour();
if( i == 12 )
{
    /* действия */
}
........
Lex
почти.
2 момента:
- у тебя исполняться будет в течении игрового часа каждые 6 секунд
- у тебя это исполняться будет каждый игровой день в это время
решается просто (если день не важен. Если важен, надо заюзать проверку дня)
Neverwinter Script Source
int i;
i = GetTimeHour();
if( i == 12 ) && (!GetLocalInt(OBJECT_SELF,"do_once_12_hours"))
{
    SetLocalInt(OBJECT_SELF,"do_once_12_hours",TRUE);
    /* действия */
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2025 Invision Power Services, Inc.