Помощь - Поиск - Пользователи - Календарь
Полная версия: Скрипты
Город Мастеров > РЕДАКТОРЫ > 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
Chimeric
CODE
int StartingConditional()
{
object oPC = GetPCSpeaker();

if (GetGender(oPC) != GENDER_MALE) return FALSE;

if (!(GetAbilityScore(oPC, ABILITY_INTELLIGENCE) >= 6)) return FALSE;

return TRUE;
}


Должен проверять на пол, мужской, и ум, больше 5. Но не компилируется. Почему?
dumbo
Chimeric
1. скрипт компилится.
2. достаточно одной строки, причем она более понятна, чем то "перекрученное" условие с интой, что приведено у тебя. yes.gif
Neverwinter Script Source
return (GetGender(oPC) == GENDER_MALE &&
            GetAbilityScore(oPC, ABILITY_INTELLIGENCE) > 5);
Vhall
Выдернул из CEPa Use Limitation: Gender. Кроме строк itemprops.2da и itempropsdef.2da за это отвечает какой-то скрипт. Кто знает какой? smile.gif
Chimeric
Ага, компилится он. У тебя, может, и так, а у меня с некоторых пор то там выдаёт отказ, то тут даже со старыми скриптамию Притом я не знаю, заработал ли бы скрипт или нет.
Aiwan
Вот так точно заработает. Но у Думбо оптимальнее.
Neverwinter Script Source
int StartingConditional()
{
object oPC = GetPCSpeaker();

if (GetGender(oPC) != GENDER_MALE || GetAbilityScore(oPC, ABILITY_INTELLIGENCE) <= 6)
    return FALSE;

return TRUE;
}

QUOTE (dumbo @ Sep 17 2005, 11:32)
2. достаточно одной строки, причем она более понятна, чем то "перекрученное" условие с интой, что приведено у тебя.

Это Биовар так извращаются. Зачем, ХЗ. dntknw.gif
AliceDiren
Ребята, я тут впервые, но у мну такой вопрос, как сделать следующее ограничение:
пока герой колдун, волшебник, да вообще любой, кто владеет заклинаниями, пока не найдет определенный предмет(по сюжету модуля)не мог при поднятии уровня выучить определенные заклинания? dntknw.gif
Пример: пока не нашел какой-нибудь ритуальный сгусток огня - герой не может выучить заклинания, управляющие огнем.
Lemegeton
Chimeric, очень распространенная ошибка. Если этот скрипт создавался с помощью визарда, он в шапку собачит какое-то русское слово, содержащее букву "я", что не дает скрипту откомпилится и/или работать, т.к. визард даже не пробует его компилить. pardon.gif

AliceDiren
Ну пожалуйста, помогите!!! shout.gif
Очень, очень нужно.
Lemegeton
AliceDiren, могу только подсказать, как заставить не кастовать, если нет предмета, а вот с заучить... даже не знаю, с чего начать...
AliceDiren
Lemegeton слышала что-то о том, что в 2da файлах можно прописать подобные условия, но это для меня пока слишком сложно. Поэтому и интересуюсь как сделать в скриптах. smile.gif А как ты предлагаешь не кастовать?
_kaa_
QUOTE (AliceDiren @ Sep 23 2005, 17:53)
Ребята, я тут впервые, но у мну такой вопрос, как сделать следующее ограничение:
пока герой колдун, волшебник, да вообще любой, кто владеет заклинаниями, пока не найдет определенный предмет(по сюжету модуля)не мог при поднятии уровня выучить определенные заклинания? dntknw.gif
Пример: пока не нашел какой-нибудь ритуальный сгусток огня - герой не может выучить заклинания, управляющие огнем.

Для сингл-модуля?
Варианты:
1. Контролировать выпадения свитков в лут, т.е. как только игрок поднимает такой свиток - уничтожать его "ой, рассыпался, срок годности вышел". Проще всего поставить на событие модуля onAcquireItem
2. Поправить spellhook и там при попытке кастовать магию без предмета - обламывать. Скрипт вроде так и называется, его вызывают все спеллы, которые можно кастовать.
3. Если ограничения можно поделить по школам магии - (death, illusion и т.п. ) - вешать на игрока шанс провала в этой школе магии при входе в модуль.

Это все более-менее простые варианты, не устроит - будем дальше выдумывать smile.gif
Aiwan
AliceDiren я бы предложил начать с простого. Потом постепенно к сложному. yes.gif
Lemegeton
AliceDiren, с помощью SpellHook'а. Сейчас на память не скажу, но в Лексиконе это точно описывается.
AliceDiren
Aiwan и с чего ты предлагаешь начать?
Добавлено в [mergetime]1127497406[/mergetime]
Lemegeton, _kaa_ , класс, спасибо. Для начала подойдет.
_kaa_ , я имела ввиду немного другое, наверно ты мну не понял. Я хочу, чтобы пока герой не найдет предмет, в мастере поднятия уровня, он просто не увидел бы определенных заклинаний - всмысле их там не должно быть.
Для оружия это было организовать просто - на onPlayerEquipItem скрип, контролирующий, что он одевает. Хочу сразу сказать - палитра инструментов моя, поэтому стандартных предметов в модуле не будет (ну... будут, но в игре не встретятся). Скрипты для ящиков на onOpen и onDeath и пр. мои. А вот как заклинания убрать не пойму.
Добавлено в [mergetime]1127500317[/mergetime]
Ребята, спасибо. X2PreSpellCastCode() - просто класс.
Chimeric
Визард-то у меня английский, откуда там буква "я"? Но всё равно приму к сведению.
Aiwan
AliceDiren ты смотрю не новичок. Тогда юзай спелхук. Просто 99% что приходят, спрашивают мега задачи ктороые ставят их в тупик. Удачи biggrin.gif
п.с. А что за проект? rolleyes.gif
AliceDiren
Aiwan , идея какая - игровой мир древней Руси. Со всеми вытекающими... Из монстров: оборотни, водяные, русалки, шептуны, баечники и т.п. Соответсвующее оружие - рогатины, топоры ... с небольшими изменениями от NWN (магические бонусы к урону). Изменила все названия классов, их описания (для создания атмосферы). Ну и много чего еще.
Добавлено в [mergetime]1127567812[/mergetime]
Всмысле пришлось сильно поработать с dialog.tlk
Aiwan
Здорово. good.gif Мы ждем результатов. Помощь любую тут окажут. Не тереяйся. biggrin.gif
AliceDiren
Aiwan , хочу посоветоваться. Там такая интересность будет - например игрок будет поклоняться богине Маре (богиня смерти), т.е. возрождаться при смерти он будет в ее храме, и неважно воин он или маг, любой класс будет получать фит поднять нежить, как сделать. Я пока придумала самое простое - в слот природной экипировки (4 слота, которые не отображаются в инвентаре) помещаю какой-нибудь предмет, дающий этот фит. Может посоветуете что?
Vhall
QUOTE (AliceDiren @ Sep 24 2005, 21:14)
фит поднять нежить

Так фит Turn Undead или закл Raise Dead?
Если фит, то нужно добавить во все cls_feat_*.2da строку
CODE
#  TurnUndead  294  3  1  1

Хотя, я сам не тестил и, возможно, не все так просто
Добавлено в [mergetime]1127583390[/mergetime]
А закл - да, как ты сказала
AliceDiren
Vhall , я, наверно, неправильно выразилась, я не хочу делать новый фит, я просто даю нужный фит игроку.
QUOTE
Так фит Turn Undead или закл Raise Dead?

именно Turn Undead.
Добавлено в [mergetime]1127584305[/mergetime]
Я просто не поняла - а если не добавлять в 2da, то его нельзя будет дать например воину?
Vhall
cls_feat_*.2da - это не просто список фитов - это список фитов, доступных классу
QUOTE (AliceDiren @ Sep 24 2005, 21:49)
а если не добавлять в 2da, то его нельзя будет дать например воину?

Как фит - нельзя, как item ability - можно
-------
это не скрипты, смею заметить. в этой теме больше не отвечаю
http://www.wrg.ru/forums/index.php?showtop...view=getnewpost
-fenix-
QUOTE (AliceDiren @ Sep 24 2005, 21:49)
Vhall , я, наверно, неправильно выразилась, я не хочу делать новый фит, я просто даю нужный фит игроку.

Как я понял, это и не делается новый фит, ты просто даешь нужный фит сразу всем классам, тоесть в твоей игре он поумолчанию будет у всех вражденный, просто делаешь это через 2da.

В одно время написали smile.gif , может мое сообщение удалить?
NedWarN
Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет.
AliceDiren
Может я конечно дура, но что тебе мешает проиграть визуальный эффект, во время которого удалить один предмет, а на его место поставить другой. Ну что-то вроде:
Neverwinter Script Source
object oOldItem = GetObjectByTag("Таг старого предмета");
location lItemLocation = GetLocation(oOldItem);

ApplyEffectAtLocation(0, EffectVisualEffect(35), lItemLocation);

DestroyObject(oOldItem);
object oNewItem = CreateObject(OBJECT_TYPE_PLACEABLE, "Таг нового предмета", lItemLocation);

angel.gif
Aiwan
QUOTE (NedWarN @ Sep 26 2005, 00:35)
Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет.

Удалить - Создать. Главный полимерф НВН.
2_advanced
QUOTE
Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет.

QUOTE
Удалить - Создать. Главный полимерф НВН.

а если CopyItemAndModify.. многократный.. с извращениями biggrin.gif
а вообще вопрос не ясен..
2_advanced
QUOTE (AliceDiren @ Sep 25 2005, 21:47)
angel.gif

я думаю, что предмет в инвентаре.. и с юз.он.селф становится чем-то иным drag.gif


почему-то сообщение не добавилось к предыдущему this.gif
Аваддон
QUOTE (2_advanced @ Sep 26 2005, 12:36)
QUOTE Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет.

QUOTE Удалить - Создать. Главный полимерф НВН.

а если CopyItemAndModify.. многократный.. с извращениями biggrin.gif а вообще вопрос не ясен..

QUOTE (2_advanced @ Sep 26 2005, 12:36)
я думаю, что предмет в инвентаре.. и с юз.он.селф становится чем-то иным drag.gif


Да не предмет в инвентаре, а "Плактабл" biggrin.gif (Placeable) lol.gif
NedWarN
Пасиба, буду разбиратся.
2_advanced
QUOTE
Да не предмет в инвентаре, а "Плактабл"  (Placeable)

crazy.gif biggrin.gif нужно переводчика нанимать unsure.gif
-fenix-
Блин angry2.gif

Я поставил ХотУ, патч 1.65, а сделать чтобы хенч не отдыхал всеравно не получается sad.gif

Он то отдыхает, то нет, вобщем не понятно все, то ли это глюк, которые ни кто не замечал, то ли я не понимаю как это сделать.
Надо сделать именно с обычным отдыхом, без ForceRest!

Пока самое лучшее, что предумал - это отделение хенча, когда тот не может отдыхать и присоединение после окончания отдыха ПС.

Help me please!!!
AliceDiren
-fenix- , а не пробовал так:
Neverwinter Script Source
object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
AssignCommand(oHench, ClearAllActions());

ну и соответственно по всем хенчам. Отдых ведь тоже действие.
-fenix-
QUOTE (AliceDiren @ Sep 28 2005, 14:51)
-fenix- , а не пробовал так:

А как еще я мог пробовать!!!
У героя это отменяется, а вот у хенча, то отменяет, то нет, галиматья какая-то.
AliceDiren
А просто скрипт из одной строки
Neverwinter Script Source
ClearAllActions();

на OnRested хенча?
-fenix-
QUOTE (AliceDiren @ Sep 28 2005, 15:06)
А просто скрипт из одной строки

НЕТ, уж не знаю, как идет связь между героем и хенчем, чтобы они отдыхали вместе и как вообще все поддерживается и согласуется, но видно как-то хитро и в движке.
При чем при отдыхе НПС запускает скрипт OnRested, но хенч еще и OnPCRest, при этом свой скрипт вроде раньше, чем скрипт на модуле.
В лексеконе написано, что для отмены отдыха у героя нужно использовать ClearAllActions, логично предположить, что и хенчману нужно чистить акции либо в OnRested либо в OnPCRest - однако не катит.
Мож есть хитрость какая?

ЗЫ AliceDiren, былобы все так просто, я бы не спрашивал.
2_advanced
можете считать меня извращенцем this.gif
Neverwinter Script Source
//mod.onPlayerRest:
void main()
{
        object oPC = GetLastPCRested();

        if(GetLastRestEventType() == REST_EVENTTYPE_REST_STARTED)
        {
            int nNth=1;
            object oHench = GetHenchman(oPC, nNth);
            while(GetIsObjectValid(oHench))
            {
                //задержка по 0.1 для сохр. последовательности набора хенчей
                float fDelay = IntToFloat(nNth) * 0.1f;
                DelayCommand(0.0f, RemoveHenchman(oPC, oHench));
                DelayCommand(fDelay, AddHenchman(oPC, oHench));

                nNth++;
                oHench = GetHenchman(oPC, nNth);
            }
        }
}
-fenix-
QUOTE (2_advanced @ Sep 28 2005, 19:04)
можете считать меня извращенцем

Ты ба видел как я недели 3 извращался, но оказывается самый большой извращенец - это мой НВН lol.gif


Мда!!!! Это что-то!!!!!

Мне по ПМ AliceDiren пресылает скрипт

Neverwinter Script Source
void main()
{
object oPC = GetLastPCRested();
object oNPC = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC);
while(GetIsResting(oNPC))
  AssignCommand(oNPC, ClearAllActions());
}


Я значит просто так(потому что уже ставил подобные скрипты) ставлю его на OnRested хенча и убираю скрипт с OnPlayerRest. Кстати, AliceDiren, он утебя точно работал, поидее из-за такого while должна быть ошибка, нужно использовать if.
И все заработало, я в непонятках ставлю старые скрипты crazy.gif и они работают.

Мои скрипты отличались от скрипта AliceDiren, тем, что у них были другии проверки и ПС с хенчем определялись подругому: object oPC = GetFirstPC(), object oHench = GetHenchman(oPC, 1).

Еще у меня теперь НВН иногда при загрузке модулю стала виснуть, серьезно после этого начало, до этого ни разу не висла!!!

З.Ы
Еще я помню, как у меня в сценки не высвечивались фразы над полуорком и за ним стояла говорящая курица.

Не знаю было ли у кого что-то подобное или только мой НВН падкий на такии глюки? dntknw.gif

Все это странно до глупости, но как бы там не было спасибо AliceDiren dntknw.gif

Расцелую 1С, когда они выпустят лицензию!
Анамиэль
Вот скрипт мусорщика ,но эта строка с ошибкой
oItem= GetNextObjectInArea(GetArea((OBJECT_SELF));
собственно что тут не так? кроме скобки лишней, которую я увидела только что
-fenix-
Лишняя скобка, когда ошибка, говори, что пишет компилятор.
QUOTE (Анамиэль @ Oct 1 2005, 12:51)

oItem= GetNextObjectInArea(GetArea((OBJECT_SELF));


А окромя этого, если написано точно так, то oItem не задан тип, должно быть так

Neverwinter Script Source
object oItem = GetNextObjectInArea(GetArea(OBJECT_SELF));




LEX: не, Феникс, если там Next, то был и First, скорее всего там тип и был задан.


-fenix-: скорее всего да, не обратил внимание, но что еще там может быть не правильно кроме скобки?
NedWarN
Очень нужен скрипт. drag.gif Если плейс в локации использует любое заклинание, то все НеПиСи в локе убигали подальше от него, что-нибудь крича. crazy.gif
AliceDiren
QUOTE
Если плейс в локации использует любое заклинание

То есть placeable?
NedWarN , есть вот такая функция:
Neverwinter Script Source
void ActionMoveAwayFromObject(object oFleeFrom, int bRun=FALSE, float fMoveAwayRange=40.0f)

Я использовала вот в таком скрипте:
Neverwinter Script Source
object oSpeller = GetObjectByTag("Таг произнесшего заклинание");
//Ближайший к заклинателю не игрок
object oNPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC);
while(GetIsObjectValid(oNPC))
  {AssignCommand(oNPC, ActionMoveAwayFromObject(oSpeller, TRUE, 50.0));
  oNPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC);
  if(GetDistanceBetween(oSpeller, oNPC) >= 30.0) oNPC = OBJECT_INVALID;}

ИМХО пока в пределах 30 метров от заклинателя будут живые сущ-ва, они будут отбегать от него на расстояние 50 метров.
Но я использовала скрипт в сингл модуле.
Vhall
В соседней теме слышал, что для активации констант кастомных фитов недостаточно столбца 2да, и нужно править какие-то скрипты. Какие и каким образом?
Lex
скрипт nwscript
там прописаны все константы. Там нужно и твою прописать новую. smile.gif

а можно забить на константу и вместо нее указывать ID строки, которая там константе соотв.
(если речь идет о фитах, спелах, полиморфе, апирансе, айтемах... те почти всегда smile.gif )
AliceDiren
А я подумала, плюнула и сделала отдельный скрипт, где указала все свои константы и просто подключаю его в нужные скрипты. Lex , забить можно, но константы все же удобнее. Представь ситуацию когда у тебя в модуле ТОЛЬКО свои классы, к ним соответствующие фиты, и т.д., и т.п. ... Уж проще один раз помучаться, зато потом не будет путаницы с цифрами (номерами) имхо. queen.gif
DEM
Вот простенький скрипт, который забирает у РС 1000 золотых и вещь, но в замен игрок получает какой-то предмет:
Neverwinter Script Source
void main()
{

object oPC = GetPCSpeaker();

object oItem;
oItem = GetItemPossessedBy(oPC, "тэг забираемого итема");

if (GetIsObjectValid(oItem)) DestroyObject(oItem);

AssignCommand(oPC, TakeGoldFromCreature(1000, oPC, TRUE));

object oTarget;
oTarget = GetObjectByTag("ТЭГ получаемого итема");

CreateItemOnObject("res-ref получаемого итема", oTarget);

}
Lex
работать не будет
ты берешь какой-то предмет
Neverwinter Script Source
oTarget = GetObjectByTag("ТЭГ получаемого итема");

и ему даешь айтем с рез-рефом "res-ref получаемого итема".
Ну-ну..

Добавлено в [mergetime]1128247301[/mergetime]
1. вместо
QUOTE (DEM @ Oct 2 2005, 13:46)
object oTarget;
oTarget = GetObjectByTag("ТЭГ получаемого итема");

CreateItemOnObject("res-ref получаемого итема", oTarget);

просто
CreateItemOnObject("res-ref получаемого итема", oPC);

2. ты в диалоге, так что
QUOTE (DEM @ Oct 2 2005, 13:46)
AssignCommand(oPC, TakeGoldFromCreature(1000, oPC, TRUE));

можно напрямую сделать..
TakeGoldFromCreature(1000, oPC);
Chimeric
Люди! Нужна помощь со скриптами. Во-первых, я так и не разобрался с OnAcquireItem. Лилаковский генератор скриптов тоже с этим не помог. Блин... Так вот, нужно, чтобы, когда персонаж поднимет предмет, конкретно - доспехи, уничтожался другой предмет (placeable), конкретно - погасал луч света. Как сделать? Предположим, что tag доспехов Armor, а луча Shaft. Естественно, лучу больше загораться не придётся, так что это единовременная штучка.

Во-вторых (самокритика продолжается) не знаю, как заставить камеру увеличить масштаб. То есть не в роликах, а просто по появлении персонажа в зоне. Пусть дальше игрок увеличивает и уменьшает, как хочет, но в начале - крупный план. Идея в том, чтобы он, каждый раз появляясь в одном и том же месте, постоянно натыкался на увеличенный вид статуи в двух шагах. В двух-то в двух, а увеличение какое было до перемещения между зонами, такое и остаётся. Как поправить?
AliceDiren
Это по поводу брони и луча света.
Neverwinter Script Source
void main()
{
object oItem = GetModuleItemAcquired();
string sItemTag = GetTag(oItem);
object oSpam = OBJECT_INVALID;

if(sItemTag == "Armor")
  {
  oSpam = GetObjectByTag("Shaft");
  DestroyObject(oSpam);
  }
}
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.