Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопросы новичков
Город Мастеров > РЕДАКТОРЫ > 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, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103
Элендор
Доброе време суток вощем у меня к вам 1 прозьба...
Даите плз сылку на скрипт магазина( там где через некоторое време во време игры когда туда будет положена вещ она пропадает)... unsure.gif
Aiwan
QUOTE (Bregolas @ Feb 4 2005, 22:46)
я то как раз заметил, и спрашиваю, как поправить x0_i0_anims и в нем ли дело!

Править? Ручками... Либо взять старый и сделать импорт к себе. Думаешь все тебе расскажут что исправили? Ага... Они как то исправили работу с OBJECT_SELF в скриптах, так у нас рухнули все катсцены разом и прочие скрипты с задержкой на исполнение с OBJECT_SELF. Мы ж не идиоты, год все работало и вдруг сломалось biggrin.gif Так то...
QUOTE (Bregolas @ Feb 4 2005, 22:46)
Я просто задал вопрос "можно ли". Я не спрашивал "править ли мне"

В вашх словах слышится раздрожение... Никоем образом не хотел задеть и прочее. И рекомендую с этим не баловать, народ тут вежливый и самолюбивый. Пара постов и ответы никто не напишет drag.gif
Ну, я скажу так. Сделать мод на левел 3-5 и потом подобрать баланс на 9-14 переделав не меньше чем ты описываешь тоже не два байта перекачать. Я это все делал сам у себя и по несколько раз. То фракцию не ту, то скрипты не так расставлю, ДБ исправит и говорит, в те слоты то в те это... и такого я делал сто раз. Поэтому я знаю что такое переделать (ненавижу) посему и говорю.
QUOTE (Oksivarus @ Feb 5 2005, 00:11)
скажу что хочю, возможно я просто не могу пояснить (все проблемы людей в непонимании друг друга)

Вы совершенно правы мусье.
QUOTE (Oksivarus @ Feb 5 2005, 00:11)
Нужен скрипт для отдыха игрока (почьти стандартный) в котором проверяется наличие таких необходимых предметов - 1-бедрол, 2-дрова, 3-еда (причем еды может быть 10 видов и соответственно 10 различных тегов начинающихся на food.)
бедрол после сна возвращяется, дрова и найденная еда уничьтажаются

Так. Все просто как теория относительности.
Neverwinter Script Source
ExecuteScript("script_rest", oPC);

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

Элендор поищи в базе скриптов. Был такой...
Oksivarus
возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу.

Еды 10 видов и соответственно 10 тегов. Уничьтожается сразу после соответствия на все проверки наличия предметов. По правилу вес съединой пищи должен быть 1/20 от жизни героя (вес прямо связан с тегом тобиш это можно отбросить из того что мне не понятно) но не меньше 1 шт. еды.
(вродеб правильно написал, хотя может и заблуждаюсь как это должно выглядет в конечьном виде).

Огромное спасибо кто удили мне свое внимание.
Добавлено в [mergetime]1107553110[/mergetime]
Количество еды в сумке определяется самим игроком тобиш может быть как 1 вида так и всех 10. Все 10 видов можно спокойно есть (условия на на проверку наличие пистицедов не требуется, и наложение дополнителльных побочьных эффектов как плохих так и хороших)
Aiwan
QUOTE (Oksivarus @ Feb 5 2005, 03:30)
возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу.

Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся.
Tiger Greyhawk
QUOTE (Oksivarus @ Feb 5 2005, 00:30)
Еды 10 видов и соответственно 10 тегов

А кроме как кушать это еда нужна еще где-то? Почему не сделать одинаковые тэги? А вес проверять функцией
Neverwinter Script Source
int GetWeight(object oTarget=OBJECT_SELF)
Это решение данного вопроса. Если ты хочешь разобраться с самой сутью перебора вещей в по части тэга инвентори, то извини, что я ввязался.
Oksivarus
я извиняюсь (просто я немец так сказать smile.gif ) и насколько я понял функцию GetWeight возвращяет вес предметов но это мне НЕ НУЖНО,я вес просто привязал к номеру (№1 - 1 кг .... №10 50 кг).
одинаковые теги нельзя так как на магазин я повесил удалитель одинаковых вещей в соответствии с чем при одинаковых тегах останется только 1 вид еды.
Еда используется 2 путями:
1- когда игрок просто отдыхает с востановлением всех сил (простое удаление из инвентаря)
2- использует как предмет и в соответстви с тем что скушал получяет некий бонус.

Так вот
QUOTE (Aiwan @ Feb 5 2005, 01:42)
Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся.


Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem))

Aiwan
QUOTE (Oksivarus @ Feb 5 2005, 14:26)
Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem))

Твой метод тянуть кота за хвост меня выбивает из колеи biggrin.gif Коней на переправе не меняють smile.gif Давай так, ты выложишь подробно ВСЕ свои УСЛОВИЯ что и как и теги, а мы тебе поможем. А ГЛАВНОЕ ЧТО ТЫ ОТ НЕГО (и нас yes.gif ХОЧЕШЬ) Потаму как твой один скрипт с вопросами: "А вот если..." может перерасти в спам тему. Ждемс... drag.gif
Oksivarus
Ок я у меня в скрипте написана следающяя строчька (перед этим разные условия на наличие предметов но все они с 1 тегом поэтому проблем в их поиске не возникает) Тянуть кота я не хочю честное слово.

if ((HasItem(oPC,"food_0")==TRUE)||(HasItem(oPC,"food_1")==TRUE)||(HasItem(oPC,"food_2")==TRUE)||(HasItem(oPC,"food_3")==TRUE)||(HasItem(oPC,"food_4")==TRUE)||(HasItem(oPC,"food_5")==TRUE)||(HasItem(oPC,"food_6")==TRUE)||(HasItem(oPC,"food_7")==TRUE)||(HasItem(oPC,"food_8")==TRUE)||(HasItem(oPC,"food_9")==TRUE)) //проверка на наличие еды
{
ExportSingleCharacter(oPC); //сохранения героя
// из того что посоветовали на форуме попытался сделать удаление
// первой найденной еды
while (GetIsObjectValid(oItem) == TRUE) // Лезем в сумку
{
if (sTag == "food") // Находим бутерброд
{
string oTag = GetTag(oItem);
DestroyObject(GetItemPossessedBy(oPC,oTag)); //съедаем еду
}
else
{
oItem = GetNextItemInInventory(oPC); // Смотрим дальше
}
}

как видно из всего первая строчька очень длинная при это если в инветаре много всего то выдается всем наверно известная фраза о переполнение.

Задачи скрипта: найти в инвентаре хоть 1 предмет с тегом food_0, food_1, ... , food_9 b и в случяе его отсутствия выполнть действие №1. Если же предмет такой присутствует то удалить этот предмет и запустить действие №2.
Oksivarus
Чтоб не тянуть кота за хвост выложу сразу получившийся скрипт.
Проблема - не могу удалить найденную благодаря вам еду. Для удаления использую функцию DestroyObject() пробывал запихнуть туда как обьект так и тег обьекта на оба варианта выдает сообщение ПРЕМЕННАЯ, ОПРЕДЕЛЕННАЯ БЕЗ ТИПА; на любую из этих строчек:

DestroyObject(GetItemPossessedBy(oPC,sGorging)); //udalenie edy
DestroyObject(oMeal); //udalenie edy

вот весь скрипт (если поможет и чтоб кота не тянуть за хвоста):

//:://////////////////////////////////////////////

void PlaceBedroll(object oPC)
{
location lLoc = GetLocation(oPC);
CreateObject(OBJECT_TYPE_PLACEABLE,"bedrolls001",lLoc,FALSE);
DestroyObject(GetItemPossessedBy(oPC,"bedroll"));
object oMyRoll = GetNearestObjectByTag("MyBedRoll",oPC);

location lRoll = GetLocation(oMyRoll);
AssignCommand(oPC,ActionMoveToLocation(lRoll,FALSE));
AssignCommand(oPC,ActionDoCommand(SetFacing(GetFacing(oMyRoll))));
}

void PickupBedroll(object oPC)
{
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0f));
CreateItemOnObject("bedroll",oPC);
DestroyObject(GetNearestObjectByTag("MyBedRoll",oPC),1.0f);
}

#include "nw_i0_plot"
void main()
{
object oPC = GetLastPCRested();
ExportSingleCharacter(oPC);
SetLocalInt(oPC, "PCDead", 0);
string sRealApp = "realApp";
int nRealMe = GetLocalInt(oPC, sRealApp);
object oItem = GetFirstItemInInventory(oPC);
int iFood = 0;

while (GetIsObjectValid(oItem) && GetStringLeft(GetTag(oItem), 4) == "food"&&iFood==0)
{
int iFood = 1;
string sGorging = ObjectToString(oItem);
object oMeal = GetObjectByTag(sGorging);
{
}
oItem = GetNextItemInInventory(oPC);
}

if (!GetIsPC(oPC)) return;

if(nRealMe>0)
{
SetCreatureAppearanceType(oPC, nRealMe - 1);
}

if (GetLastRestEventType()== REST_EVENTTYPE_REST_STARTED && HasItem(oPC,"bedroll")&& (iFood==1))
{
SetLocalInt(oPC, "bedroll", 1);

DestroyObject(GetItemPossessedBy(oPC,sGorging)); //udalenie edy
DestroyObject(oMeal); //udalenie edy

FloatingTextStringOnCreature("Porridge is good, only it is not enough meat", oPC);

PlaceBedroll(oPC);
effect eBlind = EffectBlindness();
DelayCommand(2.5, ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect(VFX_IMP_SLEEP), oPC));
}
else
{
if (HasItem(oPC,"bedroll"))
{
FloatingTextStringOnCreature("пожевать бы что то ..", oPC);
}
else
{
FloatingTextStringOnCreature("не, на сырой земле хреново спать", oPC);
}
//Remove blindness from the PC
effect eLoop=GetFirstEffect(oPC);
while (GetIsEffectValid(eLoop))
{
if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS)
RemoveEffect(oPC, eLoop);
eLoop=GetNextEffect(oPC);
}
AssignCommand(oPC, ClearAllActions());
}

if (GetLastRestEventType()== REST_EVENTTYPE_REST_CANCELLED && GetLocalInt(oPC,"bedroll")==1)
{
//Remove blindness from the PC
effect eLoop=GetFirstEffect(oPC);
while (GetIsEffectValid(eLoop))
{
if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS)
RemoveEffect(oPC, eLoop);
eLoop=GetNextEffect(oPC);
}

PickupBedroll(oPC);
SetLocalInt(oPC, "bedroll", 0);
}

if (GetLastRestEventType()== REST_EVENTTYPE_REST_FINISHED && GetLocalInt(oPC,"bedroll")==1)
{
//Remove blindness from the PC
effect eLoop=GetFirstEffect(oPC);
while (GetIsEffectValid(eLoop))
{
if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS)
RemoveEffect(oPC, eLoop);
eLoop=GetNextEffect(oPC);
}

PickupBedroll(oPC);
SetLocalInt(oPC, "bedroll", 0);
}

}
Aiwan
Oksivarus у тебя будет два скрипта, в одном проверишь, в другом удалишь. Все работает я проверял.
Первый основной скрипт. Вешай хоть куды, главное РС правильно опиши.
Neverwinter Script Source
void main()
{
    object oPC = GetEnteringObject(); // Сам опишешь его правильно
    object oItem = GetFirstItemInInventory(oPC);
    string sFood = "food_";
    SetLocalInt(oPC, "FOOD", FALSE); // Локалка контроль за едой
    SetLocalInt(oPC, "DELEY", FALSE); // Локалка контроль за удалением
    {
    while(GetIsObjectValid(oItem))
        {
          if ((GetStringLeft(GetTag(oItem), 5)== sFood))
            {
            SetLocalInt(oPC, "FOOD", (GetLocalInt(oPC, "FOOD") + 1));
            FloatingTextStringOnCreature("Одын", oPC);
            ActionWait(0.3); // ставь задержку иначе проскользнут локалки
            }
          oItem = GetNextItemInInventory(oPC);
        }
        DelayCommand(2.0, ExecuteScript("am_temp_05", oPC));
        // Скрипт твоего отдыха запускай с задержкой, так как сумку надо потрошить долго...
        }
}


Второй скрипт запускай с задержкой. Мой назывался "am_temp_05" свой назовешь и пропишешь вверху.
Neverwinter Script Source
void main()
{
    object oPC = GetFirstPC();
    string sFood = "food_";
    int iFood = GetLocalInt(oPC, "FOOD");
    SetLocalInt(oPC, "DELEY", FALSE);
    int i = 2; // Сколько еды надо забрать. Это число + 1
    if (GetIsPC(oPC) && iFood > 2)
            {
              object oItem = GetFirstItemInInventory(oPC);
              while(GetIsObjectValid(oItem))
                {
                if (GetStringLeft(GetTag(oItem), 5)== sFood && GetLocalInt(oPC, "DELEY") <= i)
                    {
                    DestroyObject(oItem);
                    SetLocalInt(oPC, "DELEY", (GetLocalInt(oPC, "DELEY") + 1));
                    ActionWait(0.3);
                    FloatingTextStringOnCreature("Забираем "+IntToString(GetLocalInt(oPC, "DELEY")),  oPC);
                    }
                oItem = GetNextItemInInventory(oPC);
                }
            //:://///////////////////////////////////////////////
            /*
              Сюда впиши то что должно произойтьи когда дестроишь три предмета
              */

            //:://///////////////////////////////////////////////
            FloatingTextStringOnCreature("Работает!!!", oPC);
            return;
            }
    //:://///////////////////////////////////////////////
    /*
      Сюда впиши то что должно произойтьи когда нехватает еды
    */

    //:://///////////////////////////////////////////////
    FloatingTextStringOnCreature("У вас всего "+IntToString(iFood)+" единиц еды!",  oPC);
    FloatingTextStringOnCreature("Маловато!", oPC);
}
Oksivarus
огромное спасибо, буду дальше пробывать.
Aiwan: Давай, работай! wink.gif
Oksivarus
Вобщем промучялся вчерашний день и всю ночь и так и не смог заставить скрипт удалять предметы при заднаии на удаление функцией DestroyObject(oItem); удаляет только если прямо указать тег обьекта.
ЧТО касается остального то спасибо работает хотя я всетаки обьеденил 2 скрипта в 1 (просто что 2 что 1 никаких отличий в его работе).
Скрипт польностью рабочий хотя сократить его так и не удалось(за основу взял твой Aiwan скрипт на отдых но без проверки на костер). Если хотете могу выложить правда незнаю куда его сюда или в раздел скриптов.

P.S. ВСЕМ КТО помогал ОГРОМНОЕ СПАСИБО без вас небылоб его !!!
Aiwan
QUOTE (Oksivarus @ Feb 6 2005, 20:17)
Вобщем промучялся вчерашний день и всю ночь и так и не смог заставить скрипт удалять предметы при заднаии на удаление функцией DestroyObject(oItem); удаляет только если прямо указать тег обьекта.

Что то я не понял. В моем коде? Если да, то так и будет, так как ты объеденил их в один. Разъедини и будет удалять, у меян же удаляет! Я ПРОВЕРЯЛ И ТЕСТИЛ СПЕЦИАЛЬНО В МОДЕ.
Скрипт кидай сюда, вылижим и повесишь в базу готовый безглючный вариант с описаловом. Только скрипт сделай в nss кнопке.
Archangel
Привет всем! Я новичок на этом форуме, так что, если что-то не то ляпну, то поправте.
Я понимаю, что у всех полно дел, но немог бы кто-нибудь помочь мне со скриптами разобраться? swoon.gif

Я ни как не пойму как написать такой скрипт:
К примеру эльф дает тебе задание убить гнома, ты его убиваешь.......
А вот дальше и загвостка.... Как сделать так, чтобы после смерти гнома у эльфа появилась строчка в диалоге: "Я убил гнома".

ПОЖАЛУЙСТА помогите кто может! dntknw.gif
MasterMage
Ставишь локальную переменную на слот OnDeath NPCа...
Neverwinter Script Source
SetLocalInt(GetLastKiller(),"Kill",1);


Затем в диалоге на строку "текст появляется при" ставишь такое
Neverwinter Script Source
return(GetLocalInt(GetPCSpeaker(),"Kill")==1);

вуаля, строчка диалога не появится, пока не выполнишь условие clapping.gif
Archangel
Спасибо MasterMage! Очень помог! biggrin.gif
<small>Добавлено в 21:22</small>

Еще два вопроса по поводу скриптов:

1) Можно ли сделать такой скрипт: когда игрок надевает кольцо (амулет) он превращался в вампира.
2) Можно ли сделать так, чтобы стало возможно говорить со статуей? Или другим неодушевленным предметом....

Пожалуйста уделите пару минут внимания геймеру, нифурычущему в скриптах.... black eye.gif
Friedrich
1. на OnPlayerEquipItem модуля...
Это, вроде самый простой и незамысловатый способ...
Neverwinter Script Source
void main()
{
object oPC = GetPCItemLastEquippedBy();
object oItem = GetPCItemLastEquipped();
string sTag = GetTag(oItem);

if (sTag == "VampireRing") //ВСТАВЬ НУЖНЫЙ ТЭГ
{
  int nPlm;
  if (GetGender(oPC) == GENDER_FEMALE)
  { nPlm = POLYMORPH_TYPE_VAMPIRE_FEMALE; }
  else
  { nPlm = POLYMORPH_TYPE_VAMPIRE_MALE; }
  effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
  effect ePlm = EffectPolymorph(nPlm);
  ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
  DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePlm, oPC));
}
}

на unEquip эффект снимай
Aiwan
1. Нельзя насовсем превратить игрока в вампира.
2. Добавь объекту диалог и на OnUsed объекта поставь скрипт:
Neverwinter Script Source
void main()
{
    ActionStartConversation(GetLastUsedBy());
}

Archangel
Угу, понял насщет разговора со статуей. СПАСИБО......... good.gif
А вот насщет превращения в вампа хотел бы уточнитьsmile.gif
Мне и ненадо чтобы игрок навсегда стал вампиром! Я хочу сделать так: одел колечко-стал вампом, снял-стал самим собой...
Если знаешь такой скрипт, то пажалуйста напиши......... swoon.gif
K.SpecTr
Нужно, чтобы действие одного скрипта прекращалось по возврату другого скрипта, т.е. есть действия с задержкой и надо их отменить, если что-то произошло в другом скрипте.
Пока сделал следующим образом:
Neverwinter Script Source
...
DelayCommand(30.0, ExecuteScript("cus_inc_02", oTarget));

, где в cus_inc_02 стоит проверка:
Neverwinter Script Source
if (GetLocalInt(oTarget,"iIntervene")==1) {return;}
... //Выполняемые после задержки действия

Ну и собственно третий скрипт, который и организует прерывание, устанавливая переменную iIntervene в 1.
Вопрос, можно ли обойтись без промежуточного скрипта cus_inc_02 ?
DBColl
QUOTE (Archangel @ Feb 7 2005, 10:36)
Мне и ненадо чтобы игрок навсегда стал вампиром! Я хочу сделать так: одел колечко-стал вампом, снял-стал самим собой... Если знаешь такой скрипт, то пажалуйста напиши.........

Не в скрипте дело. Для этого, представь себе, надо создать и описать ПОЛНОСТЬЮ все вампирские бонусы, создать спец-умения, фиты, скиллы... Да просто дофига работы НЕ ДЛЯ НОВИЧКА. Так что, я бы посоветовал тебе пока порешать проблемы более тривиальные. То есть научиться прежде всего работать с самими скриптами.
Archangel
Все понял. Забиваю на это дело. drag.gif
Люди! У меня опять косяки со скриптами! bad.gif
Вот мой злаполучный скрипт (он вырван из HofU):

//::///////////////////////////////////////////////
//:: Name: cut20_start
//:: Copyright © 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
Opening cutscene script for the main PC -
teleport any new PCs to the players room in
the Yawning Portal
*/
//:://////////////////////////////////////////////
//:: Created By: Brad Prince
//:: Created On: Dec 17, 2002
//:://////////////////////////////////////////////
#include "x2_inc_cutscene"
void StartCutscene(object oPC);
void MultiJump(object oPC, string sWay);
void DrawSpider(int nCutscene, object oPC, int iBeam, float fDur);
void PlayMusic(int nCutscene, object oPC);
void SetShift(int nCutscene, object oPC, float fShift);
void CutSound(int nCutscene, object oSound);

int nCutsceneNumber = 20;

void main()
{
..........DBColl: Ты чего это, обалдел так ср.. флудить скриптом?! Сценки вообще надо писать самому, а не затачивать чужие под свои.
}

А загвостка-то вот в чем:
КАК ЗАСТАВИТЬ NPC`ов говорить то, что хочу я? Помогите кто может.......... dntknw.gif

<small>Добавлено в 12:30</small>
Oksivarus
Aiwan - скриптец я выложу но чуть посже на сладующюя страницу.
А что касается именно твоих 2 скриптом то повторюсь - я их пробывал юзать как отдельно каждый (запускается 1 который вызывает 2) так и 1 общий.
Возник вопрос в соответствии с твоим утверждением о его работоспособности - ты тестил с крипты в сингле ??? Я проверял его работу на шарде вот что он сообщал приналичии в рюкзаке 3шт любой еды (я дополнил строчьку чтоб говорила переменную FOOD)

отдых начят
одын 1
одын 2
одын 3
потерян предмет бедрол
одын 1
одын 2
одын 3
получен предмет бедрол
отдых закончен

ни о каком удалении предметов с нужными тегами (food_1, food_2, food_3) речи вообще не идет.
DBColl
Neverwinter Script Source
void main()
{
    object oPC = OBJECT_SELF// ВОТ ЭТО ДОЛЖНО ПОМОЧЬ!
    string sFood = "food_";
    int iFood = GetLocalInt(oPC, "FOOD");
    SetLocalInt(oPC, "DELEY", FALSE);
    int i = 2; // Сколько еды надо забрать. Это число + 1
    if (GetIsPC(oPC) && iFood > 2)
            {
              object oItem = GetFirstItemInInventory(oPC);
              while(GetIsObjectValid(oItem))
                {
                if (GetStringLeft(GetTag(oItem), 5)== sFood && GetLocalInt(oPC, "DELEY") <= i)
                    {
                    DestroyObject(oItem);
                    SetLocalInt(oPC, "DELEY", (GetLocalInt(oPC, "DELEY") + 1));
                    ActionWait(0.3);
                    FloatingTextStringOnCreature("Забираем "+IntToString(GetLocalInt(oPC, "DELEY")),  oPC);
                    }
                oItem = GetNextItemInInventory(oPC);
                }
            //:://///////////////////////////////////////////////
            /*
              Сюда впиши то что должно произойтьи когда дестроишь три предмета
              */

            //:://///////////////////////////////////////////////
            FloatingTextStringOnCreature("Работает!!!", oPC);
            return;
            }
    //:://///////////////////////////////////////////////
    /*
      Сюда впиши то что должно произойтьи когда нехватает еды
    */

    //:://///////////////////////////////////////////////
    FloatingTextStringOnCreature("У вас всего "+IntToString(iFood)+" единиц еды!",  oPC);
    FloatingTextStringOnCreature("Маловато!", oPC);
}


Oksivarus, попробуй так.
Archangel
Ну блин.... Я ж не знал. dntknw.gif

А тогда не подскажете как написать скрипты, которые можно было бы вставить в разговор и которые давали + или - к направленности героя или скрипт, который прибавлял какую-нибудь хар-ку (например сила+2)?


Aiwan
QUOTE (Oksivarus @ Feb 7 2005, 16:25)
Возник вопрос в соответствии с твоим утверждением о его работоспособности - ты тестил с крипты в сингле ??? Я проверял его работу на шарде вот что он сообщал приналичии в рюкзаке 3шт любой еды (я дополнил строчьку чтоб говорила переменную FOOD)

Блин, ну естественно! swoon.gif
Neverwinter Script Source
object oPC = GetFirstPC(); // Возьми ПЕРВОГО ПОПАВШЕГО ИГРОКА!

А на шарде их тонна может быть. dntknw.gif
Archangel почитай мою статью и тему про катсцены и учись с простого. 2 НПС и пара действий и дальше...
Archangel
Aiwan, я че-то не могу найти эту статью, весь сайт облазилsmile.gif
Напиши поподробнее пожалуйста.......... this.gif
Proydoha
Вопрос: Есть ли скрипт повышающий статы или навыки на один или несколько пунктов. (Повышает, а не изменяет). Например: NPC: "Спасибо что сделал для меня эту работу. За это я научу тебя разряжать ловушки" \Скрипт прибавляющий скажем +1 к навыку разрядки ловушек\
Возможно ли это?
Oksivarus
Вопрос - как монстра сделать срасивую статую тобиш чтоб он стол и нина что не реагировал причем также не поворочивал головы или не махал хвостом (простое удалени скриптов не помагает) - видел в одном маленьком модуле но чето тогда не надобыло не посмотрел как сделали, а сейчяс не могу нати где видел.

а вот рабочий скрипт на отдых в котором проверяется наличие еды и бедрола. Еды может быть 10 видов (food_0 ..... food_9), тег food соответствует старой еде и дабы не рыскать где я ее рассовал по всему шарду удаляется первой. В основе скрипта лежит скрипт Айвана на отдых и скрипты из данной темы.
Если сможете оптимизировать строчьки буду только рад (правда проблема оптимизации так и осталась не решенной).

Neverwinter Script Source
if (HasItem(oPC,"food")==TRUE)
                  {
                    DestroyObject(GetItemPossessedBy(oPC,"food"));
                  }


ВСЕМ КТО ПРИЛОЖИЛ К ЭТОМУ СПАСИБО ОТ СЕБЯ И ОТ ИГРОКОВ ШАРДА smile.gif smile.gif

Neverwinter Script Source
void PlaceBedroll(object oPC)

{
    location lLoc = GetLocation(oPC);
    CreateObject(OBJECT_TYPE_PLACEABLE,"bedrolls001",lLoc,FALSE);
    DestroyObject(GetItemPossessedBy(oPC,"bedroll"));
    object oMyRoll = GetNearestObjectByTag("MyBedRoll",oPC);

    location lRoll = GetLocation(oMyRoll);
    AssignCommand(oPC,ActionMoveToLocation(lRoll,FALSE));
    AssignCommand(oPC,ActionDoCommand(SetFacing(GetFacing(oMyRoll))));
}

void PickupBedroll(object oPC)

{
    AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_GET_LOW,1.0,2.0f));
    CreateItemOnObject("bedroll",oPC);
    DestroyObject(GetNearestObjectByTag("MyBedRoll",oPC),1.0f);
}

#include "nw_i0_tool"
void main()
{

    object oPC = GetLastPCRested();
    object oItem = GetFirstItemInInventory(oPC);
    string sFood = "food";
    SetLocalInt(oPC, "FOOD", FALSE);
    SetLocalInt(oPC, "DELEY", FALSE);
    SetLocalInt(oPC, "BEDROLL", 0);

     while(GetIsObjectValid(oItem))
        {
          if ((GetStringLeft(GetTag(oItem), 4)== sFood))
            {
            SetLocalInt(oPC, "FOOD", (GetLocalInt(oPC, "FOOD") + 1));
//            FloatingTextStringOnCreature("Один " + IntToString(GetLocalInt(oPC, "FOOD")), oPC);
            ActionWait(0.3);
            }
          oItem = GetNextItemInInventory(oPC);
        }

ActionWait(2.0);

   effect eSleep = EffectVisualEffect(VFX_IMP_SLEEP);
   effect eBlind = EffectBlindness();
   effect eDisease = EffectDisease(DISEASE_SOLDIER_SHAKES);


    if (GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
    {
        if (HasItem(oPC,"bedroll")==TRUE)
        {
             if (GetLocalInt(oPC, "FOOD") > 0 )
             {
                if (HasItem(oPC,"food")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food"));
                   }
                else if (HasItem(oPC,"food_9")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_9"));
                   }
                else if (HasItem(oPC,"food_8")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_8"));
                   }
                else if (HasItem(oPC,"food_7")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_7"));
                   }
                else if (HasItem(oPC,"food_6")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_6"));
                   }
                else if (HasItem(oPC,"food_5")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_5"));
                   }
                else if (HasItem(oPC,"food_4")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_4"));
                   }
                else if (HasItem(oPC,"food_3")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_3"));
                   }
                else if (HasItem(oPC,"food_1")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_1"));
                   }
                else if (HasItem(oPC,"food_0")==TRUE)
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_0"));
                   }
                else
                   {
                    DestroyObject(GetItemPossessedBy(oPC,"food_9"));
                   }


             ExportSingleCharacter(oPC);
             SetLocalInt(oPC, "BEDROLL", 1);
             PlaceBedroll(oPC);
             ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSleep,oPC,30.0); // Эффект Z-z-z
             ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBlind,oPC,28.0);
             SetLocalInt(oPC,"slept",1); //сон удачен
             }
            else
            {
            FloatingTextStringOnCreature("Вы боитесь помереть во сне от голода?!",oPC,FALSE);
            AssignCommand(oPC,ClearAllActions());
            }
       }
       else
       {
       FloatingTextStringOnCreature("Вам нет на чем спать",oPC,FALSE);
       AssignCommand(oPC,ClearAllActions());
       }

   }

if (GetLastRestEventType()== REST_EVENTTYPE_REST_FINISHED)
   {
      effect eLoop=GetFirstEffect(oPC);
      while (GetIsEffectValid(eLoop))
        {
        if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS)
           {
           RemoveEffect(oPC, eLoop);
           }
        eLoop=GetNextEffect(oPC);
        }

   PickupBedroll(oPC);
   SetLocalInt(oPC, "BEDROLL", 0);
   SetLocalInt(oPC,"slept",0);

     if (GetWeight(GetItemInSlot(INVENTORY_SLOT_CHEST,oPC))>20)
     {
     ApplyEffectToObject(DURATION_TYPE_INSTANT,eDisease,oPC);
     }
     }


   if (GetLastRestEventType() == REST_EVENTTYPE_REST_CANCELLED )
   {
     if (GetLocalInt(oPC, "slept") == 1)
       {
       effect eLoop=GetFirstEffect(oPC);
       while (GetIsEffectValid(eLoop))
         {
         if (GetEffectType(eLoop)==EFFECT_TYPE_BLINDNESS)
            {
            RemoveEffect(oPC, eLoop);
            }
         eLoop=GetNextEffect(oPC);
         }

       PickupBedroll(oPC);
       SetLocalInt(oPC, "bedroll", 1);
       FloatingTextStringOnCreature("Вы проснулись от сильного шума, но глаза еще не привыкли к свету.",oPC,FALSE);
       ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSleep,oPC, 3.0);
       ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBlind,oPC, 3.0);
       SetLocalInt(oPC,"slept",0);

     }
     }

}
Aiwan
QUOTE (Archangel @ Feb 7 2005, 23:50)
Aiwan, я че-то не могу найти эту статью, весь сайт облазил
Напиши поподробнее пожалуйста..........
QUOTE (Oksivarus @ Feb 8 2005, 00:14)
ВСЕМ КТО ПРИЛОЖИЛ К ЭТОМУ СПАСИБО ОТ СЕБЯ И ОТ ИГРОКОВ ШАРДА

На здоровье!
Archangel
Челы, HELP! swoon.gif
Ничего не могу понять, в чем косяк скрипта:
Neverwinter Script Source
void main()
{
ActionJumpToLocation(location lLocation);
location (object oArea, vector vPosition, float fOrientation);
location iNewLoc=Location(GetArea"VAMPIRE_HOME"(OBJECT_SELF),vNewPos,DIRECTION_NORTH);
vector vNewPos=GetPosition(oPlayer)-Vector(2.0f,-1.0f,3.0f);
}


P.S:
Aiwan спасибо за ссылку....... yes.gif
Lex
Вообще говоря это не скрипт. Это набор функций и переменных, написанных в общем виде.
DBColl
QUOTE (Oksivarus @ Feb 7 2005, 20:14)
Вопрос - как монстра сделать срасивую статую тобиш чтоб он стол и нина что не реагировал причем также не поворочивал головы или не махал хвостом (простое удалени скриптов не помагает) - видел в одном маленьком модуле но чето тогда не надобыло не посмотрел как сделали, а сейчяс не могу нати где видел.

По-моему есть вижуал эффект FREEZE_ANIMATION... Вроде бы им сделано. pardon.gif
Tiger Greyhawk
QUOTE (Aiwan @ Feb 7 2005, 19:47)
6. Хочу слот с настройкой ПОЧАСОВОЙ, т.е. ВРЕМЕННОЙ запуск скрипта. Раз в день, в месяц час... (хербит не предлагать!  )

Постю сюда, а не в "Aurora TOOLSET 2", так как это скорее вопрос, чем решение. Я новичок в этом деле, но чем не устраивает такой способ?
запуск скрипта раз в час - с задержкой (и переменной) например:

запустить скрипт 1 (тот, который надо запускать раз в час)
задержка 1 час
заустить этот (object_self) скрипт

или в том же хербите ставить проверку на время/переменную. напр:
проверить i==0
запустить скрипт 1 (тот, который надо запускать раз в час)
поставить переменную i = 1 (если надо)
задержка 1 час
поставить переменную i = 0

Вопрос: будет ли в этом случак жрать ресурсы задержка?

QUOTE (balrog @ Feb 7 2005, 21:58)
Хочу шоб можно было бы убрать ету дол**** подсветку! 


А почему не так:
искомый предмет создавать в последний момент (после успешной проверки навыков)? Конечно не во всех случаях подходит.

P.S. Это все не проверялось, но... ИМХО, логично. Нет?
K.SpecTr
По поводу моего вопроса о задержке+отмене действий скрипта?
Что, выходит нет другого решения? this.gif Обыдно. sorry.gif
DBColl
QUOTE (Tiger Greyhawk @ Feb 8 2005, 02:52)
Вопрос: будет ли в этом случак жрать ресурсы задержка?

Да, будет. Это довольно известный способ. Для сингла он чреват. Представь, стоит у тебя DelayCommand. Игрок делает SaveGame на 47-й секунде, думаешь в сохраненке корректно сохранится оставшееся время, когда игрок загрузится с нее? Неа. Хотя где-то с десяток делэев вроде еще ничего, более или менее точно сохраняются, но если больше... swoon.gif
QUOTE (Tiger Greyhawk @ Feb 8 2005, 02:52)
А почему не так: искомый предмет создавать в последний момент (после успешной проверки навыков)? Конечно не во всех случаях подходит.

Имхо, Балрог другое имел в виду. Он хотел убрать подсветку с неписей и PC при наведении на них мыши.
Oksivarus
По поводу Статуи из монстра - я вот нашел только вот это что вродеб подходит VFX_DUR_FREEZE_ANIMATION но я незнаю как его использовать неподскажете пожалуста.
DBColl
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect( VFX_DUR_FREEZE_ANIMATION), oNPC); - вот так вроде. Тулсета нет под руками.
Archangel
Че-то я ни как не могу разобраться с написанием скриптов!
Накачал столько статей, все их перечитал........
Ну блин хоть тресни! dntknw.gif
Я еле-еле научился писать самые простейшие скрипты типа ActoinSpeakString, ActionDoCommand и т.д.
А все остальное не получается!
Че блин делать? Я в растерености......... swoon.gif
Прям хоть на редактор забивай.......
Главное ж обидно пацаны! Идей куча, а как их воплотить в жизнь не знаю........
Если кто-то согласится мне помочь лично, то с радостью приму любую помощь! shout.gif


Уж не брезгуйте, ПОМОГИТЕ КТО ЧЕМ МОЖЕТ......... this.gif
DBColl
Archangel
Не расстраивайся. Все мы прошли твой уровень когда-то. wink.gif Сколько ты занимаешься скриптами?.. Я, например, чтобы впервые написать появление объекта в игре CreateObject'ом, мучился с неделю. До этого, чтобы вообще вникнуть в суть скриптинга сидел и читал недели 2 Лексикон на инглише. Вот так вот перло. И думал - никогда я этому не научусь! Хотел кинуть... Но прошел месяц-полтора тренировок и общения на форуме с мастерами и скрипты начали выглядеть стройнее, сложнее, продуманнее... Научить можно даже медведя кататься на велосипеде и ходить на передних лапах, а ты говоришь, про себя, человека... wink.gif
Aiwan
Archangel я живой пример обучения с ноля. ДБ мне писал письма как и зачем присвоить локалку wacko.gif а я их читал и думал... пипец... вот хрень... swoon.gif Потом пришел период я начал драть строки скриптов ДБа и вставлять, мало понимая суть. но работало. biggrin.gif Косячило ингода. потом я начал вникать в суть процесса. Главное все это произошло когда меня послали с подтестом, пиши сам. И я начал писать. Но скажу честно, скриптер я слабый. pardon.gif
Oksivarus
А у меня сейчяч на столе лежит 2 библии -
1 - Lexicon (англ) и 2 - перевод и пояснение на русском тогоже лексикона (так как я типа немец и в англ воще 0 ), правда неполный и написанный вродеб "очень слабым скриптером" biggrin.gif biggrin.gif biggrin.gif Aiwan, если мне не изменяет память взятый еще с будучи живым форума Реалсма. yahoo.gif yahoo.gif yahoo.gif .

Вот что именно тебе Archangel могу сказать, так это то что ты попал, так как подсел на невервинтер. Я вот тоже сколько раз бросал это дело - просто не буду играть и до чего докотился в итоге - начял пробывать писать скрипты и делать свой шар yes.gif yes.gif yes.gif lol.gif lol.gif lol.gif lol.gif
evil-SHADOW
Захотел исправить скрипт Isaac's Greater Misssile Storm.
Сижу вот, смотрю на его реализацию в x0_s0_missstorm2 и в x0_i0_spells и вижу, что вроде бы в самом скрипте спас по рефлексу предусмотрен, но отключен через nReflexSave = FALSE. Недолго думая, исправляю FALSE на TRUE, начинает ругаться на nw_i0_generic.nss, строка 98, а именно на
int NW_TALENT_PROTECT = 1

Только начинаю учится скриптить для НВН, поэтому просьба ногами не пинать smile.gif
Archangel
Aiwan,Oksivarus и DBColl спасибо за поддержку! good.gif Я конечно понимал, что будет нелегко....
Я лично только с самим редактором разбирался где-то месяц, а может больше...
Затем сам научился писать самые простые скрипты, а те, которые казались сложными, выдирал
из оригинального NWN.Но со временем хотелось чего-то большего... но мозгов на большее не хватало. drag.gif

Затем я еще где-то месяц ничего не мог поделать со скриптами.И из-за этого создавал лишь пустые локации....

Но как-то зашел на этот форум и понял-вот оно мое СПАСЕНИЕ! Зарегистрировался и начал задавать
вопросы... и похоже уже через пару дней достал всех своими глупыми,как наверно кажется вам,
но отнюдь не кажется мне, вопросами....

И вот опять нашло это угнетенное настроение......
НО ВЫ ПОДДЕРЖАЛИ МЕНЯ.....
ОГРОМНОЕ ВАМ СПАСИБО ЧЕЛЫ! yes.gif

И, если еще какие-нибудь вопросы покажутся вам глупыми, то пожалуйста не гневайтесь на меня..
Я ведь еще только учусь......

ЕЩЕ РАЗ СПАСИБО ВАМ, ЗА ТО,ЧТО ПОДАРИЛИ МНЕ НАДЕЖДУ........ good.gif

Добавлено в [mergetime]1107881294[/mergetime]
Здрасте все. У меня тута пару вопросиков накопилось, не подскажете как их решить:

1) Как сделать так, чтобы можно было во время разговора(т.е. нажимаешь в разговоре c NPC "перенеси меня в другую локу") перенестись в другую локу?(Навсегда)
2) Можно ли сделать так, чтобы после того, как НеПиСь даст тебе задание эта строчка в диалоге исчезала(ну всмысле строка с заданием)?

Помогите кто может. this.gif


DBColl
QUOTE (Archangel @ Feb 8 2005, 18:39)
1) Как сделать так, чтобы можно было во время разговора(т.е. нажимаешь в разговоре c NPC "перенеси меня в другую локу") перенестись в другую локу?(Навсегда)

Ставишь вейпоинт в нужной локе, в диалоге на нужной строке на закладку ActionTaken ставь скрипт с содержанием:
Neverwinter Script Source
void main()
{
  AssignCommand(GetPCSpeaker(), JumpToObject("тэг_твоего_удаленного_вейпоинта"));
}

QUOTE (Archangel @ Feb 8 2005, 18:39)
2) Можно ли сделать так, чтобы после того, как НеПиСь даст тебе задание эта строчка в диалоге исчезала(ну всмысле строка с заданием)?

Почитай руководство Айвана (PDF-файл) на нашем сайте в разделе Статьи. wink.gif
Aiwan
evil-SHADOW ты залез в чужой сложный код. Этот спас может включаться не только в этом скрипте, а еще черти где. Вообще Биоварские скрипты надо ковырять осторожненько...
Archangel
DBColl я че-то недогоняю.......
Я делаю все как ты сказал, но вместо перемещенея в новую локу игрока у меня обрывается
разговор...
Скорее всего я че-то напутал. Вейпоинт-это ведь точка маршрута(почему-то интуиция мне подсказывает,что это что-то другое)? dntknw.gif
Oksivarus
К вопросику по статуе, сразу скажу шикарная вещь получилась особенно если ее применить к летунам когда они токо появляются и в фазе полета замерзают, ну это так сказать неудержался чтоб не вылить свою радость smile.gif

В продолжение к предыдущему вопросу как сделат чтоб теперь эта статуя не поворачивалась когда с ней пытаются поговорить - когда на ней кликаеш разворачивается лицом к игроку что вроде б не свойственно статуе.
evil-SHADOW
QUOTE
evil-SHADOW ты залез в чужой сложный код. Этот спас может включаться не только в этом скрипте, а еще черти где. Вообще Биоварские скрипты надо ковырять осторожненько...

Ну ведь правили на многих шардах эти Исааки. Значит, можно сделать smile.gif Просто хочется сделать людям приятное, а то тут у нас многие уже ругаются, что мол, читерство smile.gif

К кому бы мне обратиться?
DBColl
QUOTE (Oksivarus @ Feb 8 2005, 20:41)
В продолжение к предыдущему вопросу как сделат чтоб теперь эта статуя не поворачивалась когда с ней пытаются поговорить - когда на ней кликаеш разворачивается лицом к игроку что вроде б не свойственно статуе.

Убирай все скрипты у статуи, а в частности скрипт, который стоит на OnConversation.
QUOTE (Archangel @ Feb 8 2005, 20:35)
DBColl я че-то недогоняю....... Я делаю все как ты сказал, но вместо перемещенея в новую локу игрока у меня обрываетсяразговор... Скорее всего я че-то напутал. Вейпоинт-это ведь точка маршрута(почему-то интуиция мне подсказывает,что это что-то другое)?

Да, это то самое, ты не ошибся. Посмотри, действительно ли ты правильно указал тэг в скрипте и ТЭГ на waypoint'е.
Neverwinter Script Source
void main()
{
    object oPC = GetPCSpeaker();
    AssignCommand(oPC, ClearAllActions());
    AssignCommand(oPC, JumpToObject("тэг_вейпоинта")); 
}

Попробуй еще так wink.gif. Ну просто ДОЛЖНО работать!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.