Элендор
Feb 4 2005, 21:39
Доброе време суток вощем у меня к вам 1 прозьба...
Даите плз сылку на скрипт магазина( там где через некоторое време во време игры когда туда будет положена вещ она пропадает)...
QUOTE (Bregolas @ Feb 4 2005, 22:46) |
я то как раз заметил, и спрашиваю, как поправить x0_i0_anims и в нем ли дело! |
Править? Ручками... Либо взять старый и сделать импорт к себе. Думаешь все тебе расскажут что исправили? Ага... Они как то исправили работу с OBJECT_SELF в скриптах, так у нас рухнули все катсцены разом и прочие скрипты с задержкой на исполнение с OBJECT_SELF. Мы ж не идиоты, год все работало и вдруг сломалось

Так то...
QUOTE (Bregolas @ Feb 4 2005, 22:46) |
Я просто задал вопрос "можно ли". Я не спрашивал "править ли мне" |
В вашх словах слышится раздрожение... Никоем образом не хотел задеть и прочее. И рекомендую с этим не баловать, народ тут вежливый и самолюбивый. Пара постов и ответы никто не напишет
Ну, я скажу так. Сделать мод на левел 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
Feb 5 2005, 00:30
возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу.
Еды 10 видов и соответственно 10 тегов. Уничьтожается сразу после соответствия на все проверки наличия предметов. По правилу вес съединой пищи должен быть 1/20 от жизни героя (вес прямо связан с тегом тобиш это можно отбросить из того что мне не понятно) но не меньше 1 шт. еды.
(вродеб правильно написал, хотя может и заблуждаюсь как это должно выглядет в конечьном виде).
Огромное спасибо кто удили мне свое внимание.
Добавлено в [mergetime]1107553110[/mergetime]
Количество еды в сумке определяется самим игроком тобиш может быть как 1 вида так и всех 10. Все 10 видов можно спокойно есть (условия на на проверку наличие пистицедов не требуется, и наложение дополнителльных побочьных эффектов как плохих так и хороших)
QUOTE (Oksivarus @ Feb 5 2005, 03:30) |
возможно и просто но вот строчьку ExecuteScript("script_rest", oPC); я вообще не понимаю прост с такой функцие вообще не стыкался ниразу. |
Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся.
Tiger Greyhawk
Feb 5 2005, 04:07
QUOTE (Oksivarus @ Feb 5 2005, 00:30) |
Еды 10 видов и соответственно 10 тегов |
А кроме как кушать это еда нужна еще где-то? Почему не сделать одинаковые тэги? А вес проверять функцией
Neverwinter Script Source |
int GetWeight(object oTarget=OBJECT_SELF) |
Это решение данного вопроса. Если ты хочешь разобраться с самой сутью перебора вещей в по части тэга инвентори, то извини, что я ввязался.
Oksivarus
Feb 5 2005, 11:26
я извиняюсь (просто я немец так сказать

) и насколько я понял функцию GetWeight возвращяет вес предметов но это мне НЕ НУЖНО,я вес просто привязал к номеру (№1 - 1 кг .... №10 50 кг).
одинаковые теги нельзя так как на магазин я повесил удалитель одинаковых вещей в соответствии с чем при одинаковых тегах останется только 1 вид еды.
Еда используется 2 путями:
1- когда игрок просто отдыхает с востановлением всех сил (простое удаление из инвентаря)
2- использует как предмет и в соответстви с тем что скушал получяет некий бонус.
Так вот
QUOTE (Aiwan @ Feb 5 2005, 01:42) |
Эта функция просто запускает скрипт с именем "script_rest" на объект РС. Тоесть, у тебя сработали все условия по проверке еды и дров, запускай скрипт отдыха. И усе, радуйся. |
Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem))
QUOTE (Oksivarus @ Feb 5 2005, 14:26) |
Как я уже говорил с этим вродеб разобрался за что вам огромное спасибо, НО как после перебора всех вещей в инвентаре и ненахождения необходимого застаивть сделать конкретное действие - сказать "у вас нет этого предмета". что в данной ситуации вернет функция - while (GetIsObjectValid(oItem)) |
Твой метод тянуть кота за хвост меня выбивает из колеи

Коней на переправе не меняють

Давай так, ты выложишь подробно ВСЕ свои УСЛОВИЯ что и как и теги, а мы тебе поможем. А ГЛАВНОЕ ЧТО ТЫ ОТ НЕГО (и нас

ХОЧЕШЬ) Потаму как твой один скрипт с вопросами: "А вот если..." может перерасти в спам тему. Ждемс...
Oksivarus
Feb 5 2005, 14:16
Ок я у меня в скрипте написана следающяя строчька (перед этим разные условия на наличие предметов но все они с 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
Feb 5 2005, 20:59
Чтоб не тянуть кота за хвост выложу сразу получившийся скрипт.
Проблема - не могу удалить найденную благодаря вам еду. Для удаления использую функцию 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);
}
}
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
Feb 5 2005, 23:35
огромное спасибо, буду дальше пробывать.
Aiwan: Давай, работай!
Oksivarus
Feb 6 2005, 17:17
Вобщем промучялся вчерашний день и всю ночь и так и не смог заставить скрипт удалять предметы при заднаии на удаление функцией DestroyObject(oItem); удаляет только если прямо указать тег обьекта.
ЧТО касается остального то спасибо работает хотя я всетаки обьеденил 2 скрипта в 1 (просто что 2 что 1 никаких отличий в его работе).
Скрипт польностью рабочий хотя сократить его так и не удалось(за основу взял твой Aiwan скрипт на отдых но без проверки на костер). Если хотете могу выложить правда незнаю куда его сюда или в раздел скриптов.
P.S. ВСЕМ КТО помогал ОГРОМНОЕ СПАСИБО без вас небылоб его !!!
QUOTE (Oksivarus @ Feb 6 2005, 20:17) |
Вобщем промучялся вчерашний день и всю ночь и так и не смог заставить скрипт удалять предметы при заднаии на удаление функцией DestroyObject(oItem); удаляет только если прямо указать тег обьекта. |
Что то я не понял. В моем коде? Если да, то так и будет, так как ты объеденил их в один. Разъедини и будет удалять, у меян же удаляет! Я ПРОВЕРЯЛ И ТЕСТИЛ СПЕЦИАЛЬНО В МОДЕ.
Скрипт кидай сюда, вылижим и повесишь в базу готовый безглючный вариант с описаловом. Только скрипт сделай в nss кнопке.
Archangel
Feb 6 2005, 20:06
Привет всем! Я новичок на этом форуме, так что, если что-то не то ляпну, то поправте.
Я понимаю, что у всех полно дел, но немог бы кто-нибудь помочь мне со скриптами разобраться?
Я ни как не пойму как написать такой скрипт:
К примеру эльф дает тебе задание убить гнома, ты его убиваешь.......
А вот дальше и загвостка.... Как сделать так, чтобы после смерти гнома у эльфа появилась строчка в диалоге: "Я убил гнома".
ПОЖАЛУЙСТА помогите кто может!
MasterMage
Feb 6 2005, 21:11
Ставишь локальную переменную на слот OnDeath NPCа...
Neverwinter Script Source |
SetLocalInt(GetLastKiller(),"Kill",1); |
Затем в диалоге на строку "текст появляется при" ставишь такое
Neverwinter Script Source |
return(GetLocalInt(GetPCSpeaker(),"Kill")==1); |
вуаля, строчка диалога не появится, пока не выполнишь условие
Archangel
Feb 6 2005, 21:13
Спасибо MasterMage! Очень помог!
<small>
Добавлено в 21:22</small>
Еще два вопроса по поводу скриптов:
1) Можно ли сделать такой скрипт: когда игрок надевает кольцо (амулет) он превращался в вампира.
2) Можно ли сделать так, чтобы стало возможно говорить со статуей? Или другим неодушевленным предметом....
Пожалуйста уделите пару минут внимания геймеру, нифурычущему в скриптах....
Friedrich
Feb 6 2005, 22:59
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 эффект снимай
1. Нельзя насовсем превратить игрока в вампира.
2. Добавь объекту диалог и на OnUsed объекта поставь скрипт:
Neverwinter Script Source |
void main() { ActionStartConversation(GetLastUsedBy()); } |
Archangel
Feb 7 2005, 11:36
Угу, понял насщет разговора со статуей. СПАСИБО.........
А вот насщет превращения в вампа хотел бы уточнить

Мне и ненадо чтобы игрок навсегда стал вампиром! Я хочу сделать так: одел колечко-стал вампом, снял-стал самим собой...
Если знаешь такой скрипт, то пажалуйста напиши.........
K.SpecTr
Feb 7 2005, 12:08
Нужно, чтобы действие одного скрипта прекращалось по возврату другого скрипта, т.е. есть действия с задержкой и надо их отменить, если что-то произошло в другом скрипте.
Пока сделал следующим образом:
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 ?
QUOTE (Archangel @ Feb 7 2005, 10:36) |
Мне и ненадо чтобы игрок навсегда стал вампиром! Я хочу сделать так: одел колечко-стал вампом, снял-стал самим собой... Если знаешь такой скрипт, то пажалуйста напиши......... |
Не в скрипте дело. Для этого, представь себе, надо создать и описать ПОЛНОСТЬЮ все вампирские бонусы, создать спец-умения, фиты, скиллы... Да просто дофига работы НЕ ДЛЯ НОВИЧКА. Так что, я бы посоветовал тебе пока порешать проблемы более тривиальные. То есть научиться прежде всего работать с самими скриптами.
Archangel
Feb 7 2005, 12:25
Все понял. Забиваю на это дело.
Люди! У меня опять косяки со скриптами!
Вот мой злаполучный скрипт (он вырван из 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`ов говорить то, что хочу я? Помогите кто может..........
<small>
Добавлено в 12:30</small>
Oksivarus
Feb 7 2005, 13:25
Aiwan - скриптец я выложу но чуть посже на сладующюя страницу.
А что касается именно твоих 2 скриптом то повторюсь - я их пробывал юзать как отдельно каждый (запускается 1 который вызывает 2) так и 1 общий.
Возник вопрос в соответствии с твоим утверждением о его работоспособности - ты тестил с крипты в сингле ??? Я проверял его работу на шарде вот что он сообщал приналичии в рюкзаке 3шт любой еды (я дополнил строчьку чтоб говорила переменную FOOD)
отдых начят
одын 1
одын 2
одын 3
потерян предмет бедрол
одын 1
одын 2
одын 3
получен предмет бедрол
отдых закончен
ни о каком удалении предметов с нужными тегами (food_1, food_2, food_3) речи вообще не идет.
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
Feb 7 2005, 15:55
Ну блин.... Я ж не знал.
А тогда не подскажете как написать скрипты, которые можно было бы вставить в разговор и которые давали + или - к направленности героя или скрипт, который прибавлял какую-нибудь хар-ку (например сила+2)?
QUOTE (Oksivarus @ Feb 7 2005, 16:25) |
Возник вопрос в соответствии с твоим утверждением о его работоспособности - ты тестил с крипты в сингле ??? Я проверял его работу на шарде вот что он сообщал приналичии в рюкзаке 3шт любой еды (я дополнил строчьку чтоб говорила переменную FOOD) |
Блин, ну естественно!
Neverwinter Script Source |
object oPC = GetFirstPC(); // Возьми ПЕРВОГО ПОПАВШЕГО ИГРОКА! |
А на шарде их тонна может быть.
Archangel почитай мою статью и тему про катсцены и учись с простого. 2 НПС и пара действий и дальше...
Archangel
Feb 7 2005, 20:50
Aiwan, я че-то не могу найти эту статью, весь сайт облазил

Напиши поподробнее пожалуйста..........
Proydoha
Feb 7 2005, 21:02
Вопрос: Есть ли скрипт повышающий статы или навыки на один или несколько пунктов. (Повышает, а не изменяет). Например: NPC: "Спасибо что сделал для меня эту работу. За это я научу тебя разряжать ловушки" \Скрипт прибавляющий скажем +1 к навыку разрядки ловушек\
Возможно ли это?
Oksivarus
Feb 7 2005, 21:14
Вопрос - как монстра сделать срасивую статую тобиш чтоб он стол и нина что не реагировал причем также не поворочивал головы или не махал хвостом (простое удалени скриптов не помагает) - видел в одном маленьком модуле но чето тогда не надобыло не посмотрел как сделали, а сейчяс не могу нати где видел.
а вот рабочий скрипт на отдых в котором проверяется наличие еды и бедрола. Еды может быть 10 видов (food_0 ..... food_9), тег food соответствует старой еде и дабы не рыскать где я ее рассовал по всему шарду удаляется первой. В основе скрипта лежит скрипт Айвана на отдых и скрипты из данной темы.
Если сможете оптимизировать строчьки буду только рад (правда проблема оптимизации так и осталась не решенной).
Neverwinter Script Source |
if (HasItem(oPC,"food")==TRUE) { DestroyObject(GetItemPossessedBy(oPC,"food")); } |
ВСЕМ КТО ПРИЛОЖИЛ К ЭТОМУ СПАСИБО ОТ СЕБЯ И ОТ ИГРОКОВ ШАРДА

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);
} }
} |
QUOTE (Archangel @ Feb 7 2005, 23:50) |
Aiwan, я че-то не могу найти эту статью, весь сайт облазил Напиши поподробнее пожалуйста.......... |
QUOTE (Oksivarus @ Feb 8 2005, 00:14) |
ВСЕМ КТО ПРИЛОЖИЛ К ЭТОМУ СПАСИБО ОТ СЕБЯ И ОТ ИГРОКОВ ШАРДА |
На здоровье!
Archangel
Feb 7 2005, 22:17
Челы, HELP!
Ничего не могу понять, в чем косяк скрипта:
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 спасибо за ссылку.......
Вообще говоря это не скрипт. Это набор функций и переменных, написанных в общем виде.
QUOTE (Oksivarus @ Feb 7 2005, 20:14) |
Вопрос - как монстра сделать срасивую статую тобиш чтоб он стол и нина что не реагировал причем также не поворочивал головы или не махал хвостом (простое удалени скриптов не помагает) - видел в одном маленьком модуле но чето тогда не надобыло не посмотрел как сделали, а сейчяс не могу нати где видел. |
По-моему есть вижуал эффект FREEZE_ANIMATION... Вроде бы им сделано.
Tiger Greyhawk
Feb 8 2005, 03:52
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
Feb 8 2005, 10:45
По поводу моего вопроса о задержке+отмене действий скрипта?
Что, выходит нет другого решения?

Обыдно.
QUOTE (Tiger Greyhawk @ Feb 8 2005, 02:52) |
Вопрос: будет ли в этом случак жрать ресурсы задержка? |
Да, будет. Это довольно известный способ. Для сингла он чреват. Представь, стоит у тебя DelayCommand. Игрок делает SaveGame на 47-й секунде, думаешь в сохраненке корректно сохранится оставшееся время, когда игрок загрузится с нее? Неа. Хотя где-то с десяток делэев вроде еще ничего, более или менее точно сохраняются, но если больше...
QUOTE (Tiger Greyhawk @ Feb 8 2005, 02:52) |
А почему не так: искомый предмет создавать в последний момент (после успешной проверки навыков)? Конечно не во всех случаях подходит. |
Имхо, Балрог другое имел в виду. Он хотел убрать подсветку с неписей и PC при наведении на них мыши.
Oksivarus
Feb 8 2005, 11:08
По поводу Статуи из монстра - я вот нашел только вот это что вродеб подходит VFX_DUR_FREEZE_ANIMATION но я незнаю как его использовать неподскажете пожалуста.
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectVisualEffect( VFX_DUR_FREEZE_ANIMATION), oNPC); - вот так вроде. Тулсета нет под руками.
Archangel
Feb 8 2005, 14:54
Че-то я ни как не могу разобраться с написанием скриптов!
Накачал столько статей, все их перечитал........
Ну блин хоть тресни!
Я еле-еле научился писать самые простейшие скрипты типа ActoinSpeakString, ActionDoCommand и т.д.
А все остальное не получается!
Че блин делать? Я в растерености.........
Прям хоть на редактор забивай.......
Главное ж обидно пацаны! Идей куча, а как их воплотить в жизнь не знаю........
Если кто-то согласится мне помочь лично, то с радостью приму любую помощь!
Уж не брезгуйте, ПОМОГИТЕ КТО ЧЕМ МОЖЕТ.........
Archangel Не расстраивайся. Все мы прошли твой уровень когда-то.

Сколько ты занимаешься скриптами?.. Я, например, чтобы впервые написать появление объекта в игре CreateObject'ом, мучился с неделю. До этого, чтобы вообще вникнуть в суть скриптинга сидел и читал недели 2 Лексикон на инглише. Вот так вот перло. И думал - никогда я этому не научусь! Хотел кинуть... Но прошел месяц-полтора тренировок и общения на форуме с мастерами и скрипты начали выглядеть стройнее, сложнее, продуманнее... Научить можно даже медведя кататься на велосипеде и ходить на передних лапах, а ты говоришь, про себя, человека...
Archangel я живой пример обучения с ноля. ДБ мне писал письма как и зачем присвоить локалку

а я их читал и думал... пипец... вот хрень...

Потом пришел период я начал драть строки скриптов ДБа и вставлять, мало понимая суть. но работало.

Косячило ингода. потом я начал вникать в суть процесса. Главное все это произошло когда меня послали с подтестом, пиши сам. И я начал писать. Но скажу честно, скриптер я слабый.
Oksivarus
Feb 8 2005, 18:27
evil-SHADOW
Feb 8 2005, 19:38
Захотел исправить скрипт 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
Только начинаю учится скриптить для НВН, поэтому просьба ногами не пинать
Archangel
Feb 8 2005, 19:39
Aiwan,Oksivarus и DBColl спасибо за поддержку!

Я конечно понимал, что будет нелегко....
Я лично только с самим редактором разбирался где-то месяц, а может больше...
Затем сам научился писать самые простые скрипты, а те, которые казались сложными, выдирал
из оригинального NWN.Но со временем хотелось чего-то большего... но мозгов на большее не хватало.
Затем я еще где-то месяц ничего не мог поделать со скриптами.И из-за этого создавал лишь пустые локации....
Но как-то зашел на этот форум и понял-вот оно мое СПАСЕНИЕ! Зарегистрировался и начал задавать
вопросы... и похоже уже через пару дней достал всех своими глупыми,как наверно кажется вам,
но отнюдь не кажется мне, вопросами....
И вот опять нашло это угнетенное настроение......
НО ВЫ ПОДДЕРЖАЛИ МЕНЯ.....
ОГРОМНОЕ ВАМ СПАСИБО ЧЕЛЫ!
И, если еще какие-нибудь вопросы покажутся вам глупыми, то пожалуйста не гневайтесь на меня..
Я ведь еще только учусь......
ЕЩЕ РАЗ СПАСИБО ВАМ, ЗА ТО,ЧТО ПОДАРИЛИ МНЕ НАДЕЖДУ........
Добавлено в [mergetime]1107881294[/mergetime] Здрасте все. У меня тута пару вопросиков накопилось, не подскажете как их решить:
1) Как сделать так, чтобы можно было во время разговора(т.е. нажимаешь в разговоре c NPC "перенеси меня в другую локу") перенестись в другую локу?(Навсегда)
2) Можно ли сделать так, чтобы после того, как НеПиСь даст тебе задание эта строчка в диалоге исчезала(ну всмысле строка с заданием)?
Помогите кто может.
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-файл) на нашем сайте в разделе Статьи.
evil-SHADOW ты залез в чужой сложный код. Этот спас может включаться не только в этом скрипте, а еще черти где. Вообще Биоварские скрипты надо ковырять осторожненько...
Archangel
Feb 8 2005, 21:35
DBColl я че-то недогоняю.......
Я делаю все как ты сказал, но вместо перемещенея в новую локу игрока у меня обрывается
разговор...
Скорее всего я че-то напутал. Вейпоинт-это ведь точка маршрута(почему-то интуиция мне подсказывает,что это что-то другое)?
Oksivarus
Feb 8 2005, 21:41
К вопросику по статуе, сразу скажу шикарная вещь получилась особенно если ее применить к летунам когда они токо появляются и в фазе полета замерзают, ну это так сказать неудержался чтоб не вылить свою радость

В продолжение к предыдущему вопросу как сделат чтоб теперь эта статуя не поворачивалась когда с ней пытаются поговорить - когда на ней кликаеш разворачивается лицом к игроку что вроде б не свойственно статуе.
evil-SHADOW
Feb 8 2005, 22:03
QUOTE |
evil-SHADOW ты залез в чужой сложный код. Этот спас может включаться не только в этом скрипте, а еще черти где. Вообще Биоварские скрипты надо ковырять осторожненько...
|
Ну ведь правили на многих шардах эти Исааки. Значит, можно сделать

Просто хочется сделать людям приятное, а то тут у нас многие уже ругаются, что мол, читерство

К кому бы мне обратиться?
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("тэг_вейпоинта")); } |
Попробуй еще так

. Ну просто ДОЛЖНО работать!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.