2_advanced
Sep 13 2005, 18:31
Chimeric
Sep 17 2005, 08:16
CODE |
int StartingConditional() { object oPC = GetPCSpeaker();
if (GetGender(oPC) != GENDER_MALE) return FALSE;
if (!(GetAbilityScore(oPC, ABILITY_INTELLIGENCE) >= 6)) return FALSE;
return TRUE; } |
Должен проверять на пол, мужской, и ум, больше 5. Но не компилируется. Почему?
Chimeric1. скрипт компилится.
2. достаточно одной строки, причем она более понятна, чем то "перекрученное" условие с интой, что приведено у тебя.

Neverwinter Script Source |
return (GetGender(oPC) == GENDER_MALE && GetAbilityScore(oPC, ABILITY_INTELLIGENCE) > 5); |
Выдернул из CEPa Use Limitation: Gender. Кроме строк itemprops.2da и itempropsdef.2da за это отвечает какой-то скрипт. Кто знает какой?
Chimeric
Sep 23 2005, 11:06
Ага, компилится он. У тебя, может, и так, а у меня с некоторых пор то там выдаёт отказ, то тут даже со старыми скриптамию Притом я не знаю, заработал ли бы скрипт или нет.
Вот так точно заработает. Но у Думбо оптимальнее.
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. достаточно одной строки, причем она более понятна, чем то "перекрученное" условие с интой, что приведено у тебя. |
Это Биовар так извращаются. Зачем, ХЗ.
AliceDiren
Sep 23 2005, 16:53
Ребята, я тут впервые, но у мну такой вопрос, как сделать следующее ограничение:
пока герой колдун, волшебник, да вообще любой, кто владеет заклинаниями, пока не найдет определенный предмет(по сюжету модуля)не мог при поднятии уровня выучить определенные заклинания?
Пример: пока не нашел какой-нибудь ритуальный сгусток огня - герой не может выучить заклинания, управляющие огнем.
Lemegeton
Sep 23 2005, 17:32
Chimeric, очень распространенная ошибка. Если этот скрипт создавался с помощью визарда, он в шапку собачит какое-то русское слово, содержащее букву "я", что не дает скрипту откомпилится и/или работать, т.к. визард даже не пробует его компилить.
AliceDiren
Sep 23 2005, 18:29
Ну пожалуйста, помогите!!!
Очень, очень нужно.
Lemegeton
Sep 23 2005, 18:46
AliceDiren, могу только подсказать, как заставить не кастовать, если нет предмета, а вот с заучить... даже не знаю, с чего начать...
AliceDiren
Sep 23 2005, 18:53
Lemegeton слышала что-то о том, что в 2da файлах можно прописать подобные условия, но это для меня пока слишком сложно. Поэтому и интересуюсь как сделать в скриптах.

А как ты предлагаешь не кастовать?
QUOTE (AliceDiren @ Sep 23 2005, 17:53) |
Ребята, я тут впервые, но у мну такой вопрос, как сделать следующее ограничение: пока герой колдун, волшебник, да вообще любой, кто владеет заклинаниями, пока не найдет определенный предмет(по сюжету модуля)не мог при поднятии уровня выучить определенные заклинания? Пример: пока не нашел какой-нибудь ритуальный сгусток огня - герой не может выучить заклинания, управляющие огнем. |
Для сингл-модуля?
Варианты:
1. Контролировать выпадения свитков в лут, т.е. как только игрок поднимает такой свиток - уничтожать его "ой, рассыпался, срок годности вышел". Проще всего поставить на событие модуля onAcquireItem
2. Поправить spellhook и там при попытке кастовать магию без предмета - обламывать. Скрипт вроде так и называется, его вызывают все спеллы, которые можно кастовать.
3. Если ограничения можно поделить по школам магии - (death, illusion и т.п. ) - вешать на игрока шанс провала в этой школе магии при входе в модуль.
Это все более-менее простые варианты, не устроит - будем дальше выдумывать
AliceDiren я бы предложил начать с простого. Потом постепенно к сложному.
Lemegeton
Sep 23 2005, 19:50
AliceDiren, с помощью SpellHook'а. Сейчас на память не скажу, но в Лексиконе это точно описывается.
AliceDiren
Sep 23 2005, 19:55
Aiwan и с чего ты предлагаешь начать?
Добавлено в [mergetime]1127497406[/mergetime]
Lemegeton, _kaa_ , класс, спасибо. Для начала подойдет.
_kaa_ , я имела ввиду немного другое, наверно ты мну не понял. Я хочу, чтобы пока герой не найдет предмет, в мастере поднятия уровня, он просто не увидел бы определенных заклинаний - всмысле их там не должно быть.
Для оружия это было организовать просто - на onPlayerEquipItem скрип, контролирующий, что он одевает. Хочу сразу сказать - палитра инструментов моя, поэтому стандартных предметов в модуле не будет (ну... будут, но в игре не встретятся). Скрипты для ящиков на onOpen и onDeath и пр. мои. А вот как заклинания убрать не пойму.
Добавлено в [mergetime]1127500317[/mergetime]
Ребята, спасибо. X2PreSpellCastCode() - просто класс.
Chimeric
Sep 23 2005, 23:54
Визард-то у меня английский, откуда там буква "я"? Но всё равно приму к сведению.
AliceDiren ты смотрю не новичок. Тогда юзай спелхук. Просто 99% что приходят, спрашивают мега задачи ктороые ставят их в тупик. Удачи
п.с. А что за проект?
AliceDiren
Sep 24 2005, 16:07
Aiwan , идея какая - игровой мир древней Руси. Со всеми вытекающими... Из монстров: оборотни, водяные, русалки, шептуны, баечники и т.п. Соответсвующее оружие - рогатины, топоры ... с небольшими изменениями от NWN (магические бонусы к урону). Изменила все названия классов, их описания (для создания атмосферы). Ну и много чего еще.
Добавлено в [mergetime]1127567812[/mergetime]
Всмысле пришлось сильно поработать с dialog.tlk
Здорово.

Мы ждем результатов. Помощь любую тут окажут. Не тереяйся.
AliceDiren
Sep 24 2005, 20:14
Aiwan , хочу посоветоваться. Там такая интересность будет - например игрок будет поклоняться богине Маре (богиня смерти), т.е. возрождаться при смерти он будет в ее храме, и неважно воин он или маг, любой класс будет получать фит поднять нежить, как сделать. Я пока придумала самое простое - в слот природной экипировки (4 слота, которые не отображаются в инвентаре) помещаю какой-нибудь предмет, дающий этот фит. Может посоветуете что?
QUOTE (AliceDiren @ Sep 24 2005, 21:14) |
фит поднять нежить |
Так фит Turn Undead или закл Raise Dead?
Если фит, то нужно добавить во все cls_feat_*.2da строку
CODE |
# TurnUndead 294 3 1 1 |
Хотя, я сам не тестил и, возможно, не все так просто
Добавлено в [mergetime]1127583390[/mergetime]
А закл - да, как ты сказала
AliceDiren
Sep 24 2005, 20:49
Vhall , я, наверно, неправильно выразилась, я не хочу делать новый фит, я просто даю нужный фит игроку.
QUOTE |
Так фит Turn Undead или закл Raise Dead? |
именно Turn Undead.
Добавлено в [mergetime]1127584305[/mergetime]
Я просто не поняла - а если не добавлять в 2da, то его нельзя будет дать например воину?
cls_feat_*.2da - это не просто список фитов - это список фитов, доступных классу
QUOTE (AliceDiren @ Sep 24 2005, 21:49) |
а если не добавлять в 2da, то его нельзя будет дать например воину? |
Как фит - нельзя, как item ability - можно
-------
это не скрипты, смею заметить. в этой теме больше не отвечаю
http://www.wrg.ru/forums/index.php?showtop...view=getnewpost
-fenix-
Sep 24 2005, 20:56
QUOTE (AliceDiren @ Sep 24 2005, 21:49) |
Vhall , я, наверно, неправильно выразилась, я не хочу делать новый фит, я просто даю нужный фит игроку. |
Как я понял, это и не делается новый фит, ты просто даешь нужный фит сразу всем классам, тоесть в твоей игре он поумолчанию будет у всех вражденный, просто делаешь это через 2da.
В одно время написали

, может мое сообщение удалить?
NedWarN
Sep 25 2005, 21:35
Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет.
AliceDiren
Sep 25 2005, 21:47
Может я конечно дура, но что тебе мешает проиграть визуальный эффект, во время которого удалить один предмет, а на его место поставить другой. Ну что-то вроде:
Neverwinter Script Source |
object oOldItem = GetObjectByTag("Таг старого предмета"); location lItemLocation = GetLocation(oOldItem);
ApplyEffectAtLocation(0, EffectVisualEffect(35), lItemLocation);
DestroyObject(oOldItem); object oNewItem = CreateObject(OBJECT_TYPE_PLACEABLE, "Таг нового предмета", lItemLocation); |
QUOTE (NedWarN @ Sep 26 2005, 00:35) |
Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет. |
Удалить - Создать. Главный полимерф НВН.
2_advanced
Sep 26 2005, 12:32
QUOTE |
Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет. |
QUOTE |
Удалить - Создать. Главный полимерф НВН. |
а если CopyItemAndModify.. многократный.. с извращениями
а вообще вопрос не ясен..
2_advanced
Sep 26 2005, 12:36
QUOTE (AliceDiren @ Sep 25 2005, 21:47) |
|
я думаю, что предмет в инвентаре.. и с юз.он.селф становится чем-то иным
почему-то сообщение не добавилось к предыдущему
Аваддон
Sep 26 2005, 13:01
QUOTE (2_advanced @ Sep 26 2005, 12:36) |
QUOTE Подскожите, пожалуйста скрипт, замены Плактабла. Типа полиморфа, только на предмет.
QUOTE Удалить - Создать. Главный полимерф НВН.
а если CopyItemAndModify.. многократный.. с извращениями biggrin.gif а вообще вопрос не ясен.. |
QUOTE (2_advanced @ Sep 26 2005, 12:36) |
я думаю, что предмет в инвентаре.. и с юз.он.селф становится чем-то иным drag.gif |
Да не предмет в инвентаре, а "Плактабл"

(Placeable)
NedWarN
Sep 26 2005, 15:50
Пасиба, буду разбиратся.
2_advanced
Sep 26 2005, 17:09
QUOTE |
Да не предмет в инвентаре, а "Плактабл" (Placeable) |
-fenix-
Sep 28 2005, 13:44
Блин
Я поставил ХотУ, патч 1.65, а сделать чтобы хенч не отдыхал всеравно не получается
Он то отдыхает, то нет, вобщем не понятно все, то ли это глюк, которые ни кто не замечал, то ли я не понимаю как это сделать.
Надо сделать именно с обычным отдыхом, без ForceRest!
Пока самое лучшее, что предумал - это отделение хенча, когда тот не может отдыхать и присоединение после окончания отдыха ПС.
Help me please!!!
AliceDiren
Sep 28 2005, 13:51
-fenix- , а не пробовал так:
Neverwinter Script Source |
object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, oPC); AssignCommand(oHench, ClearAllActions()); |
ну и соответственно по всем хенчам. Отдых ведь тоже действие.
-fenix-
Sep 28 2005, 14:03
QUOTE (AliceDiren @ Sep 28 2005, 14:51) |
-fenix- , а не пробовал так: |
А как еще я мог пробовать!!!
У героя это отменяется, а вот у хенча, то отменяет, то нет, галиматья какая-то.
AliceDiren
Sep 28 2005, 14:06
А просто скрипт из одной строки
Neverwinter Script Source |
ClearAllActions(); |
на OnRested хенча?
-fenix-
Sep 28 2005, 14:59
QUOTE (AliceDiren @ Sep 28 2005, 15:06) |
А просто скрипт из одной строки |
НЕТ, уж не знаю, как идет связь между героем и хенчем, чтобы они отдыхали вместе и как вообще все поддерживается и согласуется, но видно как-то хитро и в движке.
При чем при отдыхе НПС запускает скрипт OnRested, но хенч еще и OnPCRest, при этом свой скрипт вроде раньше, чем скрипт на модуле.
В лексеконе написано, что для отмены отдыха у героя нужно использовать ClearAllActions, логично предположить, что и хенчману нужно чистить акции либо в OnRested либо в OnPCRest - однако не катит.
Мож есть хитрость какая?
ЗЫ AliceDiren, былобы все так просто, я бы не спрашивал.
2_advanced
Sep 28 2005, 18:04
можете считать меня извращенцем

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-
Sep 28 2005, 20:55
QUOTE (2_advanced @ Sep 28 2005, 19:04) |
можете считать меня извращенцем |
Ты ба видел как я недели 3 извращался, но оказывается самый большой извращенец - это мой НВН
Мда!!!! Это что-то!!!!!
Мне по ПМ
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.
И все заработало, я в непонятках ставлю старые скрипты

и они работают.
Мои скрипты отличались от скрипта
AliceDiren, тем, что у них были другии проверки и ПС с хенчем определялись подругому: object oPC = GetFirstPC(), object oHench = GetHenchman(oPC, 1).
Еще у меня теперь НВН иногда при загрузке модулю стала виснуть, серьезно после этого начало, до этого ни разу не висла!!!
З.Ы
Еще я помню, как у меня в сценки не высвечивались фразы над полуорком и за ним стояла говорящая курица.
Не знаю было ли у кого что-то подобное или только мой НВН падкий на такии глюки?
Все это странно до глупости, но как бы там не было спасибо
AliceDiren
Расцелую 1С, когда они выпустят лицензию!
Анамиэль
Oct 1 2005, 11:51
Вот скрипт мусорщика ,но эта строка с ошибкой
oItem= GetNextObjectInArea(GetArea((OBJECT_SELF));
собственно что тут не так? кроме скобки лишней, которую я увидела только что
-fenix-
Oct 1 2005, 12:03
Лишняя скобка, когда ошибка, говори, что пишет компилятор.
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
Oct 1 2005, 21:56
Очень нужен скрипт.

Если плейс в локации использует любое заклинание, то все НеПиСи в локе убигали подальше от него, что-нибудь крича.
AliceDiren
Oct 1 2005, 22:41
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 метров.
Но я использовала скрипт в сингл модуле.
В соседней теме слышал, что для активации констант кастомных фитов недостаточно столбца 2да, и нужно править какие-то скрипты. Какие и каким образом?
скрипт nwscript
там прописаны все константы. Там нужно и твою прописать новую.

а можно забить на константу и вместо нее указывать ID строки, которая там константе соотв.
(если речь идет о фитах, спелах, полиморфе, апирансе, айтемах... те почти всегда

)
AliceDiren
Oct 2 2005, 00:07
А я подумала, плюнула и сделала отдельный скрипт, где указала все свои константы и просто подключаю его в нужные скрипты.
Lex , забить можно, но константы все же удобнее. Представь ситуацию когда у тебя в модуле ТОЛЬКО свои классы, к ним соответствующие фиты, и т.д., и т.п. ... Уж проще один раз помучаться, зато потом не будет путаницы с цифрами (номерами) имхо.
Вот простенький скрипт, который забирает у РС 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);
} |
работать не будет
ты берешь какой-то предмет
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
Oct 4 2005, 14:02
Люди! Нужна помощь со скриптами. Во-первых, я так и не разобрался с OnAcquireItem. Лилаковский генератор скриптов тоже с этим не помог. Блин... Так вот, нужно, чтобы, когда персонаж поднимет предмет, конкретно - доспехи, уничтожался другой предмет (placeable), конкретно - погасал луч света. Как сделать? Предположим, что tag доспехов Armor, а луча Shaft. Естественно, лучу больше загораться не придётся, так что это единовременная штучка.
Во-вторых (самокритика продолжается) не знаю, как заставить камеру увеличить масштаб. То есть не в роликах, а просто по появлении персонажа в зоне. Пусть дальше игрок увеличивает и уменьшает, как хочет, но в начале - крупный план. Идея в том, чтобы он, каждый раз появляясь в одном и том же месте, постоянно натыкался на увеличенный вид статуи в двух шагах. В двух-то в двух, а увеличение какое было до перемещения между зонами, такое и остаётся. Как поправить?
AliceDiren
Oct 4 2005, 15:07
Это по поводу брони и луча света.
Neverwinter Script Source |
void main() { object oItem = GetModuleItemAcquired(); string sItemTag = GetTag(oItem); object oSpam = OBJECT_INVALID;
if(sItemTag == "Armor") { oSpam = GetObjectByTag("Shaft"); DestroyObject(oSpam); } } |
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.